XP to XM Cloud: Common Migration Gotchas
Six documented gotchas from production XP to XM Cloud migrations, with workarounds for each.
Gotcha #1: xDB Analytics History Lost
Section titled “Gotcha #1: xDB Analytics History Lost”Problem: xDB doesn’t migrate; analytics history gone (5+ years of visitor data)
Impact: Can’t analyze historical visitor behavior, no baseline for comparison
Workaround:
- Export xDB data to data warehouse before migration
- Integrate Sitecore CDP for future analytics (separate license required)
- Accept analytics reset as cost of migration
Gotcha #2: Custom Pipelines Not Supported
Section titled “Gotcha #2: Custom Pipelines Not Supported”Problem: XM Cloud architectural shift — custom pipelines don’t exist
Impact: Custom business logic in pipelines (authentication, item resolution, analytics) must be rewritten
Workaround:
- Move logic to Next.js middleware (server-side logic before rendering)
- Move to Edge Functions (Vercel Edge Functions, Cloudflare Workers)
- Move to separate microservices (dedicated APIs for complex logic)
Gotcha #3: Personalization Rules Don’t Migrate
Section titled “Gotcha #3: Personalization Rules Don’t Migrate”Problem: Server-side personalization rules (XP) have no 1:1 equivalent in XM Cloud
Impact: Must reimplement as Sitecore Personalize + CDP (client-side, separate license)
Workaround:
- Budget for Personalize + CDP licensing ($$$)
- Rebuild rules in Personalize (Web Experimentation UI)
- Integrate CDP segments (client-side JavaScript)
Gotcha #4: Solr Search Gone
Section titled “Gotcha #4: Solr Search Gone”Problem: XM Cloud doesn’t include Solr
Impact: Must use Sitecore Search (separate license) or third-party (Algolia, Elasticsearch)
Workaround:
- Option A: Purchase Sitecore Search license (integrated with Experience Edge)
- Option B: Integrate Algolia or Elasticsearch (cheaper, more flexible)
- Budget for search solution — Not included in base XM Cloud license
Gotcha #5: MVC View Rendering Complexity Underestimated
Section titled “Gotcha #5: MVC View Rendering Complexity Underestimated”Problem: Every MVC view = Next.js component (1-2 days dev each)
Impact: 50+ components = 10+ weeks of frontend development (often underestimated)
Workaround:
- Prioritize components — Phase 1: critical paths, Phase 2: nice-to-have
- Use SXA Headless — Pre-built components for rapid development
- Simplify components — Remove unnecessary complexity during rebuild
Gotcha #6: JSS Middleware 504 Timeout on Vercel
Section titled “Gotcha #6: JSS Middleware 504 Timeout on Vercel”Problem: JSS versions before 22.6.0 have inefficient URLSearchParams processing in the middleware package. URLs with many query parameters (UTM/tracking params from ad campaigns) cause 504: MIDDLEWARE_INVOCATION_TIMEOUT errors on Vercel.
Impact: Pages with marketing UTM parameters fail to load in production.
Workaround:
Upgrade @sitecore-jss/sitecore-jss-nextjs to 22.6.0 or newer — Sitecore fixed this in 22.6.0.
Separate issue — Next.js 15 peer dependency: JSS 22.x has a peer dependency on next@^14.2.18. If using Next.js 15, either:
- Upgrade to JSS 22.7+ (adds Next.js 15 + React 19 support)
- Or migrate to Content SDK 1.x (
@sitecore-content-sdk/nextjs) which supports both Next.js 14 and 15