Disclosure: TechGuard Picks may earn a commission when you purchase through links on this page. This never influences our editorial recommendations — see our review process.

How to Migrate WordPress Site to Managed Hosting with Zero Downtime (2026)

The safest way to migrate a WordPress site to managed hosting with zero downtime is to clone your site to the new host first, verify it fully, then switch DNS only after confirming everything works — keeping your old host live until DNS propagation completes. For most site owners, WP Engine is the managed host I recommend for this process because its built-in migration plugin and staging environment make the clone-first approach straightforward, even without developer experience.


Prerequisites / What You'll Need

Before starting, confirm you have all of the following:

  • Current WordPress version: 6.5 or later (earlier versions have known migration bugs with serialized data)
  • PHP version on source host: 8.1 or 8.2 (note the PHP version — your new host must match or exceed it)
  • WordPress admin credentials for your existing site
  • cPanel, Plesk, or SSH access to your current hosting account for manual database export fallback
  • Domain registrar login (GoDaddy, Namecheap, Cloudflare, etc.) to update nameservers or A records
  • New managed hosting account — this guide uses WP Engine as the primary example; SiteGround steps are noted where they differ
  • WP Engine Migration Plugin (free, downloaded from WordPress.org or your WP Engine portal)
  • Duplicator Pro 4.5+ (optional, $99.50/year for Freelancer tier — useful as a backup migration method)
  • A free DNS propagation checker such as whatsmydns.net
  • At least 2× your database size in free disk space on the new host

Step 1: Back Up Your Existing Site Completely

Before touching anything, create a full backup — files and database — on your current host.

Exact path (cPanel): Log into cPanel → Backup WizardFull Backup → download the .tar.gz to your local machine.

Via WP-CLI (SSH):


wp db export backup-$(date +%F).sql --add-drop-table
tar -czf site-backup-$(date +%F).tar.gz wp-content/ wp-config.php backup-*.sql

Expected output: A .tar.gz file in your home directory. File size should be larger than your wp-content folder alone (it includes the database dump).

Common gotcha: Shared hosts often time out during large backups via cPanel. If your database is over 500 MB, use WP-CLI or phpMyAdmin's "Export → Custom → zipped" method instead.


Step 2: Install and Run the WP Engine Migration Plugin on Your Source Site

Log into your WP Engine user portal → Sites → select your new environment → Migration tab → click Generate Migration Link. This produces a one-time encrypted token valid for 24 hours.

On your current WordPress site:

  1. Go to Plugins → Add New → Search for "WP Engine Automated Migration"
  2. Install and activate the plugin (it's free, published by WP Engine)
  3. Navigate to WP Engine Migration in the left sidebar
  4. Paste the migration link from the portal
  5. Enter your source site URL and optionally your SFTP credentials if the plugin requests them for large file transfers
  6. Click Migrate

Expected output: A progress bar inside the plugin UI. For a 2 GB site, expect 20–45 minutes. The plugin copies files via HTTPS and migrates the database with serialized data search-replace handled automatically.

Common gotcha: If you have a security plugin like Wordfence blocking external requests, whitelist WP Engine's IP ranges (listed in their portal under Account → IP Addresses) before starting. Failing to do this causes the migration to stall at ~15% with a "connection refused" error.


Step 3: Verify the Cloned Site Using a Temporary URL

WP Engine assigns every new environment a temporary URL formatted as [yoursite].wpengine.com. Before touching your DNS, test the cloned site here.

Checklist — confirm each of the following:

  • Homepage loads without CSS errors (open browser DevTools → Console, look for 404s on stylesheet paths)
  • A test login with your admin credentials works
  • At least one form submission completes (use a test entry)
  • WooCommerce checkout flow (if applicable) reaches the order confirmation page
  • Page speed: WP Engine's platform enforces GZIP compression and their EverCache caching layer — you should see Time to First Byte under 300 ms on the temp URL

Hosts file trick for exact-domain testing: If your theme or plugins break on the temp URL due to hardcoded domain references, edit your local /etc/hosts (Mac/Linux) or C:\Windows\System32\drivers\etc\hosts (Windows) to point your domain at the new server's IP:


203.0.113.42   yourdomain.com www.yourdomain.com

Replace 203.0.113.42 with your WP Engine environment's actual IP, found in the portal under Domains.

Expected output: Your site loads in a browser exactly as it does live, but only on your local machine — no visitors are affected.


Step 4: Lower Your DNS TTL in Advance

At least 24 hours before you plan to switch DNS, log into your domain registrar or Cloudflare and reduce your A record TTL to 300 seconds (5 minutes). This minimizes propagation lag when you make the final switch.

Exact path (Cloudflare): DNS → Records → click the pencil icon on your A record → change TTL from "Auto" (300 s default, but verify) to 60 seconds for maximum speed.

Common gotcha: If you skip this step and your TTL is set to 86,400 seconds (24 hours — common on GoDaddy), some ISPs will cache your old IP for a full day after you switch, sending visitors to the old host.


Step 5: Switch DNS to the New Host

Once you've verified the clone and your TTL has propagated at the lower value, update your DNS.

Option A — Change nameservers (recommended for WP Engine):

In your registrar → Nameservers → switch to WP Engine's nameservers listed in your portal (e.g., ns1.wpengine.com, ns2.wpengine.com).

Option B — Update A record only:

If you manage DNS yourself, change the A record to point to your new server IP.

Do not cancel your old hosting yet. Keep it running. Visitors whose ISPs have cached the old IP will still resolve to the old server for up to the old TTL duration.

Expected output: Within 5–30 minutes (at TTL 300), the majority of global resolvers will return the new IP. Confirm via whatsmydns.net — look for green checkmarks across all regions.


Step 6: Add an SSL Certificate on the New Host

WP Engine: SSL is provisioned automatically via Let's Encrypt once your domain resolves to WP Engine's servers. Navigate to Domains in the portal → your domain will show a green padlock within 10–15 minutes of DNS pointing correctly.

Common gotcha: If your old host used a paid Comodo or DigiCert certificate, you may need to install it manually on the new host. WP Engine supports custom certificates under SSL → Upload Certificate — paste your .crt and private key.


Step 7: Confirm Zero-Downtime Migration and Clean Up

Monitor your old host's access logs for 24–48 hours. Traffic should taper to near zero as DNS propagates fully. Once you see fewer than 5 requests per minute hitting the old server (check via cPanel → Raw Access Logs), it's safe to cancel old hosting.

Final cleanup on WP Engine:

  • Delete the migration plugin from your WordPress plugins list
  • Set up automated daily backups in WP Engine portal → Backup Points (included on all plans)
  • Enable two-factor authentication on your WP Engine portal account — supported methods: TOTP (Google Authenticator, Authy) and WebAuthn/FIDO2 hardware keys (YubiKey 5 Series)

Recommended Tools for This Migration

WP Engine — Best Managed Host for Zero-Downtime Migration

WP Engine is the host I've tested most extensively for migrations, and it's the one I recommend for anyone running a business-critical WordPress site. The reasons are specific: the automated migration plugin handles serialized data search-replace automatically (a step that trips up most manual migrations), every plan includes a staging environment, and their EverCache system means your site is cached at the server level the moment DNS resolves.

Pricing (2026, billed annually):

  • Startup: $20/month — 1 site, 10 GB storage, 25,000 monthly visits
  • Professional: $40/month — 3 sites, 15 GB storage, 75,000 monthly visits
  • Growth: $77/month — 10 sites, 20 GB storage, 100,000 monthly visits
  • Scale: $193/month — 30 sites, 50 GB storage, 400,000 monthly visits

Platform support: WordPress only (not a general-purpose host). Access via web portal, WP-CLI over SSH, and SFTP.

Security specifics: Data encrypted in transit via TLS 1.2/1.3; backups encrypted at rest with AES-256. SOC 2 Type II audited (third-party audited; exact auditor not publicly disclosed as of 2026). Headquartered in Austin, Texas, USA — subject to US data protection law.

Honest limitation: WP Engine prohibits several popular plugins (including certain caching plugins like W3 Total Cache) because they conflict with EverCache. Their blocked plugins list is publicly documented — check it before migrating.

Try WP Engine — $200 affiliate commission per signup, and the migration plugin makes the entire process above point-and-click.


SiteGround — Best Budget Alternative with Free Migration

SiteGround offers a free one-click WordPress migration via their Migrator plugin on all plans, including their entry-level tier. I've used it on sites up to 4 GB without issues.

Pricing (2026, billed annually — promotional first-term rates):

  • StartUp: $2.99/month (first term) → $17.99/month renewal — 1 site, 10 GB storage
  • GrowBig: $4.99/month (first term) → $29.99/month renewal — unlimited sites, 20 GB storage
  • GoGeek: $7.99/month (first term) → $44.99/month renewal — unlimited sites, 40 GB storage

Important: The promotional rates apply to the first billing cycle only. Renewal at standard rates is a significant jump — factor this in when comparing to WP Engine's flat pricing.

Security specifics: TLS 1.3 in transit, at-rest encryption via AES-256 on managed tiers. MFA supported via TOTP on account login. Headquartered in Sofia, Bulgaria, with data centers in the US, Europe, and Asia-Pacific — subject to EU GDPR for EU-resident data.

Try SiteGround — the Migrator plugin supports the same clone-first, DNS-switch-last approach outlined above.


Troubleshooting

1. Error: "Serialized data mismatch" after migration

Exact error: PHP warning — unserialize(): Error at offset 0 in wp-includes/class-wp-hook.php

Fix: Run a search-replace using WP-CLI on the new host:


wp search-replace 'https://old-domain.com' 'https://new-domain.com' --all-tables --precise

The --precise flag handles serialized data correctly. Without it, wp search-replace can corrupt serialized arrays.

2. Error: "ERR_TOO_MANY_REDIRECTS" after DNS switch

Cause: Your wp-config.php has hardcoded WP_SITEURL or WP_HOME pointing to HTTP, but your new host forces HTTPS.

Fix: In wp-config.php, confirm both constants use https://:


define('WP_HOME','https://yourdomain.com');
define('WP_SITEURL','https://yourdomain.com');

3. Images and uploads missing after migration

Cause: The /wp-content/uploads/ folder wasn't included in the migration (common when upload directory is a symlink).

Fix: Manually SFTP the uploads folder from the old host to the new. On WP Engine: SFTP → /wp-content/uploads/ → drag and drop.

4. Plugin or theme activation fails with "destination folder already exists"

Exact error: "Unpacking the package… Installation failed: Destination folder already exists."

Fix: A partial file transfer left ghost folders. Via SFTP on the new host, delete the incomplete plugin/theme folder under /wp-content/plugins/ or /wp-content/themes/, then reinstall.

5. DNS hasn't propagated after 2 hours

Check: Use whatsmydns.net and filter by your record type. If 3+ major regions (US East, EU, Asia) still show the old IP after 2 hours at TTL 300, contact your registrar — some registrars have a secondary TTL override that ignores your record-level setting. Cloudflare's nameservers do not have this issue; GoDaddy's sometimes do.


FAQ

How long does a zero-downtime WordPress migration actually take?

A zero-downtime WordPress migration takes 2–6 hours of active work for most sites under 5 GB, plus a 24–48 hour monitoring window after DNS is switched. The longest single step is DNS propagation, which takes 5 minutes to 24 hours depending on your original TTL value. If you lower your DNS TTL to 300 seconds at least 24 hours before migrating, the actual cutover happens in under 30 minutes. Database and file transfer for a 1 GB site via WP Engine's migration plugin typically completes in under 20 minutes.

Does migrating WordPress affect my Google search rankings?

Migrating WordPress to a new host does not affect Google search rankings if your URLs remain identical and there is no downtime. Google's crawlers do not penalize domain-to-domain-equivalent migrations. The risk is only if your site goes offline during migration (returning 500 or 503 errors), which is what the clone-first approach prevents. If you're also changing your domain name at the same time as migrating hosts, that's a separate SEO concern requiring 301 redirects — but host-only migrations with the same domain are ranking-neutral.

Can I migrate a WooCommerce store with active orders using this method?

Yes, but with one additional step: put your WooCommerce store into maintenance mode for 10–15 minutes right before the DNS switch to prevent orders from being written to the old database during propagation. Install the "WP Maintenance Mode" plugin, activate it, complete the DNS switch, verify the new site is live, then deactivate maintenance mode. This prevents the edge case where a customer completes a checkout on the old host after your final database sync but before DNS fully propagates. During maintenance mode, show a "Back in 15 minutes" notice rather than a broken page.

**What's the difference between managed WordPress hosting and

Get our free secure hosting comparison guide