dotvitals

Loading the list of pages…

↑↓ to moveEnter to openEsc to close

SPF exceeds the void DNS lookup limit

Updated

MediumConfirmedQuick winemail.spf.void-lookups-exceeded

Fewer than 1% of the 793 domains we could check fail this. Sample: the first 1,000 domains by rank in the Majestic Million, checked on 2026-10-12. How we measured

What this check looks for

Too many of the lookups in your SPF record point at names that do not exist or return nothing. Receivers that apply the standard's limit stop evaluating and return an error, so the record authenticates nothing.

Why it matters

This is usually the fingerprint of a decommissioned service left in the record. It breaks authentication for everything else in the record too.

When the check passes, your report says: “SPF stays within the void DNS lookup limit”.

What it costs your score

When this check fails it removes 10 points from your Email authentication score, before the status, confidence and repeat multipliers are applied. Email authentication carries a weight of 15 in the overall score.

It shares the email-auth.spf family ceiling of 35 points: however many findings that family produces, together they cannot remove more than that from Email authentication. One underlying problem showing up in several places is still one problem.

Severity
medium
Default confidence
confirmed
Status when triggered
fail
Deduction
10 points
Family cap
email-auth.spf · 35
Category
Email authentication
Module
Email spf
Fix owned by
dns host
In the ruleset since
2026.09

How the whole score is calculated

How to fix it

Remove the mechanisms whose target names no longer exist.

More than two void lookups yields permerror at a receiver applying the recommended limit, which disables the whole record.

  1. Read the record with dig +short TXT ‹domain› and list its include:, redirect=, a:, mx: and exists: terms.

  2. Check each include: and redirect= target with dig TXT and look for status: NXDOMAIN or an empty answer, which are void (an answer with TXT records but no v=spf1 one is not void, but is still a broken include to fix); check each a: and mx: name with dig +short A or dig +short MX and look for an empty answer.

  3. Delete the mechanisms for services you no longer use, and correct a misspelt include to the hostname the provider documents.

  4. Keep a and mx only if those hosts really send mail for the domain.

How to confirm it worked

  • Re-run the SPF checker — the void lookup count must be 2 or fewer.

A named slot like ‹domain› — and the braces left in the configuration below — is filled in with your own values when this rule appears on a report.

Technical detail

Evaluating ‹domain› produced ‹void lookups› void lookups (NXDOMAIN or an empty answer). RFC 7208 §4.6.4 says receivers SHOULD limit these to two (a limit they make configurable should default to two), and that exceeding the limit produces permerror; the limit exists to stop SPF records being used to amplify DNS traffic. Not every receiver applies it, but one that does rejects the whole record.

A void lookup is a DNS query made during SPF evaluation that comes back with nothing: the name does not exist, or it exists without a record of the type asked for. The terms that produce them are include: and redirect= targets that do not exist or have no TXT records at all, a: and mx: names with no address or MX records, and exists: targets. A target that has TXT records, none of them SPF, answered, so it is not void; it is still a broken include, which email.spf.include-unresolvable reports. The count runs across the whole evaluation, nested includes included, and it is separate from the ten-lookup limit — a record well under ten lookups can still fail here.

Typical sources are a mail or marketing service you cancelled whose SPF hostname the provider has since removed, a misspelt include, an a: naming a decommissioned server, and mx on a domain that no longer receives mail. An include: whose target has no SPF record fails on its own too, void or not, which email.spf.include-unresolvable reports, so fixing these usually clears both findings.

An exists: term built from a macro such as %{i} is designed to come back empty for most senders, and every empty answer counts at the receiver. A scan has no message to expand such a macro with, so it does not count those; if your record uses one, keep every other term that can come back empty out of it.

Standards and references

Test this on your domain

Run the check that produces this finding, on its own, against any domain.

Open the email spf checkerBuild the fix