Executable gates for SEO migrations.
Make every old URL’s outcome testable before moving the site.
Sulayman Bowles · · Updated

A new site can look finished while old links lead nowhere. Users, crawlers, analytics, caches, and indexes still address the previous system. Visual review cannot prove that redirects preserve intent, retired routes left navigation, canonicals agree with sitemaps, or rendered content survived.
Inventory meaningful old URLs and give each an approved outcome. Generate routing and metadata from that map, validate the build, capture the real production responses, and monitor traffic alongside coverage gaps. Critical route classes must converge before release; accepted exceptions need owners and expiry.
In this article
What should I verify before changing article URLs?
Inventory the meaningful old URLs and approve a specific outcome for each: retained content, an equivalent destination, or deliberate removal. Test redirects, final status, canonical URLs, indexability, internal links, and sitemap membership together. A successful build cannot establish that production serves those outcomes. Keep a launch baseline and repeat the checks against live responses so a routing defect can be distinguished from a later indexing transition or a change in search demand.
Sources: Google site-move guidance · Google redirect guidance · Google canonical guidance
Read this alongside Build search systems you can verify.
Scope and assumptions
Passing migration gates proves the tested publisher-controlled routing and page signals. It cannot guarantee unchanged rankings, traffic, crawling cadence, index consolidation, or behavior in untested caches, regions, clients, and external systems.
- Source of truth
- URL MANIFEST
- Redirect policy
- ONE HOP
- Launch gate
- FAIL CLOSED
- Primary artifact
- EVIDENCE LEDGER
Build an attributed URL inventory
Merge sitemaps, crawls, logs, analytics landings, Search Console exports, backlinks, CMS or database routes, feeds, campaigns, and known files. Each misses something. Preserve the source and latest meaningful activity for every URL so omissions remain visible.
Assign keep, equivalent move, reviewed merge, terminal not-found or gone, temporary retention with sunset, or non-public/invalid exclusion. Redirecting everything to home is not a mapping; it leaves product decisions unresolved and sends users to poor destinations.
Record content type, locale, template, indexability, canonical, redirect status, priority, owner, validation contract, and exception rationale. Prevent multiple outcomes for one old URL and accidental ownership of one route by several new pages. Review changes because this manifest drives public behavior.
For an illustrative /guides/audit-to-/research/audit move, the mapping is not complete when the new page builds. The old path must reach that exact new article, old downloads must still reach their intended files, and links within the new page must use the new identities. Keep these as separate rows when their response contracts differ; a wildcard redirect can silently send a PDF request to an HTML page.
| Field | Purpose | Gate |
|---|---|---|
| old_url | Known pre-migration identity | Unique and source-attributed |
| disposition | Keep, move, merge, remove, temporary, exclude | Allowed enum with rationale |
| new_url | Approved destination when applicable | Canonical route exists |
| response_contract | Expected status and hop behavior | Matches production |
| page_contract | Required title, content, directives, schema | Built and rendered checks pass |
| owner_and_expiry | Accountability for exception | No unowned permanent exception |
Compile and test the route contracts
Generate routes, redirects, canonicals, sitemaps, links, and where possible analytics mappings from the manifest. Reject route collisions, redirect cycles, relative canonicals, staging hosts, malformed URLs, noindex sitemap entries, and links still targeting retired routes.
Build and parse priority templates. Check main heading, canonical, directives, meaningful visible content, status behavior, schema agreement, and navigation. Compare the delivered HTML with a pinned browser render using page-specific completion conditions. Screenshots supplement these checks; they do not establish routing.
Treat removal of staging restrictions as an explicit transition. A source build may be indexable while the public CDN still injects X-Robots-Tag: noindex, or a previously blocked crawler may be unable to fetch the new directive. Check both the delivered headers and document and the deployed robots file. Passing one layer does not clear the others.
Check critical and high-traffic URLs completely. Stratify long-tail coverage by template, locale, disposition, depth, query behavior, and source. Retain the full manifest denominator and explicitly report untested rows.
- Fail on unmapped priority URLs and duplicate old-route ownership.
- Fail on redirect loops, chains beyond policy, and destinations that do not exist.
- Fail on staging, preview, localhost, or alternate-host canonicals.
- Fail on canonical sitemap rows that redirect, noindex, or canonicalize elsewhere.
- Fail when required visible content or structured data disappears from a template.
- Report untested manifest rows as coverage gaps.
Resolve every move to its approved destination
For lasting moves, permanent server redirects are the clearest option; Google documents 301 and 308 as permanent signals. Select by method semantics and platform support, testing actual methods when non-GET requests matter. Redirect codes do not all transform requests identically.
Resolve the map before deployment, aiming for one hop from each moved URL to its exact approved destination. Fold historical aliases into the new mapping instead of chaining through old routes. Reject cycles, competing destinations, and targets that redirect again.
When no equivalent exists, 404 or 410 can express removal more honestly than a blanket category or homepage redirect. Product owners decide equivalence; string similarity may suggest candidates but must not silently merge user intent.
Eligible response · equivalent user purpose
404 / 410Removal, rather than an irrelevant redirect.| Check | Expected result | Failure risk |
|---|---|---|
| old to new | One permanent hop to approved equivalent | Slow convergence and fragile chains |
| historical aliases | Point directly to current canonical | Layered migrations accumulate |
| target status | Eligible final response | Redirect ends at error, noindex, or another redirect |
| target content | Matches intended user purpose | Soft, misleading, or irrelevant destination |
| cycle analysis | No strongly connected redirect component | Infinite or failed navigation |
| method behavior | Documented for non-GET routes | Unexpected request transformation |
Record the release and the pre-launch baseline
Freeze the manifest and record application, edge, redirect, sitemap, and analytics versions. Capture old responses, priority templates, internal graph, sitemap counts, and relevant traffic before launch. This baseline separates expected movement from breakage; it does not promise stable metrics.
Coordinate routing and pages so old URLs never lose their intended outcome. Purge or version caches deliberately. Fetch public-host smoke routes from outside the origin network to exercise CDN rules, platform redirects, TLS, host normalization, and middleware.
Where supported, limit canary routes or traffic in a way meaningful for public URLs and crawlers. Define rollback triggers for 5xx spikes, loops, content loss, canonical-host corruption, analytics loss, and critical transaction failures. Restore a coherent route set, not just the frontend.
Run against a reviewed manifest sample and save headers and bodies as launch evidence.
curl -sS -D old.headers -o /dev/null https://old.example.com/priority-page
curl -sS -L --max-redirs 5 -D chain.headers \
-o final.html https://old.example.com/priority-page
rg -o '<link[^>]+rel="canonical"[^>]+>' final.html
rg -o '<meta[^>]+name="robots"[^>]+>' final.htmlSeparate implementation defects from index transition
Monitor old and new route responses, redirects, 404 and 410 volume, server errors, latency, canonical conflicts, sitemap fetches, retired-link references, render failures, analytics continuity, and conversion paths. These implementation signals have short feedback loops.
Crawler requests, indexed examples, submitted versus discovered sitemap states, selected canonicals, impressions, clicks, and landing-page shifts follow external timelines. Google notes moves take time and crawl frequency varies. Report dates and denominators; traffic movement alone does not establish a routing defect.
Link incidents to manifest rows, production captures, owners, decisions, repairs, and validating reruns. Google’s current migration guidance generally recommends retaining redirects for at least 1 year and considering longer retention for users. That is a review floor, not an automatic deletion date: old links and files may still be in use. Save the policy, observed old-route demand and owner decision before retiring the map. Site-move guidance.
| Check | Examples | Decision horizon | What it can show |
|---|---|---|---|
| routing health | status, hop, loop, target | minutes to hours | Public edge behavior |
| page integrity | canonical, directives, content, schema | minutes to days | Tested templates and routes |
| discovery | sitemap fetches and crawler logs | days to weeks | Observed requests only |
| external index | reported indexed and selected URLs | days to longer | Provider-reported samples and states |
| search demand | impressions, clicks, landing pages | weeks with seasonality context | Observed performance, not sole causal proof |
| business path | analytics and conversion events | immediate and ongoing | Measured implementation path |
Gate routing before declaring the move complete
Require approved outcomes for important old URLs and passing page contracts for new routes through the public edge. Then monitor index consolidation, crawling, and performance separately; passing publisher-controlled checks cannot guarantee their timing or results.
Sources
- Google Search: site moves and URL migrations
Verified Jul 19, 2026
- Google Search: redirects and canonical signals
Verified Jul 19, 2026
- Google Search: canonical URL consolidation
Verified Jul 19, 2026
- Google Search: build and submit a sitemap
Verified Jul 19, 2026
- Google Crawling Infrastructure: HTTP status codes
Verified Jul 19, 2026
- RFC 9110: HTTP Semantics
Verified Jul 19, 2026