Direct answer
A migration map assigns every known old URL a truthful outcome. Use a direct 301 or 308 only when a permanent, intent-equivalent destination exists; retain unchanged URLs when possible, use temporary redirects only for temporary moves, and return 404 or 410 when removed content has no replacement. Update internal links and sitemaps to the final destinations and monitor after launch.
Freeze complete old and new inventories
Export old URLs from the XML sitemap, crawl, analytics landing pages, Search Console, server logs, CMS, backlink records and historic redirect files. Export the planned new routes from the new CMS or build output. Preserve the source and last-seen date for each record.
Normalize comparison keys consistently, but keep the observed URLs for testing. Classify every old intent as unchanged, moved, merged, removed or intentionally retained. A redirect is justified by a real replacement, not by the desire to avoid a 404.
Map one intent to one truthful outcome
- Assign the closest new page that satisfies the same user intent and preserves the material purpose of the old page.
- Use direct 301 or 308 redirects for permanent moves. Reserve temporary redirects for genuinely temporary states.
- Return 404 or 410 when content is removed and no relevant replacement exists.
- Prevent chains, loops, case or slash oscillation, parameter loss and blanket redirects to the homepage.
- Update internal links, canonicals, hreflang, structured data and XML sitemaps to point directly to final URLs.
Redirect and status decision table
| Old URL state | Response | Reason |
|---|---|---|
| Permanent one-to-one or many-to-one equivalent | 301 or 308 to the final URL | The destination continues the old intent |
| Temporary campaign or maintenance move | 302 or 307 | The original URL remains the intended long-term owner |
| Removed with no replacement | 404 or 410 | The server states the content is unavailable truthfully |
| Unchanged canonical URL | 200 at the same URL | Avoid an unnecessary redirect |
| Unknown malformed or spam URL | 404 | Do not redirect noise to the homepage or another unrelated page |
Example migration-map record
Recommended columns are old_url, normalized_old_key, evidence_sources, old_status, old_canonical, intent_class, action, target_url, target_status, target_canonical, redirect_hops, owner, validation_state and notes. For /old/widget-sizing/ moved to /guides/widget-sizing/, the map should state permanent_move, the exact final target, one hop, a 200 target and a passing intent-equivalence review.
Validate before launch and monitor after it
- Test every priority mapping and a representative sample of each template, status and rule family in staging.
- Verify one-hop responses, final 200 pages, canonicals, hreflang reciprocity, metadata, structured data and internal links.
- Compare old and new sitemap inventories and keep only canonical 200 destinations in the new sitemap.
- After launch, monitor server errors, redirect chains, crawl activity, Search Console indexing, page/query performance and business conversions.
- Keep the old host, redirect rules and monitoring in place long enough for users and crawlers; do not declare success from launch-day status alone.
Common mistakes
- Redirecting everything home.
- Building chains or loops.
- Mapping by URL words without checking intent.
- Changing platform, content and measurement without baselines.
Limitations
- Not every signal transfers predictably.
- Large inventories require risk-based sampling plus automated validation.
- Search and business effects can overlap with seasonality and other release changes.
Primary sources
- Site moves and migrations — Google Search Central; current 2026-08-19; 2026-08-19.
- Redirects and Google Search — Google Search Central; current 2026-08-19; 2026-08-19.
- Troubleshoot crawling errors — Google Search Central; current 2026-08-19; 2026-08-19.