Migration

How do you migrate from Sitecore (XP or SitecoreAI) to Sanity?

Short answer

A Sitecore to Sanity migration, from Sitecore Experience Platform (XP) or SitecoreAI, is a scripted rebuild: templates become schema types, layouts become page-builder arrays, and Rich Text HTML becomes Portable Text (Sanity Docs; Sanity Learn, October 2026). Personalization rules and xDB (Experience Database) data need their own plan, because Sitecore's own migration app doesn't move them (Sitecore, October 2026).

Sitecore Rich Text field
Stores HTML, with internal links and imagesConvert it with htmlToBlocks() and a deserializer rule per HTML pattern; internal links become references to the linked documentsSources: Sitecore (The simple field types); Sanity Learn (Convert rich text to Portable Text)
Export route
Authoring and Management GraphQL APIDocumented with read/write access on SitecoreAI and on XP 10.5; check an older XP version's own docs before you rely on itSources: Sitecore (Sitecore Authoring and Management GraphQL API (SitecoreAI), Sitecore Authoring and Management GraphQL API (XP 10.5))
What Sitecore's own app leaves behind
Personalization, xDB data, page designsSitecoreAI Pathway, Sitecore's app for moving XM and XP sites to SitecoreAI, leaves them behind, so plan replacements before cutoverSource: Sitecore (Migrate a site to SitecoreAI)
Sanity's migration skill for AI agents
No Sitecore guide among its eight source guidesGuides cover Adobe Experience Manager, Contentful, Strapi, Webflow, WordPress, Payload, Drupal and Markdown; Sanity calls the skill agent-scaffolded, not fully automatedSources: Sanity on GitHub (sanity-migration skill); Sanity (What's new in August: inline tables, functions calling functions, and visual editing without React)

Deploi’s call

Move from Sitecore to Sanity one site at a time, starting with the site that has the least personalization, and remodel as you go instead of copying the content tree. Choose what replaces personalization, forms and email before the first cutover, because those don't migrate; they get rebuilt or replaced.

PhaseMove from Sitecore to Sanity one site at a time when

  • Several sites or brands share one Sitecore instance, so you can move one site, prove the content model and redirects, and keep the rest running.
  • Personalization rules run on some pages, so those pages stay on Sitecore until a replacement service is live.
  • Your Sitecore version gets security fixes for the whole move, because Sitecore says that since 1 June 2026 its Extended support includes them only as an option you arrange with Sitecore (Sitecore Support, as of October 2026).

StayStay on Sitecore while

  • Sitecore Experience Platform (XP) features such as xDB (Experience Database) personalization, Marketing Automation or EXM (Email Experience Manager) run daily with no replacement chosen, because Sitecore's own migration app, which moves sites to SitecoreAI, leaves them behind.
  • Your content store must be self-hosted, because Sanity Studio "always connects to a dataset in the hosted Content Lake" (Sanity Docs, Studio development, as of October 2026).
  • No JavaScript developer on your team will own Sanity Studio after launch, so the new stack would have no owner.

How do Sitecore templates, items, renderings and placeholders map to Sanity?

Sitecore templates map to Sanity schema types, content items to documents, and each page's layout to an array field on a page document. Sitecore compares templates to classes and items to instances; a page's layout is renderings in placeholders, each fed by a datasource item (Sitecore, Content authoring concepts, October 2026). A Sanity page builder is an array of objects or references, with no pre-built blocks (Sanity Docs, Page building, October 2026).

Templates become schema types; layout becomes a page-builder array
SitecoreSanityMigration note
Data templateDocument or object typeModel what the content is
Template fieldFieldPick a Sanity type per field type
Standard valuesinitialValueFills new documents only
Content itemDocumentReuse its Sitecore ID
Page item with layoutpage document with an arrayOne array per placeholder
RenderingObject type in the arrayIts datasource template sets the fields
Datasource used onceInline objectStays in the page
Shared datasourceReferenced documentOne edit updates every page
Site or site collectionDataset or Studio workspaceSplit by who edits what
Objects stay inside one page; references can be reused across pages (Sanity Docs, October 2026). Dataset limits vary by plan (Sanity pricing, October 2026).Sources: Sitecore (Content authoring concepts for developers new to Sitecore, Standard values for data template fields, SitecoreAI); Sanity Docs (How to use structured content for page building, Initial Value Templates, Workspaces); Sanity (Plans that scale with you). As of 24 October 2026.

How do you get content out of Sitecore?

The Authoring and Management GraphQL API (application programming interface) is the export route on SitecoreAI and on Sitecore Experience Platform (XP) 10.5. Sitecore documents it on both as one endpoint and schema with read/write access (Sitecore, SitecoreAI docs; Sitecore, XP 10.5 docs, October 2026). SitecoreAI is the new name for XM Cloud, Sitecore's cloud Experience Manager (XM) (Sitecore, October 2026). On an older XP release, confirm the route in that version's documentation first. Two other routes do narrower jobs:

  • Sitecore Content Serialization writes items to YAML for structural items such as templates, renderings and placeholder settings (Sitecore, Content Serialization, October 2026). It mainly feeds your schema map; read structure from it, and take content through the GraphQL API.
  • Experience Edge serves published content and a snapshot of the Layout Service output for a route (Sitecore, Experience Edge, October 2026). Call it per URL to record each page's layout; it's a delivery API, not a bulk export.

Export effective values, not stored ones. A Sitecore field left unset (NULL) shows its template's standard value, and Sitecore advises keeping layout settings there (Sitecore, Standard values, October 2026). Sanity initial values only fill new documents created in Sanity Studio (Sanity Docs, Initial Value Templates, October 2026), so an import that skips standard values lands with blank fields.

How does Sitecore Rich Text become Portable Text?

Sitecore Rich Text becomes Portable Text through htmlToBlocks() and custom deserializer rules, because the field stores HTML text, including internal links and images (Sitecore, The simple field types, October 2026). Sanity's Learn course converts rich text this way and turns internal links into references through a URL map (Sanity Learn, Convert rich text to Portable Text, October 2026). Sanity's migration skill for AI agents has no Sitecore guide, only ones for Adobe Experience Manager, Contentful, Strapi, Webflow, WordPress, Payload, Drupal and Markdown (Sanity on GitHub, October 2026), and Sanity calls it "agent-scaffolded, not fully automated" (Sanity August releases, October 2026). Write a rule for each pattern in your own HTML:

  • Internal links: resolve each linked item to its Sanity document and store a reference, so links survive URL changes.
  • Images: swap each media item for a Sanity image asset with its alt text.
  • Tables: the Portable Text Editor edits tables from Studio v6.6.0; the feature is off by default and needs a table schema type you declare (Sanity Docs, Configure the Portable Text Editor; Sanity's August 2026 release notes, October 2026).
  • Inline styles and wrapper markup: keep what editors need and drop the rest, because it's presentation.

Log every element no rule handles, since each one is a schema decision. How Portable Text stores rich text explains the target format.

What happens to the Sitecore Media Library, language versions and numbered versions?

Sitecore Media Library items become Sanity assets, language versions become localized documents or fields, and numbered versions mostly stay behind. Sitecore keeps two kinds of versions per item: numbered versions in one language, such as a promotion copy of a page, and language versions (Sitecore, Versioning, October 2026).

Assets and languages move; old numbered versions don't
SitecoreSanity, October 2026What to decide
Media Library itemImage or file assetImports on every plan
Assets shared across sitesMedia LibraryEnterprise add-on
Language versionDocument-level localizationEach language publishes alone
Short shared valuesField-level localizationAll languages publish together
Live numbered versionPublished documentImport only this one
Promotion versionScheduled drafts or Content ReleasesReleases is an Enterprise add-on
Imports into Sanity's Media Library add-on need a data.ndjson file and skip files in subfolders, so flatten Sitecore's folder tree first (Sanity Docs, Import assets, October 2026).Sources: Sitecore (Versioning); Sanity Docs (Import data, Localization, Configure your studios and CLI to use Media Library, Scheduled drafts); Sanity (Plans that scale with you, Scheduled Drafts: Stop manually publishing content at midnight). As of 24 October 2026.

Sitecore keeps alt text on each language version of an image (Sitecore, Versioning, October 2026); in Sanity, put it on the image field of each language's document. Our review of Sanity's localization models helps you choose.

How do you import Sitecore items into Sanity?

Import Sitecore items as NDJSON (newline-delimited JSON) with sanity datasets import, and use each item's globally unique identifier (GUID) as its Sanity document ID, so a rerun with --replace overwrites the same documents instead of duplicating them (Sanity Docs, Datasets command reference, October 2026). Key each language version as the item GUID plus the language code, such as <guid>-en. Sanity accepts IDs made of letters, numbers, hyphens and underscores (Sanity Docs, Import data, October 2026), so strip any other characters; reused source IDs make the script idempotent (Sanity Learn, Migrating without downtime, October 2026).

Shared datasources can land in any order. References import as weak and flip to strong once every document is in place (Sanity Docs, Import data, October 2026), so a shared datasource document and the pages that use it need no set import sequence.

The rest of a safe import is the same for every source CMS (content management system): validation, a rehearsal, --missing for datasets editors already use, paused webhooks and rollback. Safe imports into Sanity covers them.

What happens to Sitecore URLs, redirects and SEO?

Every Sitecore URL needs a matching Sanity route or a permanent redirect to protect search engine optimization (SEO), aliases included. Sanity's re-platforming course says to crawl the live site as well as export its content, and that the new front end "should not create a new link structure without appropriate redirects" (Sanity Learn, re-platforming course, October 2026).

Sitecore aliases need their own entries in the URL map. An alias gives one content item more than one URL, and Sitecore warns that this "can confuse search engines" (Sitecore, Aliases, October 2026). So export every alias, give each item one canonical URL in Sanity, and redirect every alias to that URL instead of rebuilding aliases as extra routes (Deploi's judgment).

Where the redirects run, how many your host allows and the checks after launch work the same for every source CMS (content management system): keeping SEO through a move to Sanity covers them.

What replaces Sitecore's workflow, roles and modules?

Sitecore's workflow and modules don't migrate to Sanity: each is mapped to Sanity roles, rebuilt in a separate service, or dropped. Sitecore's own list of what SitecoreAI lacks names the marketing pieces, from xDB (Sitecore's Experience Database) personalization rules to EXM (Email Experience Manager) and Sitecore Forms (Sitecore, Limitations and restrictions, October 2026), so moving to SitecoreAI rebuilds them too. SitecoreAI keeps workflows in its Content Editor (Sitecore, SitecoreAI, October 2026).

Roles map across; the marketing suite and search move to other services
SitecoreSanity side, October 2026What you do
Workflow statesContributor drafts, Editor publishesMap each state to a role
Security roles5 roles on Growth, custom on EnterpriseRe-invite members by role
Personalization, Forms and EXMPlugin stores variants; no built-in forms or emailRebuild in separate services
Custom search indexesGROQ (Graph-Relational Object Queries) search; semantic search on every plan, within a monthly query quotaQuery Sanity first; add a search service for facets
Sanity Workflows is in early access (Sanity Docs, Workflows; How early access works, October 2026). The marketing suite row is Deploi's judgment.Sources: Sitecore (Limitations and restrictions, Workflow); Sanity (Plans that scale with you, @sanity/personalization-plugin); Sanity Docs (Workflows, How early access works, Roles and permissions, How to implement multi-tenancy with Sanity, Dataset Embeddings). As of 24 October 2026.

How Sanity and Sitecore compare weighs the full marketing suite, and Sanity Workflows tracks its release.

What is the step-by-step plan for a Sitecore to Sanity migration?

A Sitecore to Sanity migration runs in seven steps, one site at a time, so each site's content model and redirects are proven before the next starts. Sanity's course advises starting with low-risk content (Sanity Learn, October 2026). Leaving Sitecore says whether your Sitecore version's support dates set the pace.

Migrating Sitecore to Sanity

  1. Inventory. Serialize templates and renderings, crawl every URL, and list each page's personalization rules. Owner: Sitecore developer.
  2. Model. Turn templates into schema types and renderings into page-builder objects. Owner: developer and content lead.
  3. Export. Pull items through the Authoring and Management GraphQL endpoint with standard values resolved. Owner: developer.
  4. Convert rich text. Run htmlToBlocks() with a rule per pattern. Owner: developer.
  5. Import and validate. Load NDJSON keyed by Sitecore item IDs, then validate. Owner: developer.
  6. Redirect. Map every URL and alias. Owner: search lead.
  7. Cut over one site. Switch it, crawl it, then plan the next. Owner: site owner.

Deploi’s point of view

Where we disagree
The common pitch treats a Sitecore exit as a content export: pull the items, push them into the new CMS. Sitecore content isn't only items. A page's meaning sits in layout data, standard values and datasource items, and its marketing value sits in xDB and personalization rules that Sitecore's own migration app leaves behind. The second wrong claim is that XP is ending, so you must leave now. Sitecore says it shipped XP 10.5 in August 2026. Leave because the content model or the cost no longer fits, not because of a deadline that doesn't exist for every version.
What we’ve seen
We convert Markdown into Portable Text for our own content: deploi.ca's FAQ hub stores its answers as Portable Text extended with custom table, callout and code blocks, filled by our own converter, and 229 of 256 live answers carry at least one custom table block, counted 24 October 2026. We load content with NDJSON imports, document IDs prefixed drafts. so it lands unpublished, weak references so import order doesn't matter, and an export to restore from. Our view of Sitecore rests on its documentation and public sources.
What we'd tell you to do first
Before any schema work, pull three lists from Sitecore: every template with its base templates and standard values, every rendering with the datasource template it expects, and every personalization rule with the pages it runs on. The first two become the Sanity schema. The third is the list of things you rebuild elsewhere or drop.
What we refuse to promise
We won't promise that personalization carries over, a cutover date before those three lists exist, or a price on this page. Cost depends on templates, renderings, languages and the rules you rebuild, so we scope it on a call.

When this answer changes

  • Sitecore updates its Product Support Lifecycle page, where changes apply 30 days after posting
  • Sanity publishes a Sitecore migration course, importer or migration-skill guide
  • Sitecore changes the Authoring and Management GraphQL API or Experience Edge
  • Sanity Workflows leaves early access
  • Sanity moves Media Library or Content Releases to another plan
  • SitecoreAI Pathway starts moving personalization, xDB data or page designs

Sources

Every source opened and checked on 25 October 2026.

  1. Sitecore, Content authoring concepts for developers new to Sitecoredoc.sitecore.com · checked 24 October 2026
  2. Sitecore, Migrate a site to SitecoreAIdoc.sitecore.com · checked 24 October 2026
  3. Sitecore, Limitations and restrictionsdoc.sitecore.com · checked 24 October 2026
  4. Sitecore, The simple field typesdoc.sitecore.com · checked 24 October 2026
  5. Sitecore, Versioningdoc.sitecore.com · checked 24 October 2026
  6. Sitecore, Standard values for data template fieldsdoc.sitecore.com · checked 24 October 2026
  7. Sitecore, Sitecore Authoring and Management GraphQL API (SitecoreAI)doc.sitecore.com · checked 24 October 2026
  8. Sitecore, Sitecore Authoring and Management GraphQL API (XP 10.5)doc.sitecore.com · checked 24 October 2026
  9. Sitecore, Experience Edgedoc.sitecore.com · checked 24 October 2026
  10. Sitecore, Sitecore Content Serializationdoc.sitecore.com · checked 24 October 2026
  11. Sitecore, Sitecore Product Support Lifecyclesupport.sitecore.com · checked 24 October 2026
  12. Sitecore, Aliasesdoc.sitecore.com · checked 25 October 2026
  13. Sitecore, SitecoreAIdoc.sitecore.com · checked 24 October 2026
  14. Sanity Docs, How to use structured content for page buildingsanity.io · checked 24 October 2026
  15. Sanity Learn, Convert rich text to Portable Textsanity.io · checked 24 October 2026
  16. Sanity Docs, Import datasanity.io · checked 24 October 2026
  17. Sanity Learn, Planning a re-platforming projectsanity.io · checked 24 October 2026
  18. Sanity Learn, Re-modelling your existing contentsanity.io · checked 24 October 2026
  19. Sanity Learn, Migrating without downtimesanity.io · checked 24 October 2026
  20. Sanity Docs, Initial Value Templatessanity.io · checked 24 October 2026
  21. Sanity Docs, Localizationsanity.io · checked 24 October 2026
  22. Sanity, Plans that scale with yousanity.io · checked 24 October 2026
  23. Sanity Docs, Configure your studios and CLI to use Media Librarysanity.io · checked 24 October 2026
  24. Sanity Docs, Import assets to Media Librarysanity.io · checked 24 October 2026
  25. Sanity Docs, Scheduled draftssanity.io · checked 24 October 2026
  26. Sanity, Scheduled Drafts: Stop manually publishing content at midnightsanity.io · checked 24 October 2026
  27. Sanity Docs, Workflowssanity.io · checked 24 October 2026
  28. Sanity Docs, How early access workssanity.io · checked 24 October 2026
  29. Sanity Docs, Roles and permissionssanity.io · checked 24 October 2026
  30. Sanity Docs, How to implement multi-tenancy with Sanitysanity.io · checked 24 October 2026
  31. Sanity, @sanity/personalization-pluginsanity.io · checked 24 October 2026
  32. Sanity Docs, Configure the Portable Text Editorsanity.io · checked 24 October 2026
  33. Sanity, What's new in August: inline tables, functions calling functions, and visual editing without Reactsanity.io · checked 24 October 2026
  34. Sitecore, Deploying SitecoreAIdoc.sitecore.com · checked 24 October 2026
  35. Sitecore, Workflowdoc.sitecore.com · checked 24 October 2026
  36. Sanity Docs, Workspacessanity.io · checked 24 October 2026
  37. Sanity Docs, Datasets CLI command referencesanity.io · checked 24 October 2026
  38. Sanity Docs, Studio developmentsanity.io · checked 24 October 2026
  39. Sanity on GitHub, sanity-migration skillgithub.com · checked 24 October 2026
  40. Sanity Docs, Dataset Embeddingssanity.io · checked 24 October 2026