Affiliate Disclosure: We do not currently earn commissions from links on this page. Our recommendations are based on independent research and public data, not affiliate relationships.

Switching hosting providers does not have to mean downtime for your visitors. With the right process, you can move your entire WordPress site to a new server while the old one keeps running. Your visitors never notice a thing.

This guide covers the complete migration process in six steps: backup, setup, transfer, test, DNS switch, and verification. Whether you use a migration plugin, your host's free migration service, or do it manually, the core workflow is the same.

Not sure which host to move to? Read our guide on how to choose web hosting before starting.

Before You Start: What You Need

Gather these before beginning your migration:

  • New hosting account: Already purchased and ready. If you need recommendations, check our best managed WordPress hosting picks.
  • SFTP/SSH access to both hosts: You will need file-level access to download from the old server and upload to the new one (unless using a plugin or host migration service).
  • Database credentials: Username, password, host, and database name for both old and new servers.
  • Domain registrar access: You will update DNS records here after testing.
  • 1 to 4 hours of time: Active migration work. DNS propagation happens passively afterward.

If your new host offers free migration, you can skip the manual steps entirely. Kinsta provides unlimited free expert-handled migrations (read our Kinsta review). SiteGround offers a free WordPress Migrator plugin that handles the transfer automatically (read our SiteGround review).

Step 1: Create a Full Backup

Never start a migration without a complete backup. If anything goes wrong, you can restore your site to its current state.

What to back up

  • All WordPress files: The entire contents of your WordPress directory, including wp-content (themes, plugins, uploads), wp-config.php, and .htaccess.
  • Your database: The MySQL/MariaDB database containing your posts, pages, settings, and user data.

How to back up manually

Files: Connect to your old host via SFTP (using FileZilla or similar) and download the entire WordPress directory to your local computer.

Database: Use phpMyAdmin (available in most hosting control panels) to export your database. Select your WordPress database, click Export, choose "Quick" method with SQL format, and download the .sql file.

Using WP-CLI (if available)

If you have SSH access and WP-CLI installed:

wp db export backup.sql

This creates a database dump in your WordPress root directory.

Using a backup plugin

Plugins like UpdraftPlus or All-in-One WP Migration can create downloadable backup archives containing both files and database. These are especially useful if you do not have SFTP access.

Important: Store your backup locally or in cloud storage (Google Drive, Dropbox). Do not rely solely on a backup stored on the old server.

Step 2: Set Up Your New Hosting Account

Before transferring files, prepare the new server:

  1. Create a database: In your new host's control panel, create a new MySQL database, a database user, and assign the user full privileges on that database. Write down the database name, username, password, and host (usually "localhost").
  2. Note the server IP: You will need this later for testing and DNS updates. Find it in your hosting dashboard or welcome email.
  3. Check PHP version: Make sure the new host runs the same PHP version as your old host (or newer). WordPress currently recommends PHP 8.1 or higher. A PHP version mismatch can break plugins.
  4. Set up SSL (if available before DNS switch): Some hosts let you provision a temporary SSL certificate or use a staging URL with HTTPS. Others require DNS to point to them first.

Do not change your DNS yet. Your domain should still point to the old host while you set up and test the new one.

Step 3: Move Your Files and Database

You have three options here. Pick the one that matches your comfort level.

Option A: Manual transfer (SFTP + phpMyAdmin)

  1. Upload all WordPress files from your local backup to the new server via SFTP. Place them in the correct document root (usually public_html or the directory your host specifies).
  2. Import your database: Open phpMyAdmin on the new host, select the empty database you created, click Import, and upload your .sql backup file.
  3. Edit wp-config.php on the new server to use the new database credentials:
    define('DB_NAME', 'your_new_database');
    define('DB_USER', 'your_new_username');
    define('DB_PASSWORD', 'your_new_password');
    define('DB_HOST', 'localhost');

Option B: Migration plugin

Plugins like All-in-One WP Migration, Duplicator, or UpdraftPlus can package your entire site into a single archive and restore it on the new host. The general process:

  1. Install the migration plugin on your old site.
  2. Export a full site archive (files + database).
  3. Install WordPress fresh on the new host (just to get the plugin running).
  4. Install the same migration plugin on the new WordPress install.
  5. Import the archive. The plugin overwrites the fresh install with your real site.

Option C: Host migration service

Many hosts handle migration for you:

  • Kinsta: Unlimited free migrations handled by their team. Submit a request through the Kinsta dashboard and they complete it within 1 to 2 business days.
  • SiteGround: Free WordPress Migrator plugin. Generate a migration token in your SiteGround dashboard, install the plugin on your old site, enter the token, and the plugin transfers everything automatically with no downtime on your current site.

Host migration services are the lowest-effort option. If your new host offers one, use it.

Step 4: Test on a Temporary URL

This is the step that prevents downtime. Test your migrated site before touching DNS.

Method 1: Edit your local hosts file

Force your computer to load your domain from the new server's IP address without affecting anyone else:

  • Windows: Edit C:\Windows\System32\drivers\etc\hosts
  • Mac/Linux: Edit /etc/hosts

Add a line: 123.456.789.0 yourdomain.com (replace with your new server's IP). Now when you visit your domain in a browser, you see the new server. Everyone else still sees the old one.

Method 2: Use the host's temporary URL

Many hosts provide a temporary URL (like yoursite.tempurl.host or an IP-based URL) where you can preview the site before DNS changes. Check your hosting dashboard for this option.

What to check

  • Homepage loads correctly with all images and styles.
  • Internal pages and blog posts work.
  • Forms submit successfully.
  • Admin dashboard (wp-admin) is accessible and functional.
  • Plugins are active and working.
  • No mixed content warnings (HTTP resources on an HTTPS page).
  • Permalink structure matches the old site.

If something is broken, fix it now. You have not changed DNS, so your live site is unaffected. Common issues: incorrect file permissions, missing .htaccess file, or wrong database credentials in wp-config.php.

Step 5: Update DNS Records

Once testing confirms the new site works, point your domain to the new server. This is the only step where visitors might briefly see inconsistent results, but it does not cause downtime because both servers have your site.

Option A: Change nameservers

If your new host wants you to use their nameservers, update them at your domain registrar. This hands over all DNS management to the new host. Simple, but means the new host controls all DNS records (email MX records included).

Option B: Update A record only

If you manage DNS separately (at your registrar or a service like Cloudflare), just update the A record to point to the new server's IP address. This is more precise and does not affect email or other DNS records.

Reduce TTL before switching

If possible, lower your DNS TTL (Time to Live) to 300 seconds (5 minutes) at least 24 hours before the migration. This means DNS caches expire faster, so the switch propagates more quickly. After migration is confirmed working, raise TTL back to a normal value (3600 or higher).

Propagation time

DNS changes propagate based on TTL values. With a low TTL, most visitors will see the new server within minutes to a few hours. With default TTL values, propagation can take up to 48 hours. During this window, some visitors hit the old server and some hit the new one. Since both have your site, nobody sees an error.

Keep your old hosting account active for at least 48 to 72 hours after the DNS switch. Do not cancel it immediately. Some visitors with cached DNS may still reach the old server during propagation.

Step 6: Verify and Clean Up

After DNS has propagated (check with a tool like whatsmydns.net), confirm everything works on the live domain:

  • SSL certificate: Verify HTTPS works. If your new host requires you to install SSL after DNS points to them, do it now. Most hosts offer free Let's Encrypt certificates.
  • Permalinks: Visit Settings > Permalinks in wp-admin and click Save (even without changes). This regenerates .htaccess rules for the new server.
  • Images and media: Browse several pages and confirm images load. Broken images usually mean a file transfer issue or incorrect file paths.
  • Forms and email: Test contact forms. If your site sends email via the server (wp_mail), confirm it still works. Consider an SMTP plugin if delivery is unreliable.
  • Caching: Clear any caching plugins and server-side caches. Old cached pages might reference the old server.
  • Search console: If you use Google Search Console, no changes are needed for a host migration (same domain). Google will re-crawl naturally.

Performance check

Run a speed test (GTmetrix, PageSpeed Insights) on the new host. If the site is slower than before, check server configuration, caching setup, and CDN settings. For optimization tips, see our guide on how to speed up WordPress.

Clean up

  • Remove the hosts file edit from Step 4 (if used).
  • Delete any migration plugin archives left on either server.
  • Cancel your old hosting account only after confirming the new site has been stable for several days.
  • Raise DNS TTL back to normal (3600 seconds or higher).

Frequently Asked Questions

How long does it take to migrate a WordPress site?

A typical WordPress migration takes 1 to 4 hours of active work depending on site size. DNS propagation after the move can take anywhere from a few minutes to 48 hours, though most updates complete within 2 to 4 hours.

Will my site go down during migration?

Not if you follow the correct process. Keep your old host active until the new site is tested and DNS has fully propagated. Your old server continues serving visitors until DNS points them to the new one.

Can I migrate WordPress without a plugin?

Yes. Manual migration involves downloading your files via SFTP, exporting your database with phpMyAdmin or WP-CLI, uploading both to the new server, and updating wp-config.php with new database credentials. It takes more time but gives you full control.

Do I need to reinstall WordPress on the new host?

No. You are transferring your entire existing WordPress installation, including all files, themes, plugins, and database. You do not need a fresh WordPress install on the new server.

What if my new host offers free migration?

Many hosts offer free migration services. Kinsta provides unlimited free expert-handled migrations. SiteGround offers a free WordPress Migrator plugin. If your new host offers this, take advantage of it. The host's team handles the technical work and typically completes it within 1 to 2 business days.

Summary: Your Migration Checklist

The key to a zero-downtime migration is simple: keep the old server running until the new one is verified and DNS has propagated. Here is the condensed checklist:

  1. Back up all files and database.
  2. Set up the new host (database, PHP version, document root).
  3. Transfer files and database (manually, via plugin, or host service).
  4. Test on a temporary URL or hosts file edit.
  5. Lower TTL, then update DNS to point to the new server.
  6. Verify SSL, permalinks, images, forms, and performance.
  7. Keep old host active for 48 to 72 hours, then cancel.

If you want a host that handles migration for you:

  • Kinsta: Unlimited free expert-handled migrations, completed within 1 to 2 business days. Ideal for managed WordPress hosting. Read our Kinsta review
  • SiteGround: Free WordPress Migrator plugin with no downtime during transfer. Great for shared and managed hosting. Read our SiteGround review

Need help choosing your next host? See our best managed WordPress hosting guide for detailed comparisons.