Migration Guide

How to Migrate Your WordPress Site to a New Host

Updated 27 March 2026

Migrating a WordPress site sounds intimidating but is a well-documented process with reliable free tools. This guide covers three methods: using your new host's free migration service, using a migration plugin, and doing it manually if the automated options fail.

Before You Start: Pre-Migration Checklist

1

Back up your current site completely (files + database) before touching anything.

2

Note your current hosting panel login, FTP credentials, and database name.

3

Record which plugins and themes you have installed and their versions.

4

Check that your new host supports the same PHP version as your site requires.

5

Set your DNS TTL to 300 seconds (5 minutes) 24 hours before you plan to switch. This makes DNS propagation faster.

Method 1: Free Concierge Migration (Easiest)

Who offers free migration

  • Kinsta: free migration for all new accounts
  • WP Engine: free migration via their automated migration plugin
  • SiteGround: free migration for new customers
  • Flywheel: free migration via their plugin

If your new host offers a free migration service, use it. You provide your existing login credentials and they copy everything. This is the lowest-risk option. Kinsta's team handles the migration manually and notifies you when the copy is complete. You then verify the site on a temporary URL before pointing your DNS.

Method 2: Migration Plugin (Recommended DIY)

1

Install Duplicator or All-in-One WP Migration on your current site

Both are free WordPress plugins available in the WordPress plugin directory. Duplicator creates a package (zip file + installer) of your entire site. All-in-One WP Migration creates a single .wpress export file.

2

Create a full site package

In Duplicator: create a new package and download both the archive.zip and installer.php files. In All-in-One WP Migration: export the site and download the resulting file.

3

Upload to your new host

Upload the files via your new host's file manager or FTP to the root directory of your new site. For Duplicator, navigate to installer.php in your browser and follow the prompts to restore the database and files.

4

Update your site URL in WordPress

If your domain name stays the same, no URL changes are needed. If the temporary URL is different, update the siteurl and home settings in wp-config.php or via wp-cli before pointing DNS.

5

Test thoroughly before pointing DNS

Use your new host's temporary URL or edit your local hosts file to preview the migrated site. Check that images load, forms work, WooCommerce processes a test order if applicable, and all admin functions work correctly.

Updating DNS and Going Live

Once the migrated site tests correctly, update your domain's DNS nameservers or A record to point to your new host. Changes propagate globally within minutes if you lowered your TTL beforehand, or up to 48 hours otherwise.

Keep your old hosting account active for at least 7 days after the DNS change. This ensures any cached DNS records resolve correctly and gives you a fallback if anything was missed during testing.

After DNS propagates, install your SSL certificate on the new host (most provide free Let's Encrypt SSL), test both http:// and https:// versions of your site, and verify that all redirects and canonical tags are working correctly.

Common Migration Problems and Fixes

White screen of death after migration

Usually a PHP memory limit issue. Add define('WP_MEMORY_LIMIT', '256M'); to wp-config.php, or enable WP_DEBUG to see the actual error.

Images not loading

Often a permissions issue. Set file permissions to 644 and folder permissions to 755 using your host's file manager or FTP client.

Database connection error

Check that the database name, username, password, and host in wp-config.php exactly match the credentials in your new host's database panel.

Mixed content warnings (broken HTTPS)

Run a search-replace in the database to update any hardcoded http:// URLs to https://. Use the Better Search Replace plugin or WP-CLI: wp search-replace 'http://yourdomain.com' 'https://yourdomain.com'.