7 Challenges for Sitecore Developers in 2027 and How to Overcome Them
The Sitecore platform developers will work on in 2027 is very different from the one most of us learned. In roughly eighteen months, XM Cloud was renamed, JSS was replaced, Next.js moved to a new major version, the XP support model changed, and AI agents gained write access to the content tree. Each of these is manageable on its own. Together, they are the main source of project risk heading into 2027.
This post covers the seven technical challenges I expect Sitecore developers to hit most often in 2027. For each one it explains what changed, why it matters, and what to do about it, with the platform facts sourced. One caveat up front: Sitecore Symposium 2026 runs November 10–12 in Orlando, and roadmap announcements there could change parts of this picture. Check the changelog after the event.
Challenge 1: The JSS-to-Content SDK Cliff (and Next.js 16 on Top of It)
What changed
If you built on JSS, you are now on a deprecated SDK. Community guidance has flagged that JSS 22.x reached end of support in June 2026, that JSS 23.x won’t support SitecoreAI, and that new platform features such as App Router, React 19 and Agentic Studio are going only into Content SDK. Sitecore’s own framing is that Content SDK reduces the size and complexity of starter applications by removing functionality SitecoreAI implementations don’t need, which makes the apps easier to understand and maintain than JSS apps.
For teams that postponed the upgrade, the difficulty is that Content SDK itself kept moving. App Router support arrived as a beta in Content SDK 1.2.0 and became generally available in 1.3.1. Then Content SDK 2.0 raised the baseline again:
- Next.js 16 is required at a minimum of ^16.0.0, and middleware.ts has been renamed to proxy.ts with a changed function signature.
- The useLoadImportMap and useComponentMap HOCs were removed, and Sitecore context is now read through the useSitecore hook.
- The old withPlaceholder HOC was reworked into slot-style logic with separate server and client implementations. withAppPlaceholder is for RSC server contexts and withPlaceholder is for client contexts.
- Features from the Cloud SDK were folded into new analytics-core, events and personalize packages, with a new initContentSdk function to simplify setup.
A quieter change can also break redirects on multilingual sites. SXA redirect behavior changed by default: a rule such as /da/source ? /target now sends visitors to /target in the default locale, not /da/target, unless the language-preservation flag is set on the redirect.
How to overcome it
Skip the intermediate versions. Sitecore published a consolidated guide in May 2026 that takes JSS 22.0 apps straight to Content SDK 2.1, so you don’t have to step through several JSS or Content SDK releases. Treat it as a replatform of the rendering host, not a version bump.
Use this migration sequence:
- Inventory your JSS add-ons first. The upgrade guide says it can’t cover every customization and recommends reviewing the JSS templates and add-ons listed in your package.json. Every custom plugin is a migration ticket.
- Collapse data fetching into SitecoreClient. The JSS plugin chain (page props factory, component props service, sitemap plugins) becomes centralized configuration in
sitecore.config.ts. - Port middleware to
proxy.ts. Personalization, redirects and multisite resolution live here. Write integration tests for each before you touch it. - Split components along the server/client boundary. Anything that only renders fields should be a Server Component. Anything with state, effects or browser APIs gets
'use client'. This is where the App Router performance gains come from. - Audit placeholders. Each placeholder that renders in a server context moves to
withAppPlaceholder. - Regression-test redirects in every locale after the SXA behavior change.
Use AI for the mechanical parts, with guardrails. HOC-to-hook rewrites, import path changes and component registration updates are repetitive, which makes them a good fit for an AI coding agent. Challenge 5 covers how to keep the agent from mixing JSS and Content SDK APIs.
Don’t forget security currency. Content SDK 1.3.0 was deprecated because of a critical React Server Components vulnerability, which 1.3.1 fixed. Once you’re on RSC, framework CVEs become your problem. Pin versions, subscribe to the Sitecore changelog and Next.js security advisories, and budget for patch releases.
Challenge 2: Performance Under Experience Edge’s Hard Limits
What changed
Experience Edge limits haven’t loosened. The newer rendering model does give you better tools for working within them. The constraints:
- The delivery API allows 80 uncached requests per second under fair use, so if every user request goes to the delivery API you will reach the limit quickly.
- One request returns at most 1,000 entities. Beyond that you paginate with cursors, passing endCursor as the after argument until hasNext is false. Persisted queries aren’t supported.
- The includedPaths and excludedPaths arguments on siteInfo.routes accept 100 path strings combined.
- The Preview GraphQL API isn’t cached, and heavy load on it can degrade the whole SitecoreAI instance.
- Community practitioners report a query complexity budget of 250, spent on item count, fields and nesting. This comes from a practitioner write-up, not the official limits page, so verify it against the response headers on your tenant.
Two failure modes follow. Large SSG builds fail in CI because a big Next.js build with static generation enabled can hit the limit and fail. And production traffic spikes after a publish or deploy clears caches, which returns 429s to real users.
How to overcome it
Adopt on-demand revalidation and stop redeploying for content changes. This is the most important change. Content SDK 2.2, released June 30, 2026, ships an App Router starter with Next.js Cache Components and tag-based cache invalidation set up by default, so published content refreshes without a full redeploy and pages keep the performance of static rendering. Most traffic hits the cache, and Edge is only queried when a tag is invalidated.
The pattern is to tag cached fetches by item or route, then invalidate those tags from a publish webhook. Here is a complete, illustrative route handler. Adapt the payload parsing to the webhook contract configured on your tenant; the shape below is an assumption.
// src/app/api/revalidate/route.ts
import { NextRequest, NextResponse } from 'next/server';
import { revalidateTag } from 'next/cache';
// Shared secret configured on the Edge webhook; never hard-code it.
const WEBHOOK_SECRET = process.env.EDGE_WEBHOOK_SECRET;
// Assumed payload shape — verify against your tenant's webhook contract.
type EdgeUpdate = { identifier: string; entity_definition: string };
type EdgeWebhookPayload = { updates?: EdgeUpdate[] };
export async function POST(req: NextRequest) {
if (!WEBHOOK_SECRET || req.headers.get('x-webhook-secret') !== WEBHOOK_SECRET) {
return NextResponse.json({ ok: false, error: 'unauthorized' }, { status: 401 });
}
let payload: EdgeWebhookPayload;
try {
payload = (await req.json()) as EdgeWebhookPayload;
} catch {
return NextResponse.json({ ok: false, error: 'invalid json' }, { status: 400 });
}
const updates = payload.updates ?? [];
const tags = new Set<string>();
for (const u of updates) {
// Tag convention used when caching fetches: "item:<id>" and "layout:<id>"
if (u.entity_definition === 'LayoutData') tags.add(`layout:${u.identifier}`);
if (u.entity_definition === 'Item') tags.add(`item:${u.identifier}`);
}
// Fallback: if the payload is unrecognized, invalidate a coarse site tag
// rather than silently serving stale content.
if (tags.size === 0) tags.add('site:all');
for (const tag of tags) {
revalidateTag(tag, 'max'); // Next.js 16 signature takes a cache-life profile
}
return NextResponse.json({ ok: true, revalidated: [...tags] });
}
Make builds resilient. Every SitecoreClient method, and each service it uses, accepts a FetchOptions object where you can configure retries globally or per service. Configure exponential backoff on 429/502/503 so a spike doesn’t fail CI.
Don’t statically generate everything. Prerender the high-traffic routes at build time and generate the rest on demand. Sitecore’s guidance is to use existing site analytics to choose which pages benefit most from build-time generation.
Use the wildcard pattern for catalogs. Don’t model 200,000 SKUs as items. A practitioner approach routes every product page to one layout item so requests share a single cached Edge response. The route reads the SKU from the URL and fetches product data from a PIM or commerce API. Sitecore provides the page structure, and the system of record provides the data.
Design queries for the budget. Request only the fields you render, avoid deep nesting of children and reference fields, and put rarely viewed data (related content, long lists) in separate lazy queries so one expensive query doesn’t slow the whole page.
Watch for the multisite trap on XP migrations. SitecoreAI doesn’t support multiple site definitions that point to the same start item. The workaround applies only when each site has a different default language, requires setting ExperienceEdge.SiteResolvingMatchCurrentLanguage to true, and then a full site republish. If your XP estate shares start items across sites, redesign the site tree before migration, not afterward.
Challenge 3: The XP Support Clock Is Now a Line Item
What changed
Many enterprise Sitecore developers still work mainly on XP, and 2027 is when that becomes difficult to defer.
- Mainstream support for XP and XM 10.4 lasts until the end of 2027, and extended support until the end of 2030.
- The extended support model changed. Starting June 1, 2026, security patches and production incident support moved out of Extended Support into a separate paid arrangement. What remains included is documentation, the knowledge base, forums and upgrade assistance.
- XP 10.5 shipped on August 5, 2026. It targets .NET Framework 4.8.1, updates Windows Server, SQL Server and Solr support, and patches several vulnerability classes. Taking it puts an estate in Mainstream Support until December 31, 2029.
- Extended support for XP 10.0 and 10.1 ends on December 31, 2026.
- Longer term, Sitecore said XP/XM will move in phases to modern .NET: rendering hosts go first, CM is replaced gradually using a strangler pattern, later versions become cross-platform, and support lifecycles align with .NET LTS releases.
The honest reading is that the modernization roadmap was loosely aligned to .NET 10, whose support runs through November 2028, and it hasn’t had firm dates. Don’t design your 2027 architecture around a cross-platform XP release that may not exist yet.
How to overcome it
Choose a path in 2026, not 2027. Here is the decision tree I would use:
- On 10.0–10.3: Upgrade to 10.5, not 10.4. It costs about the same and gives you two more years of mainstream coverage. Budget for prerequisites that must move before the upgrade itself, including the container host OS, Identity Server, Application Insights and a raised prerequisite version.
- On 10.4 with heavy xDB/EXM dependence: Upgrade to 10.5 and begin decoupling (below). Migration can wait.
- On 10.4 with light personalization: A SitecoreAI migration is probably cheaper than one more on-prem upgrade cycle.
Make the rendering tier portable now, whichever path you choose. Moving XP to a headless rendering host is the best hedge available, because the same rendering code can follow you to SitecoreAI. Sitecore’s open-source ASP.NET Core SDK can integrate either SitecoreAI or XM/XP content into ASP.NET Core applications. If you’re on the older package, apps integrated before September 2024 use the legacy Rendering SDK (version 22 or earlier), which no longer gets updates.
Apply the strangler pattern yourself. Don’t wait for Sitecore. Inventory every <pipeline> processor, event handler, scheduled task and custom Sitecore API usage, then classify each one:
- Rendering logic moves to the rendering host.
- Integration logic (CRM sync, PIM imports) moves to external services such as Azure Functions or containers, triggered by webhooks.
- Authoring logic (custom fields, editor tools) gets re-targeted to Marketplace apps (Challenge 4).
- Dead code gets deleted. There is usually more of it than anyone expects.
Each item you move out of the CM makes your eventual migration smaller.
Use AI for the inventory. Point a coding agent at your solution and have it produce a structured catalog: every config patch, processor, and reference to Sitecore.Analytics or Sitecore.XConnect. Have a human review it. This used to take weeks of manual archaeology.
Challenge 4: Extending a Platform You Can No Longer Customize from the Inside
What changed
On XP, extensibility meant pipeline processors, config patches and custom CM code. On SitecoreAI, the platform is being consolidated. Sitecore is merging several SaaS products into one solution and moving all of them onto Azure with a single data platform. One observer at the launch said this is a rebuild in practice: features from products built on different infrastructure are being taken apart and redesigned. Your extension surface is in the middle of a rebuild.
The sanctioned extension layer is the Marketplace SDK. The starter template shows five extension points: Custom Field, Dashboard Widget, Fullscreen, Pages Context Panel and Standalone. The SDK has a required client package for communicating with Sitecore, an optional xmc package for type-safe SitecoreAI API access from client or server, and an optional ai package that exposes LLM-powered AI skills grounded in SitecoreAI data.
How to overcome it
Choose the architecture before you write code. Marketplace apps can be client-side or full-stack, with either built-in authorization or custom Auth0-based authorization. Custom authorization is required when your app makes server-side calls to SitecoreAI APIs. Sitecore recommends making these decisions during planning because they affect how the app is created and built. In practice:
- A custom field (color picker, icon selector, product picker from your PIM) is client-side with built-in auth.
- Anything agentic or server-integrated is full-stack with custom auth.
Know the runtime rules. Any functionality users interact with directly, such as updating a page’s content, has to be in client-side code, while server-side code can handle work like fetching third-party data. Also, calls to SitecoreAI APIs only work inside the extension points, and Sitecore-related console output appears in the extension point’s browser console, not on localhost. Build your local dev loop around that, or you will spend days confused about why API calls fail.
Map old customizations to new homes. Here is a translation table your team can adopt:
| XP customization | SitecoreAI equivalent |
|---|---|
| Custom field type (SPEAK/Sheer UI) | Marketplace Custom Field extension point |
| Content Editor ribbon button / tool | Pages Context Panel or Fullscreen app |
publish:end event handler | Edge webhook ? external function |
| Scheduled agent | External scheduler calling Authoring GraphQL / Agent API |
| Rules engine custom condition | Personalization conditions in SitecoreAI or custom logic in proxy.ts |
| Custom dashboard in Launchpad | Dashboard Widget extension point |
Keep extensions thin. Because the underlying services are being rebuilt, wrap every SitecoreAI API call behind your own adapter interface. When an endpoint moves or a service merges, you change one module instead of hunting through the codebase.
Challenge 5: AI Coding Assistants That Confidently Write Code for the Wrong Sitecore
What changed
AI-assisted development is now standard. The 2025 DORA report, which surveyed nearly 5,000 technology professionals, found about 90% use AI at work. The industry data also shows a cost. DORA found AI adoption correlates with higher throughput and also with more instability, meaning more change failures, more rework and longer resolution times. In Stack Overflow’s 2025 survey, 46% of developers distrusted AI tool accuracy and only 3% reported high trust in its output.
Sitecore has a particular version of this problem. Models were trained on roughly fifteen years of Sitecore content: WebForms, MVC, Glass Mapper, JSS in several versions, and XM Cloud before its rename. Ask for a Content SDK 2.x component and you will regularly get withSitecoreContext, getStaticProps, a middleware.ts plugin, or a JSS import path. The code looks plausible and it is wrong.
How to overcome it
Use the agent scaffolding Sitecore now ships. Content SDK 2.0 added AGENTS.md configuration, a Skills.md file and .agents/skills/ directories that describe capabilities for AI tools, each with usage rules, hard limits and stop conditions. These skills are scaffolded into the Next.js templates by create-content-sdk-app. If you migrated an existing app rather than scaffolding a new one, copy these files in from a fresh template. They are the most effective defense against version confusion.
Extend AGENTS.md with your own rules. Add project-specific constraints such as:
- “This repository uses Content SDK 2.x on Next.js 16 App Router. Never import from
@sitecore-jss/*. Never createmiddleware.ts; routing logic lives inproxy.ts.” - “Server Components by default. Add
'use client'only when the component uses state, effects or browser APIs, and explain why in a comment.” - “All Edge queries must request explicit fields. Never add a query without a cache tag.”
- “Stop and ask before modifying
sitecore.config.ts, serialization modules or rendering definitions.”
Ground the agent in live documentation. Stale training data is the root cause, so give the agent current docs through an MCP documentation server. One community MCP server removed its bundled CLI docs in September 2026 because the snapshot had gone stale, and pointed users to Sitecore’s own documentation MCP server, which answers against live docs. That is a good lesson in itself: any static documentation you feed an agent will eventually be wrong.
Build verification into the loop, not after it. The DORA instability finding tells you where to invest. At minimum:
- Type-check and lint on every agent change, with ESLint rules that ban legacy import paths.
- Contract tests for each component’s expected fields, generated from your templates.
- Visual regression on key pages in Pages preview.
- A small benchmark suite: 10–20 representative tasks (“add a rich text field to the Hero component and render it”) scored on each model or prompt change. Treat your AI tooling like any other dependency and test it before upgrading.
Challenge 6: Agents with Write Access to Your Content Tree
What changed
In 2026, AI agents moved from suggesting content to acting on the platform. The Marketer MCP server exposes Agent API endpoints as tools: the LLM interprets a natural-language request, chooses a tool, and the tool calls the Agent API to perform the action in SitecoreAI. As of mid-2026, personalization and A/B/n testing created through Marketer MCP or the Agent API are fully supported and appear correctly in the SitecoreAI UI. Agentic Studio launched with more than 20 prebuilt agents for tasks ranging from campaign planning to content migration.
Developer-grade tools go much further. A popular community MCP server exposes 121 tools covering items, templates, presentation, media, security, indexing, publishing, GraphQL and raw PowerShell, and works against both SitecoreAI and every XM/XP version. Raw PowerShell access through an LLM is extremely powerful, and it is also a serious risk if misconfigured.
How to overcome it
Apply least privilege to agent credentials. The Agent API is authorized with JWTs generated from environment automation client credentials, or with a registered OAuth app when the integration needs the authorization code flow. Create a dedicated automation client per agent use case, scope it to one environment, and never reuse your CI/CD deployment credentials for an agent.
Rely on platform workflow and keep it in place. Sitecore states that these actions follow Sitecore’s security, permissions and approval workflows, so they are secure and auditable. That only helps if your workflows are configured. Put agent-created content into a “Draft – AI Generated” workflow state that requires human approval before publish. Consider Content SDK 2.2’s newer capability as well: draft component workflow support lets teams work on components in a draft state before making them live.
Trim developer MCP tool surfaces. The community server’s own docs note that agents can only hold a limited number of tools and recommend reducing the surface with TOOL_PROFILE, TOOL_GROUPS and DISABLED_TOOLS. Use those settings for security as well as context size. Disable PowerShell and security-management tools in any shared or production-adjacent configuration.
Design your content model for agents. Agents do well with well-structured content and poorly with ambiguous content. Practical rules:
- Configure placeholder settings strictly. The community server’s add-rendering-to-placeholder tool rejects components that the placeholder settings don’t allow and names the allow-list. Your allow-lists therefore act as guardrails for agents, not only for authors.
- Write useful template field descriptions and help text. Agents read them.
- Prefer many narrow, typed fields to a few large rich text fields. An agent can fill
Headline,Subhead, andCTA Labelcorrectly. It will fill a singleBodyrich text field in unpredictable ways.
Log everything. Record every agent-initiated write with the originating prompt, the tool called, the item ID and the credential used. When something goes wrong in content, “which agent did this, and why?” needs an answer within minutes.
Challenge 7: Building for AI Discovery, Not Just Google
What changed
In 2026, Sitecore bet heavily on the idea that visibility in AI-generated answers is a new front door. In June 2026 Sitecore acquired Scrunch, a generative engine optimization platform. In July it announced the Scrunch integration and launched Marketing IQ, intended to link brand visibility in AI answers to governed content changes and measurable revenue.
Marketers will get the dashboards. Developers will get the tickets, because how AI systems read a page is mostly determined by how it’s built: rendering strategy, markup semantics, structured data and crawlability.
How to overcome it
Make sure content exists without JavaScript. Many AI crawlers don’t execute JavaScript the way Googlebot does. Content rendered only on the client after hydration may be invisible to them. The App Router’s server-first model helps here, since Server Components emit real HTML, but check your personalization and client components. If the main answer on a page (“what does this product cost?”) appears only after a client-side fetch, it doesn’t exist for those crawlers.
Generate structured data from structured content. Build JSON-LD (Product, FAQPage, Article, Organization, BreadcrumbList) from Sitecore fields server-side in each route, not hand-authored in rich text. This only works if the content model has discrete fields for the facts. Challenge 6’s advice on narrow fields applies here as well.
Treat Search as a retrieval layer. One partner analysis argues Sitecore Search is becoming the retrieval engine AI agents query for accurate, current content, and that without good retrieval, agents make things up. On the implementation side, Content SDK 2.0 added a @sitecore-content-sdk/search package that provides a type-safe search layer with a SearchService supporting pagination, sorting and cancellation, plus useSearch and useInfiniteSearch React hooks. Index clean, well-chunked content with good metadata, because that index may feed your own on-site agents as well as your search box.
Engineer the machine-readable basics. Keep sitemaps accurate (they are simple to generate from Edge), set canonicals, use semantic heading hierarchy, and write descriptive alt text from DAM metadata. Make a deliberate robots.txt policy for AI crawlers. Blocking or allowing them is a business decision, so raise it with stakeholders rather than inheriting a default.
Instrument it. Add bot detection to your analytics so you can separate AI crawler traffic from human traffic. Content SDK 2.1 added lightweight events tracking and bot detection. You can’t optimize discovery you can’t measure.
A 2027 Readiness Checklist
To turn this into a sprint plan, these are the minimum steps for each challenge:
- Content SDK: Upgrade to 2.2 or later on App Router, with JSS fully removed and
proxy.tscovered by tests. - Edge performance: Tag-based on-demand revalidation in place, retries configured, build-time generation limited to high-value routes.
- XP: Path decided (10.5 upgrade or SitecoreAI migration), rendering tier headless, CM customizations inventoried.
- Extensibility: Old customizations mapped to Marketplace extension points or external services behind adapters.
- AI coding: AGENTS.md and skills present and extended, live-docs MCP connected, verification gates in CI.
- Agent governance: Per-agent scoped credentials, an AI-draft workflow state, trimmed tool surfaces, audit logging.
- AI discoverability: Server-rendered core content, JSON-LD generated from fields, bot-aware analytics.
None of this is optional for a team that expects to be shipping on Sitecore at the end of 2027. The platform is moving faster than it has in a decade, and the gap between teams that keep up and teams that don’t will be larger than in any previous platform cycle. The upside is that most of the work in this list also makes your architecture more portable, more testable and easier to reason about.
Platform facts are current as of September 2026. Check the Sitecore changelog after Symposium (November 10–12, 2026) for roadmap changes.
