website migration seo checklist
Website migration SEO checklist
Five phases, each with a gate that has to be true before the next one starts. Owners and outputs are named so nothing sits in the gap between two teams.
- Definition
- A phase-gated migration checklist — A phase-gated migration checklist orders the SEO work by dependency rather than by convenience, and defines an exit condition for each phase. Work does not move forward until the gate is met, so problems surface while they are still cheap to fix instead of on launch day.
Most migration checklists are flat lists. That is the problem with them: a flat list lets you tick off launch-day tasks while the redirect map is still incomplete, and it gives no signal that you are about to ship something expensive. This one is ordered by dependency. Each phase has a gate — a single condition that has to be demonstrably true before the next phase begins.
Use it as a working document. Print it, take it into the planning meeting, and put a name against every row. The scope of the underlying work is on the website migration SEO services page, and unfamiliar terms are defined in the glossary.
This page is formatted for printing — everything expands, and navigation is stripped from the printed output.
Discovery and benchmarking
6–10 weeks before launchEstablish what "no loss" means in numbers, before anything changes. Everything measured after launch is compared against what is captured here, so a benchmark taken late is a benchmark that proves nothing.
-
Get read-only access to Search Console and analytics
SharedBoth properties, before any other work starts. Access requests routinely take longer than the person requesting them expects, and every later step depends on this one.
Output Verified access to both properties
-
Export 12 months of URL-level performance
SEOClicks and impressions per page, not per query. Freeze the file with the export date in its name. This is the only dataset that makes a post-launch comparison possible.
Output Dated benchmark export
-
Crawl the current site in full
SEOEvery indexable URL with status code, canonical, meta robots, title, headings, word count, internal link count and structured data recorded per URL.
Output Production crawl export
-
Pull the referring domain data
SEOWhich pages carry external links, from any backlink tool. This list overlaps far less with the traffic list than people expect, and the difference is where equity hides.
Output Pages ranked by referring domains
-
Request server log access
EngineeringAsk early even if it turns out to be unavailable. Logs are the only source that shows what crawlers actually do rather than what you infer they do.
Output Log access, or a documented decision that it is unavailable
-
Record the indexable URL count
SEOA single number, dated. After launch, comparing this against the new count is the fastest way to detect index bloat arriving with the new platform.
Output Baseline indexable URL count
-
Tier URLs by priority
SharedCombine organic clicks, referring domains and revenue where available. The top tier gets one-to-one mapping; lower tiers can be handled by rule.
Output Tiered URL inventory
Gate — do not start the next phase until this is true A dated, frozen benchmark exists: URL-level clicks and impressions for the last 12 months, the complete indexable URL inventory, and a full crawl of the current site.
Crawl parity and redirect mapping
4–8 weeks before launchDecide where every URL goes. This is the phase that determines whether the migration works, and it is the one most often compressed when the build runs late.
-
Review the proposed URL structure against the current one
SharedBefore mapping begins. If the new structure creates avoidable mapping ambiguity, this is the last point at which saying so is cheap.
Output Structure findings with named owners
-
Write pattern rules for the bulk of URLs
SEOMost URLs map cleanly by rule. Writing the rules first turns the remainder into a visible, countable exception list rather than a vague concern.
Output Rule set with match counts
-
Test the rules against the real inventory
SEONot against the pattern — against the actual URL export. Every rule has exceptions, and they are always in the oldest content nobody remembers.
Output Rule coverage report with exceptions
-
Resolve every exception by hand
ContentPages whose category no longer exists, merged product variants, retired campaigns. Each needs a destination, an owner and a deadline.
Output Exception map with owners
-
Decide the deliberate removal list
ContentPages with no relevant destination return 410 Gone rather than redirecting somewhere irrelevant. Make this a recorded decision, never a default.
Output Documented 410 list
-
Specify where redirect rules will live
EngineeringEdge, application, or both. Edge rules respond faster and survive deploys; application rules suit logic needing database lookups. Decide and document the split.
Output Redirect architecture specification
-
Plan the internal link rewrite
EngineeringInternal links must point at final destinations in the source, not rely on redirects. Include absolute URLs stored in content database fields.
Output Internal link rewrite scope
Gate — do not start the next phase until this is true Every URL in the priority tiers has a named destination and a status code. The count of unmapped URLs is zero, not "nearly zero".
Staging QA
1–3 weeks before launchProve the new site presents what the old one presented. The parity diff finds the problems nobody thought to test for, which is reliably where the damage is.
-
Protect staging with HTTP authentication
EngineeringNot robots.txt. A Disallow rule does not prevent indexing of a URL that has been linked from anywhere, and staging URLs get pasted into tickets and chat.
Output Staging behind authentication
-
Crawl staging using auth credentials
SEOConfigure the crawler with the credentials rather than removing the protection. Taking auth off so a tool can crawl is how staging sites get indexed.
Output Staging crawl export
-
Diff staging against production, field by field
SEOTitles, descriptions, H1s, canonicals, meta robots, word counts, internal link counts, structured data types, image alt coverage, hreflang.
Output Parity diff with variance counts per field
-
Compare indexable URL counts
SEOA large unexplained increase means the new platform generates URLs the old one did not. That is index bloat arriving with the build, and it is cheaper to prevent than to undo.
Output URL count comparison
-
Verify rendering for every template
SEOFetch raw HTML and confirm body content, internal links and canonical tags exist without JavaScript execution. Do this per template, not per page.
Output Rendering report by template
-
Test priority redirects against staging
SEOEvery URL in the priority tiers, individually, for final status code and hop count. Chains and loops fail the gate outright.
Output Redirect test results
-
Confirm the noindex removal plan
EngineeringStaging carries noindex. Establish exactly how it is removed at cutover and who verifies its absence in production, in writing, before launch day.
Output Documented noindex removal step with an owner
Gate — do not start the next phase until this is true Every unexplained difference in the parity diff is either fixed or accepted in writing, and every priority URL resolves in one hop to a 200 on staging.
Launch day
Cutover window and the following 48 hoursA monitoring shift, not a strategy session. Everything on this list should already have been decided; today is about verifying that what was decided actually shipped.
-
Lower DNS TTL 48 hours ahead
EngineeringDrop to 300 seconds so the cutover propagates in minutes and a rollback is fast. This has to happen two days early to be useful, which makes it easy to miss.
Output TTL confirmed at the registrar
-
Verify redirects on the live host immediately
SEOAs soon as DNS resolves. Staging tests do not prove production behavior — edge configuration frequently differs between the two.
Output Live redirect verification
-
Check robots.txt in production
SEOThe staging version shipping to production is one of the two most expensive launch-day failures. It takes thirty seconds to check.
Output Production robots.txt confirmed
-
Check meta robots and X-Robots-Tag in production
SEOThe other expensive failure. A site-wide noindex can begin removing pages within days. Check headers as well as tags — X-Robots-Tag is invisible in page source.
Output Production directive audit
-
Submit updated sitemaps
SEONew sitemap URLs submitted in Search Console, old ones removed. Confirm sitemap URLs match canonicals exactly, trailing slash included.
Output Sitemaps submitted and accepted
-
File Change of Address if the domain changed
SEOOnly after the sitewide redirect is live and verified, and only for a genuine domain move. It does not apply to protocol or structure changes.
Output Change of Address filed
-
Watch for crawl errors and server load
EngineeringCrawl activity spikes after a migration as search engines rediscover the site. Confirm the infrastructure handles it without timing out.
Output First 48 hours monitored
-
Know the rollback trigger and who can pull it
SharedAgreed in advance, in writing. Deciding what constitutes a rollback condition during an incident produces the wrong decision.
Output Rollback criteria with a named decision-maker
Gate — do not start the next phase until this is true Sampled priority redirects return one hop to a 200 on the live host, and production carries no accidental noindex, Disallow or stale canonical.
Recovery tracking
30, 60 and 90 days after launchMeasure against the frozen benchmark on a matched cohort of URLs. Week-over-week comparison in the first fortnight mixes recrawled pages with pages Google has not looked at yet, and tells you almost nothing.
-
Compare a matched URL cohort, not the site total
SEOFollow each pre-migration URL to its destination and compare that page's performance. If A 301s to B, A's performance is now B's performance.
Output Cohort comparison against benchmark
-
Re-test the redirect map against production
SEOReleases after launch introduce chains. A rule added in week three often runs before the migration rules and quietly adds a hop to everything.
Output Re-test results with any new exceptions
-
Track the Googlebot hit distribution
SEOIn server logs, watch requests shift from old URLs to new ones. This is the only direct evidence of how discovery is actually progressing.
Output Crawler request distribution over time
-
Watch indexation counts in both directions
SEOOld URLs should fall out; new URLs should be discovered. A rise in total indexable URLs against the baseline means bloat rather than growth.
Output Indexation trend against baseline
-
Identify losing cohorts by template and section
SEOLosses concentrate in identifiable groups — a template that lost its canonical, a section that lost internal links. Grouping makes the cause visible.
Output Loss analysis grouped by template and section
-
Rank remaining issues by traffic at risk
SEONot by severity label. A critical issue affecting forty unvisited URLs should not outrank a moderate one affecting a revenue-driving section.
Output Prioritized remediation list
-
Keep old domain redirects live
EngineeringFor at least twelve months where a domain changed, and ideally indefinitely. Letting the registration lapse discards accumulated signal permanently.
Output Registration on auto-renew with a named owner
Gate — do not start the next phase until this is true Googlebot requests predominantly hit new URLs, and cohort performance has returned to the pre-migration range or the remaining gap is explained and owned.
Want a second pair of eyes on your version of this?
Send the checklist back with your notes and the launch date. Reviewing a plan someone else has already thought about is faster and cheaper than starting from a blank page.
- Reply
- Typically within one business day.
- Hours
- Monday to Friday, 9am–6pm US Eastern.
- First call
- Scoping, not a pitch. No deck.