seo: add spam checker tool with analysis for email content and subject lines

This commit is contained in:
Dries Augustyns
2026-05-02 14:03:58 +02:00
parent 26ec5864ae
commit a729789922
9 changed files with 922 additions and 18 deletions
+145 -2
View File
@@ -2,15 +2,45 @@ import React from 'react';
import {GuideLayout, InfoBox} from '../../components/guides';
import {CodeBlock} from '../../components/CodeBlock';
import Link from 'next/link';
import type {FAQ} from '../../components/FAQSection';
const faqs: FAQ[] = [
{
question: 'What is DKIM?',
answer:
'DKIM (DomainKeys Identified Mail) is an email authentication method that adds a cryptographic digital signature to your outgoing emails. It allows receiving mail servers to verify that an email was genuinely sent from your domain and that its content was not altered in transit, improving deliverability and protecting against email spoofing.',
},
{
question: 'What is a DKIM key?',
answer:
'A DKIM key is a cryptographic key pair used to sign and verify emails. The private key is stored securely on your mail server and used to sign outgoing emails. The public key is published as a TXT record in your domain\'s DNS under selector._domainkey.yourdomain.com and is used by receiving servers to verify the signature. You should never share or expose your DKIM private key.',
},
{
question: 'How do I set up DKIM?',
answer:
'Setting up DKIM involves three steps: (1) Generate a DKIM key pair for your domain—most email providers do this automatically, (2) Publish the public key as a TXT record in your DNS at selector._domainkey.yourdomain.com, and (3) Configure your mail server or email service provider to sign outgoing emails with the private key. Platforms like Plunk handle all of this automatically when you add your domain.',
},
{
question: 'What is the difference between DKIM and SPF?',
answer:
'SPF (Sender Policy Framework) verifies that the sending mail server is authorized to send email for your domain by checking its IP address against your DNS record. DKIM adds a cryptographic signature to the email that verifies the content has not been altered in transit. They are complementary: SPF validates the server identity, DKIM validates the message integrity. Using both together—along with DMARC—provides the strongest email authentication.',
},
{
question: 'What happens if DKIM fails?',
answer:
'If DKIM verification fails, the receiving mail server may treat the email as suspicious. Depending on your DMARC policy, failed DKIM emails might be delivered normally (p=none), sent to spam (p=quarantine), or completely rejected (p=reject). Persistent DKIM failures damage your sender reputation and reduce email deliverability. Common causes include misconfigured DNS records, expired keys, or email modification during forwarding.',
},
];
export default function WhatIsDKIM() {
return (
<GuideLayout
title="What is DKIM? Email Authentication Explained"
description="Learn how DKIM (DomainKeys Identified Mail) protects your emails from spoofing and improves deliverability. Complete guide with setup examples."
description="Learn how DKIM (DomainKeys Identified Mail) works, what a DKIM key is, and how to set it up to protect your emails from spoofing and improve deliverability."
lastUpdated="2025-12-20"
readTime="8 min"
readTime="10 min"
canonical="https://www.useplunk.com/guides/what-is-dkim"
faqs={faqs}
>
{/* Introduction */}
<section id="introduction" className="mb-12">
@@ -300,6 +330,119 @@ export default function WhatIsDKIM() {
</div>
</section>
{/* DKIM vs SPF */}
<section id="dkim-vs-spf" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">DKIM vs SPF: What's the Difference?</h2>
<p className="text-neutral-700 leading-relaxed mb-6">
DKIM and SPF are both email authentication protocols, but they work differently and check different things:
</p>
<div className="rounded-xl border border-neutral-200 overflow-hidden mb-8">
<table className="w-full">
<thead className="bg-neutral-50">
<tr>
<th className="px-6 py-4 text-left text-sm font-semibold text-neutral-900">Feature</th>
<th className="px-6 py-4 text-left text-sm font-semibold text-neutral-900">DKIM</th>
<th className="px-6 py-4 text-left text-sm font-semibold text-neutral-900">SPF</th>
</tr>
</thead>
<tbody className="divide-y divide-neutral-200 bg-white">
<tr>
<td className="px-6 py-4 text-sm font-medium text-neutral-900">What it validates</td>
<td className="px-6 py-4 text-sm text-neutral-700">Email content integrity</td>
<td className="px-6 py-4 text-sm text-neutral-700">Sending server authorization</td>
</tr>
<tr>
<td className="px-6 py-4 text-sm font-medium text-neutral-900">How it works</td>
<td className="px-6 py-4 text-sm text-neutral-700">Cryptographic signature in headers</td>
<td className="px-6 py-4 text-sm text-neutral-700">IP address check against DNS list</td>
</tr>
<tr>
<td className="px-6 py-4 text-sm font-medium text-neutral-900">Survives forwarding</td>
<td className="px-6 py-4 text-sm text-neutral-700">Yes (if content unchanged)</td>
<td className="px-6 py-4 text-sm text-neutral-700">No (forwarded IP changes)</td>
</tr>
<tr>
<td className="px-6 py-4 text-sm font-medium text-neutral-900">DNS record type</td>
<td className="px-6 py-4 text-sm text-neutral-700">TXT at selector._domainkey.*</td>
<td className="px-6 py-4 text-sm text-neutral-700">TXT at root domain</td>
</tr>
<tr>
<td className="px-6 py-4 text-sm font-medium text-neutral-900">Required for DMARC</td>
<td className="px-6 py-4 text-sm text-neutral-700">Yes (one of SPF/DKIM required)</td>
<td className="px-6 py-4 text-sm text-neutral-700">Yes (one of SPF/DKIM required)</td>
</tr>
</tbody>
</table>
</div>
<InfoBox type="tip" title="Use Both for Maximum Protection">
<p>
DKIM and SPF complement each other. SPF covers scenarios where DKIM can't (like forged server IPs), and DKIM
covers forwarding scenarios where SPF breaks. Implementing bothplus DMARCgives you complete email
authentication coverage.
</p>
</InfoBox>
</section>
{/* How to Test DKIM */}
<section id="test-dkim" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">How to Test Your DKIM Setup</h2>
<p className="text-neutral-700 leading-relaxed mb-6">
After setting up DKIM, verify it's working correctly using these methods:
</p>
<div className="space-y-6">
<div className="">
<h3 className="text-xl font-semibold text-neutral-900 mb-3">1. Check the Email Headers</h3>
<p className="text-neutral-700 mb-4">
Send a test email and view the raw message headers. Look for the <code>DKIM-Signature</code> header and the{' '}
<code>Authentication-Results</code> header which shows whether DKIM passed or failed:
</p>
<CodeBlock
language="text"
title="Example Authentication-Results Header"
code={`Authentication-Results: mx.google.com;
dkim=pass [email protected] header.s=default header.b=GJwP3Qr8;
spf=pass (google.com: domain of [email protected] designates 1.2.3.4 as permitted sender);
dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=yourdomain.com`}
/>
</div>
<div className="">
<h3 className="text-xl font-semibold text-neutral-900 mb-3">2. Use DNS Lookup Tools</h3>
<p className="text-neutral-700">
Verify your DKIM public key is correctly published in DNS by querying your DKIM TXT record:
</p>
<CodeBlock
language="bash"
title="DNS Lookup Command"
code={`# Check your DKIM record via DNS
dig TXT default._domainkey.yourdomain.com
# Or using nslookup
nslookup -type=TXT default._domainkey.yourdomain.com`}
/>
</div>
<div className="">
<h3 className="text-xl font-semibold text-neutral-900 mb-3">3. Send to Gmail and Check</h3>
<p className="text-neutral-700">
Send a test email to a Gmail address, then click the three-dot menu and select "Show original". The
"Summary" at the top will show DKIM: PASS or DKIM: FAIL, confirming your setup is working.
</p>
</div>
</div>
<InfoBox type="info" title="Common DKIM Issues">
<p>
If DKIM fails, check that: (1) The DNS record uses the correct selector name, (2) The record hasn't been
truncated by your DNS provider (long keys may need to be split), (3) DNS propagation is complete (can take
up to 48 hours), and (4) Your email service is configured to sign with the correct private key.
</p>
</InfoBox>
</section>
{/* Related Guides */}
<section id="related-guides" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">Related Email Authentication Guides</h2>