PLAYBOOK — FREE FROM EGGKNITE

The Headless Migration Playbook

The phase-by-phase operating manual for replatforming to a composable, headless stack — WordPress, Webflow or legacy monolith to Next.js plus a headless CMS — with every URL, ranking and revenue signal intact.

From the Headless Web & AI Development toolset.

304 days
Median time for a domain migration to recover baseline organic traffic
SALT.agency study of 1,052 migrations, 2026
27%
Share of migrations that recover within 90 days
SALT.agency, 2026
48%
Mobile sites that pass all three Core Web Vitals
HTTP Archive Web Almanac, 2025
+8.4%
Retail conversion lift from a 0.1s mobile speed gain
Deloitte × Google, 30M sessions

Replatforming is the highest-stakes project in technical marketing. The recovery data is sobering: across 1,052 documented domain migrations, only 27% recovered their baseline organic traffic within 90 days, the median recovery took 304 days, and 13.9% still showed incomplete recovery three years on (SALT.agency, 2026). Almost every one of those outcomes traces back to preventable execution errors — broken redirect maps, render gaps, missing metadata, launches with no monitoring plan.

The upside is equally well documented. A same-domain replatform executed with full parity routinely stabilizes within weeks rather than months, and the performance headroom of a modern stack pays for the project on its own: Deloitte and Google measured an 8.4% conversion lift and a 9.2% increase in average order value for retail sites from a 0.1-second improvement in mobile speed. With only 48% of mobile sites currently passing all three Core Web Vitals (HTTP Archive, 2025), a well-built headless frontend starts life in the top half of the web.

This playbook is the operating manual we run headless migrations on: six phases from audit to post-launch stabilization, with the checklists, KPIs and monitoring windows that keep organic traffic flat through cutover and compounding after it. It assumes a move to a modern React meta-framework such as Next.js paired with a headless CMS, but every phase applies to any composable replatform.

PHASE 01

Audit & inventory

Freeze a complete, dated picture of what the current site is, what it ranks for and what it earns — so parity is measurable instead of assumed.

Freeze a full crawl baseline

Run a complete crawl of the live site (Screaming Frog, Sitebulb or similar) and export every indexable URL with its status code, canonical, title, meta description, H1, word count, structured data and hreflang. Archive the export with a date stamp — this snapshot is the contract the new site must satisfy. Re-crawl weekly until launch so late content edits stay inside the baseline.

Field note: Crawl twice: once as raw HTML, once with JavaScript rendering enabled. The delta between the two tells you exactly which content currently depends on client-side rendering — the highest-risk surface in any headless move.

Build the master URL inventory

Merge four exports into one deduplicated inventory: the crawl, Search Console performance data (full 16 months), analytics landing pages and a backlink export from Ahrefs or Semrush. Add 30 days of server logs to catch URLs only bots still visit. Every row gets a status, an owner and a fate: keep, consolidate or retire with a redirect.

Field note: The URLs that appear only in backlink and log data are the ones teams forget — old campaign pages, retired PDFs, legacy image paths. They carry link equity and they 404 silently after launch unless they are in the map.

Tier every URL by traffic and revenue weight

Rank the inventory by organic sessions and assisted revenue, then tier it: Tier 1 is the small set of pages driving the large majority of organic value (typically a fifth of URLs carrying about four-fifths of sessions), Tier 2 is the working middle, Tier 3 is the long tail. Parity effort, QA depth and launch-day monitoring all scale by tier.

Benchmark Core Web Vitals and rankings

Capture field data (CrUX) per template at the 75th percentile against Google’s thresholds — LCP ≤ 2.5s, INP ≤ 200ms, CLS ≤ 0.1 — and record lab numbers for your top templates as a secondary reference. Stand up daily rank tracking for the keyword set that maps to Tier 1 pages. You cannot prove the migration held steady without a before.

Field note: INP replaced FID as a Core Web Vital in March 2024 and it is the metric headless rebuilds most often regress, because hydration cost lands directly on interaction latency. Benchmark it per template now.

Document everything that earns traffic beyond standard pages

Inventory the edge cases: faceted and parameterized URLs, pagination series, RSS and product feeds, images ranking in image search, PDFs, embedded tools and API endpoints third parties consume. Each one needs an explicit decision in the new architecture. Migrations rarely fail on the homepage; they fail in the inventory nobody wrote down.

Where this phase fails
  • Taking the baseline crawl after content edits and pruning have already started, so parity is measured against a moving target.
  • Building the inventory from the CMS export alone and missing backlink-only and log-only URLs that carry equity.
  • Treating all URLs as equal — spending QA hours on the long tail while a Tier 1 template ships with a broken canonical.
  • Benchmarking with lab data only; Google evaluates field data at the 75th percentile, and the two routinely disagree.
URL inventory coverage 100% of GSC + backlink + log URLsOrganic value mapped to tiers ≥95% of sessionsCWV field baseline LCP, INP, CLS at p75 per templateRank tracking live Tier 1 keyword set, daily
PHASE 02

Architecture & stack selection

Choose the framework, CMS and rendering strategy on evidence — per-template rendering control, content-model fit and redirect capacity — so the build phase inherits decisions instead of debates.

Select the frontend framework on rendering flexibility

The framework must let you choose the rendering mode per route: static generation, incremental regeneration and server rendering in one codebase. Next.js remains the reference implementation — the clear usage leader among React meta-frameworks (State of JavaScript, 2025) and now powering 2.9% of all websites (W3Techs, July 2026) — but the criteria matter more than the logo: server-rendered HTML for everything indexable, built-in image optimization, and redirect handling at the edge.

Pick the headless CMS against your content model

Score candidates against the real content model from Phase 1: structured content types, references, localization, roles, scheduled publishing and — critically — live preview for editors. The category is maturing fast (a market growing at roughly 22.6% CAGR per Future Market Insights, 2025), and practitioner outcomes back the move: 69% of headless CMS users report improved time-to-market and 58% report better site performance (Storyblok, 2025).

Field note: Run the editor test before you sign: have your actual content team draft, preview and publish one real page in a trial space of each finalist. Editor friction is the number one post-migration complaint and the hardest thing to retrofit.

Assign a rendering mode to every template

Make it an explicit table: static generation (SSG) for stable marketing and evergreen pages, incremental static regeneration (ISR) for large catalogs and blogs where thousands of pages change on a cadence, server-side rendering (SSR) for personalized, inventory-sensitive or search-results pages. Every indexable route ships full HTML from the server; client-side rendering is reserved for authenticated and app-like surfaces.

Field note: Default to the most static mode each template can tolerate. Static pages are the cheapest to serve, the fastest to render and the easiest for crawlers — escalate to SSR only when the content genuinely changes per request.

Keep URLs identical wherever possible

Every changed URL becomes a redirect, and every redirect asks Google to re-evaluate the page. Preserving paths exactly removes entire failure classes: mapping errors, chain risk and re-indexing lag. Reserve URL changes for structures that are genuinely broken, and batch them into the map with explicit sign-off rather than letting the new router dictate them.

Plan the delivery infrastructure and redirect layer

Decide where redirects live (edge rules, middleware or framework config), confirm the layer handles your full map size at production latency, and design the CDN, image pipeline and preview environments. Load-test the redirect layer with the real map — platform rule limits and lookup latency surprise teams who first meet them on launch day.

Field note: For maps beyond a few thousand rules, put exact-match lookups in an edge key-value store and keep pattern rules to a reviewed handful. Config-file redirects at that scale slow builds and are painful to audit.
Where this phase fails
  • Choosing the stack on developer enthusiasm and leaving editors with a publishing workflow slower than the one they left.
  • Client-side rendering anything indexable — content that only exists after hydration is invisible to the raw-HTML pass and at the mercy of render queues.
  • Changing domain, design, URL structure and content in a single launch, which makes any traffic movement impossible to diagnose.
  • Scoping the content migration as an afterthought; moving and validating thousands of CMS entries is routinely the longest workstream.
Templates with an assigned rendering mode 100%Legacy URLs preserved unchanged ≥90%Indexable content server-rendered 100%Architecture decisions recorded every major choice, with owner
PHASE 03

Parity build

Rebuild the site so a crawler diff between old production and new staging shows zero unexplained deltas — content, metadata, schema, links and redirects all accounted for.

Model content before migrating it

Translate the legacy database into the new CMS schema field by field: every legacy field maps to a destination, a transform or a documented retirement. Migrate programmatically with validation scripts that count entries, check required fields and flag truncated rich text. Hand-migrating anything beyond a few dozen pages guarantees drift.

Field note: Write the validation script before the migration script. Knowing you must prove 4,200 posts arrived with body, author, date and canonical intact changes how you build the importer.

Build the 1:1 redirect map

Every URL in the master inventory resolves to exactly one destination that returns 200 — a 301 for anything that moves, direct to the final URL with zero intermediate hops. Pattern rules are allowed only after the explicit map is exhausted, and each pattern gets test cases. Google’s guidance is to keep these redirects in place for at least a year; treat the map as a permanent, version-controlled asset.

Field note: Script the audit: request every legacy URL against staging and assert exactly one 3xx followed by a 200. Run it in CI so a routing refactor that breaks fifty redirects fails the build instead of shipping.

Reproduce metadata and structured data exactly

Titles, meta descriptions, canonicals, robots directives, Open Graph tags, hreflang and JSON-LD must match the baseline per template. Componentized frontends make it easy to lose schema silently — one refactored product card drops Product markup across the entire catalog. Validate structured data per template against the baseline crawl and with Google’s Rich Results Test.

Run render-parity testing with crawler diffing

Crawl new staging with the same tool and settings as the Phase 1 baseline, then diff the two datasets URL by URL: title, meta, H1, canonical, word count, internal link count, schema types, status code. Every delta is either an approved improvement or a defect with a ticket. Repeat the raw-versus-rendered comparison on staging to confirm indexable content is present in server HTML.

Field note: Word count is the underrated diff column. A template that renders 40% fewer words than its predecessor usually means a component quietly dropped FAQ blocks, reviews or footer copy that were doing ranking work.

Preserve internal linking, pagination and navigation

Internal links distribute authority, and redesigns love to prune them. Compare inlink counts for Tier 1 pages between baseline and staging, rebuild pagination as crawlable linked pages, and keep breadcrumb trails plus their schema. If the new design removes a link module, replace the equity path deliberately with related-content rails or curated footer links.

Set performance budgets per template and wire them into CI

Define budgets now: JavaScript shipped per template, image weight, LCP and INP targets at p75. Enforce them with Lighthouse CI and bundle-size checks on every pull request so the site launches inside budget and stays there. A headless rebuild is the one moment you get performance for free — budgets are how you keep it.

Where this phase fails
  • Redirect chains built by stacking new rules on top of the legacy .htaccess instead of flattening every path to a single hop.
  • Staging locked behind auth or robots rules the whole build, so the first true crawl of the new site happens on production.
  • Schema markup lost in component refactors and only discovered weeks later as rich results disappear from SERPs.
  • Treating parity QA as a design review — pixel checks pass while canonicals, hreflang and word counts silently regress.
Redirect map coverage 100% of inventory, 0 chainsMetadata parity on Tier 1 0 unexplained deltasStructured data parity all baseline schema types presentStaging crawl health 0 unexpected 4xx/5xxJS per template within budget in CI
PHASE 04

Cutover

Ship the switch as a controlled release: staged traffic, deliberate sitemap handling, defined monitoring windows and a rollback plan that has actually been rehearsed.

Pick the window and prepare DNS

Launch in your lowest-traffic window, early in the week, with the full team available for 72 hours afterward and no marketing event within a fortnight. Drop DNS TTL to 300 seconds at least 24–48 hours ahead so the eventual switch propagates in minutes and a rollback would too.

Stage the release and freeze content

Where infrastructure allows, cut over a slice first — one URL section or a small percentage of traffic through the edge — and watch error rates and analytics before going to 100%. Freeze content changes across both systems from 48 hours before launch until the first monitoring window closes, so every anomaly has one possible cause: the migration.

Field note: A canary at even 5% of traffic surfaces the misconfigured cache header, the broken form endpoint and the missing analytics tag while they are cheap. An hour of canary saves a night of rollback.

Handle sitemaps and directives deliberately

Verify staging directives are gone — noindex meta tags, robots.txt disallows and auth walls have ended more migrations than DNS ever has. Submit the new XML sitemap in Search Console at launch, and temporarily keep a sitemap of the old URLs available: Google uses it to rediscover legacy URLs and process their redirects faster. If the domain changes, file the Change of Address tool, which forwards signals for 180 days.

Open the monitoring windows

Run the 4–24–72 pattern. First 4 hours: infrastructure — 5xx rate, redirect sampling across all tiers, TLS, forms, analytics firing. First 24 hours: crawl behavior — log-file view of Googlebot on new URLs, redirect hit rates, cache ratios. First 72 hours: Search Console — crawl stats, index coverage movement, and Tier 1 rank checks. Each window has an owner and an exit review before the team stands down.

Field note: Pre-build the launch dashboard the week before: status-code mix from logs, redirect hits, GSC crawl stats, real-time analytics and Tier 1 rank positions on one screen. Launch day is a terrible time to write queries.

Hold a rehearsed rollback plan

Define the trigger thresholds in advance — sustained 5xx above tolerance, redirect failure on Tier 1, conversion collapse — and the exact revert procedure: DNS back to origin, content freeze maintained, stakeholder comms template ready. Rehearse the revert once on staging. Keep the legacy platform contract and hosting alive through the stabilization window so the fallback genuinely exists.

Where this phase fails
  • Launching on a Friday or straight into a promotion weekend, then diagnosing problems with half the team offline.
  • Shipping the staging noindex or robots.txt disallow to production — the classic migration killer, still the most common.
  • Having no server-log access on launch day, leaving the team blind to what crawlers are actually hitting.
  • Letting the old platform contract lapse at cutover, so there is nothing left to roll back to and legacy-hosted assets 404.
Staging directives removed verified pre-DNS, twice5xx rate, first 4 hours <0.1%Redirect success on sampled legacy URLs ≥99%Googlebot on new URLs confirmed in logs <24h
PHASE 05

Post-launch stabilization

Convert launch adrenaline into a 90-day operating cadence: crawl-error triage, index and ranking watch, and performance budgets that hold the new speed permanently.

Triage crawl errors in the first 72 hours

Work Search Console crawl stats and raw server logs side by side. Any legacy URL returning 404 gets mapped within hours if it carries traffic or links; soft 404s and unexpected 302s get fixed at the source. Rank the queue by tier — one broken Tier 1 redirect outweighs a hundred long-tail misses.

Field note: Grep the logs for 404s with external referrers first. Those are real users arriving from real links right now, and each one is both lost revenue and a decaying equity signal.

Watch index coverage and rankings daily for the flux period

Google states that a medium-sized site takes a few weeks for most pages to be reprocessed after a move, with larger sites taking longer — so expect ranking volatility and hold your nerve. Track indexed counts for each tier, watch old URLs drop as new ones rise, and annotate analytics with the launch date so every later analysis has the marker.

Enforce Core Web Vitals budgets in CI, permanently

The launch-day speed is a starting line. Keep Lighthouse CI and bundle-size gates on every pull request, review CrUX field data monthly per template, and treat a budget breach like a failing test. With only 48% of mobile sites passing all three Core Web Vitals (HTTP Archive, 2025), holding your budgets keeps the new stack in the passing half — and the Deloitte numbers say each retained tenth of a second is worth real conversion.

Run a defined Search Console cadence

Daily for the first two weeks: coverage, crawl stats, sitemap processing and manual-action checks. Weekly through day 90: page experience, enhancement reports, top-query movement against the Phase 1 baseline. Close the loop with a day-30 and day-90 report comparing organic sessions, conversions and Tier 1 rankings to baseline.

Keep redirects alive and audit their traffic

Google recommends keeping migration redirects for at least a year, and the safest posture is to treat the map as permanent infrastructure. At day 90, review redirect hit logs: heavy hitters reveal external links worth updating at the source, and internal links still pointing at legacy URLs should be rewritten to their destinations.

Field note: Never let a platform switch quietly drop your redirect layer. When the map lives in version control with CI tests from Phase 3, the next replatform inherits it intact.
Where this phase fails
  • Declaring victory at week two, disbanding the team, and having nobody watching when the real flux arrives in weeks three to six.
  • Deleting redirects at 90 days to "clean up the config" while they are still transferring signals and catching live referral traffic.
  • Letting the first post-launch feature sprint blow the JavaScript budget and hand back the CWV gains within a quarter.
  • Skipping the launch annotation in analytics, making every future year-over-year comparison a guessing game.
Legacy-URL 404s, week 1 <0.5% of legacy hitsTier 1 pages indexed 100% by day 14Organic sessions vs baseline ≥95% by day 30CWV at p75 LCP ≤2.5s, INP ≤200ms, CLS ≤0.1Redirect retention ≥12 months
PHASE 06

Timeline & resourcing norms

Size the project honestly, sequence it so QA never gets compressed, and staff the launch and the 90 days after it like the revenue event it is.

Size the engagement by URL count and complexity

Working norms from real engagements: a marketing site under 1,000 URLs runs 6–10 weeks end to end; a content or commerce property in the 1,000–50,000 range runs 3–5 months; large catalogs and multi-locale estates beyond that run 6–12 months. Integrations, localization and content-model complexity move the estimate more than raw page count.

Sequence with QA as a fixed block

Audit and inventory take two to three weeks. The parity build is the long pole. Then protect a parity-QA window of at least two weeks that no slip is allowed to compress — when builds run late, the launch date moves and the QA window stays whole. Every catastrophic migration story includes the sentence "we cut testing to hit the date."

Field note: Put the QA window in the contract and the project plan as an immovable block with named owners. Deadline pressure always attacks the testing phase first; make it structurally impossible to sacrifice.

Budget the stabilization window into the plan

The recovery data sets expectations: 27% of migrations recover within 90 days and the median domain move takes 304 days to return to baseline (SALT.agency, 2026). A disciplined same-domain replatform sits at the fast end — flux typically settles within two to six weeks — but the plan, the budget and the team retention must run through day 90. Recovery is a phase of the project, with the same staffing seriousness as the build.

Staff the launch with named owners

Minimum viable launch team: an engineering lead who owns infrastructure and rollback, an SEO lead who owns the parity contract and Search Console, a content owner who enforces the freeze, an analytics owner who validates tracking, and an on-call rotation covering the 72-hour window. Publish the RACI before cutover so the 2 a.m. redirect question has one obvious recipient.

Where this phase fails
  • Tying the launch date to an external marketing event, then compressing QA when the build slips.
  • Running the migration as a pure engineering project with SEO consulted at the end instead of owning the parity contract throughout.
  • Budgeting to launch day only, so stabilization work competes with the next quarter’s roadmap for the same people.
Parity-QA window ≥2 weeks, protectedLaunch RACI published before cutoverTeam retention through day 90Stakeholder reporting weekly through day 90
MODELS

Frameworks to steal

The traffic-weighted tier model

Rank every URL by organic sessions and revenue, then split into three tiers: Tier 1 is the roughly 20% of URLs carrying about 80% of organic value and gets manual parity QA, launch-day sampling and daily rank tracking; Tier 2 gets automated diffing and weekly review; Tier 3 gets bulk redirect validation. Effort follows value, and the checklist stops pretending 40,000 URLs deserve equal attention.

The three-crawl parity diff

Three crawls with identical settings — legacy production (the baseline), new staging (pre-launch gate) and new production (post-launch confirmation) — diffed across eight columns: status, canonical, title, meta description, H1, word count, internal links and schema types. Staging must show zero unexplained deltas against baseline before DNS moves; production must match staging within 48 hours of launch. Any cell that differs is an approved improvement or a ticket.

The 4–24–72 monitoring window

Three nested launch windows, each with an owner and an exit review. Hours 0–4: infrastructure — 5xx rate, redirect sampling, TLS, forms, analytics. Hours 4–24: crawl behavior — Googlebot in the logs, redirect hit rates, cache performance. Hours 24–72: search signals — GSC crawl stats, index coverage, Tier 1 rankings. The team stands down only when all three windows close green, and the day-90 cadence begins.

The master checklist

  • Baseline crawl exported and archived with date stamp (raw HTML + rendered)
  • Master URL inventory merged from crawl, GSC, analytics, backlinks and server logs
  • Every URL tiered by organic sessions and revenue weight
  • CWV field data (p75 LCP / INP / CLS) benchmarked per template
  • Daily rank tracking live for the Tier 1 keyword set
  • Rendering mode (SSG / ISR / SSR) assigned to every template
  • CMS finalist validated by the actual editorial team on a real page
  • URL structure preserved unchanged wherever possible, changes signed off
  • Content migrated programmatically with a validation script proving counts and fields
  • 1:1 redirect map covering 100% of the inventory, zero chains, tested in CI
  • Metadata, canonicals, hreflang and Open Graph at parity per template
  • Structured data validated per template against baseline schema types
  • Internal link counts on Tier 1 pages at or above baseline
  • Performance budgets (JS, images, LCP, INP) enforced by CI gates
  • Staging noindex / robots.txt disallow removal verified — twice
  • DNS TTL lowered to 300s at least 24 hours before cutover
  • New XML sitemap ready; legacy-URL sitemap kept temporarily for redirect discovery
  • Change of Address filed in Search Console (domain moves only)
  • Launch dashboard pre-built: logs, redirect hits, GSC, analytics, rankings
  • Rollback plan written, thresholds defined, revert rehearsed on staging
  • Content freeze from 48h pre-launch through the first monitoring window
  • 4–24–72 monitoring windows staffed with named owners
  • Analytics annotated with the launch date
  • Redirects retained ≥12 months with a day-90 hit-log audit scheduled

Frequently asked questions

Will we lose organic traffic during a headless migration?
Some short-term ranking flux is normal while Google reprocesses the site — typically two to six weeks for a well-executed same-domain replatform. Lasting losses come from execution gaps: missing redirects, render gaps, lost metadata or blocked crawlers. The documented disasters (median 304-day recoveries in SALT.agency’s 1,052-migration study) overwhelmingly involved skipped parity work. Run the full playbook and the realistic outcome is flat traffic through cutover, then gains as the performance improvements compound.
Should we change our URL structure while we migrate?
Keep URLs identical wherever you can. Every changed URL becomes a redirect that Google must discover and re-evaluate, which adds risk and delays stabilization. If the current structure is genuinely broken, fix it during the migration with explicit sign-off on every change — but treat URL changes as a cost you spend deliberately on the few places they pay for themselves.
How long do we need to keep the redirects?
Google’s guidance is at least one year, because recrawling and reassigning signals — including external links pointing at old URLs — takes that long. In practice the safest answer is permanently: redirects are cheap to serve, external links to legacy URLs persist for years, and a version-controlled map with CI tests costs almost nothing to maintain.
Is client-side rendering safe for SEO, or do we need SSR?
Serve full HTML from the server for everything you want indexed, via SSG, ISR or SSR. Google can render JavaScript, but rendering is queued and resource-constrained, other search and AI crawlers handle it inconsistently, and content that only appears after hydration is the single biggest render-parity risk in a headless build. Reserve client-side rendering for authenticated and app-like surfaces where indexing is irrelevant.
Can we redesign, rewrite content and change domains in the same launch?
Stack as few variables as possible. Each simultaneous change — platform, design, content, URLs, domain — multiplies risk and, worse, makes any traffic movement impossible to diagnose because you cannot isolate the cause. The disciplined pattern is replatform at parity first, confirm stability over the day-30 window, then ship redesigns and content overhauls as measured follow-on releases.
How long until rankings stabilize after cutover?
Google says a medium-sized site takes a few weeks for most pages to be reprocessed, and larger sites take longer. In practice, a clean same-domain replatform shows flux for two to six weeks; domain changes run longer and lean on the Change of Address tool, which forwards signals for 180 days. Judge the migration at day 30 and day 90 against your Phase 1 baseline rather than reacting to daily wobble.
What does render-parity testing actually involve?
Crawl old production and new staging with identical tools and settings, then diff every URL across status, canonical, title, meta description, H1, word count, internal links and schema types. Separately, compare raw server HTML against the JavaScript-rendered DOM on the new stack to confirm indexable content ships in the initial response. Every delta gets classified as an approved improvement or a defect — the migration is launch-ready when the unexplained-delta count on Tier 1 reaches zero.