Migration hidden-killers catalogue — the seven failure modes that appear in every post-mortem
The reproducible failure modes — appear in every credible migration post-mortem.
The "thousands of attachment URLs" mistake. A photographer's WP site with 800 portfolio images can have 5,000+ indexable attachment pages. Per WordPress.org support forum: "Thousand of attachment urls are automatically indexed, How do I remove them?" Forgetting them is the #1 cause of post-migration crawl errors.
- Mitigation: audit
/wp-json/wp/v2/mediaand the XML sitemap before scoping.
- Mitigation: audit
ACF custom-field data silently dropped. ACF fields not exposed via REST (the default for fields registered before the ACF-to-REST plugin was installed) won't appear in the JSON export.
- Mitigation: WP-CLI dump of
postmetaand an explicit ACF audit. Catastrophic if discovered mid-migration.
- Mitigation: WP-CLI dump of
Page-builder pages that "look fine" in staging but are empty templates. Elementor/Divi render via shortcode at request time; a naive REST export returns mostly empty
post_content.- Mitigation: always render the live page and use that HTML, not the API response.
Staging accidentally indexed before launch. A
robots.txtdisallow does NOT stop indexing if pages are linked from elsewhere. John Carey's post-mortem: "I've seen migrations where the staging site was accidentally indexed by Google before launch, creating duplicate content issues and cannibalising the live site's rankings."- Mitigation: HTTP-header-level noindex, IP allowlist, basic auth, and a Vercel/Netlify preview-deployment password. All four, belt-and-suspenders.
Schema dropped without replacement. Yoast/Rank Math inject Article, FAQ, and Organization schema invisibly. Post-migration the new site has zero schema and gradually loses rich results in SERPs.
- Mitigation: schema audit as a separate audit deliverable. Bake equivalents into the new stack's templates.
Client editing workflow rejection post-launch. Client logs in to Sanity Studio once, gets confused, asks why they can't "just drag the headline bigger like in Elementor," relationship sours.
- Mitigation: 2-hour scheduled onboarding session, recorded; client-specific Loom walkthrough; 30-day "ask anything" support window built into the price. See Migration objection-handling map — sourced answers to every common client fear about migrating off WordPress for talking points.
Cutting redirects too early. See RULE: Keep migration 301 redirects in place for at least 12 months; never less than 180 days (Google's explicit floor). Cutting redirects at 30/60/90 days destroys recovered traffic. Industry standard is 12 months minimum.
Related
Referenced by (3)
- reference Research brief: The Candid Creative WordPress Migration Playbook (piece 19) depends-on
- reference Same-domain CMS migration with proper 1:1 redirects: 2-4 weeks of crawl turbulence; 4-8 weeks to full stability. The 523-day stat is domain-to-domain. relates-to
- reference Redirect map deliverable spec — CSV of old→new URL with notes; sources are XML sitemap + Screaming Frog + GSC + Ahrefs/Semrush relates-to