Step-by-Step Tutorial for Freelancers
Spin up a free InstaWP sandbox to follow along.
Why This Move Matters — the Pain Point Scene-Setter
Your agency client is stuck on a standard Bluehost plan. Page-speed tests show a Time to First Byte hovering around 1.5 – 2 s, PHP workers throttle under modest traffic, and support tickets take days to resolve. Every plugin update feels like Russian roulette: will the site crash or limp along even slower?
As the freelancer trusted to “just fix it,” you need a fast, repeatable path off that shared box and onto an elastic WordPress cloud where resources scale automatically and TTFB lands well under 150 ms.
Migration in Five Numbered Steps
1. Pre-Audit & Backups
- Run a quick audit
curl -o /dev/null -s -w '%{time_namelookup} %{time_connect} %{time_starttransfer}\n' https://clientsite.com
Note the sluggish start-transfer time. - Generate full backups
- cPanel → Files → Backup Wizard → Full Backup
- Inside WordPress, install UpdraftPlus → “Backup Now” → download database & uploads.
- Export the database manually (belt-and-suspenders):
wp db export clientsite.sql
2. Spin Up the Target Environment
- Create a fresh InstaWP sandbox (one click).
- Import the archive
- Drag-and-drop your ZIP in the InstaWP dashboard, or
wp import /path/to/clientsite.xml --authors=create wp db import clientsite.sql
- Verify permalinks, media paths, and custom tables.
3. Debug & Optimise
- Re-run the TTFB test against the sandbox URL:
curl -o /dev/null -s -w '%{time_starttransfer}\n' https://sandbox123.instawp.xyz
You should already see < 0.15 s. - Plugin bloat check
wp plugin list --status=active --field=name | wc -l
Aim for < 15 active plugins; deactivate anything unused. - Turn on object caching (Redis) in the sandbox → Settings → Performance.
4. Push Live to Cloud Host
- Choose an elastic WordPress cloud plan (InstaWP or equivalent).
- From the InstaWP sandbox, hit Push → New Cloud Site.
- Map your client’s domain and generate an ACME SSL cert automatically.
- Post-push smoke test: admin log-in, checkout flow, contact forms, webhooks.
5. DNS Cut-Over & SSL Issuance
- Confirm the new server IP in the cloud dashboard.
- In the registrar (or Cloudflare), update the A record to the new IP; set TTL = 300 s for fast propagation.
- Wait ~15 min, clear your local DNS cache, and retest TTFB:
dig +short clientsite.com curl -o /dev/null -s -w '%{time_starttransfer}\n' https://clientsite.com
- Keep Bluehost active 48 h as a fallback, then cancel to avoid renewal fees.
Wrap-Up: Checklist, Gotchas & Next Steps
✅ Do This | ⚠️ Watch Out For |
---|---|
Capture both cPanel and WP-level backups before touching DNS. | Mixed-content issues after SSL; run a search-replace on http:// . |
Verify email deliverability (SPF, DKIM) after cut-over. | Old IP hard-coded in SMTP plugins or security settings. |
Use WP-CLI to script repeat migrations for future clients. | WP-Cron disabled by default on some clouds—set a real cron job. |
Benchmark before & after; screenshots prove value to the client. | Forgetting to recreate custom DNS records (sub-domains, MX). |
Next-Step Resources
- InstaWP Docs: Sandbox → Cloud push guide
- WP-CLI Handbook: Automating database & media imports
- k6.io: Load-testing scripts to validate scaling
slug:
migrate-bluehost-to-cloud-wordpressmeta:
Step-by-step guide for freelancers to migrate an agency client from Bluehost to a fast, elastic WordPress cloud in under an hour—backup, import, optimise and switch DNS safely.