Migration guide
Guide: Moving from AEM to Magnolia DXP
Architecture, cutover strategies, phases and effort: what an AEM to Magnolia migration involves.
Moving from Adobe Experience Manager (AEM) to Magnolia is a structured project with a known shape. Both platforms store content in a Java Content Repository (JCR), so most content can move by script. The real work sits in components, templates and integrations.
This guide covers architecture, concept mapping, cutover strategies, migration phases, the role of AI, and how to estimate effort.
About this guide
About this guide
About this guide
Moving from Adobe Experience Manager (AEM) to Magnolia is a structured project with a known shape. Both platforms store content in a Java Content Repository (JCR), so most content can move by script. The real work sits in components, templates and integrations.
This guide is for teams evaluating Magnolia who want to know what a migration involves before they commit. It covers:
how the two platforms compare at an architectural level
how AEM concepts translate to Magnolia
the cutover strategies you can choose from, and how to pick one
the stages of a migration and what happens in each
where AI helps, and where it deliberately stays out
how to estimate effort, team and timeline
The guide assumes an AEM Sites estate built on the page and component model. If parts of your estate keep content outside the repository, discovery defines a separate extraction path for them.
Common ground
Common ground
What the two platforms have in common
AEM and Magnolia share a Java and JCR foundation, which is what makes a largely automated content migration possible. Concepts your team already knows have a direct counterpart.
| Area | AEM | Magnolia | What it means for the migration |
|---|---|---|---|
| Content repository | JCR, implemented with Apache Jackrabbit Oak | JCR, implemented with Apache Jackrabbit | Content is a tree of nodes and properties in both, so scripts can extract, transform and load it |
| Language and extensibility | Java | Java | Your team's Java skills carry over, and some business logic can be adapted rather than rewritten |
| Delivery tiers | Author and publish tiers | Author and public instances | Editors and administrators keep a familiar operating model |
| Page building | Pages assembled from components with authoring dialogs | Pages assembled from areas and components with authoring dialogs | Pages can be mapped component by component |
| Structured content | Content fragments based on content fragment models | Content type items based on content type definitions | Models map to content types, fragments to items |
| Headless delivery | GraphQL API for content fragments | REST Delivery API and GraphQL | Headless consumers can be pointed at Magnolia endpoints |
| Multi-site and multi-language | Supported | Supported | Site and language structures can be carried across |
Differences
Differences
Where the platforms differ
Both platforms sit on a JCR, but they model content and rendering differently. These differences are where migration effort goes, and each one has a known mapping.
Rendering model. AEM is built on Apache Sling. Each content node names its rendering script through the
sling:resourceTypeproperty, and HTL is the recommended script language. Magnolia defines templates and components in YAML, usually in light modules, and renders them with FreeMarker or delivers them headless to the front end of your choice.Component inheritance (code and definitions). AEM components can inherit from other components through
sling:resourceSuperTypechains. A migration resolves each chain and flattens it into one self-contained Magnolia component definition.Content inheritance (live copy). AEM shares and inherits content across site trees through Multi Site Manager (MSM) live copies, where a live copy inherits content from a master branch. Magnolia has an equivalent live-copy model. A migration converts each MSM relationship into a Magnolia live copy, preserving component- and field-level inheritance and the points where authors cancelled it.
Dialogs. AEM component dialogs are
cq:dialognodes built with the Granite UI framework. Magnolia dialogs are YAML definitions that sit with the component. Fields map across, but each dialog is generated fresh rather than copied.Page structure. In AEM, a page is a
cq:Pagenode with ajcr:contentchild that holds its components. In Magnolia, a page is anmgnl:pagenode with areas that hold components. The transform step reshapes this tree.Runtime and deployment. AEM runs application code as OSGi bundles in an Apache Felix container. Magnolia is deployed as a Java web application, and much template and front-end work can be done in light modules without a Java build.
Taxonomy. AEM stores tags as
cq:Tagnodes below/content/cq:tags. Magnolia keeps taxonomy in the Categories module or in content tags.
What varies from project to project is how much custom logic sits on top of these structures. That is what discovery measures.
Concept mapping
Concept mapping
How AEM concepts translate to Magnolia
Every AEM artifact in a typical Sites project has a Magnolia target. This mapping drives the migration scripts, so the same input always produces the same output.
| AEM source | Magnolia target | Stored in Magnolia as |
|---|---|---|
Tag (cq:Tag below /content/cq:tags) | Category (Categories module) or content tag | JCR nodes in the categories or tags workspace |
| Content fragment model | Content type definition | YAML in a light module |
| Content fragment | Content type item, edited in a content app | JCR node in the content type's workspace |
| AEM Experience Fragment | Magnolia Experience Fragment (XF) | Fragments are stored in the website workspace and participate in live-copy features; otherwise they're stored in a dedicated Experience Fragments workspace |
Asset (below /content/dam) | DAM asset | Binary plus mgnl:asset metadata in the DAM workspace |
Component (cq:Component, with its dialog and HTL script) | Component definition, dialog and template | YAML plus FreeMarker (.ftl) in a light module |
Page (cq:Page plus jcr:content) | Page (mgnl:page) with its area and component tree | JCR nodes in the website workspace |
MSM live copy (cq:LiveRelationship) | Live copy | Live-copy markers on JCR nodes in the website workspace |
| GraphQL endpoint for content fragments | REST Delivery API or Magnolia GraphQL | Delivery endpoint configuration in the REST or GraphQL module |
Some things have no automatic mapping: custom Java services, workflows, and integration code. Discovery lists each one and decides whether to rebuild it, replace it with a Magnolia feature, or retire it.
Cutover strategy
Cutover strategy
Choosing a cutover strategy
Your cutover strategy decides when traffic and authoring move from AEM to Magnolia. The deciding question is simple: can your authors pause content changes for a defined window, and across how much of the estate?
Interactive
How long authors can pause decides the cutover strategy
Click Yes or No to find the strategy that fits your estate
Question 1
Estate-wide freeze possible?
Strategy
Single cutoverOne freeze, one coordinated go-liveQuestion 2
Freeze per tenant possible?
Strategy
Tenant-by-tenant wavesFreeze only the tenant being movedStrategy
Dual authoringTime-boxed, changes made in bothSingle cutover with a controlled content freeze
AEM keeps serving all traffic and remains the authoring platform until the complete estate is ready on Magnolia. Ahead of go-live, authoring in AEM stops. This freeze gives a fixed content baseline.
During the freeze window, the team migrates the final content changes, validates the migrated content and critical functions, and runs agreed go/no-go checks. Traffic and authoring then switch to Magnolia in one coordinated cutover.
Choose it when you can accept an estate-wide freeze and prepare all sites, dependencies and editorial teams for one go-live.
Strengths: one consistent snapshot, no content sync between platforms, and the simplest technical and operational model.
Watch for: any cutover issue affects the full scope. Tested go/no-go criteria, a rollback plan with named owners, and close monitoring after cutover contain that risk.
Tenant-by-tenant migration
The migration runs in waves, one tenant (site, market or business unit) at a time. Each tenant is migrated, validated and cut over on its own. Only the tenant in its cutover window is frozen; the rest keep authoring in AEM as normal.
Choose it when an estate-wide freeze isn't acceptable, or one coordinated go-live isn't practical.
Strengths: smaller cutovers, lessons from early waves feed later ones, and rollback is limited to one wave.
Watch for: AEM and Magnolia run in parallel for a while. Shared content, references, domains and master content can cross tenant boundaries and constrain the wave order. For every tenant, it must be unambiguous which platform is the authoring system.
Dual authoring as a fallback
If no freeze is acceptable at all, even per tenant, both platforms run in parallel and authors make each change in both. This adds editorial effort and room for human error. Keep it to a short, controlled period with written authoring procedures.
Strategies at a glance
| Strategy | Content freeze | Platforms live in parallel | Best fit |
|---|---|---|---|
| Single cutover | Estate-wide, one window | No | Estate can be prepared for one coordinated go-live |
| Tenant-by-tenant | Per tenant, during its window | Yes, during the waves | Tenants are reasonably isolated; freeze must stay local |
| Dual authoring | None | Yes, for the whole migration | No freeze is possible at any level |
Structure first
Structure first
Build the structure first, then move the data
For any estate beyond a handful of pages, migrate components and templates first, then pages. Once the target structure is validated, page migration becomes mainly a data migration task that runs at scale.
Think of it like a database migration: create the schema and relationships, then load the rows.
- Migrate component templates and page templates. Platform-wide components come first, since most tenants use them. Tenant-specific components follow.
- Validate each component once. Check fields, dialogs, rendering and visual match against the source.
- Reuse the validated pattern for every instance of that component across the estate. Special cases and specific requirements still get human review.
- Load pages in bulk against the validated structure.
A page-by-page approach makes sense only for a small proof of concept. At scale it creates duplicate effort, because different people end up solving the same component on different pages.
Validation follows the same logic. People don't need to check every page. Template-level verification plus sampling covers the estate, with the sampling depth set by your project's requirements.
Migration stages
Migration stages
The stages of a migration
A migration runs through four phases. The technical work inside the execution phase follows a fixed four-step workflow, repeated for each wave.
Interactive
Four phases, with a four-step workflow repeated in every wave
Click a phase or step to see what happens in it
Inside each wave
Discovery runs once. Execution, validation and go-live repeat for each wave, and hypercare follows the final go-live.
Phase 1: Discovery and planning
The team assesses your AEM environment: architecture, content structure, integrations, customizations and dependencies. Scripts and AI-assisted analysis speed up the inventory; experts interpret it. The result is an agreed scope, wave structure, timeline, roles, cost and success criteria.
Phase 2: Migration execution, in waves
Waves usually start with a pilot market or site. Each later wave builds on what the earlier ones validated. Within each wave, the work follows four steps:
- Inventory. List every AEM artifact (components, templates, content fragment models, experience fragments, assets, tags) and map each one to its Magnolia target.
- Build. Generate components and page templates in light modules to set the base patterns. Then build content types and content apps.
- Migrate. Move content in dependency order: tags, then assets with binaries and metadata, then content fragments, experience fragments, then the full page tree with its components and live-copy relationships.
- Verify. Update reference links, reconnect external integrations such as analytics, CRM and PIM, and run QA.
Under the hood, step 3 is an extract, transform, load (ETL) pipeline:
Extract content and structure from AEM, using crawler scripts or exported content packages.
Transform it with the AEM-to-Magnolia mapping.
Load it into Magnolia as Package Manager archives: content is packaged, then uploaded and installed. Large content subtrees are split into multiple packages, with a default limit of 50,000 JCR nodes per package, configurable to suit the target environment. Uploads are chunked to support reliable transfer.
Run the first migration and validation in a lower environment, then promote validated content to higher environments.
Phase 3: Validation and go-live
Each wave goes through QA, functional testing, and content checks by your own authors and editors. Magnolia then runs a pre-go-live check. Nothing goes live until it meets the agreed criteria and is signed off.
Phase 4: Hypercare and handover
After the final go-live, the delivery team stays on for an agreed hypercare period to monitor performance and fix issues. Once things are stable, a structured knowledge transfer equips your team to run Magnolia independently.
Some migrations complete in about six months. Larger estates take more waves, and discovery confirms the timeline for yours.
Role of AI
Role of AI
Where AI is used, and where it is not
The migration itself runs as deterministic, repeatable scripts. AI assists people with analysis and refinement, but it is kept out of the scripts that move your content.
The reason is reproducibility. Migrations get re-run: rehearsals, delta runs before cutover, fixes after a mapping change. Each run must give the same result from the same input. Three designs were weighed:
| Design | How it works | Why it was not enough, or why it was chosen |
|---|---|---|
| Pure rules | A hand-written rule for every mapping | Every custom component needs a new rule, which doesn't scale |
| Pure AI | A model transforms content directly | The same input can give different output, so runs can't be reproduced |
| Deterministic scripts, AI on refinement | Scripts do the migration; AI helps people refine the result | Chosen: consistent, repeatable runs, with AI where it saves human effort |
In practice, the work splits like this:
| Task | Done by | Role of AI |
|---|---|---|
| Inventory of the AEM estate | Scripts and experts | Assists analysis in discovery |
| Mapping rules from AEM to Magnolia | Experts, encoded in scripts | None |
| Generating Magnolia components and templates from AEM source | Developers, using a prompt library | Drafts code that a developer reviews and validates |
| Moving tags, assets, content fragments, experience fragments and pages | Deterministic scripts | None |
| Refining edge cases and visual match | Developers | Optional advisor; the developer decides |
| QA, validation and sign-off | People | None |
Two consequences matter for most evaluations. First, the bulk content load does not pass through an AI model. Second, AI-assisted refinement is optional, so the migration can still run if your policies restrict AI use.
Effort and risk
Effort and risk
What drives effort and risk
In a tool-assisted migration, pages are cheap and components are the work. Pages load in scripted batches once their components are validated, and each validated component is reused for every instance across the estate. So effort follows the number and complexity of your components, not your page count.
You don't have to estimate that from rules of thumb. The migration toolkit includes an estimator that scans your AEM estate before you commit, and discovery turns that scan into an agreed scope, wave plan and budget. Most effort concentrates in a predictable set of places.
The main effort drivers are:
the number and variety of templates and components
components with custom business logic, and functions like navigation, search, forms, commerce, personalization and authentication
tenant-specific variations of shared components, and complex inheritance chains, including MSM live copies
the number of links and references to assets, fragments and tags
components that depend on information not included in the source export, or on permissions and external systems
how closely the migrated site must match the current look and feel
the capacity of the target Magnolia environment for bulk loading
| Risk | How it shows up | How to address it |
|---|---|---|
| Hidden cross-tenant dependencies | Shared or master content blocks a wave, or breaks after one tenant moves | Map dependencies in discovery, before setting the wave order |
| Content changes during migration | AEM and Magnolia drift apart | Choose a freeze model early; use dual authoring only as a time-boxed fallback |
| Cutover problems | An issue appears at switch-over | Tested go/no-go criteria, a rollback plan with named owners, monitoring after cutover |
| Missing source data | A component relies on data outside the export | Flag these in the inventory and plan manual or integration work |
| Limited sample data or access | Mappings can't be checked against real content | Give the team access to an AEM environment or a representative content export early |
| Integrations | Analytics, CRM or PIM links break | Scope, reconnect and test integrations as part of each wave |
Checklist
Checklist
Questions to answer before you start
Answering these before discovery shortens it and sharpens the estimate.
Can your authors accept a content freeze? Across the whole estate, or only per tenant? For how long?
How many page templates and components do you have? How many are platform-wide, and how many tenant-specific?
Do you use MSM live copies or experience fragments?
Which components carry business logic, or connect to external systems?
Which integrations must be reconnected (for example analytics, CRM, PIM, search, commerce)?
How isolated are your sites or tenants? Where do they share content, assets, master content or domains?
Do headless consumers read content through GraphQL or other APIs today?
Can you give the team access to an AEM environment, or a representative content export?
What capacity will the target Magnolia environment have for bulk loads?
How will you validate: template level plus sampling? Who signs off each wave?
Does your organization restrict the use of AI tools in projects?
Who delivers: Magnolia, a partner, your own team, or a mixed team?
Support
Support
Getting support
You can run a migration with your own team, with a partner, or with Magnolia. If you want Magnolia to own it, the Magnolia Navigator migration program covers the full journey from discovery to handover.
In Magnolia Navigator, a named delivery lead and a team experienced in both AEM and Magnolia run the four phases in this guide. Scope and investment are agreed in discovery and don't expand without your sign-off. After go-live, hypercare and a structured knowledge transfer prepare your team to run Magnolia; Magnolia Professional Services and SLA-based support remain available after that. Mixed teams with your developers or a partner are possible.
Next step: talk to a migration expert to map out your migration, or see the Magnolia vs Adobe Experience Manager comparison.
Ready to plan your migration?
Book a free, no-obligation discovery call with a migration expert to map out your journey.
Start your migration planLegal notes and sources
Adobe and Adobe Experience Manager are either registered trademarks or trademarks of Adobe in the United States and/or other countries. Statements about AEM in this guide are based on Adobe's public documentation, accessed October 27, 2026:
AEM Technical Foundations: JCR and Jackrabbit Oak, Sling,
sling:resourceTypeandsling:resourceSuperType, HTL, OSGi and Apache FelixThe AEM Tagging Framework:
cq:Tagnodes below/content/cq:tagsAEM GraphQL API for use with Content Fragments: content fragment models and the GraphQL API
Developing AEM Components:
cq:dialogand Granite UIUnderstand Back-End Development: author and publish tiers