This is an illustrative composite, not an account of any single organization. It generalizes patterns commonly seen when a mid-market enterprise moves from Adobe Experience Manager (AEM) to Optimizely. Numbers are typical ranges, not one company's figures.
Context
Picture a mid-market financial-services company — roughly 8,000 to 15,000 URLs across a marketing site, a resource library, and a lightly gated advisor portal. They had run AEM for the better part of a decade. Over that time the implementation accreted: custom components nobody fully documented, a mix of Content Fragments and page-level authoring, and a template layer that only two contractors truly understood.
The move to Optimizely was driven by cost and velocity, not features. AEM licensing and the specialized hosting footprint were expensive, release cycles were slow, and the marketing team wanted a composable stack with cleaner integration into their existing .NET services and experimentation tooling. Leadership framed it as a simplification project. That framing was optimistic — and it hid most of the risk.
What broke
The failures were not exotic. They were the same ones that recur on nearly every AEM-to-Optimizely program, and they clustered in four areas.
Redirects and URL structure
AEM sites frequently expose paths shaped by the content repository — segments like /content/site/en/... that were later masked by dispatcher and Sitecatalyst-style rewrites. When the team rebuilt information architecture in Optimizely, the new routing was cleaner but different. Nobody had a complete inventory of the live, indexed URLs versus the authored paths, so the first redirect map covered only what was in the sitemap. Roughly 15–25% of ranking URLs — old campaign landing pages, PDFs, and paginated resource views — had no 1:1 target and quietly 404'd or chained through two or three hops.
The visible result was a temporary organic traffic dip in the 20–35% range on affected page groups, with recovery stretching across two to three months as the new URLs re-earned equity.
Content model mismatch
This was the deepest problem. AEM Content Fragments and Experience Fragments do not map one-to-one onto Optimizely's block-and-content-type model. In AEM, a single fragment often carried loosely structured rich text plus a grab-bag of optional fields. Optimizely rewards tighter, typed content: distinct content types, reusable blocks, and clear property definitions. Teams that try to replicate AEM structures verbatim end up with bloated content types and authoring screens that mirror old bad habits.
Because the model was ported rather than redesigned, embedded assets and inline references broke on import. Rich-text fields carried AEM-specific markup and DAM path references that resolved to nothing in the new environment. Editors spent weeks re-linking images and fixing tables by hand.
Lost SEO and AEO signals
Structured data was the quiet casualty. The AEM templates had injected JSON-LD (FAQ, Article, BreadcrumbList) at the template layer. When rendering moved to Optimizely's presentation layer, that logic wasn't reimplemented on day one, so schema simply disappeared on launch. FAQ rich results and the answer-engine visibility that depends on clean, machine-readable structure degraded before anyone noticed, because dashboards were watching sessions, not SERP features.
Canonical tags, hreflang for the localized sub-sites, and self-referencing canonicals also drifted. Several page types shipped without canonicals, producing near-duplicate clusters that diluted ranking signals.
Taxonomy gaps
AEM tags live in a namespaced taxonomy that powered faceted filtering across the resource library. There was no clean equivalent waiting in Optimizely, so the migration flattened multi-dimensional tags into a single category field. Filtering broke, related-content modules returned thin or irrelevant results, and internal linking that had relied on shared tags collapsed — costing crawl depth to deeper pages.
What worked
The recoveries were as instructive as the failures.
- A staged, content-type-first rebuild. Once the team stopped porting AEM structures and instead modeled Optimizely content types around actual editorial intent, authoring got faster and imports got cleaner. Fewer, well-typed content types beat a faithful clone of the old model.
- A crawl-based URL inventory. Reconciling live server logs, Search Console data, and a full crawl produced a redirect map that covered indexed and link-earning URLs, not just the sitemap. This is exactly the kind of pre-migration reconciliation Replatform Radar is built to surface early.
- Reimplementing structured data as reusable render logic. Treating JSON-LD as a first-class, tested output — not a template afterthought — restored rich results within weeks.
- Parallel running with a canary subset. Migrating one content section first exposed the model and taxonomy problems while the blast radius was small.
Lessons
- Redesign the content model; don't port it. AEM fragments and Optimizely blocks are different paradigms. Map by editorial purpose, not by field name.
- Inventory live URLs, not authored paths. The repository path is not the indexed URL. Reconcile logs, analytics, and a crawl before writing a single redirect.
- Treat structured data and canonicals as launch-blocking. JSON-LD, canonicals, and hreflang carry SEO and answer-engine value that dashboards measuring sessions won't catch until it's gone.
- Protect the taxonomy. Faceted tags power filtering, related content, and internal linking. Flattening them silently degrades crawlability and discovery.
- Watch SERP features, not just traffic. A stable session count can mask lost rich results and eroded topical authority.
- Document the old system before you leave it. Undocumented AEM components are where scope and timelines go to die.
Before you make this move
A short checklist to run before committing to an AEM-to-Optimizely program:
- Have you produced a full crawl-plus-logs URL inventory and identified every URL that ranks or earns links?
- Is your redirect map 1:1 where possible, with no chains longer than one hop, and does it cover PDFs and paginated views?
- Have you mapped AEM Content Fragments and Experience Fragments to purpose-built Optimizely content types — reviewed by editors, not just developers?
- Is structured data (Article, FAQ, BreadcrumbList) reimplemented and tested as part of the new rendering layer?
- Are canonicals, hreflang, and robots directives explicitly specified per content type?
- Does your taxonomy plan preserve multi-dimensional tagging and the faceting, related-content, and internal linking it powers?
- Do you have a canary section to migrate first, and monitoring for SERP features — not only sessions?
The organizations that recover fastest treat replatforming as a content and SEO program with a technical build inside it — not a technical build with content bolted on afterward.
For a broader view of migration risk patterns across platforms, see the migration library.