
Website Migration Without Downtime: DNS, Staging, and Cutover
A practical zero-downtime migration checklist for WordPress and custom sites: staging sync, DNS TTL, SSL, redirects, search-replace, and post-cutover verification.

On this page
“Website pindah hosting” searches usually mean one fear: downtime and broken forms the morning after. A careful cutover keeps the old site online until the new stack is proven.
This is the migration sequence I use for client sites.
Principle: run two environments until DNS flips
- Build and test on staging (temporary URL or hosts-file override).
- Sync content again just before cutover.
- Lower DNS TTL ahead of time.
- Point DNS only when HTTPS, redirects, and smoke tests pass.
- Keep the old host available for a short rollback window.
True “zero seconds” is rare on shared DNS—but minutes of controlled overlap beats hours of surprise outage.
Phase 1 — Inventory
- current DNS records (A, AAAA, CNAME, MX, TXT);
- SSL provider and CDN (Cloudflare proxy on/off);
- CMS version, plugins, cron jobs, email transactional sender;
- large media / database size;
- hard-coded URLs in theme, Elementor, and options tables.
Export a screenshot of DNS before touching anything.
Phase 2 — Staging on the new host
- clone files + database;
- search-replace old domain → staging domain carefully (serialized PHP data aware tools for WordPress);
- disable cache/CDN conflicts on staging;
- test login, forms, checkout (if any), and major templates on mobile;
- fix PHP version mismatches early.
Phase 3 — Pre-cutover hardening
- lower TTL to 300s (or lower) 24–48 hours before flip when possible;
- issue SSL on the new host (or confirm Cloudflare Full Strict readiness);
- prepare 301 map for old permalinks / HTTP→HTTPS / www↔apex;
- schedule a content freeze or final sync window with the client.
Phase 4 — Cutover
-
Final DB/media sync from production to new host.
-
Put the new site in maintenance or read-only only if writes are active during sync.
-
Update DNS A/CNAME to the new origin (or swap Cloudflare origin IP).
-
Purge CDN cache.
-
Verify:
- homepage + contact form;
- HTTPS padlock;
- Search Console property / sitemap;
- email still sending (SMTP credentials often break after host changes).
Phase 5 — Stabilize
- monitor 404s and server logs for 48 hours;
- keep old hosting paid through the TTL drain period;
- raise TTL again once stable;
- document new credentials for the client.
WordPress-specific notes
- update
siteurl/homecorrectly; - regenerate permalinks once;
- re-save Elementor/CSS if assets 404;
- reconnect object cache / cron if the new host differs;
- never leave
DISALLOW_FILE_EDIToff on production if it was part of hardening.