Topic Guide
Migrating Thousands of Domains Without Breaking a Live Customer
Moving thousands of customer domains to a new edge layer is really two migrations happening at once. One is technical: proxy flags, SSL modes, DoH providers, an off-origin relay for the bare domain a managed edge won't proxy. The other is entirely human: a long tail of customers who each control their own DNS, on their own schedule, some of whom will never see the deadline email. Both migrations can fail independently, and this hub is built from real incidents in both halves.
The technical failures below share a shape: a setting that looked correct and wasn't verified against the live result. A certificate that issued while the page stayed dark, a DoH provider that failed instantly and completely instead of gracefully, a runbook, written by the same person reading it, that named the wrong account for a domain. The human failures are about batching and blast radius: canary batches before a full cutover, a migration board that tracks which domains are actually done instead of which ones were attempted, and a scan that can size the damage of a bad flip in twelve seconds instead of an afternoon.
If you're moving domains at any real scale, the lesson worth taking is that the deadline is never the hard part. The hard part is that every domain is a slightly different case, and the discipline that survives contact with the long tail is verifying live state before you touch anything irreversible, not trusting the plan that got you there.
9 posts in this guide, by DX
Start here
Migrating thousands of customer domains to a layer above the server
The technical part of an edge migration took days. The human part, moving a long tail of customer-managed DNS without breaking anyone's website, is the part that's still going. Canary batches, a migration board, deadline emails, and a relay with a tested restore.
Before you touch a live domain, verify where it actually lives
-
The runbook said the domain was in account A. It was in account B. Verify ownership before touching live DNS.
My own build runbook, written by me, confidently told me to flip a DNS record in a specific GoDaddy reseller account. The record wasn't there.
-
Environment Cleanup Needs a Migration Record
A small cleanup becomes risky when long-lived workspaces each carry their own history.
SSL, DNS, and the edge you don't control
-
My whole 1,200-domain provider split died instantly: keep a second DoH provider on hand
I was halfway into a Cloudflare-for-SaaS migration audit when every DNS lookup I depended on failed at once. Not some of them, not the flaky ones, all 1,264 of them, and they failed instantly.
-
An Off-Origin Caddy Relay for Bare-Domain SSL (Because Cloudflare Pro Won't Proxy Your Apex)
Cloudflare Pro proxied every subdomain my SaaS threw at it and silently refused the apex.
-
Cloudflare Error 1014: The Cert Issued. The Page Didn't Load.
One proxied=False to proxied=True flip closed the ticket, but it took two wrong root causes and a live domain to find the flag, and it rewrote a design doc that had been wrong for months.
Naming decisions you can't take back
When the migration itself breaks a live customer
-
The Migration Flip That Took Down a Live Customer (and the Blast Radius I Could Measure in 12 Seconds)
A per-domain Cloudflare edge flip broke 8 legacy redirect domains. A blast-radius scan built during the migration sized the damage in 12 seconds.
-
Every migration batch found a nuance nobody predicted
Forty tickets in six weeks. A site 'waiting for propagation' that actually needed a cert reissue. Staff screens showing Awaiting DNS on migrated domains. The real deliverable of a domain migration is a state machine that tells staff, customers, and the automation the same truth.
Hitting one of these walls in your own codebase or your own machine? Talk it through with us, or read the rest of the Build Log.