Migration

How do you migrate from Adobe Experience Manager to Sanity?

Short answer

An Adobe Experience Manager (AEM) to Sanity migration is a remodel you script yourself, because Sanity has no AEM importer (Sanity blog, October 2026). Sanity's migration skill for AI agents only scaffolds scripts (Sanity August releases, October 2026). Export published pages as .model.json (Adobe, October 2026), convert their rich text to Portable Text, and decide early what replaces Multi Site Manager and Launches.

AEM path from Sanity
No AEM importer or course; an agent skill scaffolds scriptsSanity's MCP server lists guided migrations from Contentful, WordPress, Strapi and Drupal; its WordPress course says many of its techniques transfer to AEM; its migration skill is agent-scaffolded, not fully automatedSources: Sanity (You'll need a CMS eventually. Let your agent set it up., August releases 2026); Sanity Learn (Migrating content from WordPress to Sanity: Introduction)
Page export
.model.json on each published pageCustom components need Adobe's exporter interface to appear in the JSON; static HTML export through .export.zip is AEM 6.5 onlySource: Adobe Experience League (Export AEM assets and content using supported methods)
Launches counterpart
Content Releases, an Enterprise add-onScheduled drafts, on Growth with Studio v4.14.0 or later, schedules one document at a time; as of October 2026Sources: Sanity Docs (Content Releases, Scheduled drafts); Sanity (Plans that scale with you)
Live copy counterpart
No direct equivalent in SanityModel fields per market or a dataset per market; cross-dataset references and custom roles need Enterprise as of October 2026 (Deploi's reading of Sanity's docs)Sources: Sanity Docs (Multi-tenancy implementation, Cross-dataset references)

Deploi’s call

Move from AEM to Sanity in phases, one site or content type at a time, starting with Content Fragments because they're already structured. Before you commit, price the Enterprise features AEM's daily tools land on: Content Releases for Launches, custom roles for permissions finer than Growth's five roles and Media Library for AEM Assets, as of October 2026.

PhaseMove from Adobe Experience Manager (AEM) to Sanity in phases when

  • Several sites or brands run on AEM, so you move one site or one content type at a time while AEM serves the rest.
  • Content Fragments already hold structured content, which you move first because each Content Fragment Model gives you a head start on a Sanity document type.
  • Adobe Target, Adobe Analytics or AEM forms stay in use, so each needs its own replacement before its pages move.

MigrateMigrate from AEM to Sanity in one cutover when

  • One site runs on AEM with a modest component library and few live copies.
  • An idempotent import script re-runs against a fresh export, so the content freeze shrinks to the final run.
  • Nobody depends on Launches for coordinated releases, because Content Releases, the nearest match, is an Enterprise add-on as of October 2026.

Why is an AEM to Sanity migration a remodel, not a copy?

An Adobe Experience Manager (AEM) to Sanity migration is a remodel because AEM builds pages from components, and its Text component edits rich text as HTML (Adobe, Text Component, October 2026). Sanity's re-platforming course says recreating your structure as-is "opens the door to recreating your existing problems, just on a new stack" (Sanity Learn, Planning a re-platforming project, October 2026). Sanity's own tools leave the scripting to you, as of October 2026:

  • Sanity has no AEM course or importer; its migration skill for AI agents has an AEM guide (Sanity agent toolkit, October 2026) and is "agent-scaffolded, not fully automated" (Sanity August releases, October 2026).
  • Sanity's WordPress course says many of its techniques "will be directly transferable" to AEM (Sanity Learn, WordPress migration introduction, October 2026).
  • Sanity's MCP (Model Context Protocol) server lists guided paths from Contentful, WordPress, Strapi and Drupal only (Sanity blog, October 2026).
  • Sanity says Tata Digital moved 20,000 documents out of AEM with a single script in under 17 hours (Sanity, Tata Digital, October 2026).

Whether to leave AEM is a separate call: Adobe's core support for AEM 6.5 on premises ends 28 February 2027 and extended support, critical fixes only, ends 28 February 2028 (Adobe, AEM 6.5 support timelines; Adobe, AEM 6.5 FAQ, October 2026), and the AEM 6.5 deadline decision weighs every exit.

How do AEM pages, templates and fragments map to Sanity?

Adobe Experience Manager (AEM) pages map to Sanity document types, and their components become objects in an array. Content Fragments are the easy part: each comes from a Content Fragment Model, a structured model built in AEM's model editor (Adobe, Introduction to Headless for AEM, October 2026). Sanity's course says to use as few pages as possible and reference meaningful content documents instead (Sanity Learn, re-platforming course, October 2026), so Experience Fragments, AEM's reusable groups of components, become referenced documents.

Most AEM structures become Sanity documents; live copies have no match
AEM structureSanity equivalentNotes
Page and editable templatePage document typeOne type per content type, not per template
Components in a paragraph systemArray of object typesA page builder array
Content Fragment ModelDocument typeFields carry over closely
Content FragmentDocumentKeep the AEM path as a source field
Experience FragmentReferenced documentVariations become fields
TagTaxonomy documentPages reference it
AEM Assets itemImage or file assetMedia Library for a shared library
Live copyNo direct equivalentFields per market, or a dataset per market
The Notes column is Deploi's judgment; Media Library is an Enterprise add-on (Sanity pricing, October 2026).Sources: Adobe Experience League (Introduction to Headless for AEM, Experience Fragments, Reusing Content: Multi Site Manager and Live Copy); Sanity Docs (Media Library introduction); Sanity (Plans that scale with you). As of 24 October 2026.

How do AEM components and rich text become Portable Text?

Convert each Adobe Experience Manager (AEM) Text component to Portable Text, Sanity's structured rich text format, with htmlToBlocks() from @sanity/block-tools and custom deserializer rules. The Text component's Rich Text Editor edits HTML, and its Source Edit view shows "the raw HTML" (Adobe, Text Component, October 2026). The default converter handles paragraphs, headings, lists and inline formatting; "anything else needs an explicit deserializer rule" (Sanity Learn, Convert rich text to Portable Text, October 2026).

Tables need a decision up front. AEM's Rich Text Editor inserts tables, and the Portable Text Editor's built-in table editing, available from Studio v6.6.0, is disabled by default and binds to a table schema type you declare (Sanity Docs, Configure the Portable Text Editor, October 2026).

Every other component becomes an object type in a page builder, which Sanity describes as "an array of custom object or reference types that can be reordered" (Sanity Docs, page building guide, October 2026). Use objects for content that lives on one page and references for content reused across pages, such as Experience Fragments. Name types for meaning, such as a hero or a promotion, not for layout. Log every component type the converter skips, because each one is a schema decision. How Portable Text stores rich text explains the target format.

How do you get content and assets out of AEM?

Adobe's knowledge base lists the supported ways out of Adobe Experience Manager (AEM): append .model.json to a published page URL for its component JSON, export asset metadata as CSV (comma-separated values), download assets in bulk as zip packages, script exports through the Assets HTTP API (application programming interface), and build packages in Package Manager (Adobe, Export AEM assets and content, October 2026). Static HTML through .export.zip works on AEM 6.5 only.

  • Custom components appear in .model.json only if they implement the exporter interface, so test every component type before you write the converter.
  • Script the Assets HTTP API and confirm the output keeps the folder hierarchy, as Adobe's article advises.
  • None of these routes gives Sanity-ready content. They give component JSON, files and repository packages to transform.

Content Fragments are also readable over AEM's GraphQL API (Adobe, Introduction to Headless for AEM, October 2026). Adobe's Content Transfer Tool moves content from one AEM instance to AEM as a Cloud Service (Adobe, Content Transfer Tool, October 2026), so it doesn't help here. Because .model.json reads live published pages, the import script can re-run against fresh content until cutover, which is the idempotent script Sanity's course recommends (Sanity Learn, Migrating without downtime, October 2026). AEM export routes in depth and moving AEM Assets go further.

How do you keep AEM URLs, vanity URLs and redirects?

Keep Adobe Experience Manager (AEM) URLs by crawling the live site, exporting every redirect and vanity URL, and storing each as a redirect document in Sanity that your front end serves. AEM defines "redirects, vanity URLs, and virtual hosts" through resource mapping (Adobe, Resource Mapping, October 2026), and its two kinds of rule move differently:

Sanity's redirects guide says there's no "one size fits all" approach, because frameworks handle redirects differently (Sanity Docs, Managing redirects with Sanity, October 2026). Sanity's refactoring course adds the first step: crawl the existing site "to find every route that needs recreating" (Sanity Learn, refactoring course, October 2026).

Count vanity URLs and pattern mappings before you pick the redirect method, because the count against your host's redirect limit decides between a configuration file and middleware. Keeping search traffic through a migration covers those limits, the URL map and monitoring.

What replaces AEM workflows, Launches, Multi Site Manager and permissions?

Sanity has a counterpart for every Adobe Experience Manager (AEM) governance tool except live copies, but the matches for workflows, Launches and custom permissions are in early access or on Enterprise as of October 2026. AEM workflows automate steps "such as approval and sign-off" (Adobe, Administering Workflows); Launches hold future page versions you promote to the source (Adobe, Launches); Multi Site Manager syncs live copies with a source (Adobe, Multi Site Manager, October 2026).

Only live copies lack a Sanity counterpart; Launches and custom permissions need Enterprise
AEM toolSanity counterpartPlan or status, October 2026
Workflow modelSanity Workflows or custom Studio codeEarly access
LaunchContent ReleasesEnterprise add-on
One page scheduledScheduled draftsGrowth, Studio v4.14.0 or later
Live copyNone; per-market fields or datasetsCross-dataset references are Enterprise
Group permissionsFive built-in rolesGrowth
Custom permissionsCustom rolesEnterprise
AEM tools are grouped by job (Deploi's judgment).Sources: Sanity (Plans that scale with you); Sanity Docs (Content Releases, Scheduled drafts, Roles and permissions, Multi-tenancy implementation, Workflows: How early access works, Cross-dataset references, Workflows: Limits). As of 24 October 2026.

What else do you replace when AEM goes?

Leaving Adobe Experience Manager (AEM) also retires its delivery tier, so plan four replacements before cutover:

  • Publish and Dispatcher. Your front end and its CDN (content delivery network) serve pages. Adobe's own Edge Delivery Services "replaces AEM Publish / Dispatcher" (Adobe, Edge Delivery Services, October 2026), which shows where that layer sits.
  • Adobe Target and Adobe Analytics. Their page hooks move into the new front end, in Deploi's judgment; the Adobe stack after AEM covers each one.
  • Forms. Forms built as components need a form service or an API (application programming interface) route, in Deploi's judgment.
  • AEM Assets. Images and files move to Sanity assets. Media Library, Sanity's app to "centrally store assets for use across multiple applications and datasets", is an Enterprise add-on (Sanity Docs, Media Library; Sanity pricing, October 2026).

Each replacement is a cost driver, alongside component count and redirect volume (Deploi's judgment).

What are the steps of an AEM to Sanity migration, and what goes wrong?

An Adobe Experience Manager (AEM) to Sanity migration runs in seven steps, and the import re-runs. A re-run of sanity datasets import fails on existing IDs unless you pass --replace or --missing (Sanity Docs, Import data, October 2026); choosing between them has its own guide.

Migrating from AEM to Sanity

  1. Inventory. Crawl live URLs; list component types, live copies and vanity URLs. Owner: developer and content lead.
  2. Model. Define document types by meaning. Owner: developer and content lead.
  3. Export. Pull .model.json per page and assets through the Assets HTTP API (application programming interface). Owner: developer.
  4. Convert. Run htmlToBlocks() with your rules; map components to page builder objects. Owner: developer.
  5. Import. Run an idempotent script, Content Fragments first. Owner: developer.
  6. Redirect. Add a redirect document per changed URL. Owner: search lead.
  7. Validate and cut over. Run sanity documents validate (Sanity Learn, October 2026), check old URLs, switch one site at a time. Owner: developer.

Deploi’s point of view

Where we disagree
The common pitch treats a headless migration as an export job. From AEM it isn't: every supported export route gives you component JSON, files or repository packages, never content shaped for Sanity, and Multi Site Manager inheritance has no Sanity equivalent to export into. The second mistake is reading a vendor's fast import run as a project timeline. The script's run time is the smallest part of the job; the content model, the rich text rules, the component mapping and the redirects are the work.
What we’ve seen
Rich text conversion is the part of this move closest to our own Sanity work: our Shopify FAQ hub converts Markdown to Portable Text with custom block types for tables, callouts and code, and 229 of its 256 live answers carried at least one table on 24 October 2026. Our FAQ release scripts are dry runs until an apply flag runs them, and they skip any document edited since the snapshot. We ship content as packages with count checks and a rollback by document ID list; the first wave package of our Shopify data section held 406 documents and 159 images. Our view of AEM rests on Adobe's documentation and public sources.
First steps we'd suggest
Before any schema work, pull three lists from AEM: every component type in use with a count of pages that use it, every blueprint and live copy, and every vanity URL and resource mapping rule. The first sizes the Sanity schema, the second decides between fields per market and a dataset per market, and the third picks the redirect method.
What we refuse to promise
We won't quote hours or a timeline for an AEM to Sanity move from a call, because each estimate starts from your own AEM estate. Sanity's 17-hour Tata figure is one script run in a vendor story, not a project duration.

When this answer changes

  • Sanity publishes an AEM importer or course, or changes its migration skill's AEM guide
  • Adobe changes the supported export routes in its knowledge base, such as .model.json or .export.zip
  • Sanity moves Content Releases, custom roles or Media Library onto the Growth plan
  • Sanity Workflows leaves early access
  • Adobe changes the AEM 6.5 core support end date of 28 February 2027

Sources

Every source opened and checked on 25 October 2026.

  1. Adobe Experience League, Export AEM assets and content using supported methodsexperienceleague.adobe.com · checked 24 October 2026
  2. Adobe Experience League, Text Componentexperienceleague.adobe.com · checked 24 October 2026
  3. Adobe Experience League, Introduction to Headless for AEMexperienceleague.adobe.com · checked 24 October 2026
  4. Adobe Experience League, Experience Fragmentsexperienceleague.adobe.com · checked 24 October 2026
  5. Adobe Experience League, Reusing Content: Multi Site Manager and Live Copyexperienceleague.adobe.com · checked 24 October 2026
  6. Adobe Experience League, Using Launches to develop content for a future releaseexperienceleague.adobe.com · checked 24 October 2026
  7. Adobe Experience League, Administering Workflowsexperienceleague.adobe.com · checked 24 October 2026
  8. Adobe Experience League, Resource Mapping (AEM 6.5)experienceleague.adobe.com · checked 24 October 2026
  9. Adobe Experience League, Resource Mapping (AEM as a Cloud Service)experienceleague.adobe.com · checked 24 October 2026
  10. Adobe Experience League, Edge Delivery Services Overviewexperienceleague.adobe.com · checked 24 October 2026
  11. Adobe Experience League, AEM 6.5 On-premise support timelines and service pack policyexperienceleague.adobe.com · checked 24 October 2026
  12. Sanity Learn, Planning a re-platforming projectsanity.io · checked 24 October 2026
  13. Sanity Learn, Re-modelling your existing contentsanity.io · checked 24 October 2026
  14. Sanity Learn, Migrating without downtimesanity.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 Docs, Configure the Portable Text Editorsanity.io · checked 24 October 2026
  18. Sanity Docs, Managing redirects with Sanitysanity.io · checked 24 October 2026
  19. Sanity Learn, Reducing SEO impactsanity.io · checked 24 October 2026
  20. Sanity Docs, Media Library introductionsanity.io · checked 24 October 2026
  21. Sanity, Plans that scale with yousanity.io · checked 24 October 2026
  22. Sanity Docs, Content Releasessanity.io · checked 24 October 2026
  23. Sanity Docs, Scheduled draftssanity.io · checked 24 October 2026
  24. Sanity Docs, Roles and permissionssanity.io · checked 24 October 2026
  25. Sanity Docs, Multi-tenancy implementationsanity.io · checked 24 October 2026
  26. Sanity Docs, Workflows: How early access workssanity.io · checked 24 October 2026
  27. Sanity, Scaling a multi-brand e-commerce mobile app (Tata Digital)sanity.io · checked 24 October 2026
  28. Sanity Learn, Migrating content from WordPress to Sanity: Introductionsanity.io · checked 24 October 2026
  29. Sanity, You'll need a CMS eventually. Let your agent set it up.sanity.io · checked 24 October 2026
  30. Sanity Docs, How to use structured content for page buildingsanity.io · checked 24 October 2026
  31. Adobe Experience League, Overview to Content Transfer Toolexperienceleague.adobe.com · checked 24 October 2026
  32. Sanity Docs, Cross-dataset referencessanity.io · checked 24 October 2026
  33. Sanity Docs, Workflows: Limitssanity.io · checked 24 October 2026
  34. Adobe Experience League, AEM 6.5 LTS Frequently Asked Questionsexperienceleague.adobe.com · checked 24 October 2026
  35. Sanity, August releases 2026sanity.io · checked 25 October 2026
  36. Sanity, sanity-migration skill (agent toolkit)github.com · checked 25 October 2026