How to Migrate WordPress Manually (9 Steps, No Plugin Required)
John Turner
John Turner
Manual migration puts you in complete control of every file and every database row that moves between servers. No plugin limitations, file size caps, or black-box process you can’t audit if something breaks.
That control comes with a cost. There are multiple steps, and several of them have specific failure modes that aren’t obvious until you’re staring at a white screen or a database connection error. I’ve been through that. It’s not fun.
This guide walks through the full process, in order, with the failure points called out before each step. By the end, you’ll have a working site on the new host, tested before DNS is ever touched.
A few things worth knowing upfront: manual migration is the right choice when you need granular control, when your host doesn’t support migration plugins, or when you’re moving to a blank server without WordPress pre-installed. For most other situations, there’s a faster path. I’ll cover that too, after the manual steps.
Here are the key takeaways:
- Manual migration gives you full control but has many steps. Two of them (URL replacement and wp-config.php updates) are where most migrations break, so read the warnings before those steps
- Check your PHP version on the current host before starting and confirm the new host can match it. A version mismatch is the most common cause of a white screen after migration and takes five minutes to verify now vs. an hour to diagnose later
- Never run a raw SQL search-and-replace on your database to update URLs. It corrupts serialized data; use the Search & Replace Everything plugin with a dry run first
- You can test the fully migrated site on the new host before touching DNS by editing your local hosts file
- DNS propagation takes 2 to 6 hours after cutover; keep the old site live and intact until you’ve confirmed the new one is serving correctly
Table of Contents
- Why Manually Migrate Your WordPress Site?
- What You Need Before You Start
- How to Manually Migrate a WordPress Site
- Step 1: Export Your Database
- Step 2: Download Your WordPress Files
- Step 3: Create a New Database
- Step 4: Upload Your Files to the New Host
- Step 5: Import Your Original Database
- Step 6: Edit the wp-config.php File
- Step 7: Update URLs in the Database
- Step 8: Test Your New Site
- Step 9: Update Your DNS Settings
- There's a Faster Way to Do This
- Frequently Asked Questions (FAQs)
- Your Site Is on the New Host. Here's What to Do Next.
Why Manually Migrate Your WordPress Site?
When you first set up your website, you’ll choose a hosting plan and domain name that meets your needs. However, you may eventually need to migrate your site. This involves moving your WordPress website to another web host, server, or domain.
Here are some reasons to migrate your site.
- Poor website performance
You could start experiencing downtime, slow loading speed, or other performance problems. In this case, you’ll need to find a better web host or upgrade your hosting plan. For example, you might move from a shared server to managed WordPress hosting.
- Increased organic traffic
Once you grow your small business or blog, your current server may not be able to handle this large amount of traffic.
- Rebranding
A complex domain name can impact your website’s credibility. If you’re considering moving to a new domain, it’s time to migrate your site.
- Building a staging site
Making changes to your live site could break it. To avoid this problem, you can migrate your content to a localhost staging site.
What You Need Before You Start
Manual migrations have a lot of moving parts. Missing one credential or skipping one prep step means stopping mid-migration to track it down, and some steps are hard to pause once started.
Get all of this in place before touching anything on either server.
Access and credentials:
- FTP client installed and ready (FileZilla is the standard choice) or cPanel access confirmed on both old and new host
- phpMyAdmin access confirmed on both hosts. Log in and verify you can see your WordPress database before starting
- Your new hosting account fully set up, with either a live domain or a temporary URL you can use for testing
Technical checks:
- PHP version on your current host. Find this in cPanel or ask your host. Your new host needs to match, or close to it. A version mismatch is the most common cause of a white screen after migration and it takes five minutes to check now vs. an hour to diagnose later.
- Available disk space on the new host. You need at least 2x your current site size to account for the upload, extraction, and database import
Before you export anything:
- Disable caching plugins on the old site. Cached files can make it into your export and cause odd behavior on the new server.
- Delete unused plugins, themes, and media if you want a clean migration. Not required, but a migration is a good time to do it.
- Take a complete backup of the current site and store it somewhere off-server. If anything goes wrong at any point in the next nine steps, this backup is how you get back to where you started.
How to Manually Migrate a WordPress Site
Although migration services can automate the process, you may want to do it yourself. If you have some technical knowledge, you can migrate WordPress without any third-party tools.
Here’s how you manually migrate your website:
- Step 1: Export your database: pull a SQL file of all your site’s content and settings from the old host; use gzip compression if the database exceeds 100MB or the import could fail
- Step 2: Download your WordPress files: get every file off the old server; the cPanel zip method is faster and more reliable than FTP for sites with large media libraries
- Step 3: Create a new database on the new host: set up the empty database your migrated site will connect to; write down all credentials the moment you create them
- Step 4: Upload your files to the new host: move everything to the new server and set correct file permissions; wrong permissions can cause 403 errors
- Step 5: Import your database on the new host: upload your SQL file into the new database; confirm your tables appear in phpMyAdmin before moving to the next step
- Step 6: Update wp-config.php: connect WordPress to the new database using your new credentials; a single typo here causes a database connection error on the live site
- Step 7: Update URLs in the database: replace old domain references using Search and Replace Everything, not raw SQL; raw SQL replacement can corrupt serialized data and break page builder layouts
- Step 8: Test the site: verify everything works on the new host by editing your local hosts file while the old site stays live for everyone else
- Step 9: Point your domain to the new host: update your nameservers or DNS A record when testing confirms the migration is clean; keep the old site intact until propagation is complete
Step 1: Export Your Database
The database holds everything WordPress generates dynamically: posts, pages, comments, user accounts, plugin settings, and widget configurations. This is the most important file you’ll move.
Once you have a database backup, you can easily upload it to your new server.
Usually, your web host will allow you to easily access phpMyAdmin, which is a database manager. With Bluehost, for example, find the phpMyAdmin button.

In the left panel, click the name of your WordPress database. If you’re not sure which one it is, open wp-config.php on your current site and look for the DB_NAME value.
With your database selected, click on the Export tab.

For most sites, Quick export with SQL format is fine. Click Go and save the .sql file to your computer. Name it something recognizable, like site-backup-2026-04-17.sql.

If your database is larger than 100MB, use the Custom export method instead. Scroll down to find the Compression option and select gzip. This compresses the file before download and prevents a max file size error when you import it later.
Step 2: Download Your WordPress Files
Your WordPress files include the core software, your theme, all plugins, and your entire media library. There are two ways to get them off the server. The right method depends on your site size.
Method A: cPanel File Manager (recommended for sites over 500MB)
Log into your host’s dashboard and open cPanel or your host’s custom file manager.

Navigate to your site’s root folder, usually called public_html. Right-click it and select Compress. Choose zip format and confirm. Wait for the compression to finish. It can take a few minutes for large sites.

Once the zip file appears, download it. You’ll get a single file instead of thousands of individual files, which is significantly faster and avoids FTP timeout issues on large media libraries.
Method B: FTP with FileZilla (fine for smaller sites)
Open FileZilla and connect to your current host using your FTP credentials.

Navigate to your site’s root directory on the right panel. Select everything, right-click, and choose Download.

Be aware that FTP transfers can time out on large sites. If the connection drops mid-transfer, FileZilla’s Resume feature will pick up where it left off. Right-click the queue item and select Process Queue after reconnecting.
Either way, what you’re downloading includes wp-config.php, the .htaccess file, and the entire wp-content folder. Confirm your local folder contains all three before moving on.
Step 3: Create a New Database
If you’re working with a new WordPress installation, you’ll need to create a new database. This will provide a space to import your saved SQL database.
Depending on your hosting company, this process might vary. If you’re using a host that provides cPanel, find the Databases settings and click on MySQL Databases.

You can simply name the new database. Then, hit Create Database.

Along with a new database, you’ll need to add a new user. Provide a new username and password in the MySQL Users section.

Then, link the new user to the database you just created. Underneath Add User to Database, select the new user and database.

Feel free to grant the user all privileges. This will give the user full control over the database.
Step 4: Upload Your Files to the New Host
This step mirrors Step 2. Use whichever method matches how you downloaded the files.
If you downloaded a zip via cPanel File Manager:
Log into cPanel on your new host. Navigate to the root folder where your site should live, usually public_html. Click Upload and select your zip file. Once the upload finishes, right-click the zip file and select Extract. Confirm the destination is your site root, then extract.

If you downloaded via FTP:
Connect to your new host with FileZilla using the new host’s FTP credentials. Navigate to the site root on the right panel. Drag and drop your downloaded files from the left panel to upload. Expect this to take a while if your media library is large.
After the upload finishes, check file permissions. Incorrect permissions cause 403 Forbidden errors and white screens that look like something else went wrong.
In cPanel File Manager, select all folders in your site root, right-click, and choose Change Permissions. Set folders to 755. Then select all files and change permissions to 644.

Success looks like your full site directory visible in File Manager on the new host, with no obviously missing folders.
Step 5: Import Your Original Database
Log into phpMyAdmin on your new host. In the left panel, click the name of the empty database you created in Step 3. It should show no tables yet. Then, go to the Import tab.
Select the .sql file you exported in Step 1. Leave all other settings at their defaults.
Before you click Go: if your .sql file is uncompressed and larger than the max upload size shown on the page, you’ll hit an error. The fix is to go back, re-export with gzip compression enabled, and try again with the compressed file.

When the import succeeds, the left panel populates with your database tables. You should see tables named with the wp_ prefix (or a custom prefix if you changed it during WordPress installation).
If the left panel stays empty after the import, something went wrong. The most common cause is importing into the wrong database. Double-check that you selected your new database in the left panel before clicking the Import tab.
Step 6: Edit the wp-config.php File
Wp-config.php is the file that tells WordPress which database to connect to and what credentials to use. Right now, it still has your old host’s database details. Until you update it, your migrated site will try to connect to a database that no longer exists.
Find wp-config.php in your uploaded files. It should be in the site root alongside the wp-content folder. Right-click it and select Edit.
Find these four lines and update them to match what you created in Step 3:
define( 'DB_NAME', 'your_new_database_name' );
define( 'DB_USER', 'your_new_database_user' );
define( 'DB_PASSWORD', 'your_new_database_password' );
define( 'DB_HOST', 'localhost' );
DB_NAME, DB_USER, and DB_PASSWORD should match exactly what you wrote down in Step 3, including any prefix your host added. DB_HOST is almost always localhost, but some managed hosts use a specific hostname. If localhost doesn’t work, check your host’s documentation or support chat for the correct value.
Every character matters here. A single extra space inside the quotes will cause a database connection error. Read it back after saving.
Save the file and close the editor.
Step 7: Update URLs in the Database
Your database still contains your old domain throughout post content, settings, and serialized plugin data. You need to replace the old domain with the new one everywhere it appears.
Do not run a raw SQL REPLACE query directly on the database. Raw SQL replacement corrupts serialized data, which is how WordPress stores complex settings arrays in the database. The result is broken page builder layouts, broken widget configurations, and plugin settings that silently reset, often in ways that are hard to diagnose.
The Search & Replace Everything plugin offers a better option. In the Search for field, enter your old domain including the protocol (for example, https://olddomain.com). In the Replace with field, enter your new domain (https://newdomain.com).

Select all tables in the list, preview the search and replace, and run it.
The dry run shows you how many instances it found without changing anything. Review the count, confirm it looks reasonable, then apply the changes.
After the replacement finishes, go to Settings » Permalinks in wp-admin and click Save Changes without changing anything. This regenerates your .htaccess file and flushes any rewrite rules that reference the old domain.

Step 8: Test Your New Site
Most tutorials skip this step. It’s the most useful one.
You can browse your migrated site on the new host before pointing your domain there, without touching DNS at all. You do this by temporarily telling your own computer to resolve your domain to the new server’s IP address.
Find your new server’s IP address. Your hosting control panel usually shows it on the main cPanel page or under Shared IP Address.

On Mac or Linux:
Open Terminal and run sudo nano /etc/hosts. At the bottom of the hosts file, add a new line: 123.456.789.0 yourdomain.com (using your actual server IP and domain). Save with Ctrl+X, then Y, then Enter.
On Windows:
Open Notepad as Administrator (right-click Notepad, Run as administrator). Open the file at C:\Windows\System32\drivers\etc\hosts. Add the same line at the bottom and save.
Now open your browser and visit your domain. Your computer will load the site from the new server while the rest of the world still sees the old one.
Check these things before moving on:
- Homepage loads correctly
- Images display
- Internal links work
- Wp-admin is accessible with your credentials
- Any contact forms submit without errors
- SSL certificate shows as valid
Step 9: Update Your DNS Settings
By now, your website will be fully migrated to the new server or domain name. Although your site is functioning, it’s important to also update how it’s displayed in the Domain Name System (DNS).
Currently, your domain’s DNS will point to its old host. Luckily, you can easily change this to reflect your new host.
This process will vary depending on where you registered your new domain. To give you an idea of how this works, we’ll walk you through the steps to change your nameservers in Bluehost.
First, log into your hosting account and go to Domains » My Domains. Then, expand the dropdown menu on the right-hand side of your domain and click on DNS.

Here, you’ll see your DNS records, including your nameservers and IP addresses. Next, hit Edit.

To point to a new web host, go ahead and select Custom as the Setup Type.

Now, simply enter the information for your new hosting provider. It can take up to 48 hours for the DNS to propagate and start pointing to the new site.
There’s a Faster Way to Do This
Nine steps is the honest reality of a manual migration. If you made it through, you now know exactly what moved, where it went, and why. That knowledge is genuinely useful.
For most migrations, though, you don’t need that level of control. And two of those nine steps are where manual migration breaks most often.
One fast and simple alternative is to install a WordPress migration plugin.
Although there are many to choose from, Duplicator is a powerful tool that allows you to export your WordPress site and move it with ease.

One of my favorite Duplicator Pro features its drag-and-drop functionality.
You can create a backup that bundles your site’s content, themes, plugins, database, and media files. Then, simply drop this zip file into the second site.

This will launch Duplicator’s migration wizard, which gives you a step-by-step guide on importing your original content. You won’t have to manually import files or run a search and replace script.

Plus, Duplicator was built to handle large sites and Multisite networks. You don’t have to worry about losing important data from your agency or business website.
This tool will save you a lot of time and effort as you’re moving your website. Rather than struggling with file managers and phpMyAdmin, you can allow Duplicator to do the work for you!
Frequently Asked Questions (FAQs)
How long does manually migrating a WordPress site take?
For a small site with a modest media library, expect 1 to 2 hours from start to finish. A large site with several gigabytes of media and a heavy database can take 4 to 6 hours, mostly waiting on file transfers. The steps themselves aren’t slow; FTP uploads and database imports are. Using the cPanel zip method cuts transfer time significantly on larger sites.
Do I need to reinstall WordPress on the new host before migrating?
No. You’re transferring your existing WordPress installation, including the core files. Installing a fresh WordPress on the new host first creates a conflicting wp-config.php and a duplicate database that you’ll have to delete before importing your own. Start with an empty public_html folder on the new host.
What do I do if my database is too large to export via phpMyAdmin?
Use the Custom export option with gzip compression enabled, which handles most cases. If the compressed file is still too large to import, use BigDump, a free PHP script that splits large SQL files into smaller chunks and imports them sequentially. Upload BigDump to your new server, point it at your SQL file, and run it from the browser. Alternatively, WP-CLI handles databases of any size: wp db export on the old host and wp db import on the new one.
How do I know when DNS propagation is complete?
Use a tool like whatsmydns.net to check how your domain resolves from different locations around the world. Enter your domain and select A record. When the majority of locations show your new server’s IP address, propagation is effectively complete for most visitors. Full global propagation can take up to 48 hours in edge cases, but most regions update within 2 to 6 hours.
What is the easiest way to migrate a WordPress site?
The easiest way to migrate a WordPress site is to install a WordPress migration plugin like Duplicator Pro. With Duplicator, you can package your entire site into a single zipped archive file. Then, you’ll be able to drag and drop it into a new WordPress installation.
This prevents you from having to manually transfer your files and database and ensures no data is lost in the migration.
If you want to explore the different migration plugins available, here are some of the most popular options:
How do I manually migrate my WordPress site?
To manually migrate your WordPress site, export the database of your current WordPress site in phpMyAdmin. Then, transfer all your website files to the new hosting environment using FTP or a file manager.
You’ll also need to create a new database on the new hosting server and import the previously exported database. Finally, update the database credentials and site URL in the new hosting’s wp-config.php file to ensure proper connectivity.
How do I upload my WordPress site to a live host after working locally?
On your local website, create a copy of the site’s files and database with Duplicator Pro. Make sure Duplicator is also installed on your production site. Then, use the Import tool to upload your local site to the live server.
Can I transfer one WordPress site to another?
Yes, you can transfer one WordPress site to another. Using the Duplicator Pro plugin, simply create a backup of the original site. Then, import the backup into the new site and follow the steps in the Duplicator migration wizard.
How do I restore my WordPress site to a new host?
To restore your WordPress site to a new host, make sure you’re using Duplicator to save regular backups. If your site crashes and you decide to upgrade your hosting, simply drag and drop the most recent backup archive file into the new site. This will recover all of the data from the original site.
Your Site Is on the New Host. Here’s What to Do Next.
You just finished a migration. The site is clean, tested, and live. This is exactly the moment most people skip a backup and immediately start making changes.
Don’t. Create a full backup of the new site right now, before any plugin updates, theme changes, or content edits. If anything goes wrong in the first week on the new host, you want a restore point from a known good state, not a backup of the old server.
Over 1.5 million WordPress professionals use Duplicator Pro to create verified, complete backups they can restore from anywhere, including when WordPress itself is locked out. The disaster recovery URL alone is worth it, since it restores a site even when you can’t access wp-admin at all.
If you just spent several hours on a manual migration, spending five minutes on a backup before moving on is the obvious next step.
Need more WordPress migration tips? Check out our other guides below.