Skip to content
Back to Blog
DNS & Networking10 min read

DNS Propagation: Best Practices That Actually Work

Stop waiting for DNS propagation. Stop flushing resolvers. Here's what really changes DNS records in production, and what doesn't.

Written by Abdul AbrorTechnical Hosting Support Engineer
DNS Propagation: Best Practices That Actually Work
On this page

You've changed a DNS record, and now you wait. Maybe you flush your resolver, ping some IPs, check "propagation checkers" every ten minutes. This is the ritual. It's also mostly wasted effort.

DNS propagation isn't a thing you wait for—it's a side effect of time-to-live (TTL) values and caching. In production, you don't want to wait; you want to plan. Here's what actually works when you need DNS changes to roll out cleanly.

What DNS Propagation Actually Is (and Isn't)

When you update a record on your authoritative nameserver, the internet doesn't instantly sync. Each recursive resolver that previously looked up that record may have cached the old response for as long as the TTL said to keep it. "Propagation" is just the process of those caches expiring and fetching the new data.

There's no central push. No global announcement. You change your zone file; resolvers eventually notice.

Crucially, propagation has no fixed duration. It depends entirely on the TTL you had before the change, plus any intermediate caching (ISP resolvers, browser caches, etc.). I've seen support tickets where a client panicked after five hours because their site still showed an old IP. Was the change wrong? No—they still had a 24-hour TTL from before they touched anything.

Production Best Practices

Lower TTL Before Changes, Not After

This is the single most effective tactic. If you know a change is coming, lower the record's TTL to, say, 60 seconds at least one full previous TTL in advance.

Example: your A record has a TTL of 3600 seconds (1 hour). At 10:00, you change the TTL to 60 seconds. By 11:00, every recursive resolver that had the old TTL will expire and pick up the new TTL. Now you can change the IP, and new queries will propagate within a minute.

After the change is stable, raise the TTL back to your preferred value (again, waiting one full low-TTL cycle so the higher value is cached everywhere).

Anti-pattern: lowering the TTL after making the record change. That doesn't help—the old record already has a high TTL. You've just locked yourself into waiting the full original TTL.

Test Against Authoritative Nameservers Directly

Use dig or nslookup and query your authoritative servers explicitly. This skips caches.

dig @ns1.example.com example.com A

If that shows the new record, your change is live on the authoritative side. Everything else is cache waiting to expire.

Public "DNS propagation checkers" are fine for a quick look, but they typically query from a random set of nodes. If one shows old data, it doesn't mean there's a problem—it means that resolver hasn't refreshed yet. Don't panic over a single stale result.

Don't Flush Resolver Caches (Except for Debugging)

Running ipconfig /flushdns or sudo systemd-resolve --flush-caches empties your local cache. That's useful for testing that you see the new record. But it does nothing for your users. None of them will run that command.

Anti-pattern: publishing guides that tell everyone to "flush your DNS" when a site changes IP. The few users who actually do it will be okay; everyone else waits the TTL anyway.

Plan for Mutually Dependent Changes

Changes often involve multiple records: a new mail server might need both an MX and an A record. If you delete the old A record before the new one propagates, mail can be undelivered while the MX still points to that IP.

Better approach: if possible, stand up the new service on the old IP first (if it fits). Or overlap the records: both old and new A records exist for a short period, with the old one set to expire via TTL. Once you're confident old queries have drained, remove the old A.

Monitor with Distributed Probing

If you need to know when a change has fully propagated to your user base, set up probes from multiple geographic locations (AWS Lambda@Edge, DigitalOcean droplets, whatever). Check the record against your auth nameserver and against common public resolvers (1.1.1.1, 8.8.8.8). Log the differences.

This gives you real data instead of guesses. You'll see exactly when each resolvers refresh.

Anti-Patterns to Avoid

Setting TTL to Zero

Some admins think "zero TTL means instant changes." That's true for the authoritative side, but many recursive resolvers ignore a zero TTL or treat it as a minimum (e.g., Cloudflare's 1.1.1.1 enforces a minimum of 120 seconds). You'll get inconsistent behavior. Stick to a low but non-zero value like 60 seconds.

Deleting Old Records Immediately

Unless you're absolutely certain nothing references the old record, leave it live with a low TTL for at least two full TTL periods after the change. Services break when you pull a record that someone still has cached—especially if they use a DNS-based failover or health check.

I once saw a company delete an old A record for their API immediately after changing the IP. Clients that had cached the old IP and retried got NXDOMAIN. Took them hours to realize the cache was still pointing to a dead IP.

Trusting "Propagation Checkers" Blindly

Many of these tools query from a single server or a small set and show you a percentage. That percentage is misleading because it only reflects the resolvers they hit, not your user base. Use them as a sanity check, not as an official status.

Making DNS Changes During Peak Hours Without Pre-Staging

If you change a major record at noon without lowering TTL ahead of time, you'll spend the afternoon answering support emails. Schedule changes during low traffic, and always pre-stage the TTL.

What to check first

When a DNS change feels slow:

  1. Verify the record on your authoritative nameserver with dig @ns1.yourdomain.com. If it's correct, the change is live.
  2. Check the TTL of the old record—that's how long you'll wait.
  3. Check that you didn't make a typo. A surprising number of "propagation delays" are just fat-fingered IPs.
  4. If everything looks right, wait. No magic switch exists.

For planned changes, always pre-stage TTLs. It's the one action you can take that makes propagation predictable—and that's the closest you'll get to "instant" in production DNS.

FAQ

How long does DNS propagation really take?

It depends entirely on the TTL set before the change. No fixed number. With a 60-second TTL, most resolvers will update within a few minutes. With a 24-hour TTL, you wait 24 hours.

Why does my website still show old IP after 24 hours?

Check your own resolver—you might still be hitting a cache. Use dig @auth-server. If that shows the new IP, the issue is your local resolver or an intermediate cache (like your ISP). Restart your router or try a different network.

Is there any way to force propagation?

No. You can politely ask resolvers to refresh by lowering TTL ahead of time, but you cannot push a cache flush to the entire internet. Anyone claiming to offer "instant propagation" is selling snake oil.

Does Cloudflare affect propagation?

Cloudflare authoritative DNS works like any other. However, if you use Cloudflare as a reverse proxy (orange cloud), the IP you see is Cloudflare's, not your origin. Changing the origin IP behind Cloudflare does not require DNS propagation for visitors—only Cloudflare needs to be updated, which happens near-instantly. But the DNS record itself still has a TTL on Cloudflare's nameservers.