The safest way to migrate a WordPress site to a new host without downtime is to clone your site to the new server first, verify it works using a temporary URL or modified hosts file, then cut over DNS only after confirming everything is live — keeping your old host active until DNS propagation completes. This approach eliminates the gap between "old host down" and "new host live" that causes most migration outages.
What You'll Need Before Starting
- WordPress 6.5 or later on your current host (check: Dashboard → Updates)
- PHP 8.2 or later on the new host (confirm in the new host's control panel)
- FTP/SFTP credentials or cPanel/hPanel file manager access for both hosts
- A MySQL 8.0-compatible database created on the new host (username, password, host, DB name saved)
- The Duplicator plugin (free, version 1.5+) or All-in-One WP Migration (free up to 512 MB; paid unlimited license at $69 one-time)
- Access to your domain registrar's DNS panel
- Current DNS TTL value noted (find it in your registrar or with
dig +noall +answer yourdomain.comin terminal) - A staging or temporary URL from your new host (most managed hosts provide one by default)
- 2–4 hours of uninterrupted time
Step 1: Lower Your DNS TTL (24–48 Hours Before Migration)
Log in to your domain registrar's DNS management panel. Find the A record (and CNAME for www) pointing to your current host's IP. Change the TTL value from whatever it is now — typically 3600 seconds (1 hour) or 86400 seconds (24 hours) — down to 300 seconds (5 minutes).
Why this matters: TTL controls how long DNS resolvers cache your record. A lower TTL means that when you flip DNS to the new host, the change propagates globally in roughly 5–10 minutes instead of up to 24 hours. Visitors who hit your old host during propagation still see a live site — that's the key to zero downtime.
Gotcha: Some registrars enforce a minimum TTL of 600 seconds. If yours does, use 600. Don't skip this step even if you think propagation is fast — without it, a slice of your traffic will hit a dead server if your old host goes down before the switch is fully propagated.
Step 2: Clone Your WordPress Site Using Duplicator
Install Duplicator on your current WordPress install: Plugins → Add New → search "Duplicator" → Install → Activate.
Navigate to Duplicator → Packages → Create New. Name your package (e.g., migration-2026-09-26), leave the default scan settings, and click Build. Duplicator will scan your install, report any warnings (file size, PHP limits), and generate two files:
installer.php— the setup script[package-name].zip— your complete site archive (files + database dump)
Download both files to your local machine via the Duplicator download buttons. Do not skip downloading the installer — the zip alone is useless without it.
Expected output: A zip file between 50 MB and several GB depending on your media library. If you get a "Could not create archive" error, your host's PHP max_execution_time is too low — increase it temporarily to 300 seconds via php.ini or wp-config.php (set_time_limit(300)).
Gotcha: Sites over 2 GB often fail with the free version. Use Duplicator Pro ($69.99/year for 1 site, $99.99/year for 3 sites) or switch to All-in-One WP Migration with the unlimited extension ($69 one-time) for large sites.
Step 3: Upload Files to the New Host
Connect to your new host via SFTP (recommended over FTP — uses SSH-encrypted transport, typically port 22) or the host's file manager.
Navigate to the public_html directory (or the directory configured as your document root). Upload both installer.php and the .zip archive to that directory. Depending on file size and connection speed, this is typically the longest step — a 500 MB site takes 5–15 minutes on a standard connection.
Gotcha: Don't upload inside a subfolder unless you're intentionally installing WordPress in a subdirectory. The installer must sit at the root your domain resolves to.
Step 4: Run the Installer on the New Host
Open a browser and navigate to your new host's temporary URL followed by /installer.php. Every major managed host provides a temporary preview URL — for example, WP Engine provides a wpengine.com subdomain; SiteGround's staging environment uses a sgp.io URL; Hostinger provides a temporary domain in hPanel under Hosting → Manage → Temporary Domain.
The Duplicator installer will walk you through four steps:
- Deploy — confirms both files are present
- Setup — enter your new database credentials (host: usually
localhost, DB name, username, password you created in prerequisites) - Install — extracts the archive and imports the SQL dump; watch the progress bar
- Update Paths — Duplicator automatically updates serialized URLs in the database from your old domain to the new one
At the final screen, Duplicator will ask you to delete the installer files. Do this — leaving installer.php exposed is a security risk.
Expected output: You should see your WordPress login screen at [temporary-url]/wp-admin. Log in with your existing credentials and verify the site looks correct before touching DNS.
Step 5: Verify the Cloned Site Thoroughly
Before switching DNS, confirm the following:
- Homepage loads at the temporary URL with correct styling (CSS loading from the right path)
- All internal links resolve without redirecting to your old domain
- Forms submit correctly (test with a dummy submission)
- WooCommerce checkout (if applicable) completes a test order in sandbox mode
- SSL certificate is provisioned on the new host — most hosts auto-issue via Let's Encrypt within 10 minutes of domain verification
- Admin panel is accessible and plugins/themes show the correct versions
If any links point to your old domain, go to Tools → Search Replace (install the Better Search Replace plugin) and run a dry-run search for your old host's temporary IP or the old domain, replacing with your new domain.
Step 6: Switch DNS to the New Host
Log back into your domain registrar. Update the A record for @ (root domain) and www to your new host's IP address. Because you already lowered the TTL in Step 1, this propagates globally in approximately 5–10 minutes.
Run dig +short yourdomain.com in your terminal every few minutes. When it returns your new host's IP, propagation is complete for your location. Use whatsmydns.net to verify propagation across multiple global regions simultaneously.
Keep your old host account active for at least 48 hours. Some DNS resolvers ignore TTL and cache records for longer than expected. If a visitor hits your old host during this window, they still see a live site.
Recommended Hosting Providers for a Smooth Migration
SiteGround
SiteGround is the host I recommend most often for WordPress migrations because their WordPress Migrator plugin (free, exclusive to SiteGround customers) automates the entire clone-and-deploy process in one click — no manual zip uploads required. It handles serialized data replacement and SSL provisioning automatically.
SiteGround pricing in 2026:
- StartUp: $3.99/mo (renews at $17.99/mo), billed annually, 1 website, 10 GB SSD
- GrowBig: $6.69/mo (renews at $29.99/mo), billed annually, unlimited websites, 20 GB SSD, staging environment included
- GoGeek: $10.69/mo (renews at $44.99/mo), billed annually, priority support, 40 GB SSD
SiteGround is headquartered in Bulgaria with data centers in the US, EU, Asia-Pacific, and Australia — giving you GDPR coverage for EU-based sites. Their platform runs on Google Cloud infrastructure. Managed WordPress plans include daily automated backups, and their staging environment (GrowBig and above) makes pre-migration verification straightforward. One honest negative: renewal prices jump significantly after the first term, so factor that into your 12-month budget.
Try SiteGround — the built-in WordPress Migrator plugin makes this whole process faster and less error-prone than manual methods.
WP Engine
WP Engine is the right choice if you're migrating a high-traffic or business-critical WordPress site where the cost of downtime exceeds the higher hosting fee. Their Automated Migration plugin (free in the WordPress plugin directory, purpose-built for WP Engine) handles sites up to 20 GB and includes an integrity check that flags missing files post-migration.
WP Engine pricing in 2026:
- Starter: $20/mo billed monthly ($16/mo billed annually), 1 site, 10 GB storage, 25,000 visits/mo
- Professional: $39/mo billed monthly ($30/mo billed annually), 3 sites, 15 GB storage, 75,000 visits/mo
- Growth: $77/mo billed monthly ($60/mo billed annually), 10 sites, 20 GB storage, 150,000 visits/mo
- Scale: $193/mo billed monthly ($150/mo billed annually), 30 sites, 50 GB storage, 400,000 visits/mo
WP Engine is headquartered in Austin, Texas, USA, subject to US data-protection law. Every plan includes Genesis Framework, 35+ StudioPress themes, and enterprise-grade CDN via Cloudflare integration. Their environment uses PHP 8.2+ and enforces automatic WordPress core updates — which is a genuine con if you need to lock a specific WP version for legacy plugin compatibility.
Try WP Engine — best for business-critical migrations where you need a verified staging environment and rollback capability built in.
Hostinger
For budget-conscious migrations, Hostinger offers an auto-migration service (free on Business and Cloud plans) and their hPanel makes database and file management straightforward for manual migrations.
Hostinger pricing in 2026:
- Single: $1.99/mo billed annually, 1 website, 50 GB SSD
- Premium: $2.99/mo billed annually, 100 websites, 100 GB SSD
- Business: $3.99/mo billed annually, 100 websites, 200 GB SSD, daily backups, free migration
- Cloud Startup: $9.99/mo billed annually, 300 websites, 200 GB NVMe SSD, dedicated resources
Hostinger is headquartered in Kaunas, Lithuania, subject to EU GDPR. The free migration service on Business plans ($3.99/mo) is done by their support team within 24–48 hours — useful if you'd rather not handle the technical steps yourself.
Try Hostinger — best value option if you want managed migration assistance without paying managed-hosting prices.
Troubleshooting Common Migration Issues
Error: "Error establishing a database connection"
This appears immediately after running the Duplicator installer. 99% of the time, the database credentials entered during installation are wrong. Go back through your new host's cPanel/hPanel database section and verify the exact database name, username (often prefixed with your account username, e.g., user_dbname), password, and host (usually localhost). Edit wp-config.php directly if needed.
Error: "Briefly unavailable for scheduled maintenance. Check back in a minute."
WordPress creates a .maintenance file during updates. If a migration or update fails mid-process, this file persists. Connect via SFTP, navigate to your WordPress root directory, and delete the .maintenance file manually.
Error: CSS not loading / site looks broken after migration
Your WordPress Address (URL) or Site Address in the database still points to the old domain or old host's temporary URL. Go to Settings → General in wp-admin and correct both fields. If you can't access wp-admin, run these two WP-CLI commands: wp option update siteurl 'https://yourdomain.com' and wp option update home 'https://yourdomain.com'.
Error: "Mixed content" SSL warnings after migration
Your database contains hardcoded http:// URLs that weren't updated during migration. Install the Really Simple SSL plugin or run Better Search Replace: search for http://yourdomain.com, replace with https://yourdomain.com, with serialized data handling enabled.
Error: Internal server 500 after migration
Usually caused by incompatible .htaccess rules from your old host. Rename .htaccess to .htaccess_old via SFTP, then go to Settings → Permalinks in wp-admin and click Save — WordPress regenerates a clean .htaccess automatically.
FAQ
How long does a WordPress migration take without downtime?
The actual migration process — cloning, uploading, and installing — takes 1–3 hours for most sites under 2 GB. DNS propagation after you flip the records takes an additional 5–30 minutes if you lowered your TTL to 300 seconds beforehand. For large sites (10 GB+), budget 4–6 hours for file transfer alone. The "without downtime" part doesn't reduce the total time; it just means your old site stays live the entire time the new one is being set up and verified. Total elapsed time from start to final DNS cutover: typically 2–5 hours.
Do I need to pay for a migration plugin, or will the free version work?
The free version of Duplicator handles most sites adequately. It works reliably for sites under 2 GB with standard WordPress installs. If your site exceeds 2 GB, has more than 20,000 database rows, or uses multisite, you'll hit PHP timeout limits in the free version. Duplicator Pro costs $69.99/year for 1 site and adds chunked archive creation that bypasses timeout limits. All-in-One WP Migration's unlimited extension is a $69 one-time purchase and is the better choice if you expect to migrate multiple times or to multiple destinations.
Can I migrate WordPress without a plugin using only phpMyAdmin and SFTP?
Yes. The manual method works: export your database via phpMyAdmin (Export → SQL format), download all files via SFTP, upload to the new host, create a new database, import the SQL file via phpMyAdmin on the new host, and edit wp-config.php with the new database credentials. Then run a search-and-replace on serialized data using WP-CLI: wp search-replace 'olddomain.com' 'newdomain.com' --all-tables. This approach works for any site size but requires comfort with command-line tools and is more error-prone than a plugin-based workflow for beginners.
Will my email stop working during the migration?
Email will stop working only if you also migrate your MX records at the same time as your A records — which you shouldn't do. If your email is handled by your hosting provider (cPanel mail), set up email on the new host first, verify it works, then move MX records separately after the website migration is complete and