Site migrations
Technical SEO migrations need executable release gates
A site move succeeds when old addresses reach their intended new homes and the published signals agree.

In sulayman-bowles.dev’s October 19, 2026 source configuration, the routing file mapped /markets/ai-search-crawler-policy to /research/ai-crawlers/ai-search-crawler-policy with a permanent 308. It also mapped an older /writing/ address directly to that same article. I treat those old addresses as part of the publication: someone following an old link should reach the essay they came for, even after I have reorganized the library.
The map has to decide what an old address promises. A page may have moved, merged, or lost its equivalent. Returning a successful but irrelevant destination can hide that decision. The release gate should test the approved relationship, including deliberate removals.
I would validate a permanent publishing decision through a temporary experiment first. A canary tests new behavior; a permanent redirect announces a lasting move. Their different semantics matter when cached responses outlive a rollback.
Method & limits
The opening describes sulayman-bowles.dev’s October 19, 2026 source configuration, without a new production request. Google’s site-move/redirect guidance and RFC 9110 were read October 25, 2026, covering removals, staging, and cached permanent-redirect rollback. Other documentation has a July 19, 2026 cutoff. The release gates are design methods. No migration, public-header inspection, rollback, ranking recovery, or index consolidation was newly executed or measured.
The mapping contains a product decision
A move is easy to describe when the old essay and the new essay are the same work. A merger is harder: somebody has to decide whether the new destination serves the old reader’s purpose. An obsolete page with no equivalent may deserve 404 or 410. Sending every lost address to the homepage evades that decision and leaves the visitor to finish the migration.
The inventory needs more than a crawl. Sitemaps and CMS routes describe publication; logs and analytics reveal addresses still used. Backlinks or campaign records can expose paths the current navigation has forgotten. Preserve where each URL came from and its latest meaningful activity. An absent row otherwise looks exactly like a deliberate removal.
I would give every meaningful old address one approved disposition: keep, move, merge, remove, temporary retention or exclusion from the public scope. Downloads need their own rows when their response contract differs from the HTML page. A broad redirect can make the essay work while quietly turning its old PDF link into a web page.
Google warns against irrelevant redirects and permits removal when no replacement exists. A truthful missing-page response can serve the old address better than a healthy homepage. The manifest’s rationale is a content judgment before it becomes a routing instruction.
| 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 |
Historical aliases should reach the current page directly
The two legacy crawler-policy paths in sulayman-bowles.dev’s October 19, 2026 source configuration both pointed directly to the research path. That is the structure I want as the library grows: known aliases converge on the maintained representative, so each reorganization does not add another redirect hop.
Google documents 301 and 308 as permanent signals. Method semantics and platform support determine which fits a route, especially when requests other than GET matter. Before release, follow the map to the exact approved destination and reject loops, competing owners and chains beyond the policy. A successful final response at an unrelated page is still a failed mapping. Redirect guidance.
The representative should return the intended content with eligible directives and an agreed canonical. Old aliases should disappear from normal navigation and the canonical sitemap. When each output comes from the same route record, a rename can update the system once instead of creating several opportunities to forget an old path.
- Old route
- Historical alias
Eligible response · equivalent user purpose
404 / 410A build leaves the edge untested
The build can catch a preview hostname in a canonical, two pages claiming one alias, or a sitemap URL that points to a noindex route. Parse the built documents as well as the route configuration, then compare their main content and metadata with a browser capture completed under a page-specific condition.
Production middleware, redirect rules, and caches can preserve a staging X-Robots-Tag: noindex after the source is indexable, while a robots block can prevent the crawler reading the corrected directive, so the release check has to fetch the public headers, document, and policy from outside the origin environment.
Priority routes merit complete coverage. For the long tail, a sample should span templates, locales, dispositions and query behavior, with the full manifest as the denominator. “All checks passed” is misleading when it conceals that a whole route class was never tested.
A passing gate describes the tested release. I would publish the checked population beside the result and distinguish response failures from later canonical selection. Otherwise a slow index can trigger a damaging rollback while a broken response gets excused as migration volatility.
- Every priority old URL has one reviewed outcome and a reachable destination when required.
- Known aliases resolve to that destination within the hop budget.
- Canonical, sitemap, internal-link and indexability signals agree.
- Required page content survives in the built and completed rendered output.
- Untested rows and temporary exceptions have visible owners and review dates.
Rollback has to restore a coherent route set
Freeze the approved map with the application, edge, and sitemap versions, keeping old responses and the traffic baseline. Google recommends changing one major component at a time. Moving the domain, CMS, and layout together removes the comparisons that help identify a failure.
RFC 9110 permits heuristic caching of 308 responses, while Google reserves permanent moves for changes expected to last. Reverting origin configuration can’t recall every cached redirect. Keep the new destination viable during recovery and test both the old entry point and direct visits.
A temporary canary should keep temporary semantics until the permanent mapping is approved. Define immediate rollback triggers around loops, missing content, bad hosts, broken transactions, and server errors. Read early impression changes on their own timescale before treating them as a routing incident.
The shell requests below preserve the redirect response and the final document. The text searches are a quick inspection aid; a release gate should parse the relevant HTML and headers rather than assume attribute order. The evidence belongs beside the manifest row that set the expectation.
Save headers and bodies for a reviewed manifest sample. The two rg commands are smoke checks for one-line, double-quoted tags, including a final rel or name attribute. Use an HTML parser for multiline tags, other quoting and complete metadata validation.
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.htmlRouting failures arrive sooner than index convergence
Observe the route first. A loop or missing body can be reproduced on a request; search engines’ consolidation depends on recrawling and signals beyond this release. Read traffic with its dates, seasonality and coverage limits. A clean response matrix justifies a statement about checked responses, not a claim that rankings have recovered.
The dated Google migration guidance recommends keeping redirects for at least one year and considering longer retention for users. That is a review floor. Old links and files may remain valuable long after the index appears settled, so retirement should use observed old-route demand and an owner’s decision. Site-move guidance.
I would call the release complete when each old address reaches the approved work or returns the approved removal response, and destinations remain coherent for visitors already sent there. That continuity is within the publisher’s control. Index convergence is the next observation.
Search performance needs a compatible reporting grain too. Why Search Console query and page totals differ explains withheld queries and aggregation before a migration is judged from a headline delta.
Sources
- Google Search: site moves and URL migrationsVerified Jul 19, 2026
- Google Search: redirects and canonical signalsVerified Jul 19, 2026
- Google Search: canonical URL consolidationVerified Jul 19, 2026
- Google Search: build and submit a sitemapVerified Jul 19, 2026
- Google Crawling Infrastructure: HTTP status codesVerified Jul 19, 2026
- RFC 9110: HTTP SemanticsVerified Jul 19, 2026