Bluehost is one of the most heavily advertised WordPress hosts on the internet, but it's also one of the most frequently left. Slow shared servers, opaque renewal pricing, and aggressive upselling push a lot of site owners to look elsewhere. The good news: moving away is entirely doable yourself, and Bluehost's standard cPanel setup makes the process straightforward. This guide walks through the complete migration from backup through DNS cutover.
Bluehost advertises free migrations, but there's important context. The offer is limited to new accounts within a short window after signup, and in practice Bluehost often directs you to a third-party migration partner rather than handling it in-house. That partner may charge a fee or try to upsell a migration plan. If you've been on Bluehost for more than a few months, the offer almost certainly no longer applies to your account.
Doing it yourself takes under an hour for a standard WordPress site, and you stay in control of timing, testing, and exactly what gets moved. The method below uses Bluehost's standard cPanel, which works on all Bluehost shared and Plus plans.
At least 24 hours before you plan to switch hosts, log into your domain's DNS settings and lower the A record TTL to 300 seconds (5 minutes). If your domain is registered with Bluehost, go to Domains in the Bluehost dashboard and find DNS settings. If it's registered elsewhere, log into that registrar. Lowering TTL now means DNS propagation after the cutover completes in minutes rather than hours, minimising the window where some visitors still hit the old server.
Log in to Bluehost and open cPanel, it's standard cPanel, so everything is where you'd expect it. Navigate to File Manager and go to public_html. Select all files and folders, right-click, and compress to a ZIP archive. Once the archive is created, download it to your local machine. For large sites with many images, use FileZilla (free FTP client) instead, connect via FTP using credentials from cPanel → FTP Accounts, and download the entire public_html directory. FTP is slower than ZIP compression but more reliable for sites above a few hundred megabytes, since the File Manager ZIP process can time out on large installs.
Alternatively, install the Duplicator plugin directly in WordPress. Duplicator bundles files and database into a single archive and generates an installer script, the most convenient format for restoring on a new host. Go to Duplicator → Packages → Create New and follow the wizard. Download both the archive.zip and installer.php files when complete.
In Bluehost's cPanel, open phpMyAdmin. Select your WordPress database from the left panel. If you're not sure which one it is, open wp-config.php in File Manager and look for the DB_NAME value.
Click the Export tab, leave the method as "Quick" and format as SQL, then click Go. This downloads a .sql file containing all your posts, pages, settings, user data, and plugin configuration. For larger databases (over 100MB), switch the export method to "Custom" and enable compression, this produces a smaller .sql.gz file that imports faster on the new host.
On your new host, create a fresh MySQL database, a database user, and assign the user to the database with ALL PRIVILEGES (cPanel → MySQL Databases). Note all three values, database name, username, and password. If using Duplicator, upload installer.php and archive.zip to public_html on the new host via FTP or File Manager. Navigate to the installer using the new host's temporary URL with /installer.php appended, and follow the Duplicator wizard to complete the restore.
For a manual restore: import your .sql file via phpMyAdmin on the new host. Upload WordPress files to public_html, either by uploading the ZIP and extracting via File Manager, or via FTP. Open wp-config.php on the new host and update the database credentials:
define( 'DB_NAME', 'newhost_dbname' );
define( 'DB_USER', 'newhost_dbuser' );
define( 'DB_PASSWORD', 'NewPassword' );
define( 'DB_HOST', 'localhost' );
After updating wp-config.php, verify the siteurl and home values in the wp_options table match your domain (not a Bluehost server URL). If they contain a Bluehost temporary URL, update them via phpMyAdmin with: UPDATE wp_options SET option_value = 'https://yourdomain.com' WHERE option_name = 'siteurl' OR option_name = 'home';
Edit your local hosts file to point your domain to the new server's IP address. On Windows: C:\Windows\System32\drivers\etc\hosts (open as Administrator). On Mac/Linux: /etc/hosts (use sudo). Add: NEW.IP.ADDRESS yourdomain.com www.yourdomain.com. Your browser now loads the new host while everyone else still sees Bluehost.
Test thoroughly: WordPress admin login, all pages loading, images displaying, forms sending, SSL active (install Let's Encrypt from cPanel → SSL/TLS if needed), and any eCommerce or booking functionality. Common issues at this point include SSL not being active (the site loads as HTTP on the new host), missing media files that weren't in the backup, and plugin-specific database errors. Fix everything now, not after DNS is live.
Once the site is confirmed working on the new host, update your domain DNS. If the domain is registered with Bluehost, go to your Bluehost dashboard → Domains → Manage DNS and update either the nameservers (to your new host's nameservers) or the A record (to the new host's server IP). Updating nameservers is simpler if your new host manages all DNS; updating just the A record is better if you're keeping email at a different provider.
With TTL already at 300 seconds, most visitors will be hitting the new server within 5–15 minutes. Keep Bluehost active for at least 48 hours after the switch. One Bluehost-specific note: if your domain is registered with Bluehost and you want to transfer it to another registrar, Bluehost enforces a 60-day transfer lock after certain account changes. You cannot transfer the domain during this window, but you can point it anywhere via nameservers or A record immediately. The site will be fully live on the new host the moment DNS propagates, regardless of where the domain is registered.
Remove the hosts file entry after confirming DNS has propagated to your location. Raise the TTL back to 3600 seconds. If the site previously ran on HTTP at Bluehost and you're now on HTTPS, run a search-replace on the database to update any hardcoded HTTP URLs: install the Better Search Replace plugin and replace http://yourdomain.com with https://yourdomain.com across all tables. This fixes mixed content warnings from images and links still referencing the old HTTP URL.
Verify outgoing email is working on the new host, some servers require SMTP configuration rather than using PHP's mail() function. WP Mail SMTP is the standard plugin for this, configurable with Gmail SMTP, Brevo, or any transactional email service. Cancel Bluehost once everything is confirmed stable on the new host.
HostBible WordPress plans offer faster servers, transparent pricing, and no surprise renewal hikes. We'll help you get settled in from day one.
View Hosting Plans