Duplicator is one of the most widely used free WordPress migration plugins, and for good reason, it packages your entire site into a single archive and a small installer file that rebuilds everything at the destination. Done right, the process takes under an hour for most sites and requires no command-line access.
You need FTP or cPanel File Manager access to the new host, a blank database already created at the destination, and around twice the disk space of your current site available on both ends (once for the live site, once for the package). Make sure PHP is at least 7.4 on the new host, Duplicator will warn you if it detects a version mismatch.
If your site is larger than 500 MB, consider upgrading to Duplicator Pro before starting. The free version has no hard size cap, but large packages are more likely to time out during the build step on shared hosting. For most sites under 500 MB the free version is perfectly reliable.
In your WordPress admin, go to Plugins > Add New and search for "Duplicator." Install and activate the free version by Snap Creek. Once activated, navigate to Duplicator > Packages and click Create New.
Give the package a recognisable name. On the Setup screen you can exclude specific directories or file types, this is useful if you have a large uploads folder you plan to transfer separately. Leave the default settings in place for a standard migration. Click Next and Duplicator will run a pre-flight scan. Fix any warnings flagged in red before proceeding; yellow warnings are usually safe to ignore. Click Build to start packaging.
The build process can take anywhere from 30 seconds to several minutes depending on site size. Do not navigate away from the page. When it finishes, you will see two download buttons: download both the Installer (installer.php) and the Archive (.zip file). You need both files.
Log in to your new host's control panel and create a new, empty database. Note the database name, username, password, and hostname, you will enter these during the installer step. On most shared hosts the hostname is localhost, but some providers use a custom value.
If the new host has a pre-installed WordPress, delete all those files first. The Duplicator installer needs to land in an empty directory. Using cPanel File Manager, navigate to public_html (or the subdirectory you're targeting) and remove any existing WordPress files before uploading your package.
Upload both files, installer.php and the .zip archive, to the root of your new hosting directory (typically public_html). Use cPanel File Manager or an FTP client like FileZilla. Make sure both files land in the same directory.
Once uploaded, visit https://yournewdomain.com/installer.php in a browser. If the domain isn't pointed yet, you can access the installer using a temporary URL, most hosts provide one in the format server123.hostprovider.com/~username/installer.php. Check your welcome email or hosting dashboard for this URL.
The installer walks you through four steps. On Step 1, accept the licence terms and click Next. On Step 2, enter your new database credentials, host, database name, username, and password. Click Test Database to confirm the connection before continuing. A green tick means you're good to go.
Step 3 shows a summary of what will be installed, including your site's old URL and the new URL Duplicator will set. Confirm the new URL is correct, this is the domain you want the site to run on. Click Run Deployment. The installer will extract the archive, import the database, and update URL references in the database automatically. This step rewrites siteurl and home in the wp_options table for you.
Step 4 confirms the installation is complete. Click the Login to WordPress button to verify admin access.
Duplicator handles most of the configuration automatically, but it is worth confirming that wp-config.php contains the correct database credentials for the new host. Open wp-config.php via File Manager or FTP and check that DB_NAME, DB_USER, DB_PASSWORD, and DB_HOST all match the new database you created. If Duplicator updated them correctly, no changes are needed.
After logging in, go to Settings > Permalinks and click Save Changes without changing anything. This flushes the rewrite rules and regenerates the .htaccess file, which fixes 404 errors on post and page URLs, a common gotcha after migration.
Walk through the site methodically: check the homepage, a blog post, a category archive, any contact forms, and your checkout flow if you run WooCommerce. Check that images load, that SSL is active (padlock in the browser bar), and that any caching plugins are configured for the new environment. Deactivate and reactivate caching plugins if you see stale content.
Before changing DNS, lower the TTL on your domain's A record to 300 seconds (5 minutes) at least 24 hours in advance. This minimises the window during which some visitors hit the old server while others hit the new one. When you're confident the new server is working correctly, update the A record to point to the new host's IP address.
Monitor both servers for 24–48 hours after DNS change. Keep the old hosting account active until you're sure no traffic is landing there. Once propagation is complete and the new site is stable, delete installer.php and the .zip archive from public_html, leaving them accessible is a security risk. Finally, cancel or downgrade the old hosting plan.
We migrate WordPress sites for free. Our team handles the technical side so you can focus on your business.
View Hosting Plans