DKIM Record Checker: Fix Missing DKIM and Wrong Selectors
Learn how to check DKIM records, understand selectors, fix missing DKIM, and troubleshoot Google Workspace, Microsoft 365, Cloudflare, and third-party sender issues.
DKIM helps receiving mail servers verify that an email was authorized by the domain that signed it.
If DKIM is missing, not enabled, published under the wrong selector, or copied incorrectly into DNS, outgoing email may fail authentication checks. That can hurt deliverability, weaken DMARC, and make your domain look less trustworthy to inbox providers.
This guide explains how DKIM works, where DKIM records live, why selectors matter, and how to troubleshoot common DKIM issues for Google Workspace, Microsoft 365, Cloudflare, and third-party sending platforms.
On this page
Quick answer: what should a DKIM checker look for?
A useful DKIM checker should check the selector-specific DNS record, not only the root domain.
| DKIM check | Why it matters |
|---|---|
| Selector exists | DKIM records are selector-based, so checking only the root domain can miss the real record |
| DKIM DNS record exists | Receiving servers need the public key or CNAME target |
| Record type is correct | Google Workspace commonly uses TXT records, while Microsoft 365 custom-domain DKIM uses CNAME records |
| Public key is valid | Broken, truncated, or copied-wrong keys can fail verification |
| Selector matches outgoing email | A valid DKIM record under the wrong selector does not help that message |
| DKIM is enabled in the provider | DNS can exist while the provider is not signing messages |
| Signing domain aligns with the From domain | Alignment matters for DMARC pass |
| Old selectors are understood | Old records may remain after migrations or key rotation |
The most important DKIM rule: you cannot reliably check DKIM without knowing the selector.
What is DKIM?
DKIM stands for DomainKeys Identified Mail.
It is an email authentication method that allows an email provider or sending platform to sign outgoing email with a private key. Receiving mail servers can then use a public key published in DNS to verify that signature.
In simple terms, DKIM says that the message was signed by a system authorized to send for that signing domain and that the message has not changed in a way that breaks the signature.
DKIM does not receive email, replace MX records, or guarantee inbox placement. It is one of the core signals used for email trust and DMARC alignment.
For the surrounding authentication records, use the SPF record checker and DMARC record checker alongside this DKIM guide.
DKIM explained simply
DKIM works with two keys:
| Key | Where it lives | Purpose |
|---|---|---|
| Private key | Your email provider or sending platform | Used to sign outgoing messages |
| Public key | DNS | Used by receiving servers to verify the signature |
The basic flow is straightforward:
- Your email provider sends an outgoing email.
- The provider signs the email with a private DKIM key.
- The email includes a
DKIM-Signatureheader. - The receiving server reads the DKIM selector and signing domain from that header.
- The receiving server looks up the matching public key in DNS.
- If the signature verifies, DKIM passes.
What does a DKIM record look like?
A DKIM record is usually published under a selector.
google._domainkey.example.comAnother common selector-based name is:
selector1._domainkey.example.comThe record may be TXT or CNAME depending on the provider.
TXT-style DKIM record
Some providers publish the DKIM public key directly as a TXT record.
v=DKIM1; k=rsa; p=PUBLIC_KEY_VALUE_HEREDo not copy that as a real record. The p= value must come from your email provider.
CNAME-style DKIM record
Some providers ask you to publish a CNAME that points to provider-managed DKIM infrastructure.
selector1._domainkey.example.com CNAME provider-provided-target.exampleDo not copy that as a real record either. The target must come from your provider.
DKIM selectors explained
A DKIM selector is a label that tells receiving mail servers where to find the DKIM public key.
In this DNS name:
google._domainkey.example.comthe selector is:
googleIn this DNS name:
selector1._domainkey.example.comthe selector is:
selector1Selectors matter because one domain can use multiple DKIM keys at the same time.
- Google Workspace
- Microsoft 365
- Mailchimp
- SendGrid
- HubSpot
- Klaviyo
- Helpdesk systems
- Transactional email platforms
- Key rotation
- Separate sending subdomains
That is why a DKIM checker should ask which selector to check, not just whether example.com has DKIM.
Where is DKIM published in DNS?
DKIM records are usually published under this pattern:
selector._domainkey.example.comFor the domain example.com and selector google, the DKIM record name is:
google._domainkey.example.comIn many DNS providers, including Cloudflare, you may only enter the host or name part:
google._domainkeyThe DNS provider then appends the root domain automatically.
Common DKIM selectors
Different platforms use different selectors, and many provider values are unique to the account or domain.
| Provider or platform | Common selector pattern |
|---|---|
| Google Workspace | Often google |
| Microsoft 365 | Usually selector1 and selector2 |
| Mailchimp | Provider-specific; may use CNAMEs |
| SendGrid | Provider-specific; often multiple CNAMEs |
| HubSpot | Provider-specific CNAMEs |
| Klaviyo | Provider-specific CNAMEs |
| Amazon SES | Provider-specific CNAMEs |
| Postmark | Provider-specific TXT or CNAME records |
| Mailgun | Provider-specific TXT or CNAME records |
Do not assume the selector. Use the exact selector shown by your email provider or sending platform.
DKIM is not checked at the root domain
This is a common misunderstanding.
SPF is usually checked at the root domain:
example.comDMARC is checked at:
_dmarc.example.comDKIM is checked at a selector:
selector._domainkey.example.comIf you check only example.com, you will not find DKIM. You need the selector.
How to find the DKIM selector
There are two practical ways to find a DKIM selector.
Method 1: Get it from your email provider
This is the best method. Look in the admin area of the provider that sends the email.
| Provider | Where to look |
|---|---|
| Google Workspace | Google Admin Gmail authentication or DKIM settings |
| Microsoft 365 | Microsoft Defender or email authentication settings |
| SendGrid | Sender authentication or domain authentication |
| Mailchimp | Domains or authentication |
| HubSpot | Email sending domains |
| Klaviyo | Domains and hosting or email authentication |
| Mailgun | Sending domains |
| Amazon SES | Verified identities or DKIM |
The provider should show the exact selector and DNS value.
Method 2: Inspect a sent email header
Send an email from the domain to an external inbox, then view the message headers.
Look for a header that starts with:
DKIM-Signature:Inside that header, look for s= and d=.
DKIM-Signature: v=1; a=rsa-sha256; d=example.com; s=google; ...| Tag | Meaning |
|---|---|
d=example.com | Signing domain |
s=google | Selector |
In that example, the DKIM DNS lookup would be google._domainkey.example.com.
DKIM-Signature header explained
A DKIM-signed email includes a header that may look like this:
DKIM-Signature: v=1; a=rsa-sha256; d=example.com; s=google; h=from:to:subject:date; bh=...; b=...| Tag | Meaning |
|---|---|
v=1 | DKIM signature version |
a=rsa-sha256 | Signing algorithm |
d=example.com | Signing domain |
s=google | Selector |
h= | Headers included in the signature |
bh= | Body hash |
b= | Signature data |
For most troubleshooting, the most important tags are d= and s=. They tell you which domain and selector the receiving server uses for the DKIM check.
DKIM TXT record parts explained
A DKIM TXT record may look like this:
v=DKIM1; k=rsa; p=PUBLIC_KEY_VALUE_HERE| Part | Meaning |
|---|---|
v=DKIM1 | Identifies the record as DKIM |
k=rsa | Key type |
p= | Public key |
| Semicolons | Separate DKIM tags |
The p= value is the public key. It is usually long.
Common public key mistake
Long DKIM keys can be accidentally truncated, split incorrectly, pasted with extra spaces, wrapped incorrectly by a DNS interface, copied from the wrong domain, or copied from the wrong selector.
If the public key is broken, DKIM verification can fail even though a DNS record exists.
DKIM CNAME record explained
A DKIM CNAME record points your selector to a provider-managed DKIM record.
selector1._domainkey.example.com CNAME provider-provided-target.exampleThe benefit is that the provider can manage the public key behind the target. This is common for Microsoft 365 and many third-party sending platforms.
Important CNAME rule: use the exact CNAME target from the provider. Do not invent it or modify it unless your DNS provider specifically requires a formatting change.
TXT DKIM vs CNAME DKIM
Different providers use different DKIM record types.
| DKIM style | How it works | Common use |
|---|---|---|
| TXT DKIM | Public key is published directly in DNS | Google Workspace and some mail systems |
| CNAME DKIM | Selector points to provider-managed DKIM record | Microsoft 365 and many sending platforms |
Neither style is automatically better for every case. Follow the provider's setup instructions.
The biggest mistake is using the wrong record type. Microsoft 365 custom-domain DKIM uses CNAME selectors. If you create TXT records instead, Microsoft DKIM verification will not work correctly.
DKIM vs SPF vs DMARC
DKIM is one part of email authentication.
| Record | Main purpose |
|---|---|
| SPF | Authorizes sending servers |
| DKIM | Signs outgoing messages |
| DMARC | Publishes a policy for messages that fail SPF or DKIM alignment |
SPF asks whether the sending server is allowed. DKIM asks whether the message was signed by an authorized domain key. DMARC asks whether SPF or DKIM aligns with the visible From domain and what should happen if authentication fails.
For a complete setup, use this guide with the SPF record checker and DMARC record checker.
Why DKIM matters for DMARC
DMARC can pass if SPF or DKIM passes with alignment.
DKIM alignment means the DKIM signing domain matches or aligns with the visible From domain.
Visible From: hello@example.com
DKIM signing domain: example.comThat is aligned.
Visible From: hello@example.com
DKIM signing domain: thirdpartyservice.comThat may not align. The message may have a valid DKIM signature, but it may not help your domain pass DMARC because the signing domain is not aligned with the visible From domain.
This is why third-party platforms often ask you to authenticate your sending domain.
Missing DKIM: what it means
If a DKIM checker says DKIM is missing, it may mean one of several things.
| Possible cause | Explanation |
|---|---|
| DKIM not set up | No DKIM record was added |
| Wrong selector checked | DKIM exists under a different selector |
| Record added at wrong DNS host | DNS record is not live |
| Provider has not generated DKIM | You have not created the DKIM key yet |
| Provider is not signing mail | DNS exists, but DKIM is not enabled |
| Wrong domain checked | DKIM is on a subdomain or different sending domain |
| DNS has not propagated | New record is not visible everywhere yet |
The key point: DKIM missing is not always final proof that the domain has no DKIM. It may simply mean the wrong selector was checked.
Wrong DKIM selector: why it causes confusion
Suppose Google Workspace is signing with:
s=googleThe DKIM record should be checked at:
google._domainkey.example.comIf you check selector1._domainkey.example.com, you may get missing DKIM even though Google DKIM exists.
The reverse is also true. If Microsoft 365 signs with s=selector1, checking google._domainkey.example.com does not tell you whether Microsoft DKIM is configured.
DKIM for Google Workspace
Google Workspace commonly uses a TXT record under a selector such as:
google._domainkeyThe full DNS name would be:
google._domainkey.example.comUse Google's generated value from Google Admin. Do not create your own DKIM key from a template or copy a value from another domain.
For the broader Cloudflare setup, see the Google Workspace Cloudflare DNS checklist.
Google Workspace DKIM setup flow
- Open Google Admin.
- Go to Gmail authentication or DKIM settings.
- Select the domain.
- Generate a DKIM key.
- Copy the DNS record name and TXT value from Google.
- Add the TXT record at the active DNS host.
- Wait for DNS to publish.
- Return to Google Admin.
- Start authentication.
- Send a test email to an external inbox.
- Check whether DKIM passes.
Example Cloudflare record for Google DKIM
| Field | Value |
|---|---|
| Type | TXT |
| Name | google._domainkey |
| Content | Google-provided DKIM value |
| TTL | Auto |
The content often starts with v=DKIM1; k=rsa; p=, but the full value must come from Google Admin.
Common Google Workspace DKIM mistakes
| Mistake | Result |
|---|---|
| DKIM key not generated | No record to publish |
| TXT value copied incompletely | DKIM fails |
| Record added at wrong DNS provider | Google cannot verify it |
| Name entered as full domain when DNS provider appends the domain | Record may publish at the wrong place |
| Authentication not started in Google Admin | DNS exists but Google may not sign correctly |
| Testing too soon | DNS may not have propagated |
| Checking wrong selector | DKIM appears missing |
DKIM for Microsoft 365
Microsoft 365 custom-domain DKIM usually uses two CNAME records:
selector1._domainkey
selector2._domainkeyThe CNAME targets are generated by Microsoft and are specific to your tenant and domain. Copy them from Microsoft 365 or Microsoft Defender instructions. Do not hardcode or guess tenant-specific DKIM targets.
For the broader Cloudflare setup, see the Microsoft 365 Cloudflare DNS checklist.
Microsoft 365 DKIM setup flow
- Add and verify the domain in Microsoft 365.
- Open Microsoft Defender or email authentication settings.
- Find DKIM settings for the custom domain.
- Copy the selector 1 CNAME record.
- Copy the selector 2 CNAME record.
- Add both CNAME records at your active DNS host.
- Keep the CNAMEs DNS-only if using Cloudflare.
- Wait for DNS to publish.
- Return to Microsoft.
- Enable DKIM signing for the custom domain.
- Send a test email.
- Check whether DKIM passes.
Example Cloudflare records for Microsoft 365 DKIM
| Field | Record 1 |
|---|---|
| Type | CNAME |
| Name | selector1._domainkey |
| Target | Microsoft-provided selector 1 target |
| Proxy status | DNS-only |
| TTL | Auto |
| Field | Record 2 |
|---|---|
| Type | CNAME |
| Name | selector2._domainkey |
| Target | Microsoft-provided selector 2 target |
| Proxy status | DNS-only |
| TTL | Auto |
Common Microsoft 365 DKIM mistakes
| Mistake | Result |
|---|---|
| Only selector1 added | DKIM rotation or verification may fail |
| TXT record used instead of CNAME | Microsoft DKIM setup fails |
| CNAME target guessed | Microsoft cannot verify it |
| CNAME proxied through Cloudflare | Verification may fail |
| Full domain entered incorrectly | Record may publish at the wrong DNS name |
| DKIM not enabled after DNS setup | Messages may not be signed with the custom domain |
| Old tenant or domain values copied | DKIM points to the wrong Microsoft target |
DKIM for third-party sending platforms
Many businesses send email from more than one system.
- Google Workspace or Microsoft 365
- Email marketing tools
- CRM platforms
- Helpdesk systems
- Ecommerce platforms
- Website contact forms
- Transactional email providers
- Booking systems
- Invoicing tools
- Cold email tools
Each platform may need its own DKIM records.
A DKIM record for Google Workspace does not automatically authenticate Mailchimp. A DKIM record for Microsoft 365 does not automatically authenticate SendGrid. Each sender must be checked separately.
Examples: multiple senders
Google Workspace plus email marketing platform
If your business sends normal email through Google Workspace and newsletters through an email marketing platform, you may need:
| Sender | DKIM record |
|---|---|
| Google Workspace | google._domainkey.example.com TXT |
| Marketing platform | Provider-specific CNAME or TXT |
| DMARC | _dmarc.example.com TXT |
If Google DKIM passes but newsletter emails fail DKIM, the marketing platform's domain authentication may be missing.
Microsoft 365 plus CRM
If your team uses Microsoft 365 for normal email and a CRM for sales emails, you may need:
| Sender | DKIM record |
|---|---|
| Microsoft 365 | selector1._domainkey CNAME |
| Microsoft 365 | selector2._domainkey CNAME |
| CRM | Provider-specific DKIM records |
| DMARC | _dmarc TXT |
If Microsoft 365 emails pass DKIM but CRM emails fail DMARC, the CRM may not be signing with your domain.
DKIM and website contact forms
Website contact forms can be tricky. A form may appear to send from hello@example.com, but the actual sending system may be your web host, WordPress mail function, SMTP plugin, SendGrid, Mailgun, Amazon SES, Postmark, Brevo, or another transactional email provider.
If the form sends email using your domain, the sending service should be authenticated with SPF, DKIM, or both.
For reliable delivery, use a proper SMTP or transactional email provider and complete that provider's domain authentication steps.
DKIM and subdomains
DKIM can be set up for a root domain or a subdomain.
google._domainkey.example.com
selector1._domainkey.mail.example.com
k1._domainkey.news.example.comIf a marketing platform sends from news.example.com, the DKIM record may belong under that subdomain.
Do not assume all DKIM records belong under the root domain. Follow the exact host or name given by the sending platform.
DKIM and Cloudflare
If your DNS is managed in Cloudflare, DKIM records must be added in Cloudflare. This is true even if the domain was bought elsewhere, the website is hosted elsewhere, or the email provider is Google Workspace or Microsoft 365.
The active nameservers decide where live DNS is managed.
| DKIM record type | Cloudflare behavior |
|---|---|
| TXT DKIM | DNS-only |
| CNAME DKIM | Should be DNS-only |
| Microsoft DKIM CNAME | DNS-only |
| Provider verification CNAME | Usually DNS-only |
MX and TXT records are DNS-only in Cloudflare. DKIM CNAME records for Microsoft 365 or third-party verification should also be DNS-only.
If a DKIM CNAME is orange-clouded or proxied, change it to DNS-only unless your provider explicitly says otherwise.
DKIM and DNS propagation
After adding or changing a DKIM record, DNS may not update everywhere immediately.
- Provider says DKIM record not found.
- Checker still shows an old result.
- DKIM still fails on a test email.
- Microsoft or Google cannot enable authentication yet.
Confirm the record was added at the active DNS host, confirm the host field is correct, confirm the value is complete, wait for DNS propagation, recheck the selector, and then return to the provider to enable or verify DKIM.
Do not keep changing the record repeatedly every few minutes. That makes troubleshooting harder.
DKIM pass vs DKIM record exists
A DKIM record can exist in DNS while DKIM still fails. These are different checks.
| Result | Meaning |
|---|---|
| DKIM DNS record exists | The public key or CNAME exists in DNS |
| DKIM pass | A sent email was signed and verified successfully |
| DKIM fail | The signature did not verify |
| DKIM none | The message was not signed with DKIM |
| DKIM temperror | Temporary DNS or lookup problem |
| DKIM permerror | Permanent configuration or syntax problem |
A checker can tell you whether a DKIM DNS record exists for a selector. To confirm actual DKIM signing, send a test email and inspect the authentication results.
How to test whether DKIM is passing
Use this practical process:
- Send an email from your domain to an external mailbox.
- Open the message in the external mailbox.
- View the original message or message headers.
- Look for authentication results.
- Check for
dkim=pass. - Check the signing domain.
- Check whether DMARC passes.
You may see something like:
Authentication-Results: mx.google.com;
dkim=pass header.i=@example.com;
spf=pass;
dmarc=passThat means DKIM passed for that message. If you see dkim=none, the message was not signed with DKIM. If you see dkim=fail, the message was signed but verification failed.
Common DKIM failures and what they mean
| DKIM result | Common cause |
|---|---|
dkim=none | Provider is not signing messages |
dkim=fail | Signature broke, wrong key, modified message, or DNS issue |
dkim=temperror | Temporary DNS lookup issue |
dkim=permerror | Permanent syntax or configuration problem |
| No DKIM-Signature header | DKIM not enabled or sender does not support it |
| DKIM passes for one sender but fails for another | Only some platforms are authenticated |
| DKIM passes but DMARC fails | DKIM signing domain may not align with visible From domain |
DKIM passes but DMARC fails
This can happen.
Visible From: hello@example.com
DKIM signing domain: emailservice.com
DKIM result: pass
DMARC result: failDKIM passed for emailservice.com, but the visible From domain is example.com. For DMARC, the DKIM signing domain usually needs to align with the visible From domain.
The fix is to authenticate your domain inside the sending platform so the platform signs with your domain or an aligned subdomain.
DKIM fails after forwarding or message changes
Forwarding can sometimes affect email authentication. DKIM is generally more resilient than SPF during forwarding because DKIM signs message content and headers rather than relying only on the sending IP.
However, DKIM can fail if a forwarding system modifies signed parts of the message.
- Adding a footer
- Rewriting subject lines
- Modifying body content
- Changing signed headers
- Adding disclaimers
- Mailing list modifications
Company-wide footers, disclaimers, and outbound gateways can also break DKIM if they modify the message after it is signed.
The safest setup is usually to make message modifications first, sign after final modification, and then send the final signed message out.
DKIM key rotation and old selectors
DKIM keys may need to be rotated over time. Selectors make rotation easier.
selector1._domainkey.example.com
selector2._domainkey.example.comSafe key rotation idea
- Generate a new DKIM key or selector.
- Publish the new DNS record.
- Wait for propagation.
- Start signing with the new selector.
- Confirm DKIM passes.
- Keep the old selector briefly.
- Remove the old selector only after it is no longer needed.
Do not delete old DKIM records immediately if recent emails may still be verified using the old selector.
Should you delete old DKIM records?
Not always. Old DKIM records may be harmless, but they can create confusion during audits.
Before deleting an old DKIM record, confirm the old provider no longer sends email, recent messages are not using that selector, and the domain has fully migrated to the new provider.
Multiple DKIM records: is that okay?
Yes. A domain can have multiple DKIM records if they use different selectors.
google._domainkey.example.com
selector1._domainkey.example.com
k1._domainkey.example.comThis means different systems or selectors are being used. It is not the same as duplicate SPF records.
SPF should usually have one root-domain record. DKIM can have multiple selector records.
Common DKIM mistakes
| Mistake | Why it matters |
|---|---|
| Checking DKIM without a selector | You may get a false missing DKIM result |
| Adding DKIM at the root domain | DKIM will not be found |
| Using TXT when provider requires CNAME | DKIM setup fails |
| Using CNAME when provider requires TXT | DKIM setup fails |
| Copying only part of the public key | DKIM fails |
| Adding the record at the wrong DNS host | Record is not live |
| Proxying a DKIM CNAME in Cloudflare | Provider verification may fail |
| Not enabling DKIM after DNS setup | Messages may not be signed |
| Using old provider selector values | DKIM points to wrong infrastructure |
| Assuming DKIM guarantees inbox placement | Deliverability depends on more than DKIM |
| Deleting old selectors too early | Recent messages or rotation may be affected |
Safe DKIM setup workflow
Use this workflow:
- Identify the sending provider.
- Find the provider's DKIM setup page.
- Copy the exact selector.
- Copy the exact DNS record type.
- Copy the exact DNS value or target.
- Confirm the active DNS host.
- Add the record at the active DNS host.
- Keep DKIM CNAMEs DNS-only in Cloudflare.
- Wait for DNS propagation.
- Return to the sending provider.
- Enable or verify DKIM.
- Send a test email.
- Inspect headers for
dkim=pass. - Check whether DMARC also passes.
- Repeat for each sender that sends from your domain.
DKIM checklist for Google Workspace
- Domain is verified in Google Workspace.
- Gmail is activated.
- DKIM key is generated in Google Admin.
- DKIM TXT record is added at the active DNS host.
- Selector is correct.
- Public key is copied completely.
- DNS has propagated.
- DKIM authentication is started in Google Admin.
- Test email shows
dkim=pass. - DKIM signing domain aligns with the visible From domain.
- DMARC passes after SPF or DKIM alignment.
DKIM checklist for Microsoft 365
- Domain is verified in Microsoft 365.
- DKIM settings are available for the custom domain.
- Selector 1 CNAME target is copied from Microsoft.
- Selector 2 CNAME target is copied from Microsoft.
- Both CNAME records are added at the active DNS host.
- Both CNAME records are DNS-only in Cloudflare.
- No full-domain duplication happened in the Name field.
- DNS has propagated.
- DKIM signing is enabled in Microsoft 365.
- Test email shows
dkim=pass. - DKIM signing domain aligns with the visible From domain.
- DMARC passes after SPF or DKIM alignment.
DKIM checklist for third-party senders
For each third-party sender, check:
- The platform is still used.
- The platform sends email using your domain.
- Domain authentication is started inside the platform.
- DKIM selector values are copied exactly.
- DNS record type matches the platform's instruction.
- Records are added at the active DNS host.
- CNAME records are DNS-only in Cloudflare.
- The platform shows the domain as verified or authenticated.
- A test email from that platform shows DKIM pass.
- DMARC passes or aligns correctly.
- Old records from unused platforms are reviewed.
Troubleshooting: DKIM checker says record missing
Check these first:
- Are you using the correct selector?
- Are you checking the correct domain?
- Was the record added at the active DNS host?
- Did you add the record under
_domainkeycorrectly? - Did the DNS provider append the domain automatically?
- Is the record type correct?
- Has DNS propagated?
- Did you copy the provider's values exactly?
- Is the sender using a subdomain?
- Did the provider generate the DKIM record yet?
Most missing DKIM issues come from the wrong selector, wrong DNS host, or wrong record name.
Troubleshooting: DKIM exists but email shows dkim=none
If DNS has a DKIM record but a test email shows dkim=none, the message was probably not signed.
- DKIM is enabled in the provider admin area.
- You are sending from the provider you configured.
- You are testing the correct domain.
- You are not sending through an old SMTP server.
- You are not using a third-party system that needs its own DKIM.
- The provider has finished verifying the DKIM record.
- You sent a new test email after enabling DKIM.
DNS existing is not enough. The sender must actually sign the message.
Troubleshooting: DKIM exists but email shows dkim=fail
If DNS has DKIM but a test email shows dkim=fail, check:
- Public key was copied completely.
- Selector matches the DKIM-Signature header.
- Signing domain matches the DNS record.
- Message was not modified after signing.
- Outbound gateway did not alter the message.
- Footer or disclaimer did not break the signature.
- DNS record is not malformed.
- Provider is using the current key.
- The email was sent after the DKIM fix, not before.
DKIM fail usually means there was a signature, but verification did not work.
Troubleshooting: Microsoft DKIM shows CNAME missing
If Microsoft says a DKIM CNAME is missing, check:
- Did you add both selectors?
- Are they CNAME records?
- Are they DNS-only in Cloudflare?
- Did you use the exact target Microsoft gave you?
- Did you enter only
selector1._domainkey, not the full domain twice? - Did you add records in the active Cloudflare zone?
- Has enough time passed for DNS propagation?
- Are you enabling DKIM for the correct custom domain?
Do not replace Microsoft DKIM CNAMEs with TXT records.
Troubleshooting: Google DKIM does not authenticate
If Google DKIM does not authenticate, check:
- Was the key generated inside Google Admin?
- Was the TXT record added at the active DNS host?
- Is the selector correct?
- Is the DKIM public key complete?
- Did you wait for DNS propagation?
- Did you return to Google Admin and start authentication?
- Are you testing from a Google Workspace mailbox on that domain?
- Are you checking a new email sent after DKIM was enabled?
Do not create your own Google DKIM value manually. Use the value Google provides.
Troubleshooting: DKIM passes but emails still go to spam
DKIM helps, but it does not guarantee inbox placement.
- SPF
- DMARC
- Domain reputation
- IP reputation
- Email content
- Sending volume
- Bounce rate
- Complaint rate
- Engagement
- Whether the domain is new
- Whether the email looks like cold outreach
- Whether recipients mark messages as spam
If DKIM passes but email still goes to spam, check SPF, DMARC, content quality, sending behavior, and reputation.
What not to do
- Do not check DKIM without knowing the selector.
- Do not guess DKIM records.
- Do not create Microsoft 365 DKIM as TXT records.
- Do not create Google DKIM from a random template.
- Do not add DKIM at the root domain.
- Do not proxy DKIM CNAMEs through Cloudflare.
- Do not assume one DKIM record covers every sender.
- Do not delete old selectors during an active migration.
- Do not move DMARC to
p=rejectbefore checking DKIM alignment. - Do not assume DKIM pass means inbox guaranteed.
- Do not change MX records when only DKIM is broken.
Final DKIM checklist
- Identify the sending provider.
- Find the exact DKIM selector.
- Confirm whether the provider needs TXT or CNAME.
- Add the record at the active DNS host.
- Confirm the record is under
selector._domainkey. - Keep CNAME DKIM records DNS-only in Cloudflare.
- Copy the public key or CNAME target exactly.
- Wait for propagation.
- Enable DKIM in the provider admin area.
- Send a new test email.
- Confirm
dkim=pass. - Confirm signing domain aligns with visible From domain.
- Confirm DMARC passes.
- Repeat for every sending platform.
A clean DKIM setup is provider-specific, selector-specific, and tested with real outgoing email.
Run a DKIM check
Use Domain Email Doctor to scan your domain's public email DNS records before changing anything.
A scan can help identify whether DKIM is missing, whether the selector may be wrong, and whether SPF, DMARC, MX, and nameserver records also need attention.
For the most accurate DKIM troubleshooting, compare the DNS scan with a real test email header so you can see which selector and signing domain your email provider is actually using.
Quick checklist
- Find the provider that sends the email.
- Find the exact DKIM selector.
- Check
selector._domainkey.example.com, not only the root domain. - Use TXT only when the provider asks for TXT.
- Use CNAME only when the provider asks for CNAME.
- Copy Google Workspace DKIM values from Google Admin.
- Copy Microsoft 365 DKIM CNAME targets from Microsoft 365 or Microsoft Defender.
- Keep Microsoft DKIM CNAMEs DNS-only in Cloudflare.
- Keep third-party DKIM CNAMEs DNS-only in Cloudflare unless the provider says otherwise.
- Enable DKIM signing after DNS is published.
- Send a new test email and check for
dkim=pass. - Check whether DKIM aligns with the visible From domain for DMARC.
- Repeat for every sending platform.