August 30, 2026
WordPress site migration process showing DNS settings and server transfer workflow
Learn how to move WordPress to a new host without downtime using DNS prep, migration plugins, and parallel hosting during propagation.

Moving your WordPress site to a new host always carries the risk of downtime, lost traffic, and broken functionality if DNS propagation catches you unprepared. The actual file and database transfer is rarely the problem. The danger lies in the window between when you update your nameservers and when every visitor’s DNS cache refreshes to point at the new server. This article walks through the exact process to migrate WordPress without taking your site offline, using a combination of preparation, testing on the new host before switching DNS, and keeping both servers live during propagation.

The setup

You need access to both your current hosting control panel and the new host’s control panel, your domain registrar’s DNS settings, and either FTP credentials or SSH access to both servers. This process does not require taking your site into maintenance mode or pausing live traffic. The migration happens silently in the background while your old server continues to serve visitors.

Lower your DNS TTL before you start

DNS TTL (Time To Live) controls how long internet service providers and browsers cache your domain’s IP address. If your TTL is set to 86400 seconds (24 hours), any DNS change takes up to a full day to reach every visitor. That means a full day of mixed traffic, where some users see the old server and others see the new one.

Log into your domain registrar or DNS provider at least 24 to 48 hours before migration. Look for the DNS management section and find the TTL value next to your A record. Change it to 300 seconds (5 minutes). This tells the internet to refresh its cached IP address every five minutes instead of every day.

wordpress migration

The change itself takes time to propagate under the old TTL value, which is why you need to set it 24 to 48 hours in advance. Once the low TTL is in effect globally, any future DNS update will propagate much faster. After your migration is complete and stable for a few days, you can raise the TTL back to 3600 or higher to reduce DNS query load.

Copy your site to the new host and test before going live

Most WordPress users reach for a migration plugin because manually exporting a database, transferring files via FTP, and editing wp-config.php on a new server is tedious and error-prone. All-in-One WP Migration and Duplicator both automate the entire process. Install the plugin on your current site, create a full export package, download it, then install the same plugin on a fresh WordPress install at your new host and import the package.

The new host typically gives you a temporary URL or an IP address you can use to access the site before DNS points there. If they do not, you can edit your local computer’s hosts file to force your browser to resolve your domain to the new server’s IP address. On Windows, the file is located at:

C:\Windows\System32\drivers\etc\hosts

On macOS and Linux:

/etc/hosts

Add a line like this, replacing the IP with your new server’s address:

192.0.2.45 yourdomain.com
192.0.2.45 www.yourdomain.com

Save the file (you need administrator or root access), then flush your DNS cache. On Windows, open Command Prompt and run:

ipconfig /flushdns

On macOS:

sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder

Now when you visit your domain in a browser on that computer, you see the new server. Click through the site, test forms, check the admin dashboard, place a test WooCommerce order if applicable, and confirm all plugins and themes load correctly. This is your chance to catch configuration issues, file permission errors, or missing PHP extensions before any real visitor hits the new server.

Update DNS and keep the old host live

Once you have verified the new site works, log into your domain registrar and update the A record to point to the new server’s IP address. If you use a CDN like Cloudflare, update the origin IP in the Cloudflare dashboard as well. Do not cancel or shut down your old hosting account yet.

DNS propagation is not instant. Even with a 300-second TTL, some ISPs ignore the value and cache longer. Some users will still reach your old server for 24 to 72 hours. If you shut down the old host immediately after changing DNS, those users see a dead site. Keep both servers live and serving the same content for at least 72 hours.

During this window, any changes you make to content, settings, or products need to happen on the new server. The old server is effectively frozen. If someone places an order or submits a form on the old server during propagation, you will not see it on the new host unless you manually check the old database. For most sites, this overlap period is short enough that freezing new content is acceptable. For high-traffic stores, consider putting the old site into a read-only mode or redirecting checkout to the new server using a temporary plugin.

After 72 hours, check your old server’s access logs. If traffic has dropped to near zero, propagation is complete. You can cancel the old hosting plan.

What breaks

The new site loads but images are broken or missing

This happens when the file transfer skipped the wp-content/uploads directory or a migration plugin hit a file size limit and silently excluded large images. Most free versions of migration plugins cap exports at 300 MB or 500 MB. If your uploads folder is 2 GB, the export completes without error but leaves out most media files.

Download your wp-content/uploads folder from the old host via FTP or your hosting file manager. Upload it to the same path on the new host. If the folder is large, use an FTP client like FileZilla instead of a web-based file manager, which often times out on big transfers. Alternatively, upgrade to the paid version of your migration plugin to bypass the file size cap.

The site works but the domain still points to the old server hours after DNS update

You are likely looking at a cached DNS result on your own computer or network. Your ISP’s DNS resolver may still return the old IP even though authoritative nameservers updated. Open a terminal and query an external DNS server directly to confirm propagation:

nslookup yourdomain.com 8.8.8.8

If Google’s DNS (8.8.8.8) returns the new IP but your browser still shows the old site, flush your local DNS cache using the commands from the testing section above. If the external DNS still returns the old IP, propagation is ongoing. Wait another few hours. If it has been over 48 hours and external DNS still shows the old IP, log back into your domain registrar and verify you saved the A record change. Some registrars require clicking a final confirmation button separate from the save action.

WooCommerce orders are split between old and new servers

This occurs when you updated DNS but customers who still resolve to the old server place orders that only exist in the old database. The new server never sees them. You discover the problem days later when a customer emails asking about a missing order confirmation.

Check your old server’s database for orders placed after the DNS cutover time. Export those orders from wp_posts, wp_postmeta, and the WooCommerce-specific tables (wp_wc_orders if using High-Performance Order Storage, or the legacy post-based system). Import them into the new database. For future migrations, use a plugin like WP Migrate to sync databases in near-real-time during the propagation window, or set up a database replication link so both servers write to the same backend until propagation completes.

FAQs

Can I migrate WordPress without a plugin by doing it manually?

Yes, but it requires exporting your database via phpMyAdmin, downloading all files via FTP, uploading them to the new host, importing the database, and editing wp-config.php with the new database credentials. You also need to run a search-replace query on the database to update any hardcoded URLs from the old server path to the new one. A plugin automates all of that and reduces the chance of a typo breaking the site.

How long should I wait before canceling my old hosting account?

Wait 72 hours minimum after updating DNS. Check your old server’s access logs or analytics. If you see zero or near-zero traffic for 24 consecutive hours, propagation is complete. If your site has a large international audience, extend the wait to a full week because some regions propagate slower. Keep the old host active through at least one billing cycle if you are unsure.

Do I need to update anything in WordPress after the DNS points to the new server?

If you used a migration plugin, it already updated the site URL in the database. If you did a manual migration and forgot to search-replace the old domain, go to Settings > General in the WordPress admin and confirm both WordPress Address (URL) and Site Address (URL) show your correct domain with no IP address or temporary URL. If they still show the old server’s details, update them and save. Clear your site cache and any CDN cache after the change.

What happens if I cancel the old host before DNS propagates?

Visitors whose DNS still points to the old IP will see a server error, a parking page from the hosting company, or a “site not found” message. You lose traffic and credibility during that window. If you already canceled the old host and propagation is incomplete, contact the old hosting company and ask to reactivate the account temporarily. Most will allow a grace period reactivation if you catch it within 24 to 48 hours.

Can I test the new server without editing my hosts file?

Yes, use the temporary URL your new host provides, usually something like server123.yourhostingcompany.com/~username or an IP address with a subdirectory. Be aware that some WordPress features, especially SSL redirects and CDN integrations, may not work correctly on a temporary URL. The hosts file method gives you a more accurate preview because WordPress sees your real domain in the HTTP headers.

Verdict: Use a migration plugin like All-in-One WP Migration or Duplicator if your site is under 500 MB and you want a one-click process. Use manual FTP and database export if you need full control over file transfers and have a large uploads folder that exceeds plugin limits. Always lower DNS TTL 48 hours in advance and keep the old host live for 72 hours after switching DNS to avoid any visitor seeing downtime.