{"id":688,"slug":"migration-hidden-killers-catalogue","title":"Migration hidden-killers catalogue — the seven failure modes that appear in every post-mortem","kind":"reference","scope":"business","status":"current","audiences":["kevin","claude-code","candid-team"],"topics":["migration-mechanics","redirect-mapping","content-extraction"],"reference_body":"**The reproducible failure modes — appear in every credible migration post-mortem.**\n\n1. **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.\n   - **Mitigation:** audit `/wp-json/wp/v2/media` and the XML sitemap *before* scoping.\n\n2. **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.\n   - **Mitigation:** WP-CLI dump of `postmeta` and an explicit ACF audit. Catastrophic if discovered mid-migration.\n\n3. **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`.\n   - **Mitigation:** always render the live page and use that HTML, not the API response.\n\n4. **Staging accidentally indexed before launch.** A `robots.txt` disallow 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.\"*\n   - **Mitigation:** HTTP-header-level noindex, IP allowlist, basic auth, and a Vercel/Netlify preview-deployment password. All four, belt-and-suspenders.\n\n5. **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.\n   - **Mitigation:** schema audit as a separate audit deliverable. Bake equivalents into the new stack's templates.\n\n6. **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.\n   - **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]] for talking points.\n\n7. **Cutting redirects too early.** See [[rule-keep-migration-redirects-12-months]]. Cutting redirects at 30/60/90 days destroys recovered traffic. Industry standard is 12 months minimum.","rationale_body":null,"metadata":null,"links":{"outgoing":[{"slug":"redirect-map-deliverable-spec","title":"Redirect map deliverable spec — CSV of old→new URL with notes; sources are XML sitemap + Screaming Frog + GSC + Ahrefs/Semrush","kind":"reference","scope":"business","link_type":"relates-to"},{"slug":"rule-keep-migration-redirects-12-months","title":"RULE: Keep migration 301 redirects in place for at least 12 months; never less than 180 days (Google's explicit floor)","kind":"rule","scope":"business","link_type":"depends-on"},{"slug":"migration-objection-handling-map","title":"Migration objection-handling map — sourced answers to every common client fear about migrating off WordPress","kind":"reference","scope":"business","link_type":"relates-to"}],"incoming":[{"slug":"research-brief-wp-migration-playbook","title":"Research brief: The Candid Creative WordPress Migration Playbook (piece 19)","kind":"reference","scope":"business","link_type":"depends-on"},{"slug":"same-domain-migration-recovery-timeline","title":"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.","kind":"reference","scope":"business","link_type":"relates-to"},{"slug":"redirect-map-deliverable-spec","title":"Redirect map deliverable spec — CSV of old→new URL with notes; sources are XML sitemap + Screaming Frog + GSC + Ahrefs/Semrush","kind":"reference","scope":"business","link_type":"relates-to"}]},"created_at":"2026-05-22T21:24:18.426Z","updated_at":"2026-05-22T21:24:18.426Z"}