Move website files and database from Bluehost to GoDaddy
This is the only task that moves the website itself. Everything else on this page moves pointers and paperwork.
Which route you take depends on what you bought at GoDaddy. GoDaddy Web Hosting (cPanel) is a like-for-like target for a Bluehost shared site — File Manager, phpMyAdmin, the same public_html layout. Managed Hosting for WordPress is a different product with no cPanel, and it has its own importer that does most of this for you.
Do this step first, while Bluehost is still live. Nothing here is visible to the public until you change DNS, so a mistake at this stage costs you time and nothing else.
- Hands-on time
- 1–3 hours of hands-on work
- Start to finish
- Same day
- Difficulty
- Moderate
- Steps
- 9
Downtime risk: None while you work — the live site stays on Bluehost until DNS changes. Risk arrives at cutover if the copy was never tested.
Can I do just this, and nothing else?
Yes — this works on its own
Yes. You can put a working copy of the site on GoDaddy and change nothing else — the domain stays registered at Bluehost, email keeps flowing, and visitors carry on reaching the Bluehost copy. Nothing you do here is visible to the public until you make one DNS change afterwards.
What changes
- A second, working copy of the site exists on GoDaddy's servers
- You have a tested target to point at whenever you are ready
What stays exactly as it is
- The domain stays registered at Bluehost and is billed by Bluehost
- Nameservers and DNS records are untouched
- Email continues to work exactly as before
- Visitors still reach the Bluehost copy — nothing has moved for them
Before doing website files & database on its own: Nothing. This is the safest task to do first, because it changes nothing anyone can see.
Before you start
- An active GoDaddy hosting plan, provisioned and showing a temporary URL or IP address
- Bluehost account access with File Manager or FTP, and phpMyAdmin
- Enough local disk space for a full copy of the site — check the Bluehost disk usage figure first
- The WordPress admin login, if the site is WordPress
Step-by-step
Each step is labelled with which side you are working on, so you always know whether you should be signed in to Bluehost or GoDaddy.
- 1At Bluehost
Take a full backup before touching anything
Download a copy of both the files and the database and keep it off both hosts. This is not the migration copy — it is the thing you restore from when the migration copy turns out to be incomplete.
- Files: Bluehost portal → Hosting → File Manager, or connect over FTP/SFTP
- Database: phpMyAdmin → select the database → Export → Quick → SQL
- Store both somewhere that is not Bluehost and not GoDaddy
- 2At Bluehost
Compress public_html on the Bluehost side
Zipping on the server and downloading one archive is dramatically faster and more reliable than pulling thousands of small files over FTP, which is where WordPress migrations usually stall.
- In File Manager, open public_html, select all, then Compress → Zip Archive
- Turn on hidden files first — .htaccess is hidden by default and is easy to leave behind
- If your plan includes SSH, zip -r site.zip public_html is faster still
Over SSH, if your Bluehost plan allows itcd ~ zip -r site-backup.zip public_html -x '*/cache/*' '*/wp-content/cache/*' mysqldump -u DBUSER -p DBNAME > site-db.sql - 3At Bluehost
Export the database from phpMyAdmin
Export the whole database as a single SQL file. For WordPress, the database name is in wp-config.php — open it and note DB_NAME, DB_USER and DB_PASSWORD while you are there, because you will need to rewrite all three.
- phpMyAdmin → select the database → Export tab → Quick, format SQL → Go
- If the export times out or the file is over ~50 MB, use mysqldump over SSH instead
- Do not export from the Databases home screen — that includes system tables you do not want
- 4At GoDaddy
Upload the archive to GoDaddy and extract it
In GoDaddy's cPanel File Manager, upload the zip into public_html and extract it there. Uploading one archive and extracting on the server avoids a multi-hour FTP crawl.
- GoDaddy → Web Hosting → Manage → File Manager
- Navigate to public_html, then Upload, then Extract the archive
- If the zip contained the public_html folder itself, move the contents up one level so index.php sits directly in public_html
- For very large sites, FTP with FileZilla is the documented alternative
- 5At GoDaddy
Create the database and user at GoDaddy
cPanel database users are separate from the database. Create both, then explicitly grant the user All Privileges on the database — a migration that loads the site but shows "Error establishing a database connection" is almost always a missing grant.
- cPanel → Databases → MySQL Databases → create a database
- Create a user, then Add User To Database → All Privileges
- Write down the full names — cPanel prefixes both with your account name
- 6At GoDaddy
Import the SQL file
Import into the empty database you just created, through phpMyAdmin on the GoDaddy side.
- cPanel → phpMyAdmin → select the new database → Import → choose the .sql file → Go
- phpMyAdmin's upload limit is the usual failure point; if the file is too large, split it or import over SSH
- Wait for the success message before moving on — a partial import leaves a site that half works
- 7At GoDaddy
Update wp-config.php with the new credentials
The site will not connect until wp-config.php names the GoDaddy database, user and password. On GoDaddy cPanel hosting, DB_HOST stays localhost.
wp-config.phpdefine( 'DB_NAME', 'yourcpanel_dbname' ); define( 'DB_USER', 'yourcpanel_dbuser' ); define( 'DB_PASSWORD', 'the password you just set' ); define( 'DB_HOST', 'localhost' ); - 8At GoDaddy
Test on a temporary URL before you touch DNS
This is the step that separates a calm migration from a bad one. Load the GoDaddy copy while the live site is still served by Bluehost, and fix what is broken with no audience watching.
- Use the temporary URL or IP that GoDaddy provides for the hosting account
- Better: edit your local hosts file to point the real domain at GoDaddy's IP, so WordPress renders with the correct domain and you catch redirect loops
- Click through the site properly — forms, logins, checkout, an image deep in an old post
hosts file entry (macOS/Linux: /etc/hosts)203.0.113.10 example.com www.example.com - 9At GoDaddy
Fix the predictable breakage
A handful of things reliably differ between the two hosts. Work through them before cutover rather than discovering them live.
- PHP version — match Bluehost's version first, upgrade as a separate change later
- File permissions — directories 755, files 644
- Confirm .htaccess actually came across; if permalinks 404, it did not
- Re-create any cron jobs; they do not travel with files
- Check the error log for anything referencing a Bluehost-specific path
What goes wrong
The failures that actually happen on this step, rather than a generic warning to be careful.
Managed Hosting for WordPress is a different job
Can cause downtimeIf you bought GoDaddy's Managed Hosting for WordPress rather than cPanel hosting, ignore the File Manager route — there is no cPanel and no phpMyAdmin. Use GoDaddy's importer, which installs the ManageWP Worker plugin on your Bluehost site and pulls it across. It needs the Bluehost site to be publicly reachable for the whole process, so run it before you change any DNS.
Hidden files are silently skipped
Can cause downtime.htaccess, .user.ini and similar dotfiles do not appear in File Manager until you enable hidden files, and they do not get included in a zip you build from a selection that never showed them. A WordPress site missing .htaccess loads the homepage fine and 404s on every other page.
Large database imports fail quietly in phpMyAdmin
Can cause delaysAbove roughly 50 MB the import hits the upload or execution limit. Sometimes it errors; sometimes it stops partway and reports nothing useful. Check the table count after importing against the source, rather than trusting the absence of an error.
Email does not live in the files
Can cause downtimeMailboxes hosted at Bluehost are not in public_html and are not in the database. If you use Bluehost email, that is a separate migration — download the mail via IMAP before you cancel, or the messages go with the account.
Cached URLs baked into the database
Can cause delaysIf the domain is changing as well as the host, the old domain is written throughout the database — in post content, in widget settings, in serialized option arrays. Use a proper search-replace tool that understands PHP serialization; a raw SQL find-and-replace corrupts serialized data and breaks theme settings.
How to check it worked
Do not rely on the site looking fine in your own browser — it caches, and it will tell you what you want to hear.
- The site loads on GoDaddy's temporary URL, or on the real domain via a hosts file entry, with no database connection error
- Interior pages load — not just the homepage — which proves .htaccess and permalinks survived
- Images in old posts render, confirming wp-content/uploads came across in full
- wp-admin logs in and the plugin list matches the Bluehost site
- The GoDaddy error log is clean after a few minutes of clicking around
If it goes wrong
Nothing is live yet, so rollback is simply: do not change DNS. The Bluehost site continues serving as it always has. Delete the GoDaddy copy and start again if the import went badly.
Questions about this step
Can I move the site without downtime?
Yes, and this order is how. Because the GoDaddy copy is tested on a temporary URL while Bluehost still serves the public, there is no window where nothing answers. The only care needed is at cutover: avoid publishing content on the Bluehost site during the propagation window, since those posts live in a database you have already copied and will be lost.
Does GoDaddy migrate the site for me?
GoDaddy sells a paid Website Migration service, and its Managed Hosting for WordPress product includes an automatic importer. Neither covers email, DNS records or the registrar transfer — those remain yours to do, and they are the parts that cause outages.
What about my SSL certificate?
Certificates do not transfer. GoDaddy issues its own once the domain resolves to its servers, which means there is a short period after cutover where HTTPS may warn. Provision the certificate on the GoDaddy side as soon as DNS points there, and check that the site's own settings still force HTTPS.
Reference documentation
Provider interfaces change. When these steps and the official documentation disagree, the documentation wins.
- Upload files using my Web Hosting (cPanel) File ManagerGoDaddyOfficial docs
- Move my cPanel website with FTP and FileZillaGoDaddyOfficial docs
- Move my WordPress site automatically to Managed Hosting for WordPressGoDaddyOfficial docs
- Migrate my WordPress site manuallyGoDaddyOfficial docs
- FTP on Bluehost: Setup, Tools and TroubleshootingBluehostOfficial docs
- Website Migration serviceGoDaddyOfficial docs
- Migrate a WordPress site with a pluginGoDaddyOfficial docs
Only if you are doing the full move
Stuck on this step?
Send me the domain and what you have tried. I do Bluehost to GoDaddy moves regularly and can tell you what is actually blocking it.