Skip to content
Sitecore

XP to XM Cloud: Common Migration Gotchas

Six documented gotchas from production XP to XM Cloud migrations, with workarounds for each.

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:

  1. Export xDB data to data warehouse before migration
  2. Integrate Sitecore CDP for future analytics (separate license required)
  3. Accept analytics reset as cost of migration

Problem: XM Cloud architectural shift — custom pipelines don’t exist

Impact: Custom business logic in pipelines (authentication, item resolution, analytics) must be rewritten

Workaround:

  1. Move logic to Next.js middleware (server-side logic before rendering)
  2. Move to Edge Functions (Vercel Edge Functions, Cloudflare Workers)
  3. 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:

  1. Budget for Personalize + CDP licensing ($$$)
  2. Rebuild rules in Personalize (Web Experimentation UI)
  3. Integrate CDP segments (client-side JavaScript)

Problem: XM Cloud doesn’t include Solr

Impact: Must use Sitecore Search (separate license) or third-party (Algolia, Elasticsearch)

Workaround:

  1. Option A: Purchase Sitecore Search license (integrated with Experience Edge)
  2. Option B: Integrate Algolia or Elasticsearch (cheaper, more flexible)
  3. 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:

  1. Prioritize components — Phase 1: critical paths, Phase 2: nice-to-have
  2. Use SXA Headless — Pre-built components for rapid development
  3. 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