How to migrate a WordPress site to a new host without downtime
The complete process for moving WordPress: plugin, manual and command-line methods, DNS and SSL cutover, email, SEO-safe redirects, plus Wix, Squarespace and WooCommerce migrations.
Your migration plan
This moves a WordPress site to a new host. You copy two things, the files and the database, test the copy, then point your domain at the new server without breaking links, SSL (the padlock certificate), search rankings or email. A migration plugin (a WordPress add-on that packages the site and unpacks it on the new host) does the copy for most small sites. Small sites often move in under an hour, but plan a few days: the DNS TTL (how long the internet caches your domain's address) is lowered a day or two ahead, and the old host stays as a fallback for a week or two.
Copies files and the database in one package with URL replacement built in, and needs no SSH or database tools.
Other options and when to use them
- Your new host's migration service: Your new managed host offers one and you would rather not do the copy yourself. Book it ahead of your cutover date.
- Manual copy over SFTP and phpMyAdmin: The host blocks migration plugins, or you want to see every file and table that moves.
- Command line with SSH, rsync and WP-CLI: A large site, a plugin that times out, or a shop that needs a quick final sync.
Find out what depends on the old host first, especially email, and take a backup. Then build and test the new host privately, and only change DNS once the copy works. Cancel the old host last, because it is your way back.
- Where email is hosted, and a copy of every DNS recordIf mailboxes live with the old web host, changing nameservers or cancelling the plan stops email. The record sheet lets you rebuild anything you change.
- Record the current setup and take a full backupThe record shows what to recreate on the new server, and the backup is your only way back if the copy goes wrong.
- Lower the DNS TTLIt has to be done 24 to 48 hours ahead, so visitors move to the new server quickly when you switch.
- New host: site, database and PHP versionThe copy needs somewhere to land, and matching the PHP version stops plugins breaking on day one.
- Copy files and database, then replace URLsURL replacement only makes sense once the database is on the new server.
- Private test with your hosts fileYou see the new copy on the real domain before any visitor does.
- Freeze, final sync, DNS switch and SSLThe freeze stops orders and comments landing on the old server after your last copy. Many hosts can only issue SSL once DNS points at them.
- Search Console, redirects, then cancel the old hostWatch for 404 errors while the old host is still a fallback, and cancel only once everything checks out.
Built-in and third-party tools treat these differently. Tick each one off once you have decided.
Download this checklist (Excel)How each tool handles it
Built-in methodAny method: a migration plugin or a manual copy moves the website only. If the MX records (which tell the internet where to deliver your email) point at the old web host, the mailboxes stay there.Tip: Run dig +short MX on your domain before you start. Never cancel the old plan until mail has moved.
How each tool handles it
Built-in methodManual copy (SFTP and a database export): has no plugin upload limit, but SFTP copies of a large uploads folder are slow. Over SSH, rsync and mysqldump handle large sites.All-in-One WP MigrationIts maker says the free plugin has no import cap of its own. The limit shown is the host's PHP upload limit, the smaller of upload_max_filesize and post_max_size. Its paid Unlimited Extension uploads in chunks to stay under host limits.Migrate GuruRuns the migration on its own servers rather than the live site, and handles sites up to 200 GB.WP-CLIwp db export dumps the database with the wp-config.php credentials, and can skip large log tables.Tip: Check the size first with wp db size --human-readable and du -sh wp-content.
WordPress Advanced Administration: Migrating WordPressHow each tool handles it
Built-in methodManual copy: never find-and-replace in the SQL file, because WordPress stores some settings as serialised data and the replace breaks them. WordPress also says never to change the GUID column.WP-CLIwp search-replace handles serialised data. Use --skip-columns=guid and a --dry-run first.Migrate GuruDoes a serialised-safe search and replace as part of the migration.All-in-One WP MigrationNot stated in ServMask's documentation: test it in your pilot.Tip: After the copy, wp option get home and wp option get siteurl should both print the new address.
WP-CLI: wp search-replaceHow each tool handles it
Built-in methodMigration plugin or manual copy: only the files and the database are copied. Server cron jobs, nginx rules, PHP limits set in the control panel and SMTP settings held by the host stay behind.Migrate GuruWhat it leaves behind: not stated in Migrate Guru's documentation: test it in your pilot.Tip: Save crontab -l, any custom .htaccess or nginx rules and changed PHP limits before the move.
How each tool handles it
Built-in methodAny method: the site runs on whatever PHP version the new host gives it. A plugin or theme that works on the old server can show a white screen or critical error on a newer version.Tip: Match the old PHP version first (Tools > Site Health > Info shows it), and upgrade later once the site is stable.
How each tool handles it
Built-in methodManual copy: re-copy the database and new uploads just before the DNS switch. rsync copies only files that changed.All-in-One WP MigrationA top-up copy: not stated in ServMask's documentation: test it in your pilot. Plan on running the whole export and import again.Migrate GuruA top-up copy: not stated in Migrate Guru's documentation: test it in your pilot.Tip: For a shop, pause orders or use maintenance mode for the final sync.
How each tool handles it
Built-in methodAny method: changing nameservers drops every DNS record you have not recreated at the new provider, including MX records for email. Changing only the A or CNAME record leaves the other records alone.Tip: Copy every A, AAAA, CNAME, MX and TXT record into a record sheet before you change anything.
How each tool handles it
Built-in methodAny method: many hosts can only issue the certificate once the domain points at them, so visitors may briefly see a warning.Tip: Switch DNS at a quiet time, issue the certificate straight away, and force HTTPS in one place only to avoid redirect loops.
How each tool handles it
Built-in methodAny method: a host move with the same URLs needs no redirects. Any URL that changes needs a 301 (permanent) redirect. A domain change also needs Search Console's Change of Address tool.Tip: Move the host first, confirm it is stable, then change the domain as a separate step.
How each tool handles it
Built-in methodAny method: rolling back is a DNS change while the old site is untouched. Once the old plan is cancelled, the only way back is your backup.Tip: Keep the old host for a week or two, download a final backup and confirm MX no longer points at it before you cancel.
WordPress Advanced Administration: Backups
- 1
Get ready
One to two days beforeWatch out: If mailboxes live with the old web host, changing nameservers or cancelling the old plan stops email.
Ways around it
- Plan the email move first with the DNS and email cutover guide, and never cancel the old plan until mail has moved.
Watch out: Migration plugins and manual copies move only the files and the database. Server rules, server cron jobs (scheduled tasks), PHP settings and SMTP (outgoing mail) credentials set on the server stay behind.
Ways around it
- Save them before the move (crontab -l lists cron jobs) and recreate them on the new host.
Check your DNS records before and after the change
Show the detailed steps (4) → - 2
Set up new host
Watch out: A plugin or theme that works on the old server can break on a newer PHP version, showing a white screen or critical error.
Ways around it
- Match the old PHP version first, then upgrade later once the site is stable.
Show the detailed steps (3) →Watch out: Many hosts can only issue the SSL certificate once the domain points at them.
Ways around it
- Test with the hosts file first, and issue the certificate as soon as DNS resolves to the new server.
- 3
Copy the site
Watch out: Migration plugin imports go through the new host's upload limit and PHP time limits, so large sites can fail part-way.
Ways around it
- Check the size of wp-content and the database first. For large sites use SSH with rsync and mysqldump, or the host's migration service.
Tools that can do it
- Migrate GuruRuns the migration on its own servers rather than the live site, handles sites up to 200 GB and does a serialised-safe search and replace.
- WP-CLIwp db export dumps the database with the wp-config.php credentials, and can skip large log tables.
Show the detailed steps (5) →Watch out: Manual copy: a find-and-replace in a raw SQL file breaks WordPress's stored (serialised) settings, and widgets and theme settings disappear.
Ways around it
- Use wp search-replace with --skip-columns=guid and a dry run, never a text editor.
- 4
- 5
Switch over
At a quiet timeWatch out: Orders, comments and form entries written to the old site after your copy are lost when DNS moves.
Ways around it
- Agree a freeze window and run the final sync just before you change DNS.
Watch out: Changing nameservers drops any DNS record you have not recreated, including MX for email.
Ways around it
- Recreate every record from your record sheet first, or change only the A or CNAME record at your current DNS provider.
Turn this phase into dated tasks with the cutover planner
Show the detailed steps (4) → - 6
Check and clean up
Over the next two weeksWatch out: Once visitors use the new site, pointing DNS back means copying their orders and entries back by hand. Cancelling the old host removes the fallback.
Ways around it
- Keep the old host untouched for a week or two, until every validation check passes.
- To roll back, put the new site in maintenance mode, point DNS back and re-enter new orders on the old site.
Show the detailed steps (4) →Watch out: Changing the domain at the same time as the host makes problems harder to trace.
Ways around it
- Move the host first, confirm it is stable, then change the domain with 301s and Search Console's Change of Address.
- Every resolver returns the new server's IP, and HTTPS works with a single redirect and no warnings.
- Post, user and comment counts and the database tables match the old site.
- Forms, logins and checkout work on the live domain, and email works in both directions.
- Search Console shows the sitemap as Success, with no new spike in 404 errors.
Tools named in this plan are independent third-party products, not endorsed by the platform vendor and not paid placements. Check the tool's own documentation and run a pilot first.
Detailed steps
Open a part when you reach it in the plan. Each step says where to go, what to do and what you should see.
1Choose your migration method
Moving WordPress means copying two things, the files and the database, then pointing your domain at the new server without breaking links, SSL, search rankings or email. Pick the method that matches the size of the site and your comfort with technical tools.
| Method | Best for | Skill | Downtime |
|---|---|---|---|
| Migration plugin Migrate Guru, Duplicator, All-in-One WP Migration | Most sites under a few GB | Low | Minutes |
| Host's migration service Offered by many managed hosts | Busy owners, larger sites | None | Varies by host |
| Manual (SFTP and database) File copy plus database export and import | Any host, full control | Medium | Minutes |
| Command line (SSH and WP-CLI) rsync, mysqldump and wp search-replace | Large sites, developers | High | Lowest |
2Choose the right host for WordPress
The host matters more than the migration method. Match it to your traffic, budget and where your visitors are; for an Australian audience, a nearby data centre keeps pages fast.
Affiliate disclosure: we may earn a commission if you sign up through these links, at no extra cost to you. It never changes our recommendations.
Growing sites that want cloud servers without server admin. Choose DigitalOcean, Vultr, AWS or Google Cloud underneath, including Sydney locations.
Agencies and larger sites needing staging workflows and enterprise support.
Small business sites wanting managed WordPress at a moderate price.
Australian businesses wanting local support, .au domains and Australian data centres.
Tools that make the move easier
Full backups to cloud storage before and after the move.
Get UpdraftPlus →3What you need before step one
| Need | Details | Where to get it |
|---|---|---|
| WordPress admin on the old site | An Administrator account, for Site Health and for freezing content before the final sync. | Old site: WordPress admin > Tools > Site Health |
| Old host access | SSH or SFTP to the WordPress folder, and database access through SSH or phpMyAdmin in the control panel. | The old host's control panel; back up a WordPress site |
| New hosting plan | A control panel where you can create a site, a database and a database user, with the same or a newer PHP version, and an SSL certificate. | Your new host; see choose a host |
| WP-CLI | On both servers, for exports, wp search-replace, wp config and cache flushes. | Install WP-CLI |
| Database tools | mysqldump and mysql over SSH, or phpMyAdmin Export and Import in each control panel. | Export and import a MySQL database |
| A tested backup | Files and database downloaded and stored off the old host before you change anything. | Back up a WordPress site |
| DNS access | Sign-in to your DNS provider, to lower TTLs and point the A or CNAME record at the new host. Registrar access too if you change nameservers. | Lower DNS TTL, change nameservers |
| DNS record sheet | Every A, AAAA, CNAME, MX and TXT record copied before the move, so email keeps working. | DNS cutover record sheet template |
| Admin rights on your PC | To edit the hosts file and preview the new copy on the real domain. | Test a site with the hosts file |
| Google Search Console | Access to the site property, to submit the sitemap and watch 404s after the move. | https://search.google.com/search-console; set up 301 redirects if URLs change |
4Prepare and back up4 steps
- 1
Record the current setup
Where: Old site: WordPress admin > Tools > Site Health > Info tab, plus an SSH session in the WordPress folder (or the host's control panel)Note the PHP and MySQL/MariaDB versions, WordPress version, active theme and plugins, database size, cron jobs and any server rules in
.htaccessor Nginx config. The Site Health Info tab lists most of these; WP-CLI gives the rest. Ifwp --infofails, install WP-CLI first.wp core version wp theme list --status=active wp plugin list --status=active wp db size --human-readable crontab -lYou should see: A written record of versions, theme, plugins, database size and cron entries, saved with your project notes. - 2
List every DNS record
Where: The DNS settings at your current DNS provider (find it with dig NS), copied into the DNS cutover record sheetExport the full DNS zone: A, AAAA, CNAME, MX, TXT (SPF, DKIM, DMARC, verification records). You will need them if you change nameservers.
dig +short NS contoso.com dig +short A contoso.com dig +short MX contoso.com dig +short TXT contoso.comYou should see: Every record shown at the DNS provider is in the record sheet with its value and TTL. - 3
Take a full backup you can restore
Where: SSH session in the WordPress folder on the old host (or the host's file manager and phpMyAdmin), then your SFTP client to downloadBack up files and the database, download them, and keep a copy off the old host. The backup how-to covers the SFTP, WP-CLI, mysqldump and phpMyAdmin routes.
wp db export backup-$(date +%F).sql tar -czf files-$(date +%F).tar.gz wp-contentYou should see: WP-CLI prints "Success: Exported to" the .sql file, the .tar.gz has a non-zero size, and both files are on your computer or cloud storage. - 4
Lower the DNS TTL
Where: The DNS settings at your current DNS providerAt least 24 to 48 hours before the move, lower the TTL on the records you will change to 300 seconds so the switch propagates quickly. See lower DNS TTL before a migration.
You should see: The records show a TTL of 300 at the DNS provider, anddig contoso.comshows it once the old TTL has passed.
5Set up the new host3 steps
- 1
Create the site and database
Where: The new host's control panel: its add site or domain page, then its MySQL databases pageCreate an empty site, a new database and a database user with full rights to it. Match or exceed the old PHP version. Write down the database name, user, password and host for Step 3.
You should see: The control panel lists the new site and the database, with the user assigned to the database. - 2
Use a temporary or staging address
Where: The new host's control panel (its temporary URL or staging feature), or your computer's hosts fileMost managed hosts give a temporary URL or staging site so you can test before touching DNS. If yours does not, preview with the hosts file in Step 4.
You should see: You have an address (temporary URL or hosts file entry) that reaches the new server. - 3
Install SSL in advance where possible
Where: The new host's control panel: its SSL or certificates sectionSome hosts can issue the certificate only after DNS points at them; plan to issue it straight after cutover.
You should see: Either a certificate is shown as issued for the domain, or the runsheet has a cutover task to issue it.
6Copy the files and database5 steps
- 1
Copy the files
Where: SSH session on the new server (rsync pulls from the old host), or an SFTP client connected to both hostsCopy the whole WordPress folder, or at least
wp-content, over SFTP or rsync. Change the user, host and paths to your own.rsync -avz --progress user@old-host:/var/www/html/ /var/www/html/You should see: rsync finishes with a summary line of bytes sent and received, and the new folder contains wp-content, wp-admin and wp-config.php. - 2
Export and import the database
Where: SSH on the old server (mysqldump), then SSH on the new server (mysql); or phpMyAdmin Export and Import tabs in each host's control panelExport from the old server, copy the .sql file across, and import into the new, empty database. The export and import how-to covers phpMyAdmin, large files and PowerShell quirks.
mysqldump --single-transaction -u OLD_USER -p OLD_DB > site.sql mysql -u NEW_USER -p NEW_DB < site.sqlYou should see: Both commands return to the prompt with no ERROR lines, and the new database lists the same tables as the old one. - 3
Update wp-config.php
Where: The new server: wp-config.php in the WordPress folder (edit over SFTP, or with WP-CLI over SSH)Set the new
DB_NAME,DB_USER,DB_PASSWORDandDB_HOST. Keep the same table prefix as the old site.wp config set DB_NAME NEW_DB wp config set DB_USER NEW_USER wp config set DB_PASSWORD 'NEW_PASSWORD' wp config set DB_HOST localhost wp db checkYou should see:wp db checkends with a Success line, and the site no longer shows "Error establishing a database connection". - 4
Replace old URLs safely
Where: SSH session on the new server, in the WordPress folderIf the domain or protocol changes, run a serialisation-safe search and replace. Always dry-run first, and skip the guid column. See change WordPress URLs with wp search-replace for plugin tables and other forms of the address.
wp search-replace 'http://old-domain.com' 'https://new-domain.com' --skip-columns=guid --dry-run wp search-replace 'http://old-domain.com' 'https://new-domain.com' --skip-columns=guidYou should see: The dry run shows replacement counts per table; the real run ends with a Success line, andwp option get homeprints the new address. - 5
Flush permalinks and caches
Where: SSH session on the new server, in the WordPress folder (or WordPress admin > Settings > Permalinks > Save Changes)Regenerate rewrite rules and clear object and page caches. Clear any caching plugin's cache from its own settings page too.
wp rewrite flush wp cache flushYou should see: Both commands print a Success line, and inner pages load instead of returning 404.
7Test before you switch4 steps
- 1
Preview on the real domain
Where: Your computer's hosts file (Notepad as administrator on Windows, Terminal on macOS)Point the domain at the new server's IP on your computer only, so you can browse the new copy before anyone else sees it. Follow test a site with the hosts file.
203.0.113.10 contoso.com 203.0.113.10 www.contoso.comYou should see:ping contoso.comshows the new server's IP, and the browser loads the new copy. - 2
Test what makes money
Where: A private browser window on your computer, with the hosts file entries activeTest contact forms, checkout and payments, logins, membership areas, search and any API integrations.
You should see: Each form, payment and login works the same as on the old site, and test entries arrive where they should. - 3
Look for broken assets
Where: Browser developer tools (F12): Console and Network tabsReload key pages and check images, fonts and scripts for 404s and mixed-content warnings in the console.
You should see: No 404 responses in the Network tab and no mixed-content warnings in the Console. - 4
Check scheduled tasks and email
Where: SSH session on the new server (WP-CLI), then WordPress adminConfirm WP-Cron or the server cron runs, and that site emails (password resets, order emails) send through an SMTP service. Trigger a password reset to a test account.
wp cron test wp cron event listYou should see:wp cron testreports that WP-Cron spawning is working, and the password reset email arrives.
8Switch DNS and go live4 steps
- 1
Freeze and do a final sync
Where: WordPress admin on the old site (freeze), then SSH on both serversStop content changes, then re-copy the database (and new uploads) if anything changed since your first copy. Re-run the URL replacement from Step 3 if the domain changes.
mysqldump --single-transaction -u OLD_USER -p OLD_DB > final.sql mysql -u NEW_USER -p NEW_DB < final.sql rsync -avz user@old-host:/var/www/html/wp-content/uploads/ /var/www/html/wp-content/uploads/You should see: The newest post, order or form entry from the old site appears on the new site. - 2
Update DNS records
Where: The DNS settings at your DNS providerPoint the A (and AAAA) record, or the CNAME, to the new host. If you change nameservers, recreate every record from your export first, especially MX and TXT (see change nameservers).
dig +short A contoso.com dig +short MX contoso.comYou should see: dig returns the new server's IP and the unchanged MX values. Check DNS propagation from other resolvers too. - 3
Issue SSL and force HTTPS once
Where: The new host's control panel: its SSL or certificates sectionIssue the certificate as soon as DNS resolves, then force HTTPS in one place only (host, plugin or server config) to avoid redirect loops.
curl -I http://contoso.com/You should see: curl shows a single 301 to https://, and the browser shows a valid certificate with no warning. - 4
Check the live site
Where: A browser on your computer with the hosts file entries removed, and your email clientBrowse key pages, place a test order, submit a form and send a test email to and from the domain.
You should see: Pages, orders and forms work on the live domain, and test emails arrive in both directions.
9After the move: protect your SEO4 steps
- 1
Search Console and sitemap
Where: Google Search Console (search.google.com/search-console) > your property > Sitemaps reportVerify the site in Google Search Console if it is not already, enter the sitemap address (WordPress core serves
/wp-sitemap.xmlunless an SEO plugin replaces it) in Add a new sitemap and select Submit. Watch the Pages report and 404s for two weeks.You should see: The sitemap shows status "Success", and the Pages report shows no new spike in "Not found (404)". - 2
Redirect every changed URL
Where: The .htaccess file or nginx server block on the new server, or WordPress admin > Tools > RedirectionIf URLs or the domain changed, add 301 redirects from every old URL to its new one (see set up 301 redirects). For a domain change, also use Search Console's Change of Address tool, as in the domain change guide.
curl -I https://contoso.com/old-page/You should see: Each old URL returns 301 with a Location header pointing at the right new page. - 3
Check speed and Core Web Vitals
Where: PageSpeed Insights (pagespeed.web.dev) in your browser, and the new host's caching or CDN settingsCompare page speed against the old host and enable caching and a CDN where available.
You should see: Key pages score the same as or better than they did on the old host. - 4
Keep the old host briefly
Where: The old host's control panel and billing pageKeep the old hosting for a week or two as a fallback, then download a final backup and cancel. Check email no longer depends on it before you cancel.
You should see: A final backup is stored off both hosts, MX records do not point at the old host, and the old plan is cancelled.
10Wix, Squarespace and WooCommerce4 steps
- 1
Squarespace to WordPress
Where: Squarespace: Import & export content panel > Export > WordPress; then WordPress admin > Tools > Import > WordPressSquarespace exports layout pages, gallery pages and one blog page in a WordPress-format .xml file. Import it in WordPress, then rebuild layouts, products and forms and map every old URL with 301 redirects. Full steps: Wix and Squarespace to WordPress.
You should see: Posts and pages from the export appear in WordPress, and every page that did not export is on your rebuild list. - 2
Wix to WordPress
Where: Your Wix blog's RSS feed; then WordPress admin > Tools > Import > RSSWix has no full export. Import blog posts from the Wix RSS feed with the RSS importer (Wix's feed shows at most 20 posts), copy pages manually, download images, and build a complete redirect map. Full steps: Wix and Squarespace to WordPress.
You should see: Recent posts are imported, and older posts and pages are listed for manual copying. - 3
WooCommerce to Shopify
Where: WP Admin > Products > All Products > Export; then the Store Migration app in your Shopify adminShopify's Store Migration app imports products and customers from WooCommerce CSV files; order history needs a third-party migration app or the Order API. Recreate payment, shipping and tax settings, then redirect product and category URLs. Full steps: WooCommerce to Shopify.
You should see: Products and customers appear in Shopify (products as drafts), with an import report for each file. - 4
Changing the domain at the same time
Where: Your project plan, then Google Search Console (Change of Address) once the host move is stableTreat it as two changes. Move the host first, confirm stability, then change the domain with 301s and Search Console's Change of Address. Full steps: change domain without losing SEO.
You should see: The host move is finished and stable before any domain redirects go live.
Expert notes
The detail behind the plan: options compared, and what experienced engineers check first. Tap any item.
Things to consider
Decisions that change how long the move takes, what it costs and what visitors notice. Settle these before you copy anything.
Where native tools stop short, the purple panels name tools that go further. They are independent products we are not paid to mention, and each link goes to that tool's own documentation.
Find out where email lives before you touch DNS
If mailboxes are hosted with the current web host, changing nameservers or cancelling the old plan stops email. This is the most common surprise in a WordPress host move.
Run dig +short MX contoso.com. If the MX records point at the old web host, plan the email move first (see DNS and email cutover) and never cancel the old plan until mail has moved.
Lower the DNS TTL 24 to 48 hours ahead
Resolvers cache the old address for as long as the record's TTL. With a long TTL some visitors keep reaching the old server for hours after the switch.
Lower the TTL on the A, AAAA and www records at least a day before, as in lower DNS TTL before a migration, and raise it again once the move is stable.
Freeze content and orders for the final sync
Comments, form entries, new posts and WooCommerce orders written to the old database after your copy are lost when DNS moves.
Agree a freeze window, pause orders or use maintenance mode on shops, then re-copy the database just before switching DNS.
Match the PHP and database versions
A plugin or theme that works on the old server can break on a newer PHP version, which shows up as a white screen or critical error.
Check the versions in WordPress admin > Tools > Site Health > Info (Server and Database sections) and choose the same or a tested newer PHP version on the new host.
Never find-and-replace URLs in a raw SQL file
WordPress stores some settings as PHP serialized data. A text editor replace breaks the stored string lengths, and widgets and theme settings disappear. WordPress also says never to change the GUID column.
Use wp search-replace with --skip-columns=guid and a dry run first, as in change WordPress URLs with wp search-replace.
Copy what lives outside WordPress
Migration plugins copy files and the database, not server settings. Custom .htaccess or nginx rules, server cron jobs, PHP settings and SMTP credentials stay behind.
Before the move, save the server rules, the crontab (crontab -l) and any PHP limits you changed, and recreate them on the new host.
Pick the method by site size
Plugin migrations go through upload limits on the new host and can time out on large sites. Command-line copies have no such limit and are easier to repeat for the final sync.
Check the size of wp-content and the database first. Use SSH with rsync and mysqldump, or the host's migration service, for large sites.
These avoid the upload limits and PHP timeouts that stop a plugin import on the new host: one runs the copy on its own servers, the other dumps the database from the command line.
- Migrate GuruRuns the migration on its own servers rather than the live site, handles sites up to 200 GB and does a serialised-safe search and replace.
- WP-CLI
wp db exportdumps the database with mysqldump using the wp-config.php credentials, with--exclude_tablesto skip large log tables.
Plan for SSL straight after cutover
Many hosts can only issue a certificate once the domain points at them, so visitors may briefly see a certificate warning.
Test with the hosts file first, switch DNS at a quiet time and issue the certificate as soon as the domain resolves to the new server.
Keep the old host as a fallback for a week or two
Paying for both hosts for a short overlap costs little compared with a failed move with no way back.
Do not cancel until the new site has run cleanly and you have downloaded a final backup, as in back up a WordPress site.
Choose your approach
Migration plugin
Low effortBest for: Small and medium sites on standard hosting, moved by the site owner
- Copies files and the database in one package, with URL replacement built in
- No SSH or database tools needed
- Works between most hosts (Migrate Guru, Duplicator, All-in-One WP Migration)
- Large sites can hit upload limits or time out on the new host
- Does not copy server rules, server cron jobs or PHP settings
- The final sync means running the whole export and import again
Host's migration service
Low effortBest for: Busy owners and larger sites moving to a managed host that offers it
- The new host does the copy and often checks the result
- Usually includes a temporary URL or staging copy to test on
- Timing depends on the host's queue, so book it ahead of your cutover date
- You still own DNS, email records and the final content freeze
- What is included varies by host; ask exactly what they copy
Manual (SFTP and database)
Medium effortBest for: Any host, when you want full control and no extra plugin
- Works on hosts that block migration plugins
- You see every file and table that moves
- phpMyAdmin covers the database if there is no SSH
- More steps, so more chance of missing wp-config.php or URL changes
- URL replacement must be serialisation-safe; never edit the SQL file by hand
- SFTP copies of large uploads folders are slow
Command line (SSH and WP-CLI)
High effortBest for: Large sites and developers comfortable with rsync, mysqldump and WP-CLI
- No upload limits; handles large databases and uploads folders
- Easy to repeat for the final sync with only the changes copied
- wp search-replace handles serialised data safely
- Needs SSH on both hosts
- Typing errors in commands can overwrite the wrong database
Use a migration plugin for a typical small site, and the host's service if your new host offers one and you would rather not do it yourself. If the site is large, the plugin times out or you need a quick final sync for a shop, use SSH and WP-CLI. Whichever you pick, take your own backup first and keep the old host until the new site has run cleanly.
Check it worked, or roll back
Validation checks
Run these before you declare the migration complete. Record the results in the data validation report.
| Check | How to check | What good looks like |
|---|---|---|
| The domain reaches the new server | Run | Every resolver returns the new server's IP, and the old IP no longer appears. |
| Content counts match the old site | On both servers run | The same counts on both sides, apart from anything created after the final sync. |
| The database is complete and healthy | Run | The same tables (including plugin tables) on both servers, and wp db check ends with a Success line. |
| No old URLs are left | Run | Both options print the new address, and the dry run reports 0 replacements. |
| Theme and plugins match the record | Run | The same active theme and plugins, with none disabled because of a PHP error. |
| HTTPS works with one redirect | Run | A single 301 to https://, a valid certificate and no mixed-content warnings in the browser Console. |
| Forms, logins and checkout work | On the live domain, submit each form, log in, trigger a password reset and place a test order. | Every test entry, email and order arrives where it should. |
| Email and DNS records are unchanged | Run | MX, SPF, DKIM and DMARC values match the record sheet, and test emails arrive in both directions. |
| Scheduled tasks run | Run | WP-Cron spawning works, events show upcoming run times, and the server cron entries from Step 1 exist. |
| Search engines see no new errors | In Google Search Console, open the Pages report and the Sitemaps report for the property. | The sitemap shows Success and there is no new spike in "Not found (404)" in the days after the move. |
Rollback plan
Roll back if
- Checkout or payments fail on the live domain and cannot be fixed within the agreed window
- A critical error, white screen or database connection error on key pages that a quick fix does not clear
- Orders, posts or form entries from the final sync are missing on the new site
- Email stops arriving after the DNS change
- The SSL certificate cannot be issued and visitors keep seeing certificate warnings
Point of no return
Once visitors place orders, leave comments or submit forms on the new site, pointing DNS back means that data must be copied back by hand. Cancelling the old hosting plan or deleting its files removes the fallback completely. Keep the old host, untouched, until validation passes.
- 1
Stop new changes on the new site
Where: SSH session on the new server, in the WordPress folderPut the new site in maintenance mode so no more orders or content are written to it while you switch back. Note the time.
wp maintenance-mode activateYou should see: Visitors see the maintenance page, andwp maintenance-mode statusreports that it is active. - 2
Point DNS back at the old host
Where: The DNS settings at your DNS provider, using the DNS cutover record sheetSet the A (and AAAA) record, or the CNAME, back to the old values. If you changed nameservers, switch them back at the registrar and confirm every MX and TXT record is still in place. The low TTL you set in Step 1 keeps this fast.
dig +short A contoso.com dig +short MX contoso.comYou should see: dig returns the old server's IP, and MX values match the record sheet. - 3
Reopen the old site
Where: SSH session on the old server (or WordPress admin on the old site)Turn off maintenance mode or the content freeze, re-enable orders on shops, and browse the site with the hosts file entries removed.
wp maintenance-mode deactivateYou should see: The old site loads on the live domain with a valid certificate, and a test order or form entry works. - 4
Copy back anything written on the new site
Where: WordPress admin on the new site (WooCommerce > Orders, Comments, your forms plugin), reached with the hosts fileList orders, comments, form entries and posts created on the new site since the switch, and re-enter or export them into the old site. Tell affected customers if an order needs to be placed again.
You should see: Every record created on the new site since the switch is on the old site or has a named owner following it up. - 5
Record the cause and plan the retry
Where: Your rollback plan and project notesWrite down what failed, when you rolled back and what you will change. Keep the new host's copy for diagnosis, and repeat the final sync from Step 5 before the next attempt.
You should see: A dated note of the cause and a new cutover date agreed with the site owner.
Agree the triggers and who decides before the go / no-go meeting. Use the rollback plan template.
Common WordPress migration errors
Error establishing a database connectionCause: wp-config.php has the old database name, user, password or host.
Fix: Update the DB_ settings and confirm the user has rights to the new database.
ERR_TOO_MANY_REDIRECTSCause: HTTPS is forced in two places, or siteurl and home still point at the old address.
Fix: Force HTTPS in one place only and fix siteurl and home with wp option update.
Every page except the home page returns 404Cause: Rewrite rules or .htaccess were not copied.
Fix: Re-save permalinks (wp rewrite flush) and check the server rewrite configuration.
Mixed content warnings after enabling SSLCause: Links to images and scripts still use http://.
Fix: Run a search and replace from http:// to https:// and clear caches.
Email stopped working after the moveCause: Nameservers changed and the MX records were not recreated.
Fix: Restore MX, SPF, DKIM and DMARC records from your DNS export.
White screen or critical errorCause: A plugin or theme is not compatible with the new PHP version.
Fix: Enable WP_DEBUG_LOG, disable the plugin via the plugins folder, or match the old PHP version.
Frequently asked questions
Will moving hosts hurt my Google rankings?
Not if URLs stay the same, the site stays fast and there is little downtime. Changing URLs or domains needs 301 redirects.
How long does a WordPress migration take?
Small sites often move in under an hour. DNS changes can take up to the old TTL to reach everyone, which is why you lower it first.
Do I need to move my email too?
Only if it is hosted with your web host. Many businesses keep email in Microsoft 365 or Google Workspace and only change the website records.

