A website migration is any change that alters how search engines find, crawl or understand a site that already ranks. Some are mundane, such as moving to a new host. Others change almost everything at once: the domain, the platform, the URL structure and the templates. Search engines have spent years learning the old site, and a migration asks them to relearn it. The work is about making that relearning quick and unambiguous.
This guide covers each type of move and its risk, the planning that should start months before launch, redirect mapping, staging, the launch itself and what to watch afterwards. If you are moving an online shop between platforms, read it alongside the ecommerce SEO guide, because catalogues add their own problems. (If Shopify is on either side of the move, I have written up what changes when you migrate to or from Shopify.) If the move touches country or language sites, the international SEO guide covers the structure decisions.
A migration in six stages
Benchmark
Record how the old site performs before anything changes: crawl it, export rankings and traffic by template, and list the deep URLs that carry backlinks. Without this you cannot tell normal turbulence from damage.
Types of website migration and how risky each one is
Risk depends on how many things a search engine has to re-establish. If the URLs stay the same, Google mostly has to notice that the same pages are now served from somewhere else. If the URLs change, every ranking page has to be recrawled, its redirect followed, and its signals consolidated onto a new address. If the content and templates change too, Google is also re-evaluating the pages themselves.
| Migration type | What changes | Relative risk | Main thing that goes wrong |
|---|---|---|---|
| Hosting or CDN change | Servers and DNS. URLs stay the same. | Low | New infrastructure blocks or slows Googlebot, or the new copy has a different robots.txt.1 |
| HTTP to HTTPS | Protocol on every URL | Low to medium | Incomplete redirects, mixed signals from canonicals and internal links still pointing at http |
| URL structure change | Paths on the same domain | Medium | Missing or chained redirects, internal links left on old paths |
| Redesign on the same platform | Templates, navigation, content | Medium | Content and internal links removed from templates without anyone noticing |
| Domain change | Hostname on every URL | Medium to high | Redirects removed too early, old domain lapses, backlinks never updated |
| Platform or CMS change | Usually URLs, templates and rendering at once | High | Platform imposes its own URL patterns, JavaScript rendering, lost metadata |
| Merging sites | Two sets of URLs collapse into one | High | Overlapping pages redirected badly, one site’s content quietly dropped |
| International restructuring | ccTLDs, subdomains or folders, plus hreflang | High | hreflang annotations broken by the new URLs, markets redirected to the wrong locale |
How risky each type of migration is for search
- Hosting or CDN changeHosting or CDN change: 12 percent of the way from Lower risk to Higher risk.
- HTTP to HTTPSHTTP to HTTPS: 30 percent of the way from Lower risk to Higher risk.
- URL structure changeURL structure change: 50 percent of the way from Lower risk to Higher risk.
- Redesign on the same platformRedesign on the same platform: 50 percent of the way from Lower risk to Higher risk.
- Domain changeDomain change: 68 percent of the way from Lower risk to Higher risk.
- Platform or CMS changePlatform or CMS change: 85 percent of the way from Lower risk to Higher risk.
- Merging sitesMerging sites: 85 percent of the way from Lower risk to Higher risk.
- International restructuringInternational restructuring: 85 percent of the way from Lower risk to Higher risk.
Hover a row for the main thing that goes wrong.
Most real projects combine several of these. A replatform nearly always changes URLs and templates, and businesses often add a redesign and a content rewrite because "we are rebuilding anyway". The safer plan is the opposite: make the changes one after the other, not all at the same time.2 I agree with that where the business allows it. If a combined move goes badly, you cannot tell whether the redirects, the templates or the content caused it, and that slows recovery.
What the search engines document about site moves
Google publishes two separate guides, and Bing has its own tool. Start by working out which Google guide applies to you.
- Moves without URL changes, such as switching hosting provider or moving to a CDN. The steps are to lower the DNS TTL to a few hours at least a week in advance, check the new infrastructure does not block Googlebot, and only shut down the old hosting once traffic to it reaches zero.1
- Moves with URL changes, which covers protocol, domain and path changes. This is the guide most migrations need. It covers URL mapping, permanent server-side redirects, updating internal links and annotations, sitemaps, Search Console verification of both sites, and monitoring.2
- For Bing, Bing Webmaster Tools has a Site Move tool for announcing the move. A migration guide on Bing’s webmaster blog, written by Fili Wiese of SearchBrothers, also covers 301 redirects, keeping them live on the old domain for at least one to two years, and expecting some fluctuation in visibility even after a well-planned move.3
Google’s guides are short. Read them in full before planning starts, because most of the timing claims quoted about migrations come from them.
Benchmarking the old site before anything changes
You cannot judge a migration without a record of the site before it moved, and once the old site is gone most of this data is impossible or tedious to recreate. Capture it early, and capture it again in the week before launch.
- A full crawl of the old site, saved and exportable: every URL, status code, title, meta description, canonical, hreflang, word count, internal link count and structured data type. This becomes the checklist the new site is compared against.
- Search Console performance data by page and query, exported at the longest window available. Search Console only keeps a limited history, and you will want the old URLs’ numbers months after launch.
- Organic traffic and conversions by template or section (category pages, product pages, articles, location pages), not only as a site total. A migration that holds the total but loses one template is still a failure, and the total will hide it.
- Rankings for a representative set of queries per template, if you track rankings.
- Backlinks to deep URLs. Links to the homepage usually survive any migration. The value at risk is in links pointing to articles, products and tools several levels down, because those are the URLs most likely to be missed in a redirect map.
- Current indexing state from the Page indexing report, so you know which problems existed before launch and do not blame them on the move.5
- Server logs, if you can get them, showing which URLs Googlebot requests and how often. They show URLs no crawler or analytics tool will surface.
Building a complete URL inventory from several sources
The redirect map is only as good as the list of old URLs it starts from, and no single source has them all. A crawler only finds URLs that are linked internally. Analytics only knows URLs that received visits. Search Console only reports URLs Google has seen. Orphaned pages, retired campaigns and old PDFs with good backlinks fall through the gaps, and they are often the URLs that matter.
| Source | What it adds | What it misses |
|---|---|---|
| Site crawl | Every internally linked URL with its on-page data | Orphaned pages and anything behind forms or JavaScript the crawler did not run |
| XML sitemaps (current and archived) | URLs the CMS considers live | Pages excluded by the sitemap generator, and often images and files |
| Search Console performance and indexing exports | URLs Google has indexed or shown in results | URLs with no impressions, and anything beyond the export row limits |
| Analytics landing pages | URLs that received traffic, including from email and paid campaigns | Pages with no recorded sessions |
| Backlink tools | Deep URLs other sites link to, including long-dead ones | Links the tool has not discovered |
| Server logs | Every URL requested by Googlebot and users | Only as complete as the period you keep logs for |
| CMS or database export | Every published item, including unlinked ones | URLs generated by rewrites, filters and parameters |
Combine them into one list, normalise the URLs (protocol, trailing slash, case, parameters), and remove duplicates. Then tag each URL with its traffic, links and template so you can prioritise. On a large site you will not hand-check every row, but you should hand-check every URL that carries meaningful traffic or links.
Redirect mapping: sending every old URL to its new address
The core of the move is a mapping from each current URL to its new equivalent, served as permanent server-side redirects.2 In the HTTP standard, a permanent redirect means the resource has a new permanent URI and future references ought to use it.6 For Google, redirects are one of the strongest signals for picking a canonical URL, alongside rel="canonical".7 So a clean redirect map does most of the work of carrying rankings across. I have written up how to build the redirect map step by step, from the spreadsheet columns to testing it on staging.
Map one to one wherever an equivalent exists
Each old URL should redirect to the single new URL that best matches its content and intent. A product redirects to the same product. A category redirects to the same category, even if it has been renamed. Where two old pages have been merged, both redirect to the merged page. Pattern rules (for example, every /blog/yyyy/mm/slug to /articles/slug) are fine for templates with a clean pattern, but test them against the full inventory, because exceptions are where pattern rules break.
Never send everything to the homepage
Redirecting large numbers of old URLs to the homepage, or to any single irrelevant page, is the shortcut that costs the most. Google might treat such redirects as soft 404s,2 and in practice that means the old URL’s signals are not passed on. If a page has no equivalent on the new site, let it return a 404 or 410.2 A 410 is the more specific of the two: the HTTP standard defines it as a resource that is no longer available, with the condition likely to be permanent.6 A redirect to the nearest relevant parent (a discontinued product to its category, for example) is a reasonable middle ground when the parent serves the same need.
Avoid redirect chains
Sites that have been migrated before usually carry old redirects. Add a new migration on top and an old URL can hop three or four times before it lands. Googlebot can follow up to 10 hops, but redirecting straight to the final destination is the safer setup.28 Search Console’s Page indexing report shows a chain that is too long, or a loop, as a redirect error.5 Before launch, flatten every existing redirect so it points at the final new URL, and include those legacy URLs in your test list.
Choosing between 301, 308, 302 and 307
| Code | Meaning | How Google treats it | Use in a migration |
|---|---|---|---|
| 301 | Moved permanently6 | A signal that the target should be canonical9 | The default for moved pages |
| 308 | Permanent redirect | Treated as permanent, the same as 301 for canonicalisation9 | Equivalent for SEO. Also guarantees the request method and body are kept, which matters for forms and APIs10 |
| 302 and 303 | Found, see other. A client may switch a POST to a GET6 | Followed, but not used as a signal that the target should be canonical9 | Avoid for moved pages |
| 307 | Temporary redirect, with the request method kept6 | Treated as temporary9 | Avoid for moved pages |
To change how a URL appears in search results, use a permanent server-side redirect wherever possible. JavaScript redirects are the last resort, for when server-side and meta refresh redirects are not available.9 HTTP redirects also run first in browsers, before any page loads, and MDN advises against keeping meta refresh redirects alongside them, because the two can drift apart and cause loops.11 Some platforms and plugins default to temporary redirects, so check the status code the server returns. The setting in the admin screen can be wrong.
How long to keep redirects, and when to use the Change of Address tool
Keep redirects for as long as possible, and generally at least one year.2 Google’s John Mueller gave the reason in a 2021 Ask Googlebot video: its systems need to see a redirect a few times to record the change, and recrawling takes time.12 The migration guide on Bing’s blog goes further, at least one to two years and preferably longer.3 Treat a year as a minimum. Backlinks, bookmarks, old emails and printed material keep sending people to old URLs for years, and a redirect costs almost nothing to keep. I would only remove a migration redirect when the old URL has had no meaningful requests in the logs for a long period, and even then I would question why it is worth the effort.
For a domain change, keep control of the old domain. Letting it lapse removes every redirect at once, and someone else can register it.
The Change of Address tool
Search Console’s Change of Address tool tells Google that a whole site has moved from one domain or subdomain to another.13 It only applies to that kind of move. It is not for HTTP to HTTPS changes, path changes within a domain, www to non-www changes, or hosting changes where the URLs stay the same.13
- You must be an owner of both the old and new properties in Search Console, using the same Google account.13
- The old homepage must 301 redirect to the new one, and the tool works on domain-level properties, not path-level ones.13
- The tool’s effect lasts 180 days, and Search Console asks you to keep the redirects for at least that long.13 Read that alongside the one year guidance above, and keep them longer.
Whether or not the tool applies, verify both the old and new sites in Search Console, including all their variants.2 Add both to Bing Webmaster Tools as well, which is where Bing’s Site Move tool lives.3 Do this before launch so the old properties have data for comparison.
Staging environments and the noindex that follows you into production
A staging site has to be kept out of search, and the way most teams do it causes the most common launch failure. The two usual tools behave differently, and the difference matters at both ends of the project.
- robots.txt controls crawling, not indexing. The standard itself says its rules are not a form of access authorisation,14 and a URL blocked by robots.txt can still be indexed without a description if other pages link to it.15
- A noindex directive keeps a page out of the index, but only if Google can crawl the page and see it. If robots.txt blocks the page, the noindex is never read.16
- Password protection or IP allow-listing keeps everything out, including crawlers. Password protection is one of the documented ways to keep a page out of Google.15 This is the method I would use for staging, because it cannot be accidentally inherited as a search directive.
Staging also matters for testing. If it is password protected, your crawler needs credentials to crawl it, and you should crawl staging in full before launch: every old URL through the redirect rules, every new template for status codes, canonicals and directives.
Redirects carry signals from old URLs to new ones. The new pages still have to deserve the rankings they inherit, and every internal signal on the new site has to agree on which URLs are canonical. Updating internal links, canonicals and hreflang is part of the move itself.2
| Element | What to check | Why it matters |
|---|---|---|
| Content | Body copy, headings, titles and meta descriptions carried across for every ranking page | Redesigns often cut copy from category and landing pages. Rankings that depended on it go with it. |
| Internal links | Navigation, breadcrumbs, related links and in-body links point at new URLs directly, never through redirects | Linking to the canonical URL reinforces it as canonical.7 Links through redirects add a hop and a mixed signal. |
| Canonicals | Every rel="canonical" references the new URL, is absolute, and is self-referencing where the page is the canonical | Canonicals left pointing at old URLs contradict the redirects, and conflicting canonical signals are a documented mistake.7 |
| hreflang | Every alternate URL updated to the new address, fully qualified, with return links in place | Google ignores the annotations if two pages do not both point to each other.17 One market migrating ahead of another breaks the set. |
| Structured data | The same schema types and properties present on each template as before | New templates often drop product, review or breadcrumb markup that the old theme added, and rich results disappear with it. |
| XML sitemaps | Only canonical, indexable new URLs, as absolute URLs | List the URLs you want in search results.18 The sitemap protocol requires each URL to begin with the protocol, such as https.19 |
Submitting a sitemap of the old URLs alongside the new one after launch helps Google discover the redirects sooner, and lets you watch indexing shift from one to the other over time.2 Remove the old URL sitemap once most of those URLs have dropped out of the index. Leaving it in place indefinitely lists URLs you do not want in search, which contradicts the guidance on sitemap contents.
JavaScript rendering on a new platform
Platform changes increasingly mean a move to a JavaScript framework or a headless front end. That changes how Google gets the content. Google crawls, renders and indexes in separate phases, with rendering done by a headless Chromium that executes the page’s JavaScript.20 Content and links that exist only after rendering depend on that step working.
- Server-side rendering or pre-rendering is still worth having, partly because not all bots can run JavaScript.20 Research by Vercel and MERJ, published in December 2024 from crawler traffic on Vercel’s network, found that none of the major AI crawlers it measured rendered JavaScript, including those from OpenAI and Anthropic.21 The AI search guide covers what that means for visibility in assistants.
- Links need to be real <a> elements with href attributes. Those are what Google can reliably follow, and the History API is the supported way to handle client-side routing, not URL fragments.20
- Single-page applications must return meaningful status codes. A "not found" view served with a 200 is a soft 404.20
- Do not ship a noindex in the initial HTML and rely on JavaScript to remove it. Google may skip rendering when it sees noindex in the HTML, so the JavaScript never runs.20
- Canonicals should be in the server HTML, and JavaScript should not change a canonical to a different URL from the one in the HTML.20
To test it, compare the raw HTML response of each new template with the old one: titles, canonicals, body copy, internal links and structured data. Then inspect a sample of rendered pages with the URL Inspection tool in Search Console. If the raw HTML of the new site is much thinner than the old one, treat that as a launch blocker.
Launch day checklist for a website migration
Launch in a quiet trading period with the developers who built the redirects available for at least the following week. Google crawls a moved site more heavily than usual for a while, so make sure the servers can take it.2
Monitoring after launch, and what normal turbulence looks like
Any significant change can bring ranking fluctuations while Google recrawls and reindexes, and on a medium-sized site it can take a few weeks or more for new URLs to replace old ones in results, longer for large sites.2 That is the only timeline Google gives, and it describes URLs being swapped in results. Traffic is a separate question. SALT.agency’s 2026 study of 1,052 domain migrations, some its own and the rest crowdsourced from other SEOs, measured how long the new domain took to match the old domain’s pre-migration monthly organic traffic. The median was 304 days and the mean 489, and roughly one in four recovered within 90 days.23 It covers domain changes only and, by its own account, does not analyse which migration practices made the difference, so read it as a range of outcomes, not a forecast. Nobody can tell you in advance how long your site will take. What you can do is check whether the mechanics are working, which is a better early indicator than traffic. There is a day by day version of this in what to check in the first month after a migration.
What to watch in Search Console
- Page indexing report: old URLs should move steadily into "Page with redirect", and new URLs should move into indexed. A rise in "Not found (404)", "Soft 404", "Redirect error", "Blocked by robots.txt" or "Excluded by noindex" points at a specific fault.5
- Sitemaps report: compare indexed counts for the old URL sitemap and the new one over time.2
- Crawl Stats report: total requests, the response code breakdown and host status. Most responses should be 200 or similar, but during a site move a high share of 301 or 308 responses is expected.24 It is only available for root-level properties.24
- Performance report by page: whether impressions are transferring from old URLs to new ones, template by template against the benchmark.
What to watch in server logs
Logs show which URLs Googlebot requests. In the first weeks you want to see Googlebot fetching old URLs and receiving 301s, then fetching the new URLs and receiving 200s. Watch for 5xx responses in particular. Server errors make Google’s crawlers slow down, and indexed URLs that keep returning errors are eventually dropped.8 The migration guide on Bing’s blog recommends checking the logs daily for at least three months after the move starts.3 A server that buckles under the post-launch crawl can do more damage than any mapping mistake.
When to roll back a website migration
Rolling back is rarely the right answer, because it forces Google through a second move in the opposite direction and resets the clock. The migration guide on Bing’s blog names attempted roll-backs as one of the most problematic reasons migrations fail.3 Most post-launch problems are fixed faster by correcting the fault on the new site. Plan for it anyway, and keep the old site deployable for at least the first few weeks.
| Situation | Usual response |
|---|---|
| Missing or wrong redirects for some URLs | Fix forward. Add the redirects, then recrawl the old URL list. |
| Staging robots.txt or noindex left in place | Fix forward immediately. Remove the block and resubmit sitemaps. |
| Thin content or missing internal links on a template | Fix forward on that template. |
| Rendering failure: Google sees empty or near-empty pages | Fix forward if it can be resolved in days. Consider rolling back if it cannot. |
| New platform cannot serve the redirects or status codes you need | Roll back, because the fault is structural and will not be fixed quickly. |
| Servers failing under load, with sustained 5xx responses | Roll back or scale up at once, depending on which is faster. |
If you do roll back, reverse the redirects so the new URLs point at the old ones, restore the old sitemaps and withdraw any Change of Address request. Then work out what failed before you try again. The second attempt carries more risk than the first, because Google has now seen two moves in a short period.
Common questions
01How long does it take to recover traffic after a website migration?
02How long should I keep 301 redirects after a site move?
03Is a 308 redirect as good as a 301 for SEO?
04Do I need the Change of Address tool for an HTTP to HTTPS migration?
05Can I redirect old pages that no longer exist to the homepage?
06Is it safe to block a staging site with robots.txt?
Sources
- Platform docs18
- Regulator3
- Industry study2
- Reporting1
- 01Changing your hostingGoogle Search CentralPlatform docs
- 02Site Moves and MigrationsGoogle Search CentralPlatform docs
- 03Website Migration with BingBing Webmaster BlogPlatform docs
- 04Challenge bad botsCloudflare DocsPlatform docs
- 05Page indexing reportSearch Console HelpPlatform docs
- 06RFC 9110: HTTP SemanticsIETFRegulator
- 07How to Specify a Canonical with rel="canonical" and Other MethodsGoogle Search CentralPlatform docs
- 08How HTTP Status Codes Affect Google's CrawlersGoogle for DevelopersPlatform docs
- 09Redirects and Google SearchGoogle Search CentralPlatform docs
- 10308 Permanent RedirectMDN Web DocsPlatform docs
- 11Redirections in HTTPMDN Web DocsPlatform docs
- 12Google: Keep 301 Redirects In Place For A YearSearch Engine JournalReporting
- 13Change of Address toolSearch Console HelpPlatform docs
- 14RFC 9309: Robots Exclusion ProtocolIETFRegulator
- 15Robots.txt Introduction and GuideGoogle Search CentralPlatform docs
- 16Block Search Indexing with noindexGoogle Search CentralPlatform docs
- 17Localized Versions of your PagesGoogle Search CentralPlatform docs
- 18Build and Submit a SitemapGoogle Search CentralPlatform docs
- 19Sitemaps XML formatsitemaps.orgRegulator
- 20Understand JavaScript SEO BasicsGoogle Search CentralPlatform docs
- 21The rise of the AI crawlerVercelIndustry study
- 22How To Audit Redirects In A Site Migration Using The SEO SpiderScreaming FrogPlatform docs
- 23Only 27% of domain migrations recover in 90 daysSALT.agencyIndustry study
- 24Crawl Stats reportSearch Console HelpPlatform docs