Blog/ Deliverability & authentication

DMARC Subdomain Policy: How the sp Tag Actually Works

Nafiul HasanNafiul Hasan· 10 min read
Diagram of DMARC subdomain policy: how subdomains inherit the parent p tag, when the sp tag overrides it, and how the np tag handles non-existent subdomains

The short answer

The sp tag sets the DMARC policy for existing subdomains of your organizational domain. If sp is absent, subdomains inherit the p policy, so most subdomains need no record of their own. Publish a separate DMARC record on a subdomain only to give it a different policy. The np tag covers non-existent subdomains.

DMARC sp tag subdomain policy explained: subdomains inherit the parent p tag unless sp overrides it; np covers non-existent subdomains.

On this page
  1. 01How subdomains inherit the DMARC policy
  2. 02Which policy a subdomain actually gets
  3. 03Does a subdomain need its own DMARC record?
  4. 04Before you start
  5. 05How to set a different DMARC policy for a subdomain
  6. 06Platform differences: the standard vs the docs you will find
  7. 07The np tag and non-existent subdomain spoofing
  8. 08What to do when it does not work
  9. 09A faster way to handle what does land in the inbox

A DMARC record on your main domain does more than protect that one name. Through the sp tag and policy inheritance, it also governs every subdomain, and getting that wrong is how a domain running p=reject still gets spoofed.

This is the DMARC sp tag subdomain policy explained: what a subdomain inherits, what you can override, and where the gaps hide. The rules come from RFC 9989, the 2026 DMARC standard that replaced RFC 7489.

How subdomains inherit the DMARC policy#

A DMARC record uses three policy tags. The p tag sets the policy for the organizational domain itself. The sp tag sets the policy for existing subdomains. The np tag sets the policy for subdomains that do not exist in DNS.

The sp tag is described in RFC 9989 as the assessment policy for all subdomains of the organizational domain. If sp is absent, receivers apply the p value to subdomains. So inheritance is the default: publish nothing extra and every subdomain follows p.

When a subdomain has no record of its own, the receiver climbs the DNS tree to your organizational domain and reads its policy. The table below shows exactly which value wins.

The subdomain in the From addressPolicy the receiver appliesGoverned by
Has its own DMARC recordThat record's own p tagThe subdomain record; the parent sp is not consulted
Exists, no own record, sp is presentThe sp valuesp on the organizational-domain record
Exists, no own record, sp is absentThe p valuep on the organizational-domain record
Does not exist, np is presentThe np valuenp on the organizational-domain record
Does not exist, np absent, sp presentThe sp valuenp falls back to sp
Does not exist, sp and np both absentThe p valuep, the final fallback

Which policy a subdomain actually gets#

Read the precedence in one line. For a subdomain that exists, the order is: its own record, then sp, then p. For a subdomain that does not exist, the order is: np, then sp, then p.

The single trap worth memorizing is that a subdomain's own DMARC record wins over the parent's sp. Receivers query the exact From domain first. If they find a valid record there, they use its p tag and never look at the parent. A weak record on a subdomain quietly overrides a strict sp above it.

Branching diagram showing a receiver choosing which DMARC policy applies to a subdomain: the subdomain's own record first, then the sp tag for existing names, then np for non-existent names, then the p tag as the fallback
For an existing subdomain the order is own record, then sp, then p. For a non-existent one it is np, then sp, then p.

Does a subdomain need its own DMARC record?#

Usually not. Because subdomains inherit the p policy through sp, one record on the organizational domain covers the whole tree. You publish a separate record on a subdomain for one reason: to give that subdomain a policy that differs from the parent.

Note the split with SPF and DKIM. A DMARC record is inherited, but SPF and DKIM are not. Every subdomain that sends mail still needs its own SPF and DKIM so that its mail can align and pass DMARC. Inheritance covers the policy, not the authentication.

  • One org-domain record, sp absent: every subdomain follows p. Simplest, and correct for most domains.
  • One org-domain record with sp: every subdomain gets the sp policy, the parent keeps p.
  • A record on a specific subdomain: only that subdomain changes; the rest still inherit.

Before you start#

Publishing or changing a subdomain policy is a DNS edit, but a wrong one blocks real mail. Line these up first.

  • Know your organizational domain, the registered name your subdomains inherit from.
  • Inventory the subdomains that send mail, and any bulk services sending on their behalf.
  • Confirm SPF and DKIM are configured for each sending subdomain, since alignment needs them.
  • Decide your target policies. If you are new to none, quarantine and reject, work through a staged DMARC rollout first.
  • Have an rua address ready so aggregate reports show what your change did before you tighten further.

How to set a different DMARC policy for a subdomain#

  1. 1

    Read the parent record

    Look up the TXT record at _dmarc.example.com and note its p tag and whether sp or np are already present. That record is what every subdomain inherits today.

  2. 2

    Decide inheritance or override

    If all subdomains should share one policy, you only need the parent. If one subdomain needs something different, you will publish a record just for it.

  3. 3

    To change all subdomains at once, add sp

    Edit the parent record, for example v=DMARC1; p=reject; sp=quarantine; rua=mailto:[email protected]. Now the org domain rejects and every existing subdomain quarantines.

  4. 4

    To change one subdomain, publish its own record

    Add a TXT record at _dmarc.sub.example.com, for example v=DMARC1; p=none; rua=mailto:[email protected]. This overrides the inherited policy for sub.example.com only.

  5. 5

    Cover subdomains that do not exist

    Add np to the parent, for example np=reject, so mail from names like billing.example.com that have no DNS record is rejected. No legitimate sender uses a non-existent subdomain.

  6. 6

    Verify, then tighten

    Query the records again to confirm they resolve, then watch aggregate reports at p=none or sp=none before moving a subdomain to quarantine or reject.

Platform differences: the standard vs the docs you will find#

DMARC is published in DNS, so the record you create is the same at any registrar. What differs is which specification a provider's guidance describes, and how each receiver enforces the result.

Microsoft's own DMARC guidance still cites RFC 7489 and documents the pct tag, which RFC 9989 removed. Its subdomain behavior is correct, but it steers you toward per-subdomain records rather than the sp tag during rollout. The table pins down where the two line up.

TopicRFC 9989 (the current standard)Microsoft Learn guidance (checked August 2026)
Subdomain inheritanceSubdomains with no record inherit p via the DNS tree walk; sp overrides for existing onesA domain's record automatically covers subdomains that lack their own record
Non-existent subdomainsThe np tag sets their policy, falling back to sp then pThe parent record covers non-existent subdomains too, unless one publishes its own
Spec citedRFC 9989, published 2026, which obsoletes RFC 7489 and RFC 9091Still cites RFC 7489 and documents the pct tag
Rollout methodDifferentiate with sp, or publish a record per subdomainPublish a separate record per subdomain, parent last, then consolidate
Per-subdomain authAlignment is still required for each sending subdomainEach subdomain needs its own SPF and DKIM record

Subdomains do not escape the parent's reputation

As of August 2026, Google counts bulk-sender status per primary domain, aggregating subdomains, at roughly 5,000 messages a day to personal Gmail accounts, and treats it as permanent once triggered. Splitting bulk mail onto a subdomain isolates policy, not reputation. Verify current thresholds on Google's sender guidelines.

The np tag and non-existent subdomain spoofing#

Attackers like subdomains that do not exist because nobody watches them. A From address of invoices.example.com or vpn.example.com reads as plausible whether or not the zone exists, and a spoofer never has to pass authentication if the policy is permissive.

The np tag closes that. It sets the DMARC policy for non-existent subdomains, which RFC 9989 identifies by a DNS lookup that returns NXDOMAIN. If np is absent, non-existent subdomains fall back to sp, and if that is also absent, to p.

np=reject is unusually safe to deploy early. Because no legitimate mail comes from a name that does not resolve, you can reject there while your real senders are still being tuned at p=none or sp=none. It is the one subdomain control most domains can turn on without breaking anything.

p=reject with sp=none is a common self-inflicted hole

Publishing p=reject on the main domain but sp=none to avoid breaking a subdomain sender leaves every subdomain, existing and non-existent, unprotected. A record that looks strict on paper is wide open below the top level. If you must relax subdomains, relax the specific one with its own record and keep sp and np strict.

What to do when it does not work#

Most subdomain policy problems come from inheritance not behaving the way you assumed. Match the symptom to the cause.

SymptomLikely causeFix
A subdomain is still spoofable under p=rejectsp=none, or the subdomain has its own weak record shadowing the parentSet sp and np to reject; remove or tighten the subdomain's own record
sp seems to be ignored on the main domainsp only applies to subdomains, never to the organizational domain itselfUse p for the org domain; sp governs the names below it
Non-existent subdomains still deliver failing mailnp is absent, so those names fall back to sp or pAdd np=reject to the organizational-domain record
A deep subdomain resolves the wrong policyThe tree walk is bounded at eight labels and eight DNS queriesKeep sending names shallow, or publish a record at the sending subdomain
The record is treated as if it does not existMore than one _dmarc TXT record, or the first tag is not v=DMARC1Keep exactly one record and start it with v=DMARC1

A faster way to handle what does land in the inbox#

DMARC is a sending-side control you publish in DNS, so nothing here is something an email client configures for you. AI Emaily is not a DMARC monitoring service; if you want aggregate reports turned into dashboards, use a platform built for that.

What a client owns is the receiving side. Authentication results are one signal among several about how far to trust a message, and AI Emaily treats every incoming email as untrusted input. It runs spam and phishing protection on what arrives, triages the rest, and drafts replies you approve before anything sends, with undo and an audit trail. It works across Gmail, Outlook and any IMAP account, and a 7-day free trial lets you see it on your own mail.

We build AI Emaily, so treat this as the one commercial note on the page. The subdomain rules above stand on their own whether or not you ever try it.

Frequently asked

Nafiul Hasan

Written by

Nafiul Hasan

Nafiul Hasan is an entrepreneur and AI automation system builder with 10+ years of experience turning messy, manual workflows into reliable automated systems. He designs and ships AI enterprise solutions end-to-end — the agent logic, the data plumbing, and the product people actually use — and founded AI Emaily to give busy professionals their attention back. He writes here from the builder's seat: what works, what breaks, and how to put AI to work without giving up control.

EntrepreneurAI Automation System BuilderAI EnthusiastBuilds AI Enterprise Solutions10+ years experience
More from Nafiul
Ready when you are

Triage the mail that does reach your inbox.

AI Emaily brings Gmail, Outlook and any IMAP account into one AI-native client. It filters spam and phishing, triages the rest, and drafts replies you approve before anything sends, with undo and an audit trail. Start a 7-day free trial at app.aiemaily.com/signup.

  • 7-day free trial
  • Cancel anytime
  • Every provider