How to Migrate a WordPress Site Without Losing SEO Rankings (Step-by-Step)

To migrate a WordPress site without losing SEO rankings: crawl and document every URL before you start, set up 301 redirects for every URL that changes, update your WordPress address settings to the new domain, run a database search-replace for all internal URLs, update your sitemap and submit it in Google Search Console, and monitor GSC for crawl errors for at least two weeks post-launch. The 301 redirects are the single most critical step — every missed redirect is a potential ranking drop.
WordPress Migration SEO — The Short Version
- Before you start: full backup, crawl all URLs (Screaming Frog), document current rankings baseline, map every old URL to its new URL
- During migration: use a staging environment, set up 301 redirects before going live, run database search-replace for internal links
- After launch: update GSC property, submit new sitemap, monitor Coverage and Crawl Stats for 2–4 weeks
- Expect a temporary dip: 10–30% traffic drop for 2–6 weeks is normal during Google’s re-crawl. If it persists beyond 8 weeks, you have missed redirects or a technical issue.
- Domain changes are the highest risk: changing your domain loses accumulated domain authority temporarily — plan for a 2–4 month recovery window regardless of how well you execute
- HTTP to HTTPS is the lowest risk: a straightforward SSL migration with correct redirects typically recovers in days, not weeks
A WordPress migration done right is invisible to Google — your rankings dip briefly while Googlebot discovers the changes, then recover fully within a few weeks. A migration done wrong can cost you months of rankings recovery work, or in the worst cases, permanent loss of positions you spent years building.
The difference is almost always in the preparation, not the execution. This guide gives you a complete pre-migration checklist, a step-by-step migration process, a post-launch monitoring plan, and honest guidance on how long different migration types take to recover. I’m covering four migration types: host change (same domain, new server), domain change (new URL entirely), HTTP to HTTPS (SSL migration), and subfolder to subdomain restructure.
Migration Types
WordPress Migration Types and Their SEO Risk Level
| Migration Type | SEO Risk | Typical Recovery | Critical Factor |
|---|---|---|---|
| Same domain, new host example.com → same domain, different server |
Low | Days to 2 weeks | DNS propagation timing, zero downtime during cutover |
| HTTP → HTTPS http://example.com → https://example.com |
Low | Days to 1 week | Sitewide 301 redirects from HTTP → HTTPS, mixed content fix |
| www → non-www (or reverse) www.example.com → example.com |
Low | Days to 1 week | 301 redirects, canonical update, GSC property verification |
| URL restructure, same domain example.com/page/ → example.com/new-slug/ |
Medium | 2–6 weeks | Complete 301 redirect map, internal link update |
| Full domain change old-domain.com → new-domain.com |
High | 2–4 months | Complete redirect map, Change of Address tool in GSC, backlink update outreach |
| CMS migration (e.g. Wix → WordPress) Different platform entirely |
High | 2–6 months | URL mapping, redirect implementation, content parity check |
The Migration Process
WordPress Migration SEO: Before, During, and After
Before You Start — Pre-Migration Checklist
Do this 1–2 weeks before launch
1. Take a full backup
Before touching anything: complete backup of your files and database. Use UpdraftPlus, Duplicator, or your host’s backup tool. Verify the backup restores correctly on a test environment before proceeding. This is your insurance policy — use it.
2. Crawl your entire site and document every URL
Run Screaming Frog (free up to 500 URLs) or Sitebulb across your live site. Export every URL returning a 200 status code. This list becomes your redirect map — every URL on this list needs either a 301 redirect to its new location, or confirmation that its URL is staying identical.
3. Record your current rankings baseline
Export your top 50 pages by clicks from Google Search Console (last 28 days). Record the current ranking positions for your most important keywords. You’ll use this to measure recovery post-launch. If you don’t document this before, you won’t know what “back to normal” looks like.
4. Build your redirect map
A spreadsheet with two columns: Old URL | New URL. For a host change with no URL restructure, most rows will be identical — but document them anyway because www/non-www and HTTP/HTTPS variants need covering. For a domain change or URL restructure, every page needs a destination. There should be no blank cells in the New URL column.
- Full database + files backup taken and verified
- Complete URL crawl exported (all 200-status URLs)
- GSC performance baseline exported (top pages + positions)
- Redirect map spreadsheet complete — every old URL has a destination
- Staging environment set up and tested
- New host / domain DNS access confirmed
- SSL certificate ready on new destination
- Screaming Frog or equivalent available for post-launch crawl
5. Set up your staging environment
Build and test the new site on a staging URL (e.g. staging.yourdomain.com or a temporary domain). Make sure it is blocked from crawlers using a Disallow: / in robots.txt and/or HTTP authentication. Do not do migration work directly on a live site — always stage first, then cut over.
During Migration — Launch Day Sequence
Execute in this exact order
Step 1 — Implement 301 redirects before flipping DNS
This is the most important ordering decision. Redirects must be live before your old domain starts serving the new content. In WordPress, use a redirect plugin (Redirection is free and well-maintained) or implement redirects at the server level via .htaccess (Apache) or nginx config. For a domain change, the old domain needs to stay alive and redirecting for at least 12 months — ideally indefinitely.
For .htaccess sitewide domain change (old-domain.com → new-domain.com):
# Redirect entire old domain to new domain RewriteEngine On RewriteCond %{HTTP_HOST} ^(www\.)?old-domain\.com$ [NC] RewriteRule ^(.*)$ https://www.new-domain.com/$1 [R=301,L]
Step 2 — Database search-replace for internal URLs
After implementing redirects, update all hardcoded URLs in your database. Use WP-CLI (cleanest method) or the Better Search Replace plugin:
# WP-CLI database search-replace # Run from your WordPress root directory wp search-replace 'https://old-domain.com' 'https://new-domain.com' --skip-columns=guid wp search-replace 'http://old-domain.com' 'https://new-domain.com' --skip-columns=guid
The guid column in WordPress’s wp_posts table stores a permanent identifier for each post — it should never be changed. Skipping it prevents breaking post revision history and feed subscriptions. Always include --skip-columns=guid in every WP-CLI search-replace command.
Step 3 — Update WordPress Address settings
WordPress Admin → Settings → General → Update both WordPress Address (URL) and Site Address (URL) to the new domain with HTTPS. If you’re locked out because you changed the domain before updating these, add to wp-config.php:
define('WP_HOME','https://new-domain.com'); define('WP_SITEURL','https://new-domain.com');
Step 4 — Update your sitemap and robots.txt
Regenerate your XML sitemap so it contains the new domain URLs. Update the Sitemap: directive in robots.txt to point to the new sitemap URL. If you use Yoast or RankMath, these update automatically once the WordPress Address is corrected — verify by visiting new-domain.com/sitemap_index.xml.
Step 5 — Clear all caches
Clear your WordPress caching plugin, your CDN or Cloudflare cache, and any server-side caching. Stale caches after a migration serve old URLs and confuse both users and crawlers.
Step 6 — For domain changes only: use GSC Change of Address tool
Google Search Console has a specific tool for notifying Google of a domain change. Both the old and new domain must be verified in GSC. Old GSC property → Settings → Change of Address → select new property. This is not a substitute for 301 redirects — it supplements them by directly signalling the change to Google.
- 301 redirects implemented and tested on staging before DNS change
- Database search-replace completed (with –skip-columns=guid)
- WordPress Address and Site Address updated to new domain + HTTPS
- Sitemap regenerated and verified at new URL
- robots.txt updated with new sitemap URL
- All caches cleared (plugin, CDN, server)
- GSC Change of Address submitted (domain migrations only)
- DNS TTL lowered to 300 seconds at least 24 hours before cutover
- New site tested in incognito browser after DNS propagation
After Launch — Post-Migration Monitoring
Monitor for 4–8 weeks post-launch
Day 1–3: Immediate verification
Run a fresh Screaming Frog crawl of the new site. Compare the URL list against your pre-migration crawl — every URL from the old site should either appear on the new site (same or redirected URL) or have a confirmed 301 redirect in place. Any 404 errors you find now are missing redirects that need to be added immediately.
Check in GSC Coverage report — you may see an initial spike in “Crawled – currently not indexed” or “Discovered – currently not indexed” states. This is normal and temporary as Googlebot works through the redirect chain.
Week 1–2: Submit new sitemap in GSC
In your new GSC property (or the same property if it was a host change): Sitemaps → Add sitemap → enter your new sitemap URL → Submit. Google will begin processing the new sitemap and accelerating its crawl of the new URLs.
Week 2–4: Monitor crawl stats and rankings
GSC → Settings → Crawl Stats shows Googlebot’s activity on your site. After a migration you should see an elevated crawl rate as Google processes changes. If crawl rate drops to near zero after a week, check your robots.txt isn’t accidentally blocking Googlebot.
Compare your current rankings against the baseline you exported before migration. A temporary 10–30% dip is expected. If specific pages have dropped significantly, check whether their redirects are correctly implemented.
A traffic drop of up to 30% in the first 2 weeks is normal — Google is recrawling and reprocessing your pages through redirect chains. Start investigating if: the drop exceeds 50% and persists beyond 3 weeks; individual high-value pages don’t recover after 4 weeks; GSC shows a large number of new 404 errors; or the Crawl Stats report shows Googlebot response errors spiking.
Week 4–8: Internal links and backlink audit
Once the migration is stable, audit your internal links for any that still point to old URLs (they’ll be hitting redirects rather than direct links, which wastes crawl budget). Update them to point directly to the new URLs. For a domain change, also reach out to owners of your highest-authority backlinks and ask them to update the links to the new domain — this is slow work but meaningfully accelerates authority transfer.
- Post-launch Screaming Frog crawl completed — zero unexpected 404s
- New sitemap submitted in Google Search Console
- GSC Coverage report checked — no unexpected errors
- Rankings baseline comparison checked at week 2
- GSC Crawl Stats showing healthy Googlebot activity
- Internal links updated from old URLs to new direct URLs
- Top backlinks contacted for link update (domain migrations only)
- Old domain redirects still working at 30-day and 90-day mark
Recovery Timeline
How Long Does SEO Recovery Take After a WordPress Migration?
The honest answer depends entirely on migration type and execution quality. Here’s what a well-executed migration looks like at each stage:
These timelines assume a technically clean migration. If your old site had existing SEO problems — thin content, duplicate URLs, crawl errors — a migration is not a reset button. Google carries quality signals through redirect chains. A site with existing issues may not recover to its pre-migration baseline because that baseline was already compromised.
What Goes Wrong
The 5 WordPress Migration Mistakes That Kill Rankings
| Mistake | SEO Impact | How to Avoid It |
|---|---|---|
| No 301 redirects “The URLs are the same so we don’t need them” |
Severe — all accumulated link equity lost, rankings drop to zero for affected pages | Document every URL before migration and verify redirect implementation before DNS cutover. Even “identical” URLs need checking for protocol and www differences. |
| Redirect chains (3+ hops) A → B → C → D instead of A → D |
Significant — each hop dilutes PageRank transfer and slows crawling | Audit all redirects after migration and consolidate chains to single-hop 301s. Use Screaming Frog’s redirect chain report. |
| Migrating during a traffic peak Launching on a Monday or before a key seasonal period |
Avoidable — any migration issues hit during your highest-traffic window | Schedule migrations for Tuesday–Thursday during low-traffic periods (early morning). Avoid the 4 weeks before any seasonal traffic peak. |
| Forgetting to update GSC Old GSC property goes unwatched post-migration |
Moderate — miss crawl errors and indexation problems that need fast response | Set up the new GSC property before migration. Submit new sitemap on day one. Check both old and new GSC properties daily for the first two weeks. |
| Skipping the database search-replace Internal links still pointing to old domain |
Low-Medium — internal links hitting redirects wastes crawl budget and dilutes internal PageRank | Run WP-CLI search-replace immediately after migration. Audit internal links with Screaming Frog at week 4 and update any that still hit the old domain. |
Need Someone to Handle Your WordPress Migration?
Migration SEO is high-stakes work with no margin for missed redirects. Our WordPress migration service includes a full URL audit, redirect implementation, post-launch monitoring, and a 30-day ranking recovery check.
FAQ
Frequently Asked Questions
http://www.example.com/page/ and is now https://example.com/page/ is four technically different URLs — all requiring redirects. Always verify with a crawl tool rather than assuming URLs are identical.search-replace command. None of these plugins handle the SEO strategy for you — the redirect map, URL documentation, and GSC monitoring are manual work regardless of which plugin you use for the technical move.wp search-replace 'https://old-domain.com' 'https://new-domain.com' --skip-columns=guid. Run this from your WordPress root directory via SSH. If you don’t have SSH access, the Better Search Replace plugin does the same thing from the admin dashboard — enable “Run as dry run” first to preview changes before committing. Always take a database backup immediately before running a search-replace.
[
{
“@context”: “https://schema.org”,
“@type”: “Article”,
“headline”: “How to Migrate a WordPress Site Without Losing SEO Rankings (Step-by-Step)”,
“description”: “Complete step-by-step guide to migrating a WordPress site without losing SEO rankings. Covers all migration types, pre-migration checklist, redirect implementation, database search-replace, GSC setup, post-launch monitoring, and realistic recovery timelines.”,
“image”: “https://www.toptut.com/wp-content/uploads/wordpress-migration-seo-guide-2026.jpg”,
“datePublished”: “2026-03-26”,
“dateModified”: “2026-03-26”,
“author”: {
“@type”: “Person”,
“name”: “Liza Kliko”,
“url”: “https://www.toptut.com/author/liza-kliko/”
},
“publisher”: {
“@type”: “Organization”,
“name”: “TopTut”,
“url”: “https://www.toptut.com”,
“logo”: {
“@type”: “ImageObject”,
“url”: “https://www.toptut.com/wp-content/uploads/toptut-logo.png”
}
},
“mainEntityOfPage”: {
“@type”: “WebPage”,
“@id”: “https://www.toptut.com/wordpress-migration-seo-guide/”
},
“keywords”: [
“wordpress migration seo”,
“migrate wordpress without losing seo”,
“wordpress migration checklist”,
“301 redirects wordpress migration”,
“change domain wordpress seo”,
“wordpress migration guide”,
“wordpress url change seo”,
“database search replace wordpress”
],
“articleSection”: “WordPress SEO”,
“wordCount”: “3000”
},
{
“@context”: “https://schema.org”,
“@type”: “HowTo”,
“name”: “How to Migrate a WordPress Site Without Losing SEO Rankings”,
“description”: “Three-phase process for migrating WordPress while preserving SEO: pre-migration preparation, launch day execution, and post-launch monitoring.”,
“totalTime”: “P7D”,
“tool”: [
{ “@type”: “HowToTool”, “name”: “Screaming Frog SEO Spider (free up to 500 URLs)” },
{ “@type”: “HowToTool”, “name”: “Google Search Console” },
{ “@type”: “HowToTool”, “name”: “WP-CLI or Better Search Replace plugin” },
{ “@type”: “HowToTool”, “name”: “Redirection plugin (for 301 redirects)” },
{ “@type”: “HowToTool”, “name”: “UpdraftPlus (backup)” }
],
“step”: [
{
“@type”: “HowToStep”,
“position”: 1,
“name”: “Crawl and document every URL before migration”,
“text”: “Run Screaming Frog across your live site and export every URL returning a 200 status. This becomes your redirect map. Also export your top pages from GSC as a rankings baseline.”,
“url”: “https://www.toptut.com/wordpress-migration-seo-guide/#phase-1”
},
{
“@type”: “HowToStep”,
“position”: 2,
“name”: “Build a complete redirect map”,
“text”: “Create a spreadsheet with every old URL mapped to its new URL destination. Every URL must have a destination — no blank cells in the New URL column.”,
“url”: “https://www.toptut.com/wordpress-migration-seo-guide/#phase-1”
},
{
“@type”: “HowToStep”,
“position”: 3,
“name”: “Implement 301 redirects before changing DNS”,
“text”: “Set up 301 redirects on the old domain before flipping DNS to the new site. Use the Redirection plugin or .htaccess rules. Test every redirect before going live.”,
“url”: “https://www.toptut.com/wordpress-migration-seo-guide/#phase-2”
},
{
“@type”: “HowToStep”,
“position”: 4,
“name”: “Run database search-replace for internal URLs”,
“text”: “Use WP-CLI: wp search-replace ‘https://old-domain.com’ ‘https://new-domain.com’ –skip-columns=guid. Or use the Better Search Replace plugin from WordPress admin.”,
“url”: “https://www.toptut.com/wordpress-migration-seo-guide/#phase-2”
},
{
“@type”: “HowToStep”,
“position”: 5,
“name”: “Update WordPress Address settings and sitemap”,
“text”: “WordPress Admin → Settings → General → update both URL fields to the new domain with HTTPS. Regenerate your sitemap and verify it at the new URL.”,
“url”: “https://www.toptut.com/wordpress-migration-seo-guide/#phase-2”
},
{
“@type”: “HowToStep”,
“position”: 6,
“name”: “Submit new sitemap in GSC and monitor for 4–8 weeks”,
“text”: “In Google Search Console, submit your new sitemap URL. Monitor Coverage report and Crawl Stats daily for the first two weeks. Compare rankings against your pre-migration baseline at week 2 and week 4.”,
“url”: “https://www.toptut.com/wordpress-migration-seo-guide/#phase-3”
}
]
},
{
“@context”: “https://schema.org”,
“@type”: “FAQPage”,
“mainEntity”: [
{
“@type”: “Question”,
“name”: “How do I migrate a WordPress site without losing SEO?”,
“acceptedAnswer”: {
“@type”: “Answer”,
“text”: “Crawl and document every live URL before migration, build a redirect map for every page, implement 301 redirects before changing DNS, run a database search-replace to update internal links, update WordPress Address settings, submit your new sitemap in GSC, and monitor for crawl errors for 4–8 weeks. The redirect map is the most critical component.”
}
},
{
“@type”: “Question”,
“name”: “How long does SEO recovery take after a WordPress migration?”,
“acceptedAnswer”: {
“@type”: “Answer”,
“text”: “Host changes recover in days to 2 weeks. HTTP to HTTPS migrations recover in days to a week. URL restructures on the same domain take 2–6 weeks. Full domain changes take 2–4 months for well-executed migrations.”
}
},
{
“@type”: “Question”,
“name”: “Do I need 301 redirects if my URLs aren’t changing?”,
“acceptedAnswer”: {
“@type”: “Answer”,
“text”: “Yes, in most cases. Even apparently identical URLs often differ by protocol (HTTP vs HTTPS), subdomain (www vs non-www), or trailing slash. Always verify with a crawl tool rather than assuming URLs are identical.”
}
},
{
“@type”: “Question”,
“name”: “How do I update URLs in WordPress database after migration?”,
“acceptedAnswer”: {
“@type”: “Answer”,
“text”: “Use WP-CLI: wp search-replace ‘https://old-domain.com’ ‘https://new-domain.com’ –skip-columns=guid. Or use the Better Search Replace plugin from WordPress admin. Always take a database backup immediately before running a search-replace.”
}
},
{
“@type”: “Question”,
“name”: “Should I use the GSC Change of Address tool?”,
“acceptedAnswer”: {
“@type”: “Answer”,
“text”: “Yes, for domain changes. It directly signals Google that your site has moved and accelerates authority transfer. Both properties must be verified in GSC first. Find it in the old domain’s GSC property under Settings → Change of Address. Use it in addition to 301 redirects, not instead of them.”
}
}
]
},
{
“@context”: “https://schema.org”,
“@type”: “BreadcrumbList”,
“itemListElement”: [
{
“@type”: “ListItem”,
“position”: 1,
“name”: “Home”,
“item”: “https://www.toptut.com/”
},
{
“@type”: “ListItem”,
“position”: 2,
“name”: “WordPress SEO”,
“item”: “https://www.toptut.com/category/wordpress/”
},
{
“@type”: “ListItem”,
“position”: 3,
“name”: “How to Migrate a WordPress Site Without Losing SEO Rankings”,
“item”: “https://www.toptut.com/wordpress-migration-seo-guide/”
}
]
}
]


