You change a DNS record, your host says “it can take 24 to 48 hours”, and for the rest of the day your website loads perfectly on your phone and not at all on your office laptop. Nothing is broken. This is DNS propagation, and understanding it is the difference between a calm migration and […]
How to Move a WordPress Site to a New Host Manually (No Plugin Needed)
Every WordPress migration plugin works beautifully right up until the moment it doesn’t. The export times out on a big database, the importer hits a memory limit, or the plugin’s own licence has expired — and you are left with half a site on a new server and no idea which half.
The manual method has none of those failure modes. It is six steps, it works on any host, it works on sites of any size, and once you have done it once you will trust it more than any plugin. This guide assumes you are moving a WordPress site to a new host while keeping the same domain name.
If you want the broader picture first — email, DNS, SSL and timing — read how to migrate your website to a new host without downtime and work through the pre-migration checklist. This page covers just the WordPress part in detail.
What you need before you start
- cPanel or FTP access to your current host
- cPanel access to your new host
- A text editor (Notepad++, VS Code, or even TextEdit in plain-text mode)
- About an hour, uninterrupted
You do not need to install anything on the WordPress site itself. That is the point.
Step 1 — Download the files
Your WordPress site is a folder of files plus a database. Start with the files.
In your current host’s File Manager, open the folder containing WordPress — usually public_html. Select everything, including the hidden files, and compress it into a single ZIP. Compressing first and downloading one archive is dramatically faster than pulling thousands of small files over FTP.
Make sure these are in the archive:
wp-content/— your themes, plugins and every uploaded image. This is the irreplaceable one.wp-config.php— your database settings..htaccess— permalinks and any custom redirects. It is a hidden file, so turn on “show hidden files” in File Manager or your FTP client, or it will be silently left behind.
Download the ZIP to your computer and keep it. This is also your backup.
Step 2 — Export the database
Open phpMyAdmin on your current host. In the left-hand list, click your WordPress database — if several are listed and you are not sure which, open wp-config.php and read the DB_NAME value.
With the database selected, click Export, leave the method on Quick and the format on SQL, and click Go. You will get a .sql file.
Open it in your text editor just to confirm it is real: you should see a wall of SQL statements and your table names, typically starting wp_. If you see a few lines of PHP warnings or an error page, the export failed — try again with the Custom method and tick “Add DROP TABLE”.
On a very large database the export can time out. If that happens, export in chunks by selecting groups of tables rather than all at once.
Step 3 — Create the database on the new server
In the new host’s cPanel, open MySQL Databases and do three things in order:
- Create a new database. Note the full name — cPanel prefixes it with your account name, so “wpsite” becomes something like
youraccount_wpsite. - Create a new database user with a strong password. Write the password down somewhere safe; you will need it in step 5.
- Add the user to the database and grant All Privileges. Skipping this step is the most common cause of “Error establishing a database connection” after a manual migration.
Step 4 — Import the database
Open phpMyAdmin on the new host, select the empty database you just created, click Import, choose your .sql file and click Go.
If the file is larger than the upload limit, you have two options: ask your host to raise the limit temporarily, or upload the .sql file to the server and import it from the command line with WP-CLI or the mysql command. Any decent host will do the import for you if you ask — it takes them a minute.
Step 5 — Upload the files and fix wp-config.php
Upload your ZIP into public_html on the new server and extract it there. Extracting on the server is far quicker than uploading the unzipped folder.
Now open wp-config.php and change the three database lines to match what you created in step 3:
define( 'DB_NAME', 'youraccount_wpsite' );
define( 'DB_USER', 'youraccount_wpuser' );
define( 'DB_PASSWORD', 'the password you just set' );
Leave DB_HOST as localhost unless your host has told you otherwise. Save the file.
That is the entire migration. Everything else is verification.
Step 6 — Test before you touch DNS
Do not switch DNS yet. Edit the hosts file on your own computer so that your domain resolves to the new server’s IP address. On Windows it lives at C:\Windows\System32\drivers\etc\hosts; on macOS and Linux at /etc/hosts. Add one line:
203.0.113.45 yourdomain.com www.yourdomain.com
Replace the IP with your new server’s address, which cPanel shows in the sidebar. Save the file, then load your site. Your browser now sees the new server while everyone else still sees the old one.
Click through properly: the homepage, two or three inner pages, a category page, the media library in wp-admin, and your contact form. Log in and out. If you run WooCommerce, open a product and add it to the cart.
When you are satisfied, remove the line from your hosts file and switch DNS for real.
Things that commonly go wrong — and the fix
“Error establishing a database connection”
Nine times out of ten this is step 3 or step 5: the user was never granted privileges on the database, or the credentials in wp-config.php have a typo. Re-check both. Watch for the cPanel account prefix on both the database name and the username.
The homepage loads but every other page is a 404
Your .htaccess didn’t come across, or permalinks need regenerating. Log into wp-admin, go to Settings → Permalinks, and click Save without changing anything. WordPress rewrites the rules.
The site loads but looks completely unstyled
Usually a file-permission problem after extraction, or a caching plugin still pointing at old paths. Set folders to 755 and files to 644, then clear any cache plugin.
Images are missing
Check that wp-content/uploads actually made it into the ZIP. This is what happens when hidden files or a large folder were skipped during the original compress.
A white screen with no error at all
Almost always a PHP version mismatch — an older plugin or theme that does not run on the newer PHP on the new server. Set the new account to the same PHP version as the old one, confirm the site loads, then upgrade PHP deliberately afterwards and fix whatever breaks one thing at a time.
What about search and replace?
If your domain is not changing, you do not need to touch the database contents at all — and you should not. Search-and-replace is only needed when the URL itself changes, for example moving from olddomain.com to newdomain.com, or from http:// to https://.
When it is needed, do not run a plain SQL REPLACE. WordPress stores some settings as serialised PHP, where the string length is recorded alongside the text; a blunt replace corrupts those values and breaks theme options and widgets. Use a tool that handles serialisation properly, such as WP-CLI’s wp search-replace command.
Frequently asked questions
Is the manual method safer than a plugin?
It is more predictable. A plugin hides the steps, so when it fails you cannot see where. Doing it manually means that at every point you know exactly what has and has not moved. On small sites plugins are perfectly fine; on large or unusual ones, manual wins.
How long does it take?
For a typical small business site, thirty to sixty minutes, most of which is waiting for the upload and download. A large site with a multi-gigabyte uploads folder is limited by your internet connection more than anything else.
Will my site go offline during the migration?
No. The old site keeps serving visitors the entire time, because nothing changes for them until you switch DNS in the final step. That is the whole reason for testing via the hosts file first.
Do I need to reinstall my plugins and themes?
No. They live inside wp-content and come across with the files, complete with their settings, which are stored in the database. Premium plugins that are licensed to a domain will keep working, since the domain is unchanged.
What about my email?
Email is completely separate from WordPress and does not move with the site. Mailboxes must be recreated on the new server and existing mail copied across over IMAP before you change MX records. See our guide to business email hosting for how the mail side works.
Or let us handle it
We migrate WordPress sites for customers moving to Salasar Hosting — files, database, email and SSL — and we test on the new server before anything switches, so your visitors never see a broken page. It costs nothing on top of the hosting.
Look at shared hosting plans if you run a standard WordPress site, or VPS hosting if you have outgrown shared and want guaranteed resources. Call +91 99620 05753 and tell us what you are running today.
