Technical SEO MasteryMigrations, auditing workflow and monitoring · Lesson 16 of 18

Site migrations: a zero-drama checklist

Article · 16 min · 8 min lecture

Video lecture

Site migrations: a zero-drama checklist

13 chapters · about 8 min · full transcript

Coming soon

Chapter 1 of 13

Site migrations

  • What counts as a migration
  • Four phases, zero drama
  • Redirect maps you can prove

The narrated lecture is in production

Every chapter is scripted and ready. Browse the chapters and read the full transcript now — the video will appear here when it’s published.

Chapters

What counts as a migration

Any change that alters URLs, hosts, templates or rendering at scale: domain change, HTTP to HTTPS, URL restructure, platform/CMS change (e.g. WordPress to Shopify, or a move to a headless front end), merging sites, and major redesigns. Several at once multiplies risk — if you can, separate a domain move from a replatform.

Even perfect migrations can cause temporary fluctuation while Google recrawls and reprocesses. Google has said a medium-sized site can take a few weeks for most pages to move, and larger sites longer. Set expectations in writing before you start.

Phase 1: Planning (weeks before)

  1. Define scope and owners. Who signs off redirects, who deploys, who monitors?
  2. Benchmark everything: full crawl of the old site; Search Console exports (performance by page and query, Page indexing counts); analytics landing-page traffic and conversions; rank tracking for priority queries; backlink list of top-linked URLs; log sample.
  3. Inventory URLs from all sources: crawl, sitemaps, Search Console, analytics, backlinks, logs. Crawls alone miss old URLs that still receive links.
  4. Build the redirect map — old URL to most relevant new URL, one hop, 301/308. Prioritise by traffic, links and revenue. Pages with no equivalent get 404/410 intentionally.
old_url,new_url,type,priority,notes
/services/seo-audit.html,/services/technical-seo-audit/,301,high,top converter
/blog/2019/05/gbp-tips,/guides/google-business-profile/,301,high,merged into guide
/careers/intern-2018,,410,low,no equivalent
  1. Plan content and template parity. Titles, meta descriptions, headings, body content, internal links, structured data, hreflang, canonicals, image alt text — carry them over or consciously improve them.
  2. Choose timing away from peak seasons (Ramadan and Eid campaigns for Gulf retailers, Black Friday, Diwali, back-to-school).

Phase 2: Staging and pre-launch QA

  • Staging protected by authentication (not only robots.txt).
  • Crawl staging and compare against the benchmark: missing pages, title changes, lost internal links, structured data errors, canonicals pointing at staging hosts.
  • Test the redirect map against staging with a list crawl: every old URL should return one 301 to a 200 destination.
  • Check robots.txt and meta robots for the production configuration — confirm Disallow: / and staging noindex will not ship.
  • Check rendering and Core Web Vitals of new templates.
  • Prepare new XML sitemaps.

Phase 3: Launch day

  1. Deploy redirects together with the new site.
  2. Verify robots.txt, a sample of meta robots and canonicals on production immediately.
  3. Crawl the old URL list: confirm 301s resolve in one hop to 200 pages.
  4. Domain moves: verify both properties in Search Console and use the Change of Address tool (for domain-level moves).
  5. Submit new sitemaps. Keeping a sitemap of old URLs available for a short time can help Google discover the redirects.
  6. Update external profiles you control: Google Business Profile website link, social profiles, directories, ad destination URLs, email templates.

Phase 4: Post-launch monitoring (first 4–12 weeks)

CheckFrequencyWhere
404s and 5xx on old and new URLsDaily, first two weeksLogs, crawler, Search Console
Googlebot crawl of new URLsDailyLogs, Crawl stats
Indexing of new URLs vs oldWeeklyPage indexing, URL Inspection samples
Traffic and conversions by page groupDaily then weeklyAnalytics vs benchmark
Rankings for priority queriesWeeklyRank tracker
Structured data and CWVWeeklyEnhancement and CWV reports

Keep redirects in place for at least a year (Google's guidance), and ideally indefinitely. Keep the old domain registered.

Worked example: platform change

A Lahore-based retailer moves from a custom PHP store to a hosted e-commerce platform. The platform forces /products/ and /collections/ URL patterns. The team exports every legacy URL (including those only found in backlinks and logs), maps products by SKU and categories by name, uses the platform's redirect manager for one-hop 301s, recreates custom title templates, and moves blog content with matching slugs where possible. After launch, logs reveal thousands of hits to old image URLs used in Google Images; they add image redirects too — a commonly forgotten item.

Rollback criteria

Agree in advance what triggers a rollback or an emergency fix: for example, robots.txt blocking the site, redirects failing for a large share of legacy URLs, or checkout broken. Without predefined criteria, teams argue while visibility drops.

Hands-on: validate a redirect map before and after launch

# pip install requests pandas
import pandas as pd, requests

m = pd.read_csv("redirect_map.csv")          # columns: old_url,new_url,type,priority
BASE_OLD = "https://staging.example.com"      # switch to production on launch day
results = []
for row in m.itertuples():
    url = BASE_OLD + row.old_url
    try:
        r = requests.get(url, allow_redirects=True, timeout=20)
    except requests.RequestException as e:
        results.append((row.old_url, "ERROR", str(e)[:80], 0, "")); continue
    hops = [h.status_code for h in r.history]
    final_path = requests.utils.urlparse(r.url).path
    expected = row.new_url if isinstance(row.new_url, str) else None
    if row.type in (410, "410"):
        ok = r.status_code == 410 and not hops
    else:
        ok = len(hops) == 1 and hops[0] in (301, 308) and r.status_code == 200 and final_path == expected
    results.append((row.old_url, r.status_code, final_path, len(hops), "OK" if ok else "FAIL"))

out = pd.DataFrame(results, columns=["old", "final_status", "final_path", "hops", "result"])
print(out.result.value_counts())
out[out.result != "OK"].to_csv("redirect_failures.csv", index=False)

Run it on staging before launch (with authentication if needed), again on production within the first hour, and daily for the first two weeks on the high-priority tier.

Worked example 2: a UAE brand merges two domains

A UAE beauty brand (illustrative) merges its separate Arabic domain into /ar-ae/ on its main site. The plan separates the domain move from any redesign, maps every Arabic URL one-to-one, keeps hreflang reciprocal between /en-ae/ and /ar-ae/ from day one, uses Change of Address in Search Console, and updates Google Business Profile and social links. Post-launch monitoring by page group shows Arabic pages recrawled and indexed at the new URLs over the following weeks, with the old domain's redirects kept indefinitely.

Common mistakes

  • Redirecting everything to the home page.
  • Changing URLs, content and design at once without benchmarks, so nobody can diagnose drops.
  • Removing redirects after a few months "because traffic moved".
  • Forgetting image, PDF and hreflang URLs.

Key takeaways

  • Benchmark crawl, Search Console, analytics, rankings and backlinks before any migration.
  • Build a one-hop 301 redirect map from every known old URL, prioritised by traffic, links and revenue.
  • QA staging and redirects before launch, and verify production robots.txt and directives immediately after.
  • Use Change of Address for domain moves, keep redirects at least a year, and monitor for weeks.

Check your understanding

Quick questions to lock in the lesson. They don’t count towards your certificate.

  1. Where should you source old URLs for a migration redirect map?
  2. Which Search Console tool supports a domain name change?
  3. How long does Google recommend keeping migration redirects?

Put it into practice

Draft a migration plan outline for a site you know: benchmarks, URL sources, redirect map columns, QA steps, launch checks and rollback criteria.

Enrol for free to save your progress

Reading is always free. Enrol to keep your place, take the final assessment and earn a verifiable certificate.