Migrating WordPress to a new host without downtime requires a specific order of operations: move the site first, test it thoroughly on the new host, then switch DNS. If you switch DNS first, you get downtime. The key is using the new host’s temporary URL to verify the migration before any visitor is affected.
Step 1: Choose Your Migration Method
Duplicator or Migrate Guru plugin – the most reliable method for most sites. These plugins package your entire WordPress installation (files + database) into a single archive, which you then deploy on the new host. Duplicator free handles sites under 500MB well; Migrate Guru (free, from BlogVault) handles large sites with no file size limit.
Manual migration – export the database via phpMyAdmin, transfer files via FTP, and configure the new installation. More steps but more control. Covered in Step 3 below.
Host migration service – many new hosts migrate WordPress sites for free as part of their onboarding. Kinsta, WP Engine, and Cloudways all offer free migrations. Worth using if available – experienced migrations teams have done this thousands of times.
Step 2: Set Up the New Host
Create a hosting account on the new host and set up a new WordPress installation. Note the new host’s temporary domain or IP address – this is what you use to access the migrated site before DNS switches. Most managed hosts provide a temporary URL like yoursite.kinsta.cloud or an IP-based URL.
Create the target database on the new host and note the database name, username, and password. You need these for the migration step.
Need help optimising your WordPress site? Describe your project and get a free estimate.
Step 3: Migrate With Duplicator
On the current (old) host:
- Install Duplicator and go to Duplicator -> Packages -> Create New
- Run through the wizard – Duplicator scans your site and creates a package (two files: an installer.php and an archive.zip)
- Download both files to your computer
On the new host:
- Upload both Duplicator files to the new host’s web root (public_html or www) via FTP
- Navigate to yoursite.com/installer.php (using the new host’s temporary URL)
- Follow the Duplicator wizard: enter the new database credentials, accept the overwrite warning
- Duplicator imports the database and configures WordPress for the new environment
Step 4: Test on the New Host Before DNS Switch
Before changing DNS, verify the migrated site works correctly. Add a hosts file entry on your computer to view the migrated site at the production domain without changing public DNS:
On Windows: edit C:WindowsSystem32driversetchosts as administrator
On Mac/Linux: edit /etc/hosts with sudo
Add: NEW_HOST_IP yourdomain.com
Now when you visit yourdomain.com in your browser, you see the new host’s version while everyone else still sees the old host. Test thoroughly: check all pages, forms, checkout flows, logins, and any custom functionality. Fix any issues before proceeding.
Step 5: Switch DNS
When the migrated site passes all tests, update your domain’s DNS to point to the new host’s IP address. DNS changes propagate globally over 1-48 hours. During propagation, some visitors see the old host and some see the new host. Keep the old host running until propagation completes (usually 24 hours) so neither group sees downtime.
Lower your domain’s TTL (Time to Live) to 300 seconds 24 hours before the DNS switch. This makes DNS changes propagate faster. After propagation is confirmed, you can raise the TTL back to a normal value (3600-86400 seconds).
Step 6: Post-Migration Tasks
After DNS propagation: run a search-replace if the site URL changed (rare, but happens if the site was accessed differently on the new host). Clear all caches on the new host. Test SSL certificate – the new host should have a valid certificate for your domain. Remove the hosts file entry from your test computer. Cancel the old hosting after confirming everything works for 1-2 weeks.
Checklist: After DNS Propagation Completes
Run through this checklist once DNS has fully propagated (verify at dnschecker.org that your domain resolves to the new host’s IP from multiple global locations):
- Browse to your site from a phone (not your test computer with the hosts file entry) and verify it loads correctly
- Check that SSL certificate is valid and shows the correct domain – click the padlock in the browser
- Submit a test contact form and verify the notification email arrives
- If WooCommerce: place a test order through to payment completion, verify the order appears in WooCommerce admin
- Check wp-config.php has the correct database credentials for the new host’s database
- Clear all caches: hosting server cache, CDN cache (Cloudflare if used), and WordPress caching plugin
- Verify Google Analytics or Search Console still tracking correctly
- Remove the hosts file entry from your test computer
- Keep the old hosting account active for 7-14 days before cancelling, in case any issue requires rolling back