Most people never think about the SOA record. It doesn't route mail like an MX record or verify a domain like a TXT record, so it's easy to ignore. Then one day you update your DNS zone, wait the usual few hours, and the change still hasn't shown up everywhere — and the reason is sitting quietly in that SOA record you skipped past. This one controls the timing rules for your entire zone, and getting it wrong (or not understanding it) is behind more "why hasn't my DNS updated yet" tickets than people realize.
What the SOA Record Actually Is
Every DNS zone has exactly one SOA (Start of Authority) record. It doesn't point to an IP or a mail server — it describes the zone itself: who's authoritative for it, and how other nameservers should treat it. In cPanel's Zone Editor you'll see it at the very top of the zone, something like this:
yourdomain.com. IN SOA ns1.skyserver.in. hostmaster.yourdomain.com. (
2026072701 ; serial
14400 ; refresh
1800 ; retry
604800 ; expire
300 ) ; minimum (negative caching TTL)
Each field has a specific job, and three of them are the ones that actually cause support tickets.
| Field | What it controls |
|---|---|
| Serial | A version number for the zone. Secondary nameservers compare this to decide if they need to re-pull the zone. |
| Refresh | How often a secondary NS checks the primary for a new serial. |
| Retry | How long a secondary waits before retrying if the primary didn't answer. |
| Expire | How long a secondary keeps serving old data if it can't reach the primary at all. |
| Minimum | How long resolvers cache a negative answer (NXDOMAIN) for a record that doesn't exist yet. |
Symptom: "I Updated DNS, But Some Servers Still Show the Old Value"
This is almost never a propagation myth — it's the serial number. If you're running your own secondary nameservers (common on a VPS with a hidden primary + public secondaries setup), and the serial on the primary didn't actually change, your secondaries will never notice the update. AXFR/IXFR zone transfers are triggered by a serial comparison, not by a timer alone forcing a full copy every refresh cycle regardless of content.
If you're only using SkyServer's own nameservers through cPanel, this specific failure mode mostly doesn't apply — cPanel bumps the serial automatically on every zone save. But if you manage BIND or PowerDNS yourself, or use a hybrid setup (primary on a VPS, secondaries elsewhere), a manually-edited zone file with a forgotten serial bump is one of the most common self-inflicted DNS outages there is.
The Fix
Always increment the serial on every edit. The standard format is YYYYMMDDnn — date plus a two-digit revision counter for that day:
2026072701 <- first edit today
2026072702 <- second edit today, same day
If you edit the zone twice in one day and forget to bump the second time, the secondary sees no change and skips the transfer. Some admins get burned the opposite way too: they roll the date back after testing (say, restoring an old zone file) and the new serial is numerically lower than what the secondary already has — which also gets ignored, because secondaries only pull forward, never backward. If you ever need to "undo" a zone this way, bump the serial higher than the last one it ever had, not lower.
Symptom: New DNS Record Still Returns NXDOMAIN After You Waited
This one trips people up constantly, and it's not your ISP's resolver being slow — it's the SOA minimum field, which controls negative caching. If a resolver looked up autodiscover.yourdomain.com before you created the record, it cached the "this doesn't exist" answer for as long as your minimum field says (older defaults were often 86400 seconds — a full day).
So the sequence that causes the ticket is: someone queries a record before it exists (often automated — a mail client probing autodiscover, a CDN health check, a monitoring tool) → gets NXDOMAIN → that negative result gets cached for the minimum-field duration → you create the record five minutes later → that one resolver keeps insisting the record doesn't exist until its cache expires, even though every other resolver on earth sees it fine.
The Fix
- Set the minimum field to something reasonable — 300 to 3600 seconds (5–60 minutes) is standard for actively-managed zones. Values above a few hours mean any negative-cache mistake takes that long to self-correct.
- If you're mid-troubleshooting and a specific resolver is stubbornly caching NXDOMAIN, don't wait it out blindly — check with
dig yourdomain.com SOAto see the current minimum, and cross-check with an independent DNS propagation checker to confirm whether it's one resolver's cache or a genuine zone problem. - In cPanel, the zone template's default minimum TTL is usually already reasonable, but if you imported a zone from an old BIND config or a different registrar, check it — legacy exports sometimes carry a 24-hour minimum forward without anyone noticing.
Symptom: Secondary Nameserver Serving a Dead Zone After a Primary Outage
This is the expire field's job, and it's the one nobody thinks about until it matters. If your primary nameserver goes down (server crash, network issue, migration gone wrong) and stays down, your secondary keeps answering queries with its last known-good copy of the zone — but only until the expire timer runs out. After that, the secondary considers its data too stale to trust and stops answering authoritatively for the zone at all.
604800 seconds (7 days) is the traditional default, and it's a reasonable buffer — enough time to fix almost any primary-server problem before your domain effectively disappears from DNS. Shortening it aggressively to "be safe" backfires: a brief primary hiccup during a maintenance window can expire the secondary's data faster than intended, causing an outage that wouldn't have happened with the standard value.
Checking Your Current SOA Values
From any machine with dig installed (Linux, macOS, or WSL on Windows):
dig yourdomain.com SOA +short
That returns the primary NS, admin contact, and all five timer fields in order. If you're not sure which nameserver is authoritative, drop the +short and read the full ANSWER section — it'll show you which server actually replied.
In cPanel, you can see (and in WHM, edit) the SOA record directly: Zone Editor → select the domain → look for the SOA row. Most cPanel users never need to touch it manually since cPanel manages the serial automatically, but it's worth knowing it's there before you assume a DNS problem is something more exotic.
Prevention Checklist
- Let cPanel/WHM manage the serial automatically unless you're hand-editing zone files outside it.
- If you do hand-edit a zone, bump the serial every single time, and never let it go backward.
- Keep the minimum (negative TTL) field short — under an hour — on any zone that changes often.
- Don't shrink the expire field below a few days; it's your safety margin against primary-server downtime, not a knob for faster failover.
- When DNS "isn't updating," check the SOA serial on both primary and secondary before assuming it's generic propagation delay.
Frequently Asked Questions
Do I need to edit the SOA record manually in cPanel?
Almost never. cPanel automatically increments the serial number whenever you save a change through Zone Editor, so day-to-day DNS management doesn't require touching the SOA record directly. You'd only edit it manually for advanced setups like a custom hidden-primary/secondary nameserver architecture.
Why does dig show a different serial on two different nameservers?
That means the zone hasn't synced yet — the secondary hasn't pulled the latest version from the primary. It'll usually catch up within one refresh interval (commonly a few hours), or immediately if the primary sends a NOTIFY message on save, which most modern DNS software including cPanel's does.
What's a safe minimum TTL value for a zone I update often?
300 to 3600 seconds (5 minutes to 1 hour) works well for actively managed domains. It limits how long a mistaken negative cache can linger without making your resolvers hammer the nameserver with excessive repeat queries.
Can a wrong SOA serial actually take my domain offline?
Indirectly, yes — if your primary nameserver fails and the serial was never being refreshed correctly beforehand, your secondaries may already be out of sync when they need to take over, serving stale or incomplete zone data during the outage.
Is the SOA email address (rname) actually used for anything?
Historically it was meant to be an admin contact for the zone, formatted with the @ replaced by a dot (e.g., hostmaster.yourdomain.com means hostmaster@yourdomain.com). In practice almost nothing queries or emails this address automatically anymore, but keeping it valid and correctly formatted is still good zone hygiene.
