The short answer

Every zone has one SOA (Start of Authority) record at its apex. Its seven fields name the primary server and a contact, carry a serial number that secondaries use to detect changes, set the timers secondaries use for zone transfers, and set how long resolvers cache "no such name" answers. If your provider manages the zone for you, only the last field usually matters to you; the transfer timers matter when you run your own secondaries.

$ dig +short example.com SOA
ns1.example.net. hostmaster.example.com. 2026102401 7200 3600 1209600 3600

The fields

FieldExampleMeaningTypical value
MNAMEns1.example.net.The primary name server, used for dynamic-update discovery rather than ordinary lookups. NOTIFY goes to configured secondaries; the default NS-based notification set excludes MNAME (RFC 1996).Your primary, or the provider's main server
RNAMEhostmaster.example.com.The contact mailbox with the first dot standing for @, so this is hostmaster@example.comA monitored role address
SERIAL2026102401Version number of the zone. Secondaries transfer the zone when it increases.Date plus a two-digit counter, or a counter the provider manages
REFRESH7200How often a secondary checks the primary's serial, in seconds3,600 to 86,400; lower matters less if NOTIFY works
RETRY3600How long a secondary waits after a failed checkLess than REFRESH
EXPIRE1209600How long a secondary keeps serving the zone without reaching the primary, before it stops answering1,209,600 to 2,419,200 (two to four weeks)
MINIMUM3600The negative caching TTL: how long resolvers remember that a name or record does not exist (RFC 2308)300 to 3,600

RIPE-203 gives the classic recommendations for these timers. Managed providers often use their own values and do not let you change some of them.

Tuning decisions that matter

  • Negative TTL. A long MINIMUM means that if someone queries a name just before you create it, they keep getting NXDOMAIN for that long. Keep it short, an hour or less, if you add records often. Resolvers actually use the lower of MINIMUM and the SOA record's own TTL. See negative caching.
  • EXPIRE too short. If the primary is down for longer than EXPIRE, every secondary stops answering and the zone disappears. Err long.
  • Serial that goes backwards. Secondaries ignore a lower serial, so changes stop reaching them. Serial arithmetic (RFC 1982) allows recovering by stepping forward, but the simplest fix is to never decrease it.
  • Serials that differ between servers. With your own secondaries, every server should show the same serial a few minutes after a change. A secondary stuck on an old serial is serving an old zone.
CommandUse
dig +nssearch example.comThe SOA serial from every listed name server, to compare
dig +norecurse @ns2.example.net example.com SOAOne server's SOA, directly

How DNS Panopticon helps

Domain Visualizer reads the SOA record through a public resolver. It reports a missing SOA, flags one that does not have all seven fields, and otherwise shows the record's values. It does not judge whether the timers are sensible, and it does not compare serials between name servers, so use dig +nssearch for that. Zone Analyzer can filter a zone export to its SOA and NS rows.

Sources and further reading