Guides /Migration
Migration

How to Manually Migrate WordPress Without a Plugin

January 20, 20267 min readHostBible Team

Migrating WordPress manually, without relying on a plugin, gives you complete control over every file and database table. It takes longer than a plugin-based approach but is more reliable for large or complex sites, and is often the only option when plugin installers time out or fail on oversized archives.

What you need before starting

Gather the following before touching anything: FTP credentials or cPanel access for both the old and new host, a new empty database already created at the destination (note the name, username, password, and host), and enough disk space on both ends for the site plus a full backup copy.

This guide uses cPanel for file management and phpMyAdmin for the database. If your host uses a different panel, the steps are the same, the tool names just differ. Set aside at least two hours for a site of average complexity.

Back up files via cPanel

Log in to cPanel on the old host and open File Manager. Navigate to public_html (or the subdirectory where WordPress is installed). Select all files and folders, right-click, and choose Compress. Select .zip format and compress to a file like wordpress-backup.zip. Once compression finishes, download the zip to your local machine.

Alternatively, use cPanel's built-in Backup Wizard (under Files > Backup Wizard) to generate a full cPanel backup, which includes files, databases, and email. This is a larger download but useful if you want a complete snapshot of your account. For a migration where you're moving WordPress only, a file-level zip is simpler to work with.

If the site is large and cPanel compression times out, use an FTP client like FileZilla to download the files directly. Connect to the old server, navigate to public_html, select everything, and download. This is slower but completely reliable.

Export the database with phpMyAdmin

In cPanel, open phpMyAdmin. Select your WordPress database from the left sidebar, it's the one listed in wp-config.php as DB_NAME. Click the Export tab at the top. Leave the export method set to Quick and the format set to SQL. Click Go. phpMyAdmin downloads a .sql file to your computer. This file contains every table, post, user, and setting in your WordPress installation.

For databases over a few hundred MB, the Quick export may time out. Switch to Custom export, scroll down, and enable the option to split the output into smaller files, or use a tool like BigDump at the destination to import large SQL files in chunks. Most shared hosting databases are well under 100 MB, where the standard export works without issue.

Upload files to the new host

Log in to cPanel on the new host. Open File Manager and navigate to public_html. If there are any default files (like a placeholder index.html), delete them. Upload your wordpress-backup.zip file to public_html, then right-click it and choose Extract. This decompresses your entire WordPress installation into place.

If you downloaded the files individually via FTP, connect to the new server with FileZilla and upload the entire folder structure to public_html. File count matters more than total size for transfer time, a site with 10,000 small image files will take much longer to transfer than a site with a single large file of the same total size.

Import the database into the new host

In cPanel on the new host, open phpMyAdmin. Click on the empty database you created earlier. Click the Import tab. Click Choose File and select the .sql file you exported from the old host. Leave all other settings at their defaults and click Go. phpMyAdmin imports every table into the new database.

Once the import completes, click on the wp_options table in the left sidebar. Look for the rows where option_name is siteurl and home. Both should show your old domain. You'll update these in the next step using SQL, so note the current values, they confirm the import worked correctly.

Edit wp-config.php for the new database

In File Manager on the new host, locate wp-config.php in public_html. Right-click and choose Edit. Update the following four constants to match your new database credentials:

define('DB_NAME', 'new_database_name');
define('DB_USER', 'new_database_user');
define('DB_PASSWORD', 'new_database_password');
define('DB_HOST', 'localhost');

Save the file. If you get a PHP error or white screen after saving, the credentials are wrong, double-check the database username and password in cPanel under MySQL Databases.

Update URLs in the database with SQL

Back in phpMyAdmin on the new host, click your database and then click the SQL tab. Run the following two queries, replacing the placeholder URLs with your actual old and new domains:

UPDATE wp_options SET option_value = 'https://newdomain.com' WHERE option_name = 'siteurl';
UPDATE wp_options SET option_value = 'https://newdomain.com' WHERE option_name = 'home';

This gets WordPress loading on the new domain. To update all remaining URLs in post content, post meta, and widget settings, upload and run the Search Replace DB script (by interconnect/it) in a subdirectory of public_html. Run it with olddomain.com as the search term and newdomain.com as the replacement. Delete the script folder as soon as you're done.

Test before cutting DNS

Before pointing your domain at the new server, test the site using a hosts file modification on your local machine. On Windows, edit C:\Windows\System32\drivers\etc\hosts and add a line like 123.456.789.0 newdomain.com (using the new server's IP). On Mac or Linux, edit /etc/hosts. This makes your computer resolve the domain to the new server without affecting anyone else.

With the hosts file entry in place, visit the site in your browser. Log in to the admin, check that pages and posts load, verify images display, and test any forms or WooCommerce flows. Go to Settings > Permalinks and click Save Changes to regenerate .htaccess and fix any 404 errors. Once everything works, remove the hosts file entry and proceed with the DNS change.

Migrate to HostBible for free

We migrate WordPress sites for free. Our team handles the technical side so you can focus on your business.

View Hosting Plans