Skip to content
InteractiveMigrations

The DNS migration checklist: every step to move DNS without downtime

An interactive DNS migration checklist: export, compare, lower TTLs, handle DNSSEC and email, switch nameservers, verify and decommission. Tick steps as you go.

9 min readDNSMigrator team

A DNS move is safe when the old and new authorities can both serve production traffic throughout the cache overlap. The nameserver edit is near the end, not the beginning. Use this checklist alongside the shorter DNS cutover checklist and the explanation of how to migrate DNS without downtime.

The examples use example.com, ns1.old-provider.example, and ns1.new-provider.example. Replace every placeholder, query every authoritative server in each set, and use the actual TTLs returned for your domain.

DNS migration checklist: every step in order#

Check an item only when you have saved its evidence: an export, command output, screenshot, timestamp, or test result. A green provider dashboard is useful, but the DNS answers are the acceptance test.

DNS migration checklist

Tick each task as you work. Progress is stored only in this browser.

Loading progress…

Your checks save automatically.

Plan

Separate the registrar, DNS host, and application owners

Record who controls the registrar, current DNS provider, destination, web origin, mail system, certificate automation, and every SaaS verification record. Start with dig +short NS example.com and confirm the result in the registrar account. Test MFA and the nameserver-edit permission now; do not assume a registrar transfer lock also blocks nameserver edits, because providers implement separate lock types. This is an access check, so there is no DNS wait.

Export the complete source zone

Use the provider API or its zone-file export, not a list assembled from public queries. Save the raw export with a timestamp and keep a second read-only copy. Public DNS cannot enumerate arbitrary DKIM selectors, verification TXT records, delegated subdomains, or names that have never been queried. Use the DNS migration checker as an outside view, not as the source inventory. Export before planning and again immediately before the change freeze so late edits are visible.

Inventory behavior that is not a portable record

Mark proxied records, redirects, health checks, failover or geo rules, weighted answers, and apex ALIAS/ANAME or flattened CNAMEs. For each one, write the destination representation and an application test. An apex hostname target may need a provider-native alias rather than a literal CNAME; the apex CNAME and ALIAS guide explains why. Resolve every unsupported feature before creating the cutover window; waiting on DNS will not repair a semantic mismatch.

Measure the record, delegation, DS, and negative-cache clocks

Query the current authority for representative record TTLs and the parent for NS and DS. For a .com domain, a direct parent query looks like this:

bash
dig +norecurse +noall +authority @a.gtld-servers.net example.com NS
dig +norecurse +noall +answer @a.gtld-servers.net example.com DS
dig +norecurse +noall +answer @ns1.old-provider.example example.com SOA

On September 27, 2026, the first command returned a 172800-second NS TTL for example.com; your TLD may differ. Record the largest old application TTL, parent NS TTL, old DS TTL, SOA TTL, and SOA minimum. These values determine every later wait.

Define the freeze, monitoring, and rollback decision

Choose who can make DNS changes during cutover, where alerts arrive, and what triggers a pause or rollback. The simplest rule is a freeze from the final export until the old delegation TTL has elapsed. If a change cannot wait, require it on both authorities and query both before closing the ticket. Save the original NS set and decide who may restore it. A nameserver rollback is another cached delegation change, not an instant cache purge.

Prepare the new provider

Create the destination zone and import portable data

Import the saved zone through an API or BIND file. Let the destination manage its own SOA, DNSKEY, signatures, and apex NS records; preserve NS records that intentionally delegate child zones. Compare the imported RRset count by type with the source export, but do not accept equal counts as proof. Because the destination is not delegated yet, there is no recursive-cache wait; finish before the final comparison and change freeze so mismatches can be corrected.

Recreate apex, web, CAA, and verification answers

Check apex A/AAAA or alias behavior, www, API and static hosts, wildcards, CAA policy, _acme-challenge, and every ownership-verification TXT name from the source inventory. Query both sides directly:

bash
dig +norecurse +noall +answer @ns1.old-provider.example example.com A
dig +norecurse +noall +answer @ns1.new-provider.example example.com A
dig +norecurse +noall +answer @ns1.old-provider.example example.com CAA
dig +norecurse +noall +answer @ns1.new-provider.example example.com CAA

Compare owner, type, complete value set, priority where present, and intended TTL. RRset order does not matter. Correct a mismatch and wait only for the destination provider to publish it to all of its own nameservers; direct queries show when that has happened.

Preserve MX, SPF, DKIM, and DMARC

Compare all MX values and priorities, the complete SPF TXT policy, every active DKIM selector supplied by each sender, and _dmarc. Also verify the A/AAAA records of any in-zone MX targets. The email-safe DNS move guide covers the inventory in detail.

bash
dig +norecurse +noall +answer @ns1.new-provider.example example.com MX
dig +norecurse +noall +answer @ns1.new-provider.example example.com TXT
dig +norecurse +noall +answer @ns1.new-provider.example selector1._domainkey.example.com TXT
dig +norecurse +noall +answer @ns1.new-provider.example _dmarc.example.com TXT

Do not wait for recursive caches yet; these are direct authority checks. Do wait until every destination nameserver returns the same intended RRsets.

Compare every source and destination authority

Generate a list of every owner and type from the export, then query each old and new nameserver with dig +norecurse. Compare RRsets rather than dashboard rows, including multi-value TXT, MX, SRV, CAA, TLSA, SSHFP, NAPTR, and subdomain NS sets. Require the aa flag from the intended authority. DNSMigrator’s migration preview states label rows Exact, Translated, Review, Unsupported, or Managed; resolve every review item or unsupported row before switching.

Test the candidate web origins without changing public DNS

Exercise HTTPS with the production hostname and the candidate address:

bash
curl --resolve www.example.com:443:192.0.2.44 \
  --fail --show-error https://www.example.com/health

Check the certificate, redirect chain, status, expected body, and application dependencies. This tests the endpoint, not DNS or a removed CDN/WAF feature. Run it after each origin or edge-policy change and again immediately before cutover; no cache wait is involved.

Before the switch

Lower change-sensitive record TTLs, then wait out the old TTL

Lower A, AAAA, CNAME, MX, and other records you may need to change quickly. A 300-second target is common, but use a value both providers support. Confirm the lower value directly at every old authority, then wait at least the largest previous TTL. If an A record was 3600, wait 3600 seconds after all old authorities serve 300; only then can no compliant recursive cache still hold the earlier one-hour copy. Follow the TTL preparation guide. Lowering these records does not shorten the parent NS TTL.

Make a safe DNSSEC transition

If the DNS operators cannot coordinate keys, remove the old DS at the registrar while the old signed zone still answers. Confirm the parent no longer publishes it, then wait at least the old DS TTL so cached DS RRsets expire. Keep the old DNSKEY and signatures available during that wait. Validate the resulting insecure delegation with the DNSSEC migration checker before changing NS. RFC 6781 section 4.3.5 describes operator changes; never copy the old provider’s private signing setup as ordinary zone data.

Run the final authoritative and negative-answer checks

Query every destination authority for every expected RRset, then query a deliberately absent name and compare the response code and SOA behavior with the source. Run the zone diff tool for a second representation. If anything changes, restart the affected verification; if a lowered record had already been cached, wait its current TTL before relying on recursive tests.

Baseline web, mail, certificates, and DNS monitoring

Save current latency and success results for HTTPS, inbound and outbound mail, certificate issuance, API hosts, VPN/SIP/service records, and important TXT verifications. Configure alerts against more than the apex website. Send a labeled inbound and outbound message and retain headers. Do this immediately before the switch, after the freeze starts, so an existing failure is investigated rather than carried into cutover.

Confirm registrar readiness without starting a registrar transfer

Open the exact nameserver form, verify the destination NS hostnames, account recovery path, MFA, change approval, and any registry-specific validation. Check whether a domain lock affects transfers, nameserver edits, or both; unlock only what the registrar requires. Do not combine an unrelated registration transfer with this DNS change. Complete the access check before the maintenance window because support escalation can outlast any TTL.

Switch

Freeze changes and take a final source read

Start the agreed freeze, export the source again, and diff it against the reviewed snapshot. DNSMigrator reads and snapshots the live destination during apply, rebuilds the create/update/delete plan from its current records, and writes that fresh plan. When the operation keys differ from the preview, the timeline records the re-plan. Because apply does not pause for a second review, return to preview if the source or destination changed. This gate has no fixed DNS wait: proceed only when the final evidence matches.

Change the parent delegation and timestamp publication

Replace the registrar’s NS set with the destination’s complete assigned set. Query multiple parent authorities directly until they return the new delegation, and record the first time all checked parents agree:

bash
dig +short com NS
dig +norecurse +noall +authority @a.gtld-servers.net example.com NS

Use the parent servers for the real TLD. Start the old-provider retirement clock from confirmed parent publication, not from clicking Save at the registrar.

Keep both authorities equivalent during overlap

Do not delete or disable the old zone. A resolver that cached the old delegation can continue querying it for up to the parent NS TTL; a resolver without that cache may use the new authority immediately. Maintain the freeze for that full measured interval. If an emergency record change is unavoidable, apply it to both sides, query every authority, and wait the old record TTL before expecting all recursive answers to converge.

After the switch

Check parent, recursive, and authoritative views separately

Use direct parent queries for delegation, direct authority queries for zone contents, and recursive queries for cache observations. The propagation checker samples resolver views, while the propagation timing guide explains their clocks. Check immediately, throughout the parent NS TTL, and once more after it ends. A broad sample is evidence of adoption, not proof that every private cache has expired.

Retest website, email, certificates, and verification records

Repeat the baseline tests from at least two networks. Send mail in both directions; inspect the receiving headers for SPF, DKIM, and DMARC results; load HTTPS without --resolve; and exercise API and service names. Check certificate renewal challenges and CAA. Run immediately after parent publication, periodically during overlap, and after the full NS TTL because those points cover new and old cache paths.

Re-enable DNSSEC at the destination

After the new delegation is stable, enable signing at the destination, query every new authority for DNSKEY and signed answers, then publish the destination’s DS through the registrar. Confirm the DS at the parent and validate the chain. Keep the destination keys published continuously. Wait the parent’s DS TTL before treating the new secure state as universal; the DNSSEC cutover guide has the full checks.

Raise application TTLs only after the move is stable

Restore normal TTLs after functional checks pass and the old parent NS TTL has elapsed. Confirm the new values at every destination authority. Raising a TTL is safe immediately for correctness, but it makes the next correction slower, so wait until rollback risk is low. Recursive resolvers adopt the higher value as they refresh each RRset.

If you roll back, keep both zones serving

Fix or restore the old zone first, then request the original NS set at the registrar and verify it at the parent. Some resolvers may already cache the new delegation for its NS TTL, so the destination must also remain correct during the reverse overlap. DNSMigrator does not silently revert a failed cutover; the user can choose Switch back to the old provider in the cutover flow.

Decommission

Wait out the measured parent NS TTL plus an operational margin

Keep every old authoritative server online and equivalent for at least the full parent NS TTL after all checked parent servers published the new NS set. For the live .com example that minimum was 172800 seconds, or 48 hours; it is not universal. Add the margin required by your change policy, and restart the interval if you reverted or changed delegation again. Do not use a propagation sample as the cancellation clock.

Run a final audit, archive evidence, and then cancel

After the wait, query parent NS and DS, every new authority, representative recursive resolvers, web, mail, and certificate automation. Save the final source export, destination export, diff, command output, timestamps, and ownership notes. Remove obsolete API credentials and automation only after confirming nothing still writes the old provider. There is no further DNS wait once the old delegation interval and final checks are complete.

DNS migration steps that prevent downtime#

To migrate DNS without downtime, make the new authority production-ready before delegation and keep the old authority production-ready afterward. TTL reduction shortens application-answer overlap, but it cannot recall cached parent NS records. DNSSEC adds a separate parent DS clock. The checklist tracks these as different gates because treating them as one vague “propagation” period is how safe-looking moves fail.

The result should be boring: some resolvers use old nameservers, some use new nameservers, and both receive an equivalent answer. Only then does the nameserver switch stop being a single point of failure.

What are the main DNS migration steps?
Export and classify the complete zone, build and directly query the destination, lower change-sensitive TTLs and wait out their old values, transition DNSSEC safely, switch the parent delegation, monitor both authorities, and retire the old provider only after the parent NS TTL expires.
How do I migrate DNS without downtime?
Make old and new nameservers return equivalent client-visible RRsets before the switch, then keep both online throughout the delegation cache interval. Freeze record changes during that overlap or write every urgent change to both providers.
How far ahead should I lower TTL before a DNS migration?
Confirm the lower TTL at every old authoritative server, then wait at least the largest previous TTL among the records you changed. A resolver may have cached the old value one second before the reduction appeared.
When can I turn off the old DNS provider?
Start from the time the new NS set is visible at the parent, wait the full parent delegation NS TTL, add your operational margin, and run final web, mail, DNSSEC, and authoritative checks. A public resolver sample cannot prove every private cache has expired.
Does changing nameservers transfer DNS records?
No. Delegation tells resolvers which authority to ask; it does not copy the old zone. Read what happens to DNS records during a domain transfer and prepare the destination first.