chore: Add guides and comparison pages to landing site

This commit is contained in:
Dries Augustyns
2025-12-20 11:05:45 +01:00
parent 996852a506
commit 4156cd436d
38 changed files with 7037 additions and 132 deletions
@@ -0,0 +1,605 @@
import React from 'react';
import {GuideLayout, InfoBox} from '../../components/guides';
import {CodeBlock} from '../../components/CodeBlock';
import Link from 'next/link';
export default function EmailAPIGuide() {
return (
<GuideLayout
title="Email API Guide: Everything You Need to Know with Code Examples"
description="Complete guide to email APIs: how they work, implementation examples, best practices, and choosing the right solution for your application."
lastUpdated="2025-12-20"
readTime="12 min"
canonical="https://www.useplunk.com/guides/email-api-guide"
>
{/* Introduction */}
<section id="introduction" className="mb-12">
<p className="text-neutral-700 leading-relaxed">
Email APIs allow developers to programmatically send, receive, and manage emails from applications. Whether
you're sending order confirmations, password resets, or marketing campaigns, email APIs provide a reliable,
scalable way to integrate email into your software.
</p>
<p className="mt-4 text-neutral-700 leading-relaxed">
This guide covers everything you need to know: how email APIs work, implementation examples in multiple
languages, best practices, and choosing the right provider.
</p>
</section>
{/* What is an Email API */}
<section id="what-is-email-api" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">What is an Email API?</h2>
<p className="text-neutral-700 leading-relaxed mb-6">
An email API is a programmatic interface that lets you send and manage emails via HTTP requests instead of
manually configuring SMTP servers. APIs abstract away the complexity of email delivery, providing simple HTTP
endpoints to send emails and webhooks to track delivery status.
</p>
<div className="grid gap-6 md:grid-cols-2 mb-8">
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<h3 className="text-lg font-semibold text-neutral-900 mb-3">SMTP (Traditional)</h3>
<ul className="space-y-2 text-sm text-neutral-700">
<li>• Direct protocol for sending email</li>
<li>• Requires managing connections</li>
<li>• Manual error handling</li>
<li>• Limited delivery tracking</li>
<li>• More complex implementation</li>
<li>• Port 25, 587, or 465</li>
</ul>
</div>
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<h3 className="text-lg font-semibold text-neutral-900 mb-3">Email API (Modern)</h3>
<ul className="space-y-2 text-sm text-neutral-700">
<li>• HTTP-based RESTful interface</li>
<li>• No connection management needed</li>
<li>• Structured error responses</li>
<li>• Built-in tracking & analytics</li>
<li>• Simpler to implement</li>
<li>• Standard HTTP/HTTPS</li>
</ul>
</div>
</div>
<InfoBox type="tip" title="When to Use Email APIs">
<p>
Email APIs are ideal for transactional emails (order confirmations, password resets), automated
notifications, and programmatic campaigns. If you're building software that sends emails, APIs are almost
always the better choice over SMTP.
</p>
</InfoBox>
</section>
{/* How Email APIs Work */}
<section id="how-it-works" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">How Email APIs Work</h2>
<div className="space-y-6">
<div className="border-l-4 border-neutral-900 pl-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-2">1. Authentication</h3>
<p className="text-neutral-700">
You authenticate requests using an API key (usually passed in headers). This identifies your account and
authorizes API access.
</p>
</div>
<div className="border-l-4 border-neutral-900 pl-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-2">2. Make HTTP Request</h3>
<p className="text-neutral-700">
Send a POST request to the API endpoint with email details (recipient, subject, body, etc.) as JSON.
</p>
</div>
<div className="border-l-4 border-neutral-900 pl-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-2">3. API Validates & Queues</h3>
<p className="text-neutral-700">
The API validates your request, queues the email for delivery, and returns a response with the email ID
and status.
</p>
</div>
<div className="border-l-4 border-neutral-900 pl-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-2">4. Email Delivery</h3>
<p className="text-neutral-700">
The service handles SMTP connections, retry logic, and delivery to the recipient's mail server.
</p>
</div>
<div className="border-l-4 border-neutral-900 pl-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-2">5. Webhooks & Tracking</h3>
<p className="text-neutral-700">
You receive webhook notifications for delivery events (delivered, bounced, opened, clicked) and can query
the API for email status.
</p>
</div>
</div>
</section>
{/* Code Examples */}
<section id="examples" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">Email API Code Examples</h2>
<p className="text-neutral-700 leading-relaxed mb-6">
Here's how to send an email using Plunk's API in various languages:
</p>
<div className="space-y-8">
<div>
<h3 className="text-xl font-semibold text-neutral-900 mb-4">JavaScript / Node.js</h3>
<CodeBlock
language="javascript"
title="Node.js Example"
code={`// Using fetch (Node.js 18+ or with node-fetch)
const response = await fetch('https://api.useplunk.com/v1/send', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer YOUR_API_KEY'
},
body: JSON.stringify({
to: '[email protected]',
subject: 'Welcome to our platform!',
body: '<h1>Welcome!</h1><p>Thanks for signing up.</p>',
// Optional fields
from: '[email protected]',
name: 'Your Company',
replyTo: '[email protected]'
})
});
const data = await response.json();
if (response.ok) {
console.log('Email sent!', data.emailId);
} else {
console.error('Failed to send:', data.error);
}`}
/>
</div>
<div>
<h3 className="text-xl font-semibold text-neutral-900 mb-4">Python</h3>
<CodeBlock
language="python"
title="Python Example"
code={`import requests
response = requests.post(
'https://api.useplunk.com/v1/send',
headers={
'Content-Type': 'application/json',
'Authorization': 'Bearer YOUR_API_KEY'
},
json={
'to': '[email protected]',
'subject': 'Welcome to our platform!',
'body': '<h1>Welcome!</h1><p>Thanks for signing up.</p>',
'from': '[email protected]',
'name': 'Your Company'
}
)
if response.status_code == 200:
data = response.json()
print(f"Email sent! ID: {data['emailId']}")
else:
print(f"Error: {response.json()['error']}")`}
/>
</div>
<div>
<h3 className="text-xl font-semibold text-neutral-900 mb-4">PHP</h3>
<CodeBlock
language="php"
title="PHP Example"
code={`<?php
$ch = curl_init('https://api.useplunk.com/v1/send');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Authorization: Bearer YOUR_API_KEY'
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
'to' => '[email protected]',
'subject' => 'Welcome to our platform!',
'body' => '<h1>Welcome!</h1><p>Thanks for signing up.</p>',
'from' => '[email protected]',
'name' => 'Your Company'
]));
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
$data = json_decode($response, true);
if ($httpCode === 200) {
echo "Email sent! ID: " . $data['emailId'];
} else {
echo "Error: " . $data['error'];
}
?>`}
/>
</div>
<div>
<h3 className="text-xl font-semibold text-neutral-900 mb-4">Ruby</h3>
<CodeBlock
language="ruby"
title="Ruby Example"
code={`require 'net/http'
require 'json'
uri = URI('https://api.useplunk.com/v1/send')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri.path)
request['Content-Type'] = 'application/json'
request['Authorization'] = 'Bearer YOUR_API_KEY'
request.body = {
to: '[email protected]',
subject: 'Welcome to our platform!',
body: '<h1>Welcome!</h1><p>Thanks for signing up.</p>',
from: '[email protected]',
name: 'Your Company'
}.to_json
response = http.request(request)
data = JSON.parse(response.body)
if response.code.to_i == 200
puts "Email sent! ID: #{data['emailId']}"
else
puts "Error: #{data['error']}"
end`}
/>
</div>
<div>
<h3 className="text-xl font-semibold text-neutral-900 mb-4">Go</h3>
<CodeBlock
language="go"
title="Go Example"
code={`package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"net/http"
)
type EmailRequest struct {
To string \`json:"to"\`
Subject string \`json:"subject"\`
Body string \`json:"body"\`
From string \`json:"from"\`
Name string \`json:"name"\`
}
func main() {
email := EmailRequest{
To: "[email protected]",
Subject: "Welcome to our platform!",
Body: "<h1>Welcome!</h1><p>Thanks for signing up.</p>",
From: "[email protected]",
Name: "Your Company",
}
jsonData, _ := json.Marshal(email)
req, _ := http.NewRequest("POST", "https://api.useplunk.com/v1/send", bytes.NewBuffer(jsonData))
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
fmt.Println("Error:", err)
return
}
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
if resp.StatusCode == 200 {
var result map[string]interface{}
json.Unmarshal(body, &result)
fmt.Printf("Email sent! ID: %v\\n", result["emailId"])
} else {
fmt.Println("Error:", string(body))
}
}`}
/>
</div>
</div>
</section>
{/* Common Features */}
<section id="features" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">Common Email API Features</h2>
<div className="grid gap-6 md:grid-cols-2">
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<h3 className="text-lg font-semibold text-neutral-900 mb-3">Sending Features</h3>
<ul className="space-y-2 text-sm text-neutral-700">
<li> Send individual or batch emails</li>
<li> HTML and plain text support</li>
<li> Attachments</li>
<li> CC, BCC recipients</li>
<li> Custom headers</li>
<li> Template rendering</li>
<li> Scheduled sending</li>
</ul>
</div>
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<h3 className="text-lg font-semibold text-neutral-900 mb-3">Tracking & Analytics</h3>
<ul className="space-y-2 text-sm text-neutral-700">
<li> Delivery status tracking</li>
<li> Open tracking</li>
<li> Click tracking</li>
<li> Bounce detection</li>
<li> Spam complaint monitoring</li>
<li> Unsubscribe management</li>
<li> Real-time analytics</li>
</ul>
</div>
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<h3 className="text-lg font-semibold text-neutral-900 mb-3">Webhooks & Events</h3>
<ul className="space-y-2 text-sm text-neutral-700">
<li> Delivery notifications</li>
<li> Bounce notifications</li>
<li> Spam complaint alerts</li>
<li> Unsubscribe events</li>
<li> Open and click events</li>
<li> Custom event triggers</li>
</ul>
</div>
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<h3 className="text-lg font-semibold text-neutral-900 mb-3">Management Features</h3>
<ul className="space-y-2 text-sm text-neutral-700">
<li> Suppression list management</li>
<li> Contact management</li>
<li> Domain verification</li>
<li> Template management</li>
<li> API key management</li>
<li> Rate limiting</li>
</ul>
</div>
</div>
</section>
{/* Best Practices */}
<section id="best-practices" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">Email API Best Practices</h2>
<div className="space-y-4">
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
1
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Secure Your API Keys</h3>
<p className="text-neutral-700">
Store API keys in environment variables, never in code. Use separate keys for development, staging, and
production. Rotate keys periodically and immediately if compromised.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
2
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Implement Proper Error Handling</h3>
<p className="text-neutral-700 mb-3">Handle different HTTP status codes appropriately:</p>
<ul className="list-disc list-inside space-y-1 text-sm text-neutral-700">
<li>200: Success</li>
<li>400-499: Client errors (bad request, validation failed) - don't retry</li>
<li>500-599: Server errors - retry with exponential backoff</li>
<li>429: Rate limit exceeded - back off and retry later</li>
</ul>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
3
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Use Webhooks for Delivery Status</h3>
<p className="text-neutral-700">
Don't poll the API for email status. Set up webhooks to receive real-time delivery notifications
(delivered, bounced, opened, clicked). This is more efficient and provides faster updates.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
4
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Respect Rate Limits</h3>
<p className="text-neutral-700">
Implement rate limiting in your code to stay within API limits. Queue emails and send in batches. Use
exponential backoff when you receive 429 rate limit errors.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
5
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Validate Email Addresses</h3>
<p className="text-neutral-700">
Validate email format before making API calls. Check for common typos. Consider using email validation
APIs to verify deliverability before sending.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
6
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Use Templates</h3>
<p className="text-neutral-700">
Store email templates in your email service provider rather than hardcoding HTML in your application.
This allows non-developers to update email content without code changes.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
7
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Monitor Deliverability Metrics</h3>
<p className="text-neutral-700">
Track bounce rates, spam complaints, and engagement metrics. Set up alerts for anomalies. Address
deliverability issues proactively.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
8
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Test in Sandbox/Development Mode</h3>
<p className="text-neutral-700">
Use sandbox or test mode during development. Test error scenarios, retry logic, and webhook handling
before deploying to production.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
9
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Log API Requests & Responses</h3>
<p className="text-neutral-700">
Log all API interactions (but redact sensitive data like API keys). This helps debug issues and
understand email sending patterns.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
10
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Handle Timeouts</h3>
<p className="text-neutral-700">
Set appropriate timeouts for API requests (typically 10-30 seconds). Don't block user requests waiting
for email API responses—queue emails asynchronously if needed.
</p>
</div>
</div>
</div>
</section>
{/* Choosing a Provider */}
<section id="choosing-provider" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">Choosing an Email API Provider</h2>
<p className="text-neutral-700 leading-relaxed mb-6">
Consider these factors when selecting an email API provider:
</p>
<div className="space-y-6">
<div className="border-l-4 border-neutral-900 pl-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-2">Deliverability Reputation</h3>
<p className="text-neutral-700">
Choose providers with strong deliverability rates and sender reputation. Poor deliverability means your
emails land in spam, defeating the purpose.
</p>
</div>
<div className="border-l-4 border-neutral-900 pl-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-2">Feature Set</h3>
<p className="text-neutral-700">
Ensure the API supports your needs: templates, webhooks, analytics, scheduling, attachments, etc. Some
providers specialize in transactional emails, others in marketing.
</p>
</div>
<div className="border-l-4 border-neutral-900 pl-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-2">Pricing Model</h3>
<p className="text-neutral-700">
Understand pricing: per-email charges, monthly tiers, overage fees. Calculate costs for your expected
volume. Watch for hidden fees and price increases at higher volumes.
</p>
</div>
<div className="border-l-4 border-neutral-900 pl-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-2">Developer Experience</h3>
<p className="text-neutral-700">
Good documentation, SDKs in your language, clear error messages, and responsive support make
implementation much easier.
</p>
</div>
<div className="border-l-4 border-neutral-900 pl-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-2">Scalability & Reliability</h3>
<p className="text-neutral-700">
Can the provider handle your peak volumes? What's their uptime guarantee (SLA)? Do they have redundancy
and failover systems?
</p>
</div>
<div className="border-l-4 border-neutral-900 pl-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-2">Compliance & Security</h3>
<p className="text-neutral-700">
Ensure the provider complies with GDPR, CAN-SPAM, and other relevant regulations. Check their security
certifications (SOC 2, ISO 27001).
</p>
</div>
</div>
</section>
{/* Related Guides */}
<section id="related-guides" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">Related Email Guides</h2>
<div className="grid gap-4 md:grid-cols-3">
<Link
href="/guides/transactional-vs-marketing-email"
className="block rounded-xl border border-neutral-200 bg-white p-6 transition hover:border-neutral-300 hover:shadow-lg"
>
<h3 className="text-lg font-semibold text-neutral-900 mb-2">Transactional vs Marketing Email</h3>
<p className="text-sm text-neutral-600">Understand email types for APIs.</p>
</Link>
<Link
href="/guides/email-deliverability"
className="block rounded-xl border border-neutral-200 bg-white p-6 transition hover:border-neutral-300 hover:shadow-lg"
>
<h3 className="text-lg font-semibold text-neutral-900 mb-2">Email Deliverability</h3>
<p className="text-sm text-neutral-600">Ensure API-sent emails reach the inbox.</p>
</Link>
<Link
href="/guides/email-sender-reputation"
className="block rounded-xl border border-neutral-200 bg-white p-6 transition hover:border-neutral-300 hover:shadow-lg"
>
<h3 className="text-lg font-semibold text-neutral-900 mb-2">Email Sender Reputation</h3>
<p className="text-sm text-neutral-600">Maintain good sender reputation.</p>
</Link>
</div>
</section>
</GuideLayout>
);
}
@@ -0,0 +1,433 @@
import React from 'react';
import {GuideLayout, InfoBox} from '../../components/guides';
import {CodeBlock} from '../../components/CodeBlock';
import Link from 'next/link';
export default function EmailBounceRate() {
return (
<GuideLayout
title="Email Bounce Rate: Hard vs Soft Bounces & How to Reduce Them"
description="Understand email bounce rates, the difference between hard and soft bounces, and proven strategies to reduce bounces and protect your sender reputation."
lastUpdated="2025-12-20"
readTime="9 min"
canonical="https://www.useplunk.com/guides/email-bounce-rate"
>
{/* Introduction */}
<section id="introduction" className="mb-12">
<p className="text-neutral-700 leading-relaxed">
Email bounce rate measures the percentage of emails that couldn't be delivered to recipients' inboxes. Bounces
occur for various reasonssome temporary, others permanentand high bounce rates seriously damage your sender
reputation and deliverability.
</p>
<p className="mt-4 text-neutral-700 leading-relaxed">
Understanding the types of bounces and how to minimize them is essential for maintaining a healthy email
program.
</p>
</section>
{/* What is Bounce Rate */}
<section id="what-is-bounce-rate" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">What is Email Bounce Rate?</h2>
<p className="text-neutral-700 leading-relaxed mb-6">
Bounce rate is the percentage of sent emails that were rejected by receiving mail servers and couldn't be
delivered.
</p>
<div className="rounded-xl border-2 border-neutral-900 bg-neutral-50 p-8 mb-8">
<div className="text-center">
<div className="text-3xl font-bold text-neutral-900 mb-4">Bounce Rate Formula</div>
<CodeBlock
language="text"
code={`Bounce Rate = (Bounced Emails ÷ Sent Emails) × 100
Example:
- Sent: 10,000 emails
- Bounced: 150 emails
Bounce Rate = (150 ÷ 10,000) × 100 = 1.5%`}
showCopy={false}
/>
</div>
</div>
<div className="grid gap-6 md:grid-cols-3 mb-8">
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<div className="text-3xl font-bold text-green-600 mb-2">&lt;2%</div>
<h3 className="text-lg font-semibold text-neutral-900 mb-2">Excellent</h3>
<p className="text-sm text-neutral-700">Healthy list with good hygiene practices</p>
</div>
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<div className="text-3xl font-bold text-amber-600 mb-2">2-5%</div>
<h3 className="text-lg font-semibold text-neutral-900 mb-2">Concerning</h3>
<p className="text-sm text-neutral-700">List quality issues need attention</p>
</div>
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<div className="text-3xl font-bold text-red-600 mb-2">&gt;5%</div>
<h3 className="text-lg font-semibold text-neutral-900 mb-2">Critical</h3>
<p className="text-sm text-neutral-700">Serious problems damaging sender reputation</p>
</div>
</div>
</section>
{/* Types of Bounces */}
<section id="types-of-bounces" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">Hard Bounces vs Soft Bounces</h2>
<p className="text-neutral-700 leading-relaxed mb-6">
Not all bounces are the same. Understanding the difference between hard and soft bounces is crucial for
managing your email list.
</p>
<div className="grid gap-8 md:grid-cols-2">
<div className="rounded-xl border-2 border-red-200 bg-red-50 p-6">
<h3 className="text-2xl font-semibold text-red-900 mb-4">Hard Bounces (Permanent)</h3>
<p className="text-neutral-700 mb-4">
Hard bounces occur when an email can't be delivered for permanent reasons. These addresses will never
receive your emails.
</p>
<div className="space-y-3 mb-4">
<div>
<h4 className="font-semibold text-neutral-900 mb-2">Common Causes:</h4>
<ul className="space-y-1 text-sm text-neutral-700">
<li> Email address doesn't exist</li>
<li>• Domain name doesn't exist</li>
<li> Email server has completely blocked delivery</li>
<li> Invalid email address format</li>
</ul>
</div>
</div>
<div className="rounded-lg bg-red-100 border border-red-200 p-4">
<p className="text-sm font-semibold text-red-900 mb-2">Action Required:</p>
<p className="text-sm text-neutral-700">
<strong>Remove immediately.</strong> Never send to hard bounce addresses again. Continuing to send to
them damages your sender reputation.
</p>
</div>
</div>
<div className="rounded-xl border-2 border-amber-200 bg-amber-50 p-6">
<h3 className="text-2xl font-semibold text-amber-900 mb-4">Soft Bounces (Temporary)</h3>
<p className="text-neutral-700 mb-4">
Soft bounces are temporary delivery failures. The email address is valid, but delivery failed for a
temporary reason.
</p>
<div className="space-y-3 mb-4">
<div>
<h4 className="font-semibold text-neutral-900 mb-2">Common Causes:</h4>
<ul className="space-y-1 text-sm text-neutral-700">
<li> Recipient's mailbox is full</li>
<li>• Email server is temporarily down or busy</li>
<li>• Email message is too large</li>
<li>• Recipient's server is experiencing issues</li>
</ul>
</div>
</div>
<div className="rounded-lg bg-amber-100 border border-amber-200 p-4">
<p className="text-sm font-semibold text-amber-900 mb-2">Action Required:</p>
<p className="text-sm text-neutral-700">
<strong>Retry automatically.</strong> Most platforms retry for 24-72 hours. After 3-5 consecutive soft
bounces, treat as a hard bounce and remove.
</p>
</div>
</div>
</div>
<InfoBox type="info" title="Bounce vs Block" className="mt-6">
<p>
A <strong>block</strong> occurs when the receiving server actively rejects your email due to reputation or
content issues. Unlike bounces (address problems), blocks indicate deliverability problems that affect all
your emails to that domain.
</p>
</InfoBox>
</section>
{/* Common Bounce Reasons */}
<section id="bounce-reasons" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">Common Bounce Reasons & Error Codes</h2>
<div className="rounded-xl border border-neutral-200 overflow-hidden">
<table className="w-full">
<thead>
<tr>
<th className="px-6 py-4 text-left text-sm font-semibold">Error Type</th>
<th className="px-6 py-4 text-left text-sm font-semibold">Reason</th>
<th className="px-6 py-4 text-left text-sm font-semibold">Type</th>
<th className="px-6 py-4 text-left text-sm font-semibold">Action</th>
</tr>
</thead>
<tbody className="divide-y divide-neutral-200 bg-white">
<tr>
<td className="px-6 py-4 font-mono text-sm text-neutral-900">550</td>
<td className="px-6 py-4 text-sm text-neutral-700">Mailbox unavailable</td>
<td className="px-6 py-4 text-sm text-red-600">Hard</td>
<td className="px-6 py-4 text-sm text-neutral-700">Remove</td>
</tr>
<tr>
<td className="px-6 py-4 font-mono text-sm text-neutral-900">551</td>
<td className="px-6 py-4 text-sm text-neutral-700">User not local/Invalid address</td>
<td className="px-6 py-4 text-sm text-red-600">Hard</td>
<td className="px-6 py-4 text-sm text-neutral-700">Remove</td>
</tr>
<tr>
<td className="px-6 py-4 font-mono text-sm text-neutral-900">552</td>
<td className="px-6 py-4 text-sm text-neutral-700">Mailbox full</td>
<td className="px-6 py-4 text-sm text-amber-600">Soft</td>
<td className="px-6 py-4 text-sm text-neutral-700">Retry</td>
</tr>
<tr>
<td className="px-6 py-4 font-mono text-sm text-neutral-900">553</td>
<td className="px-6 py-4 text-sm text-neutral-700">Mailbox name invalid</td>
<td className="px-6 py-4 text-sm text-red-600">Hard</td>
<td className="px-6 py-4 text-sm text-neutral-700">Remove</td>
</tr>
<tr>
<td className="px-6 py-4 font-mono text-sm text-neutral-900">554</td>
<td className="px-6 py-4 text-sm text-neutral-700">Transaction failed</td>
<td className="px-6 py-4 text-sm text-neutral-600">Varies</td>
<td className="px-6 py-4 text-sm text-neutral-700">Investigate</td>
</tr>
<tr>
<td className="px-6 py-4 font-mono text-sm text-neutral-900">421</td>
<td className="px-6 py-4 text-sm text-neutral-700">Service not available</td>
<td className="px-6 py-4 text-sm text-amber-600">Soft</td>
<td className="px-6 py-4 text-sm text-neutral-700">Retry</td>
</tr>
<tr>
<td className="px-6 py-4 font-mono text-sm text-neutral-900">450</td>
<td className="px-6 py-4 text-sm text-neutral-700">Mailbox busy</td>
<td className="px-6 py-4 text-sm text-amber-600">Soft</td>
<td className="px-6 py-4 text-sm text-neutral-700">Retry</td>
</tr>
</tbody>
</table>
</div>
</section>
{/* How to Reduce Bounces */}
<section id="reduce-bounces" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">How to Reduce Email Bounce Rates</h2>
<div className="space-y-4">
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
1
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Use Double Opt-In</h3>
<p className="text-neutral-700">
Require new subscribers to confirm their email address by clicking a verification link. This ensures the
address is valid, active, and belongs to the person who submitted it. Double opt-in reduces bounce rates
by 50-70%.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
2
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Validate Email Addresses</h3>
<p className="text-neutral-700 mb-3">
Use real-time email validation on signup forms to catch typos and invalid formats. Validate:
</p>
<ul className="list-disc list-inside space-y-1 text-sm text-neutral-700">
<li>Email format (contains @ and valid domain)</li>
<li>Domain has valid MX records</li>
<li>Catch common typos (gmial.com gmail.com)</li>
<li>Block disposable email addresses (if needed)</li>
</ul>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
3
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Remove Hard Bounces Immediately</h3>
<p className="text-neutral-700">
Automate removal of hard bounce addresses from your list. Never send to them again. Continued sending to
invalid addresses signals poor list hygiene to email providers.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
4
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Clean Your List Regularly</h3>
<p className="text-neutral-700">
Remove or re-engage inactive subscribers every 6-12 months. Email addresses become invalid over time
(15- 20% per year). Regular list cleaning prevents bounce accumulation.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
5
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Never Buy Email Lists</h3>
<p className="text-neutral-700">
Purchased lists have 20-40% invalid addresses and zero engagement. They'll destroy your bounce rate and
sender reputation. Build your list organically—it's slower but dramatically more effective.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
6
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Monitor Soft Bounces</h3>
<p className="text-neutral-700">
Track addresses that repeatedly soft bounce. After 3-5 consecutive soft bounces over multiple campaigns,
treat them as hard bounces and remove them.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
7
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Optimize Email Size</h3>
<p className="text-neutral-700">
Keep email size under 100KB to avoid soft bounces from size limits. Compress images, minimize code, and
avoid large attachments (link to downloads instead).
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
8
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Maintain Consistent Sending</h3>
<p className="text-neutral-700">
Send regularly to maintain list freshness. Long gaps between sends (3+ months) increase bounce rates as
addresses become invalid or subscribers forget about you.
</p>
</div>
</div>
</div>
</section>
{/* Impact on Deliverability */}
<section id="impact" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">How Bounce Rate Affects Deliverability</h2>
<p className="text-neutral-700 leading-relaxed mb-6">
Bounce rates directly impact your sender reputation and ability to reach the inbox:
</p>
<div className="space-y-6">
<div className="rounded-xl border-2 border-red-200 bg-red-50 p-6">
<h3 className="text-xl font-semibold text-red-900 mb-3">Damaged Sender Reputation</h3>
<p className="text-neutral-700">
Email providers track bounce rates. High rates signal poor list quality and careless email practices,
damaging your reputation score. This causes more emailseven to valid addressesto land in spam.
</p>
</div>
<div className="rounded-xl border-2 border-amber-200 bg-amber-50 p-6">
<h3 className="text-xl font-semibold text-amber-900 mb-3">Spam Trap Hits</h3>
<p className="text-neutral-700">
Invalid addresses can be recycled as spam trapsaddresses used to catch senders with poor list hygiene.
Sending to spam traps can get you blacklisted, severely impacting deliverability across all recipients.
</p>
</div>
<div className="rounded-xl border-2 border-blue-200 bg-blue-50 p-6">
<h3 className="text-xl font-semibold text-blue-900 mb-3">IP/Domain Blacklisting</h3>
<p className="text-neutral-700">
Consistently high bounce rates can lead to your sending IP or domain being blacklisted by email providers
or third-party blacklist services, making it extremely difficult to deliver emails.
</p>
</div>
<div className="rounded-xl border-2 border-purple-200 bg-purple-50 p-6">
<h3 className="text-xl font-semibold text-purple-900 mb-3">Reduced Engagement</h3>
<p className="text-neutral-700">
High bounce rates correlate with low engagement. Email providers notice when large portions of your list
aren't valid, reducing trust in your remaining emails.
</p>
</div>
</div>
<InfoBox type="warning" title="Recovery Takes Time" className="mt-6">
<p>
Once your sender reputation is damaged by high bounce rates, recovery can take weeks or months of
consistently good sending behavior. Prevention is far easier than recovery.
</p>
</InfoBox>
</section>
{/* Monitoring Bounces */}
<section id="monitoring" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">Monitoring & Managing Bounces</h2>
<div className="grid gap-6 md:grid-cols-2">
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<h3 className="text-lg font-semibold text-neutral-900 mb-3">What to Track</h3>
<ul className="space-y-2 text-sm text-neutral-700">
<li> Overall bounce rate (target: &lt;2%)</li>
<li> Hard bounce rate specifically</li>
<li> Soft bounce rate and retry success</li>
<li> Bounce rate by campaign</li>
<li> Bounce rate trends over time</li>
<li> Specific bounce reasons/error codes</li>
</ul>
</div>
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<h3 className="text-lg font-semibold text-neutral-900 mb-3">Automated Actions</h3>
<ul className="space-y-2 text-sm text-neutral-700">
<li> Auto-remove hard bounces immediately</li>
<li> Retry soft bounces 3-5 times over 72 hours</li>
<li> Remove persistent soft bouncers</li>
<li> Alert when bounce rate exceeds threshold</li>
<li> Weekly bounce rate reports</li>
<li> Validate emails at signup</li>
</ul>
</div>
</div>
</section>
{/* Related Guides */}
<section id="related-guides" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">Related Email Guides</h2>
<div className="grid gap-4 md:grid-cols-3">
<Link
href="/guides/email-deliverability"
className="block rounded-xl border border-neutral-200 bg-white p-6 transition hover:border-neutral-300 hover:shadow-lg"
>
<h3 className="text-lg font-semibold text-neutral-900 mb-2">Email Deliverability</h3>
<p className="text-sm text-neutral-600">Complete guide to reaching the inbox.</p>
</Link>
<Link
href="/guides/email-sender-reputation"
className="block rounded-xl border border-neutral-200 bg-white p-6 transition hover:border-neutral-300 hover:shadow-lg"
>
<h3 className="text-lg font-semibold text-neutral-900 mb-2">Email Sender Reputation</h3>
<p className="text-sm text-neutral-600">Build and maintain sender reputation.</p>
</Link>
<Link
href="/guides/email-marketing-best-practices"
className="block rounded-xl border border-neutral-200 bg-white p-6 transition hover:border-neutral-300 hover:shadow-lg"
>
<h3 className="text-lg font-semibold text-neutral-900 mb-2">Email Marketing Best Practices</h3>
<p className="text-sm text-neutral-600">Complete email marketing guide.</p>
</Link>
</div>
</section>
</GuideLayout>
);
}
@@ -0,0 +1,474 @@
import React from 'react';
import {GuideLayout, InfoBox} from '../../components/guides';
import {CodeBlock} from '../../components/CodeBlock';
import Link from 'next/link';
export default function EmailClickThroughRate() {
return (
<GuideLayout
title="Email Click-Through Rate: How to Optimize CTAs & Increase Clicks"
description="Learn what affects email click-through rates, industry benchmarks, and proven tactics to optimize CTAs and boost engagement."
lastUpdated="2025-12-20"
readTime="10 min"
canonical="https://www.useplunk.com/guides/email-click-through-rate"
>
{/* Introduction */}
<section id="introduction" className="mb-12">
<p className="text-neutral-700 leading-relaxed">
Email click-through rate (CTR) measures the percentage of recipients who clicked a link in your email. While
open rates show subject line effectiveness, CTR reveals how compelling your email content and calls-to-action
are.
</p>
<p className="mt-4 text-neutral-700 leading-relaxed">
High CTR indicates engaged subscribers who find value in your emails and are moving toward conversion. This
guide covers everything you need to optimize CTAs and maximize clicks.
</p>
</section>
{/* What is CTR */}
<section id="what-is-ctr" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">What is Email Click-Through Rate?</h2>
<p className="text-neutral-700 leading-relaxed mb-6">
Click-through rate is the percentage of delivered emails that received at least one click on a link.
</p>
<div className="rounded-xl border-2 border-neutral-900 bg-neutral-50 p-8 mb-8">
<div className="text-center mb-6">
<div className="text-3xl font-bold text-neutral-900 mb-4">CTR Formula</div>
<CodeBlock
language="text"
code={`CTR = (Unique Clicks ÷ Delivered Emails) × 100
Example:
- Sent: 10,000 emails
- Delivered: 9,800 emails
- Unique Clicks: 294
CTR = (294 ÷ 9,800) × 100 = 3.0%`}
showCopy={false}
/>
</div>
<div className="text-center">
<div className="text-3xl font-bold text-neutral-900 mb-4">CTOR Formula</div>
<CodeBlock
language="text"
code={`CTOR (Click-to-Open Rate) = (Unique Clicks ÷ Unique Opens) × 100
Example:
- Unique Opens: 2,450
- Unique Clicks: 294
CTOR = (294 ÷ 2,450) × 100 = 12.0%`}
showCopy={false}
/>
</div>
</div>
<InfoBox type="info" title="CTR vs CTOR">
<p>
<strong>CTR</strong> measures overall campaign effectiveness (including deliverability and opens).{' '}
<strong>CTOR</strong> isolates content quality by measuring engagement from those who opened. Use bothCTR
for overall performance, CTOR for content optimization.
</p>
</InfoBox>
</section>
{/* Benchmarks */}
<section id="benchmarks" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">CTR Benchmarks by Industry</h2>
<div className="rounded-xl border border-neutral-200 overflow-hidden mb-8">
<table className="w-full">
<thead>
<tr>
<th className="px-6 py-4 text-left text-sm font-semibold">Industry</th>
<th className="px-6 py-4 text-left text-sm font-semibold">Average CTR</th>
<th className="px-6 py-4 text-left text-sm font-semibold">Good CTR</th>
<th className="px-6 py-4 text-left text-sm font-semibold">Average CTOR</th>
</tr>
</thead>
<tbody className="divide-y divide-neutral-200 bg-white">
<tr>
<td className="px-6 py-4 text-sm text-neutral-900">SaaS / Technology</td>
<td className="px-6 py-4 text-sm text-neutral-700">2-3%</td>
<td className="px-6 py-4 text-sm text-neutral-700">4%+</td>
<td className="px-6 py-4 text-sm text-neutral-700">10-15%</td>
</tr>
<tr>
<td className="px-6 py-4 text-sm text-neutral-900">E-commerce / Retail</td>
<td className="px-6 py-4 text-sm text-neutral-700">3-5%</td>
<td className="px-6 py-4 text-sm text-neutral-700">6%+</td>
<td className="px-6 py-4 text-sm text-neutral-700">12-18%</td>
</tr>
<tr>
<td className="px-6 py-4 text-sm text-neutral-900">Media / Publishing</td>
<td className="px-6 py-4 text-sm text-neutral-700">4-6%</td>
<td className="px-6 py-4 text-sm text-neutral-700">7%+</td>
<td className="px-6 py-4 text-sm text-neutral-700">15-20%</td>
</tr>
<tr>
<td className="px-6 py-4 text-sm text-neutral-900">Financial Services</td>
<td className="px-6 py-4 text-sm text-neutral-700">2-4%</td>
<td className="px-6 py-4 text-sm text-neutral-700">5%+</td>
<td className="px-6 py-4 text-sm text-neutral-700">10-14%</td>
</tr>
<tr>
<td className="px-6 py-4 text-sm text-neutral-900">Non-Profit</td>
<td className="px-6 py-4 text-sm text-neutral-700">2-4%</td>
<td className="px-6 py-4 text-sm text-neutral-700">5%+</td>
<td className="px-6 py-4 text-sm text-neutral-700">10-16%</td>
</tr>
<tr>
<td className="px-6 py-4 text-sm text-neutral-900">Education</td>
<td className="px-6 py-4 text-sm text-neutral-700">3-5%</td>
<td className="px-6 py-4 text-sm text-neutral-700">6%+</td>
<td className="px-6 py-4 text-sm text-neutral-700">12-17%</td>
</tr>
</tbody>
</table>
</div>
<InfoBox type="tip" title="Context Matters">
<p>
CTR varies dramatically by email type: promotional emails (2-3%), newsletters (4-6%), transactional emails
(10-15%), and triggered emails (15-30%). Compare similar email types, not all campaigns together.
</p>
</InfoBox>
</section>
{/* Factors Affecting CTR */}
<section id="factors" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">What Affects Click-Through Rates?</h2>
<div className="space-y-6">
<div className="border-l-4 border-neutral-900 pl-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-2">1. Call-to-Action (CTA) Design</h3>
<p className="text-neutral-700">
Your CTA's design, placement, and copy directly impact clicks. Clear, prominent, action-oriented CTAs
significantly outperform generic "Click here" links.
</p>
</div>
<div className="border-l-4 border-neutral-900 pl-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-2">2. Email Relevance</h3>
<p className="text-neutral-700">
Targeted, personalized content generates 2-3x higher CTR than generic blasts. Segmentation and
personalization ensure emails match subscriber interests.
</p>
</div>
<div className="border-l-4 border-neutral-900 pl-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-2">3. Value Proposition</h3>
<p className="text-neutral-700">
Recipients need a clear reason to click. Compelling value propositions—exclusive content, limited offers,
solutions to problems—drive clicks.
</p>
</div>
<div className="border-l-4 border-neutral-900 pl-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-2">4. Mobile Optimization</h3>
<p className="text-neutral-700">
60%+ of emails are read on mobile. Unoptimized emails with small links or poorly formatted content see 50%
lower CTR on mobile devices.
</p>
</div>
<div className="border-l-4 border-neutral-900 pl-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-2">5. Content Scannability</h3>
<p className="text-neutral-700">
Most people skim emails. Clear structure with headers, bullet points, and whitespace helps readers find
and click CTAs quickly.
</p>
</div>
<div className="border-l-4 border-neutral-900 pl-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-2">6. Number of CTAs</h3>
<p className="text-neutral-700">
More CTAs = divided attention. Emails with one primary CTA convert 371% better than those with multiple
competing CTAs.
</p>
</div>
</div>
</section>
{/* How to Improve CTR */}
<section id="improve-ctr" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">How to Increase Email Click-Through Rates</h2>
<div className="space-y-4">
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
1
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Use Clear, Action-Oriented CTA Copy</h3>
<p className="text-neutral-700 mb-3">
Be specific about what happens when users click. Action verbs + value = higher CTR.
</p>
<div className="rounded-lg bg-neutral-100 p-4 space-y-2">
<div className="flex items-start gap-2">
<span className="text-green-600 font-bold">✓</span>
<span className="text-sm text-neutral-700">"Download your free guide"</span>
</div>
<div className="flex items-start gap-2">
<span className="text-green-600 font-bold">✓</span>
<span className="text-sm text-neutral-700">"Start your 14-day free trial"</span>
</div>
<div className="flex items-start gap-2">
<span className="text-green-600 font-bold">✓</span>
<span className="text-sm text-neutral-700">"Get 20% off today only"</span>
</div>
<div className="flex items-start gap-2">
<span className="text-red-600 font-bold">✗</span>
<span className="text-sm text-neutral-700">"Click here"</span>
</div>
<div className="flex items-start gap-2">
<span className="text-red-600 font-bold">✗</span>
<span className="text-sm text-neutral-700">"Learn more"</span>
</div>
</div>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
2
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Design Prominent CTA Buttons</h3>
<p className="text-neutral-700 mb-3">Button best practices:</p>
<ul className="list-disc list-inside space-y-1 text-sm text-neutral-700">
<li>Use contrasting colors that stand out from email design</li>
<li>Make buttons large enough to tap on mobile (44x44px minimum)</li>
<li>Add white space around buttons for visual prominence</li>
<li>Use button text, not images (better for accessibility and loading)</li>
<li>Repeat primary CTA if email is long (top and bottom)</li>
</ul>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
3
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Create a Single, Clear Focus</h3>
<p className="text-neutral-700">
Each email should have one primary goal. Multiple CTAs competing for attention reduce overall clicks.
Guide readers toward one clear action.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
4
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Personalize Content</h3>
<p className="text-neutral-700">
Go beyond "Hi [Name]". Use behavioral data, purchase history, browsing activity, or preferences to send
highly relevant emails. Personalized CTAs see 202% higher CTR.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
5
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Optimize for Mobile</h3>
<p className="text-neutral-700 mb-3">Mobile optimization is critical:</p>
<ul className="list-disc list-inside space-y-1 text-sm text-neutral-700">
<li>Responsive design that adapts to screen size</li>
<li>Large, tappable buttons (not small text links)</li>
<li>Single-column layout for easy scrolling</li>
<li>Concise copy (mobile users scan quickly)</li>
<li>Place CTAs above the fold when possible</li>
</ul>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
6
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Use Urgency and Scarcity (Authentically)</h3>
<p className="text-neutral-700">
Genuine limited-time offers or limited quantity create urgency that drives clicks. Be authentic—false
urgency damages trust. "Sale ends tonight" or "Only 5 spots remaining" work when true.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
7
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Segment Your Audience</h3>
<p className="text-neutral-700">
Send targeted emails to specific groups based on behavior, interests, or demographics. Segmented
campaigns see 3x higher CTR than non-segmented blasts.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
8
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Include Preview/Teaser Content</h3>
<p className="text-neutral-700">
Show just enough value to create curiosity. Product images, stat highlights, or content snippets
encourage clicks to see more. "Read the full article" works better than just a headline.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
9
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">A/B Test CTAs</h3>
<p className="text-neutral-700 mb-3">Test systematically:</p>
<ul className="list-disc list-inside space-y-1 text-sm text-neutral-700">
<li>Button copy ("Get started" vs "Start free trial")</li>
<li>Button color (brand color vs high-contrast color)</li>
<li>Button placement (top, middle, bottom)</li>
<li>Number of CTAs (one vs multiple)</li>
<li>Button size and shape</li>
</ul>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
10
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Improve Email-Landing Page Match</h3>
<p className="text-neutral-700">
Ensure landing pages match email promises. Mismatched expectations cause immediate bounces. Email says
"20% off"? Landing page should show 20% off, not a generic homepage.
</p>
</div>
</div>
</div>
</section>
{/* CTA Placement */}
<section id="cta-placement" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">CTA Placement Best Practices</h2>
<div className="grid gap-6 md:grid-cols-3">
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<h3 className="text-lg font-semibold text-neutral-900 mb-3">Short Emails (&lt;200 words)</h3>
<p className="text-sm text-neutral-700 mb-3">One CTA in the middle or at the end.</p>
<div className="rounded-lg bg-neutral-50 p-3 text-xs text-neutral-600">Intro → Value prop → CTA</div>
</div>
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<h3 className="text-lg font-semibold text-neutral-900 mb-3">Medium Emails (200-500 words)</h3>
<p className="text-sm text-neutral-700 mb-3">CTAs at the beginning and end.</p>
<div className="rounded-lg bg-neutral-50 p-3 text-xs text-neutral-600">
Intro + CTA → Content → Final CTA
</div>
</div>
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<h3 className="text-lg font-semibold text-neutral-900 mb-3">Long Emails (&gt;500 words)</h3>
<p className="text-sm text-neutral-700 mb-3">Multiple CTAs throughout.</p>
<div className="rounded-lg bg-neutral-50 p-3 text-xs text-neutral-600">
CTA → Content → CTA → More content → Final CTA
</div>
</div>
</div>
<InfoBox type="tip" title="Above the Fold" className="mt-6">
<p>
Place at least one CTA above the fold (visible without scrolling) on mobile. Many readers won't scroll, so
give them an early opportunity to click.
</p>
</InfoBox>
</section>
{/* Common Mistakes */}
<section id="common-mistakes" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">Common CTR Mistakes to Avoid</h2>
<div className="space-y-6">
<div className="border-l-4 border-red-500 pl-6 py-2">
<h3 className="text-lg font-semibold text-neutral-900 mb-2"> Too Many CTAs</h3>
<p className="text-neutral-700">
Multiple competing CTAs confuse readers and reduce overall clicks. Focus on one primary action per email.
</p>
</div>
<div className="border-l-4 border-red-500 pl-6 py-2">
<h3 className="text-lg font-semibold text-neutral-900 mb-2"> Vague CTA Copy</h3>
<p className="text-neutral-700">
"Click here" and "Learn more" don't communicate value. Be specific: "Download free guide" or "Start 14-day
trial" tell readers exactly what they'll get.
</p>
</div>
<div className="border-l-4 border-red-500 pl-6 py-2">
<h3 className="text-lg font-semibold text-neutral-900 mb-2"> Image-Only CTAs</h3>
<p className="text-neutral-700">
Many email clients block images by default. If your CTA is an image, users won't see it. Use HTML buttons
with text.
</p>
</div>
<div className="border-l-4 border-red-500 pl-6 py-2">
<h3 className="text-lg font-semibold text-neutral-900 mb-2">✗ Small, Hard-to-Tap Links</h3>
<p className="text-neutral-700">
Tiny text links are difficult to tap on mobile. Use large buttons (minimum 44x44px) for easy tapping.
</p>
</div>
<div className="border-l-4 border-red-500 pl-6 py-2">
<h3 className="text-lg font-semibold text-neutral-900 mb-2">✗ No Clear Value Proposition</h3>
<p className="text-neutral-700">
Readers won't click if they don't know why they should. Clearly communicate the benefit of clicking before
asking them to act.
</p>
</div>
</div>
</section>
{/* Related Guides */}
<section id="related-guides" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">Related Email Guides</h2>
<div className="grid gap-4 md:grid-cols-3">
<Link
href="/guides/email-open-rate"
className="block rounded-xl border border-neutral-200 bg-white p-6 transition hover:border-neutral-300 hover:shadow-lg"
>
<h3 className="text-lg font-semibold text-neutral-900 mb-2">Email Open Rates</h3>
<p className="text-sm text-neutral-600">Improve opens to get more clicks.</p>
</Link>
<Link
href="/guides/email-marketing-best-practices"
className="block rounded-xl border border-neutral-200 bg-white p-6 transition hover:border-neutral-300 hover:shadow-lg"
>
<h3 className="text-lg font-semibold text-neutral-900 mb-2">Email Marketing Best Practices</h3>
<p className="text-sm text-neutral-600">Complete email marketing guide.</p>
</Link>
<Link
href="/guides/email-deliverability"
className="block rounded-xl border border-neutral-200 bg-white p-6 transition hover:border-neutral-300 hover:shadow-lg"
>
<h3 className="text-lg font-semibold text-neutral-900 mb-2">Email Deliverability</h3>
<p className="text-sm text-neutral-600">Reach the inbox for better engagement.</p>
</Link>
</div>
</section>
</GuideLayout>
);
}
@@ -0,0 +1,380 @@
import React from 'react';
import {GuideLayout, InfoBox} from '../../components/guides';
import Link from 'next/link';
export default function EmailDeliverability() {
return (
<GuideLayout
title="Email Deliverability Guide: Reach the Inbox Every Time"
description="Learn proven strategies to improve email deliverability, avoid spam filters, and maximize inbox placement rates. Complete guide with best practices."
lastUpdated="2025-12-20"
readTime="12 min"
canonical="https://www.useplunk.com/guides/email-deliverability"
>
{/* Introduction */}
<section id="introduction" className="mb-12">
<p className="text-neutral-700 leading-relaxed">
Email deliverability is the measure of how successfully your emails reach recipients' inboxes rather than spam
folders or being blocked entirely. Even perfectly crafted emails are worthless if they never reach your
audience.
</p>
<p className="mt-4 text-neutral-700 leading-relaxed">
This comprehensive guide covers everything you need to know about email deliverability—from technical
authentication to content best practices—so you can maximize inbox placement rates.
</p>
</section>
{/* What is Email Deliverability */}
<section id="what-is-deliverability" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">What is Email Deliverability?</h2>
<p className="text-neutral-700 leading-relaxed mb-6">
Email deliverability refers to your ability to deliver emails to subscribers' inboxes. It's measured as a
percentage of sent emails that successfully reach the inbox.
</p>
<div className="grid gap-6 md:grid-cols-3 mb-8">
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<div className="text-3xl font-bold text-green-600 mb-2">95%+</div>
<h3 className="text-lg font-semibold text-neutral-900 mb-2">Excellent</h3>
<p className="text-sm text-neutral-700">
Strong sender reputation, proper authentication, engaged audience
</p>
</div>
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<div className="text-3xl font-bold text-amber-600 mb-2">85-94%</div>
<h3 className="text-lg font-semibold text-neutral-900 mb-2">Good</h3>
<p className="text-sm text-neutral-700">Room for improvement in authentication or engagement</p>
</div>
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<div className="text-3xl font-bold text-red-600 mb-2">&lt;85%</div>
<h3 className="text-lg font-semibold text-neutral-900 mb-2">Poor</h3>
<p className="text-sm text-neutral-700">Serious issues requiring immediate attention</p>
</div>
</div>
<InfoBox type="info" title="Deliverability vs Delivery Rate">
<p>
<strong>Delivery rate</strong> measures emails that weren't bounced (reached the server).{' '}
<strong>Deliverability</strong> measures emails that reached the inbox specifically, not spam. You want both
to be high.
</p>
</InfoBox>
</section>
{/* Key Factors */}
<section id="key-factors" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">Key Factors Affecting Deliverability</h2>
<p className="text-neutral-700 leading-relaxed mb-6">
Email deliverability depends on multiple interconnected factors:
</p>
<div className="space-y-6">
<div className="border-l-4 border-neutral-900 pl-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-2">1. Sender Reputation</h3>
<p className="text-neutral-700">
Email providers track your sending behavior over time. High engagement rates, low spam complaints, and few
bounces build a positive reputation. Poor practices damage it.
</p>
</div>
<div className="border-l-4 border-neutral-900 pl-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-2">2. Email Authentication</h3>
<p className="text-neutral-700">
SPF, DKIM, and DMARC authenticate your emails and prove they're legitimate. Without proper authentication,
emails are more likely to be flagged as spam.
</p>
</div>
<div className="border-l-4 border-neutral-900 pl-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-2">3. Email Content</h3>
<p className="text-neutral-700">
Spam filters analyze your subject lines, body content, links, and images. Spammy language, excessive
links, or misleading content trigger filters.
</p>
</div>
<div className="border-l-4 border-neutral-900 pl-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-2">4. List Quality & Engagement</h3>
<p className="text-neutral-700">
Sending to engaged subscribers who want your emails is crucial. High open rates and clicks signal quality.
Low engagement or spam complaints hurt deliverability.
</p>
</div>
<div className="border-l-4 border-neutral-900 pl-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-2">5. Technical Infrastructure</h3>
<p className="text-neutral-700">
Your sending IP address, domain reputation, and email infrastructure affect how providers perceive your
emails. Dedicated IPs and proper warm-up are important at scale.
</p>
</div>
</div>
</section>
{/* Best Practices */}
<section id="best-practices" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">Email Deliverability Best Practices</h2>
<div className="space-y-8">
<div>
<h3 className="text-xl font-semibold text-neutral-900 mb-4">Authentication & Technical Setup</h3>
<div className="space-y-4">
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
1
</div>
<div>
<h4 className="font-semibold text-neutral-900 mb-2">Configure SPF, DKIM, and DMARC</h4>
<p className="text-neutral-700">
Implement all three authentication protocols. This proves your emails are legitimate and protects
your domain from spoofing.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
2
</div>
<div>
<h4 className="font-semibold text-neutral-900 mb-2">Use a Dedicated Sending Domain</h4>
<p className="text-neutral-700">
Send marketing emails from a subdomain (e.g., mail.yourdomain.com) to protect your main domain's
reputation if issues arise.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
3
</div>
<div>
<h4 className="font-semibold text-neutral-900 mb-2">Warm Up New IPs and Domains</h4>
<p className="text-neutral-700">
If using a new IP or domain, gradually increase sending volume over 2-4 weeks. Sudden high volume
from new sources looks suspicious.
</p>
</div>
</div>
</div>
</div>
<div>
<h3 className="text-xl font-semibold text-neutral-900 mb-4">List Management</h3>
<div className="space-y-4">
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
4
</div>
<div>
<h4 className="font-semibold text-neutral-900 mb-2">Use Double Opt-In</h4>
<p className="text-neutral-700">
Require subscribers to confirm their email address. This ensures list quality and prevents spam trap
addresses from being added.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
5
</div>
<div>
<h4 className="font-semibold text-neutral-900 mb-2">Clean Your List Regularly</h4>
<p className="text-neutral-700">
Remove hard bounces immediately and consider removing subscribers who haven't engaged in 6-12
months. Inactive subscribers hurt your reputation.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
6
</div>
<div>
<h4 className="font-semibold text-neutral-900 mb-2">Make Unsubscribing Easy</h4>
<p className="text-neutral-700">
Include a clear unsubscribe link in every email. Making it hard to unsubscribe leads to spam
complaints, which are much worse for deliverability.
</p>
</div>
</div>
</div>
</div>
<div>
<h3 className="text-xl font-semibold text-neutral-900 mb-4">Content Best Practices</h3>
<div className="space-y-4">
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
7
</div>
<div>
<h4 className="font-semibold text-neutral-900 mb-2">Avoid Spam Trigger Words</h4>
<p className="text-neutral-700 mb-3">
Words like "FREE", "ACT NOW", "LIMITED TIME", excessive exclamation marks, and all caps trigger spam
filters. Write naturally and professionally.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
8
</div>
<div>
<h4 className="font-semibold text-neutral-900 mb-2">Balance Text and Images</h4>
<p className="text-neutral-700">
Don't send image-only emails. Maintain a healthy text-to-image ratio (at least 60% text). Include
alt text for images.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
9
</div>
<div>
<h4 className="font-semibold text-neutral-900 mb-2">Use Relevant Subject Lines</h4>
<p className="text-neutral-700">
Subject lines should accurately reflect email content. Misleading subjects increase spam complaints
and damage trust.
</p>
</div>
</div>
</div>
</div>
</div>
</section>
{/* Common Issues */}
<section id="common-issues" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">Common Deliverability Issues & Solutions</h2>
<div className="space-y-6">
<div className="rounded-xl border-2 border-red-200 bg-red-50 p-6">
<h3 className="text-xl font-semibold text-red-900 mb-3">Problem: Emails Going to Spam</h3>
<p className="text-neutral-700 mb-3">
<strong>Causes:</strong> Poor sender reputation, missing authentication, spammy content, low engagement
</p>
<p className="text-neutral-700">
<strong>Solutions:</strong> Verify SPF/DKIM/DMARC setup, improve email content, segment your list to send
to engaged subscribers, warm up sending reputation
</p>
</div>
<div className="rounded-xl border-2 border-amber-200 bg-amber-50 p-6">
<h3 className="text-xl font-semibold text-amber-900 mb-3">Problem: High Bounce Rate</h3>
<p className="text-neutral-700 mb-3">
<strong>Causes:</strong> Invalid email addresses, purchased lists, poor list hygiene
</p>
<p className="text-neutral-700">
<strong>Solutions:</strong> Use double opt-in, validate email addresses, remove hard bounces immediately,
regularly clean your list
</p>
</div>
<div className="rounded-xl border-2 border-blue-200 bg-blue-50 p-6">
<h3 className="text-xl font-semibold text-blue-900 mb-3">Problem: Low Engagement Rates</h3>
<p className="text-neutral-700 mb-3">
<strong>Causes:</strong> Irrelevant content, wrong send frequency, stale email list
</p>
<p className="text-neutral-700">
<strong>Solutions:</strong> Segment your audience, personalize content, test send times, re-engagement
campaigns for inactive subscribers
</p>
</div>
<div className="rounded-xl border-2 border-purple-200 bg-purple-50 p-6">
<h3 className="text-xl font-semibold text-purple-900 mb-3">Problem: Blacklisted IP or Domain</h3>
<p className="text-neutral-700 mb-3">
<strong>Causes:</strong> Spam complaints, sending to spam traps, compromised account
</p>
<p className="text-neutral-700">
<strong>Solutions:</strong> Check blacklists (MXToolbox, Spamhaus), request delisting, fix underlying
issues, consider a new sending domain if severely damaged
</p>
</div>
</div>
</section>
{/* Monitoring */}
<section id="monitoring" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">Monitoring Email Deliverability</h2>
<p className="text-neutral-700 leading-relaxed mb-6">
Track these metrics to stay on top of deliverability:
</p>
<div className="grid gap-6 md:grid-cols-2">
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<h3 className="text-lg font-semibold text-neutral-900 mb-3">Delivery Rate</h3>
<p className="text-neutral-700">
Percentage of emails that didn't bounce. Target: 98%+. Track hard vs soft bounces separately.
</p>
</div>
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<h3 className="text-lg font-semibold text-neutral-900 mb-3">Inbox Placement Rate</h3>
<p className="text-neutral-700">
Percentage of delivered emails that reached the inbox (not spam). Target: 95%+. Use seed list testing.
</p>
</div>
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<h3 className="text-lg font-semibold text-neutral-900 mb-3">Spam Complaint Rate</h3>
<p className="text-neutral-700">
Percentage of recipients who mark as spam. Target: &lt;0.1%. Even 0.3% is concerning.
</p>
</div>
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<h3 className="text-lg font-semibold text-neutral-900 mb-3">Engagement Metrics</h3>
<p className="text-neutral-700">
Open rates, click rates, and unsubscribe rates. Sustained low engagement signals poor deliverability.
</p>
</div>
</div>
<InfoBox type="tip" title="Use DMARC Reports">
<p>
DMARC aggregate reports show authentication success rates and potential spoofing attempts. Review these
weekly to catch deliverability issues early.
</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 Guides</h2>
<div className="grid gap-4 md:grid-cols-3">
<Link
href="/guides/what-is-dkim"
className="block rounded-xl border border-neutral-200 bg-white p-6 transition hover:border-neutral-300 hover:shadow-lg"
>
<h3 className="text-lg font-semibold text-neutral-900 mb-2">What is DKIM?</h3>
<p className="text-sm text-neutral-600">Learn about DKIM email authentication.</p>
</Link>
<Link
href="/guides/what-is-spf"
className="block rounded-xl border border-neutral-200 bg-white p-6 transition hover:border-neutral-300 hover:shadow-lg"
>
<h3 className="text-lg font-semibold text-neutral-900 mb-2">What is SPF?</h3>
<p className="text-sm text-neutral-600">Understand SPF records and sender authorization.</p>
</Link>
<Link
href="/guides/email-sender-reputation"
className="block rounded-xl border border-neutral-200 bg-white p-6 transition hover:border-neutral-300 hover:shadow-lg"
>
<h3 className="text-lg font-semibold text-neutral-900 mb-2">Email Sender Reputation</h3>
<p className="text-sm text-neutral-600">Build and maintain sender reputation.</p>
</Link>
</div>
</section>
</GuideLayout>
);
}
@@ -0,0 +1,549 @@
import React from 'react';
import {GuideLayout, InfoBox} from '../../components/guides';
import Link from 'next/link';
export default function EmailMarketingBestPractices() {
return (
<GuideLayout
title="Email Marketing Best Practices: The Complete Guide"
description="Master email marketing with proven best practices for content, design, timing, deliverability, and compliance. Comprehensive guide for 2025."
lastUpdated="2025-12-20"
readTime="15 min"
canonical="https://www.useplunk.com/guides/email-marketing-best-practices"
>
{/* Introduction */}
<section id="introduction" className="mb-12">
<p className="text-neutral-700 leading-relaxed">
Email marketing remains one of the most effective digital marketing channels, delivering an average ROI of
$36-42 for every $1 spent. But success requires following best practices that have evolved with technology,
regulations, and user expectations.
</p>
<p className="mt-4 text-neutral-700 leading-relaxed">
This comprehensive guide covers everything you need to know: from building your list to crafting compelling
content, optimizing deliverability, and staying compliant with regulations.
</p>
</section>
{/* List Building */}
<section id="list-building" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">Building Your Email List</h2>
<p className="text-neutral-700 leading-relaxed mb-6">
A high-quality email list is the foundation of successful email marketing. Focus on engaged subscribers who
genuinely want to hear from you.
</p>
<div className="space-y-6">
<div className="rounded-xl border-2 border-green-200 bg-green-50 p-6">
<h3 className="text-xl font-semibold text-green-900 mb-3"> Best Practices</h3>
<ul className="space-y-3 text-neutral-700">
<li className="flex items-start gap-3">
<span className="text-green-600 font-bold mt-1"></span>
<span>
<strong>Use double opt-in:</strong> Require subscribers to confirm their email address. This ensures
list quality and reduces spam complaints.
</span>
</li>
<li className="flex items-start gap-3">
<span className="text-green-600 font-bold mt-1"></span>
<span>
<strong>Offer clear value:</strong> Explain what subscribers will receive and how often. "Get weekly
tips on [topic]" is better than "Subscribe to our newsletter."
</span>
</li>
<li className="flex items-start gap-3">
<span className="text-green-600 font-bold mt-1"></span>
<span>
<strong>Use multiple touchpoints:</strong> Add signup forms on your website, blog, checkout page,
social media, and in-person events.
</span>
</li>
<li className="flex items-start gap-3">
<span className="text-green-600 font-bold mt-1"></span>
<span>
<strong>Provide incentives:</strong> Lead magnets like ebooks, discounts, templates, or exclusive
content encourage signups.
</span>
</li>
<li className="flex items-start gap-3">
<span className="text-green-600 font-bold mt-1"></span>
<span>
<strong>Make forms easy:</strong> Keep signup forms simpleask only for essential information (usually
just email, sometimes name).
</span>
</li>
</ul>
</div>
<div className="rounded-xl border-2 border-red-200 bg-red-50 p-6">
<h3 className="text-xl font-semibold text-red-900 mb-3"> Avoid These Mistakes</h3>
<ul className="space-y-3 text-neutral-700">
<li className="flex items-start gap-3">
<span className="text-red-600 font-bold mt-1"></span>
<span>
<strong>Never buy email lists:</strong> Purchased lists lead to spam complaints, poor engagement, and
damaged reputation.
</span>
</li>
<li className="flex items-start gap-3">
<span className="text-red-600 font-bold mt-1"></span>
<span>
<strong>Don't use pre-checked boxes:</strong> Subscribers must actively opt-in. Pre-checked boxes
violate GDPR and reduce engagement.
</span>
</li>
<li className="flex items-start gap-3">
<span className="text-red-600 font-bold mt-1">•</span>
<span>
<strong>Avoid hidden signup terms:</strong> Be transparent about email frequency and content type.
</span>
</li>
</ul>
</div>
</div>
</section>
{/* Content Best Practices */}
<section id="content" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">Email Content Best Practices</h2>
<div className="space-y-6 mb-8">
<div className="border-l-4 border-neutral-900 pl-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-2">1. Craft Compelling Subject Lines</h3>
<p className="text-neutral-700 mb-3">
Your subject line determines whether emails get opened. Keep them under 50 characters, create curiosity,
and be specific about value.
</p>
<div className="rounded-lg bg-neutral-50 p-4">
<p className="text-sm font-semibold text-neutral-900 mb-2">Examples:</p>
<ul className="space-y-1 text-sm text-neutral-700">
<li>✓ "5 proven strategies to reduce churn by 30%"</li>
<li>✓ "Your personalized year-end report is ready"</li>
<li>✓ "Last chance: Sale ends tonight at midnight"</li>
<li>✗ "Newsletter #47"</li>
<li>✗ "Check this out!!!"</li>
</ul>
</div>
</div>
<div className="border-l-4 border-neutral-900 pl-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-2">2. Personalize Beyond First Names</h3>
<p className="text-neutral-700">
Use behavioral data, purchase history, browsing activity, or preferences. Personalized emails deliver 6x
higher transaction rates than generic blasts.
</p>
</div>
<div className="border-l-4 border-neutral-900 pl-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-2">3. Focus on One Primary Goal</h3>
<p className="text-neutral-700">
Each email should have one clear call-to-action (CTA). Multiple CTAs confuse readers and reduce conversion
rates. Guide recipients toward a single action.
</p>
</div>
<div className="border-l-4 border-neutral-900 pl-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-2">4. Write Scannable Content</h3>
<p className="text-neutral-700 mb-3">Most people skim emails. Structure content for easy scanning:</p>
<ul className="list-disc list-inside space-y-1 text-neutral-700">
<li>Use short paragraphs (2-3 sentences max)</li>
<li>Include bullet points and numbered lists</li>
<li>Add descriptive subheadings</li>
<li>Use white space generously</li>
<li>Highlight key points with bold text</li>
</ul>
</div>
<div className="border-l-4 border-neutral-900 pl-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-2">5. Create Compelling CTAs</h3>
<p className="text-neutral-700 mb-3">Effective CTAs are:</p>
<ul className="list-disc list-inside space-y-1 text-neutral-700">
<li>
<strong>Action-oriented:</strong> "Download the guide" not "Click here"
</li>
<li>
<strong>Specific:</strong> "Start your 14-day free trial" not "Get started"
</li>
<li>
<strong>Visually prominent:</strong> Button format with contrasting colors
</li>
<li>
<strong>Urgent when appropriate:</strong> "Claim your discount today"
</li>
</ul>
</div>
<div className="border-l-4 border-neutral-900 pl-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-2">6. Provide Real Value</h3>
<p className="text-neutral-700">
Every email should benefit the reader. Share insights, solve problems, offer exclusive content, or provide
entertainment. Don't just promoteeducate and engage.
</p>
</div>
</div>
</section>
{/* Design Best Practices */}
<section id="design" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">Email Design Best Practices</h2>
<div className="space-y-4">
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
1
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Mobile-First Design</h3>
<p className="text-neutral-700">
60%+ of emails are opened on mobile. Use responsive templates, large tap targets (44x44px minimum), and
test on multiple devices and email clients.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
2
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Optimize Images</h3>
<p className="text-neutral-700">
Compress images for fast loading, use alt text (many clients block images), and maintain 60/40
text-to-image ratio. Never send image-only emails.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
3
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Brand Consistency</h3>
<p className="text-neutral-700">
Use your brand colors, fonts, logo, and voice consistently. Recipients should instantly recognize your
emails. Create a template system for efficiency.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
4
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Accessible Design</h3>
<p className="text-neutral-700">
Use sufficient color contrast (4.5:1 minimum), readable font sizes (14px+ for body text), descriptive
link text, and semantic HTML for screen readers.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
5
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Test Across Email Clients</h3>
<p className="text-neutral-700">
Email rendering varies dramatically across Gmail, Outlook, Apple Mail, etc. Test your designs across
major clients before sending to your full list.
</p>
</div>
</div>
</div>
</section>
{/* Timing & Frequency */}
<section id="timing" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">Timing & Frequency Best Practices</h2>
<div className="grid gap-6 md:grid-cols-2 mb-8">
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-4">Best Send Times (General)</h3>
<ul className="space-y-2 text-neutral-700">
<li>
<strong>B2B:</strong> Tuesday-Thursday, 10am-11am or 2pm-3pm
</li>
<li>
<strong>B2C:</strong> Varies widelytest evenings and weekends
</li>
<li>
<strong>Avoid:</strong> Monday mornings (inbox overload) and Friday afternoons
</li>
</ul>
<InfoBox type="info" title="Test Your Audience" className="mt-4">
<p className="text-sm">
These are starting points. Your specific audience may behave differently. A/B test send times and let
data guide your strategy.
</p>
</InfoBox>
</div>
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-4">Email Frequency Guidelines</h3>
<ul className="space-y-2 text-neutral-700">
<li>
<strong>Weekly:</strong> Most common for newsletters and content
</li>
<li>
<strong>2-3x/week:</strong> Works for engaged audiences with fresh content
</li>
<li>
<strong>Daily:</strong> Only for news, deals, or highly engaged communities
</li>
<li>
<strong>Monthly:</strong> Risk of being forgotten; better for curated content
</li>
</ul>
<InfoBox type="warning" title="Monitor Unsubscribes">
<p className="text-sm">
If unsubscribe rates spike when you increase frequency, you're sending too often. Find the balance.
</p>
</InfoBox>
</div>
</div>
</section>
{/* Segmentation */}
<section id="segmentation" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">Segmentation & Personalization</h2>
<p className="text-neutral-700 leading-relaxed mb-6">
Segmented campaigns generate 30% more opens and 50% more clicks than non-segmented campaigns. Send targeted
messages to specific groups rather than blasting your entire list.
</p>
<div className="grid gap-6 md:grid-cols-2">
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<h3 className="text-lg font-semibold text-neutral-900 mb-3">Common Segmentation Criteria</h3>
<ul className="space-y-2 text-sm text-neutral-700">
<li>
• <strong>Demographics:</strong> Age, location, job title, company size
</li>
<li>
• <strong>Behavior:</strong> Purchase history, browsing activity, email engagement
</li>
<li>
• <strong>Lifecycle stage:</strong> New subscriber, active customer, churned user
</li>
<li>
• <strong>Engagement level:</strong> Highly engaged vs inactive subscribers
</li>
<li>
• <strong>Preferences:</strong> Product interests, content topics, email frequency
</li>
<li>
• <strong>Purchase recency:</strong> Recent buyers, lapsed customers
</li>
</ul>
</div>
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<h3 className="text-lg font-semibold text-neutral-900 mb-3">Segment-Specific Campaigns</h3>
<ul className="space-y-2 text-sm text-neutral-700">
<li>• Welcome series for new subscribers</li>
<li>• Re-engagement campaigns for inactive users</li>
<li>• Win-back campaigns for churned customers</li>
<li>• Product recommendations based on past purchases</li>
<li>• Location-specific offers and events</li>
<li>• VIP campaigns for high-value customers</li>
</ul>
</div>
</div>
</section>
{/* Testing & Optimization */}
<section id="testing" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">Testing & Optimization</h2>
<p className="text-neutral-700 leading-relaxed mb-6">
Continuous testing is essential for improving email performance. Never assume—test and let data guide
decisions.
</p>
<div className="space-y-6">
<div className="border-l-4 border-neutral-900 pl-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-2">What to A/B Test</h3>
<ul className="space-y-2 text-neutral-700">
<li>
• <strong>Subject lines:</strong> Length, personalization, questions vs statements, emojis
</li>
<li>
• <strong>Send times:</strong> Day of week, time of day, time zones
</li>
<li>
• <strong>Content:</strong> Long vs short, text vs image-heavy, tone and style
</li>
<li>
• <strong>CTAs:</strong> Button text, color, placement, number of CTAs
</li>
<li>
• <strong>Sender name:</strong> Company name vs person's name
</li>
<li>
<strong>Personalization:</strong> Generic vs personalized content
</li>
</ul>
</div>
<div className="border-l-4 border-neutral-900 pl-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-2">A/B Testing Best Practices</h3>
<ul className="space-y-2 text-neutral-700">
<li> Test one variable at a time for clear results</li>
<li> Use statistically significant sample sizes (minimum 1,000+ per variant)</li>
<li> Run tests long enough to account for timing variations</li>
<li> Test with random splits, not cherry-picked segments</li>
<li> Implement winners, then test the next variable</li>
</ul>
</div>
</div>
</section>
{/* Compliance */}
<section id="compliance" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">Legal Compliance</h2>
<p className="text-neutral-700 leading-relaxed mb-6">
Email marketing is heavily regulated. Non-compliance can result in massive fines and damage to your
reputation.
</p>
<div className="grid gap-6 md:grid-cols-2">
<div className="rounded-xl border-2 border-blue-200 bg-blue-50 p-6">
<h3 className="text-xl font-semibold text-blue-900 mb-3">CAN-SPAM (US)</h3>
<ul className="space-y-2 text-neutral-700">
<li> Don't use misleading subject lines or headers</li>
<li> Include your physical mailing address</li>
<li> Provide a clear, easy unsubscribe mechanism</li>
<li> Honor unsubscribe requests within 10 business days</li>
<li> Identify the email as an advertisement (if applicable)</li>
</ul>
</div>
<div className="rounded-xl border-2 border-purple-200 bg-purple-50 p-6">
<h3 className="text-xl font-semibold text-purple-900 mb-3">GDPR (EU)</h3>
<ul className="space-y-2 text-neutral-700">
<li> Obtain explicit consent before sending marketing emails</li>
<li> Provide clear information about data usage</li>
<li> Allow subscribers to access, modify, or delete their data</li>
<li> Keep records of consent</li>
<li> Implement appropriate data security measures</li>
</ul>
</div>
</div>
<InfoBox type="warning" title="When in Doubt, Get Consent" className="mt-6">
<p>
Laws vary by jurisdiction. The safest approach is always to get explicit, documented consent before adding
anyone to your email list. Make unsubscribing easy and honor requests immediately.
</p>
</InfoBox>
</section>
{/* Metrics to Track */}
<section id="metrics" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">Key Metrics to Track</h2>
<div className="grid gap-6 md:grid-cols-2">
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<h3 className="text-lg font-semibold text-neutral-900 mb-3">Engagement Metrics</h3>
<ul className="space-y-2 text-sm text-neutral-700">
<li>
<strong>Open rate:</strong> Industry average: 15-25%
</li>
<li>
<strong>Click-through rate (CTR):</strong> Industry average: 2-5%
</li>
<li>
<strong>Click-to-open rate (CTOR):</strong> Clicks ÷ opens
</li>
<li>
<strong>Conversion rate:</strong> Goal completions ÷ delivered
</li>
</ul>
</div>
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<h3 className="text-lg font-semibold text-neutral-900 mb-3">Health Metrics</h3>
<ul className="space-y-2 text-sm text-neutral-700">
<li>
<strong>Bounce rate:</strong> Target: &lt;2%
</li>
<li>
<strong>Unsubscribe rate:</strong> Target: &lt;0.5%
</li>
<li>
<strong>Spam complaint rate:</strong> Target: &lt;0.1%
</li>
<li>
<strong>List growth rate:</strong> New subscribers vs unsubscribes
</li>
</ul>
</div>
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<h3 className="text-lg font-semibold text-neutral-900 mb-3">Business Metrics</h3>
<ul className="space-y-2 text-sm text-neutral-700">
<li>
<strong>ROI:</strong> Revenue generated ÷ cost
</li>
<li>
<strong>Revenue per email:</strong> Total revenue ÷ emails sent
</li>
<li>
<strong>Customer lifetime value (CLV):</strong> Long-term value
</li>
<li>
<strong>Cost per acquisition (CPA):</strong> Acquisition cost
</li>
</ul>
</div>
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<h3 className="text-lg font-semibold text-neutral-900 mb-3">Deliverability Metrics</h3>
<ul className="space-y-2 text-sm text-neutral-700">
<li>
<strong>Delivery rate:</strong> Target: 98%+
</li>
<li>
<strong>Inbox placement rate:</strong> Target: 95%+
</li>
<li>
<strong>Sender reputation score:</strong> Monitor regularly
</li>
<li>
<strong>Authentication status:</strong> SPF, DKIM, DMARC passing
</li>
</ul>
</div>
</div>
</section>
{/* Related Guides */}
<section id="related-guides" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">Related Email Guides</h2>
<div className="grid gap-4 md:grid-cols-3">
<Link
href="/guides/email-deliverability"
className="block rounded-xl border border-neutral-200 bg-white p-6 transition hover:border-neutral-300 hover:shadow-lg"
>
<h3 className="text-lg font-semibold text-neutral-900 mb-2">Email Deliverability</h3>
<p className="text-sm text-neutral-600">Ensure your emails reach the inbox.</p>
</Link>
<Link
href="/guides/email-open-rate"
className="block rounded-xl border border-neutral-200 bg-white p-6 transition hover:border-neutral-300 hover:shadow-lg"
>
<h3 className="text-lg font-semibold text-neutral-900 mb-2">Email Open Rates</h3>
<p className="text-sm text-neutral-600">Improve your open rates with proven tactics.</p>
</Link>
<Link
href="/guides/email-click-through-rate"
className="block rounded-xl border border-neutral-200 bg-white p-6 transition hover:border-neutral-300 hover:shadow-lg"
>
<h3 className="text-lg font-semibold text-neutral-900 mb-2">Email Click-Through Rate</h3>
<p className="text-sm text-neutral-600">Optimize CTAs for more clicks.</p>
</Link>
</div>
</section>
</GuideLayout>
);
}
@@ -0,0 +1,394 @@
import React from 'react';
import {GuideLayout, InfoBox} from '../../components/guides';
import {CodeBlock} from '../../components/CodeBlock';
import Link from 'next/link';
export default function EmailOpenRate() {
return (
<GuideLayout
title="Email Open Rate: Benchmarks, Strategies & Best Practices"
description="Learn what affects email open rates, industry benchmarks, and proven tactics to improve opens. Complete guide with actionable tips."
lastUpdated="2025-12-20"
readTime="10 min"
canonical="https://www.useplunk.com/guides/email-open-rate"
>
{/* Introduction */}
<section id="introduction" className="mb-12">
<p className="text-neutral-700 leading-relaxed">
Email open rate measures the percentage of recipients who open your email. It's one of the most important
email marketing metrics, indicating how well your subject lines, sender name, and send timing resonate with
your audience.
</p>
<p className="mt-4 text-neutral-700 leading-relaxed">
While recent privacy changes have affected open rate accuracy, it remains a valuable metric for understanding
email performance and audience engagement.
</p>
</section>
{/* What is Open Rate */}
<section id="what-is-open-rate" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">What is Email Open Rate?</h2>
<p className="text-neutral-700 leading-relaxed mb-6">
Open rate is calculated by dividing the number of unique opens by the number of delivered emails (sent emails
minus bounces).
</p>
<div className="rounded-xl border-2 border-neutral-900 bg-neutral-50 p-8 mb-8">
<div className="text-center">
<div className="text-3xl font-bold text-neutral-900 mb-4">Open Rate Formula</div>
<CodeBlock
language="text"
code={`Open Rate = (Unique Opens ÷ Emails Delivered) × 100
Example:
- Sent: 1,000 emails
- Bounced: 50 emails
- Delivered: 950 emails
- Unique Opens: 285
Open Rate = (285 ÷ 950) × 100 = 30%`}
showCopy={false}
/>
</div>
</div>
<InfoBox type="info" title="Unique vs Total Opens">
<p>
<strong>Unique opens</strong> count each recipient only once, even if they open multiple times.{' '}
<strong>Total opens</strong> count every open. Always use unique opens for open rate calculations to avoid
inflated metrics.
</p>
</InfoBox>
</section>
{/* Benchmarks */}
<section id="benchmarks" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">Email Open Rate Benchmarks by Industry</h2>
<p className="text-neutral-700 leading-relaxed mb-6">
Open rates vary significantly by industry, audience, and email type:
</p>
<div className="rounded-xl border border-neutral-200 overflow-hidden mb-8">
<table className="w-full">
<thead>
<tr>
<th className="px-6 py-4 text-left text-sm font-semibold">Industry</th>
<th className="px-6 py-4 text-left text-sm font-semibold">Average Open Rate</th>
<th className="px-6 py-4 text-left text-sm font-semibold">Good Open Rate</th>
</tr>
</thead>
<tbody className="divide-y divide-neutral-200 bg-white">
<tr>
<td className="px-6 py-4 text-sm text-neutral-900">SaaS / Technology</td>
<td className="px-6 py-4 text-sm text-neutral-700">20-25%</td>
<td className="px-6 py-4 text-sm text-neutral-700">30%+</td>
</tr>
<tr>
<td className="px-6 py-4 text-sm text-neutral-900">E-commerce / Retail</td>
<td className="px-6 py-4 text-sm text-neutral-700">15-20%</td>
<td className="px-6 py-4 text-sm text-neutral-700">25%+</td>
</tr>
<tr>
<td className="px-6 py-4 text-sm text-neutral-900">Financial Services</td>
<td className="px-6 py-4 text-sm text-neutral-700">18-23%</td>
<td className="px-6 py-4 text-sm text-neutral-700">28%+</td>
</tr>
<tr>
<td className="px-6 py-4 text-sm text-neutral-900">Healthcare</td>
<td className="px-6 py-4 text-sm text-neutral-700">20-25%</td>
<td className="px-6 py-4 text-sm text-neutral-700">30%+</td>
</tr>
<tr>
<td className="px-6 py-4 text-sm text-neutral-900">Education</td>
<td className="px-6 py-4 text-sm text-neutral-700">22-28%</td>
<td className="px-6 py-4 text-sm text-neutral-700">33%+</td>
</tr>
<tr>
<td className="px-6 py-4 text-sm text-neutral-900">Media / Publishing</td>
<td className="px-6 py-4 text-sm text-neutral-700">18-23%</td>
<td className="px-6 py-4 text-sm text-neutral-700">28%+</td>
</tr>
<tr>
<td className="px-6 py-4 text-sm text-neutral-900">Non-Profit</td>
<td className="px-6 py-4 text-sm text-neutral-700">24-30%</td>
<td className="px-6 py-4 text-sm text-neutral-700">35%+</td>
</tr>
</tbody>
</table>
</div>
<InfoBox type="warning" title="Post-Apple MPP Benchmarks">
<p>
Since Apple Mail Privacy Protection launched in 2021, industry-wide open rates have increased by 5-15
percentage points. Compare against your own historical data rather than relying solely on industry
benchmarks.
</p>
</InfoBox>
</section>
{/* Factors Affecting */}
<section id="factors" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">What Affects Email Open Rates?</h2>
<div className="space-y-6">
<div className="border-l-4 border-neutral-900 pl-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-2">1. Subject Line</h3>
<p className="text-neutral-700 mb-3">
Your subject line is the #1 factor. It must be compelling, relevant, and create curiosity without being
clickbait. Personalization and specificity improve opens.
</p>
<div className="rounded-lg bg-neutral-50 p-4 space-y-2">
<div className="flex items-start gap-2">
<span className="text-green-600 font-bold">✓</span>
<span className="text-sm text-neutral-700">
"John, your invoice is ready" (personal, specific, clear)
</span>
</div>
<div className="flex items-start gap-2">
<span className="text-green-600 font-bold">✓</span>
<span className="text-sm text-neutral-700">
"3 proven ways to increase conversion rates" (specific value)
</span>
</div>
<div className="flex items-start gap-2">
<span className="text-red-600 font-bold">✗</span>
<span className="text-sm text-neutral-700">"You won't believe this!" (clickbait, vague)</span>
</div>
<div className="flex items-start gap-2">
<span className="text-red-600 font-bold">✗</span>
<span className="text-sm text-neutral-700">"Newsletter #47" (generic, uninteresting)</span>
</div>
</div>
</div>
<div className="border-l-4 border-neutral-900 pl-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-2">2. Sender Name</h3>
<p className="text-neutral-700">
Recipients decide whether to open based on who it's from. Use a recognizable name—either your brand or a
person from your company. "Company Name" or "John from Company" work better than "noreply@company.com".
</p>
</div>
<div className="border-l-4 border-neutral-900 pl-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-2">3. Send Time & Day</h3>
<p className="text-neutral-700">
Timing impacts visibility. B2B emails typically perform best Tuesday-Thursday, 10am-2pm. B2C varies more
by audience—test evenings and weekends. Avoid Monday mornings and Friday afternoons.
</p>
</div>
<div className="border-l-4 border-neutral-900 pl-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-2">4. List Quality & Segmentation</h3>
<p className="text-neutral-700">
Engaged subscribers open more. Segmenting by behavior, interests, or demographics ensures relevance.
Inactive subscribers drag down open rates—consider re-engagement or removal.
</p>
</div>
<div className="border-l-4 border-neutral-900 pl-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-2">5. Deliverability & Sender Reputation</h3>
<p className="text-neutral-700">
If emails land in spam, they won't be opened. Maintain good sender reputation through proper
authentication (SPF, DKIM, DMARC), low spam complaints, and high engagement.
</p>
</div>
<div className="border-l-4 border-neutral-900 pl-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-2">6. Email Frequency</h3>
<p className="text-neutral-700">
Too frequent leads to fatigue and unsubscribes. Too infrequent and subscribers forget you. Find the sweet
spot for your audience—typically 1-4 emails per week for marketing.
</p>
</div>
<div className="border-l-4 border-neutral-900 pl-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-2">7. Mobile Optimization</h3>
<p className="text-neutral-700">
60%+ of emails are opened on mobile. Use short subject lines (40-50 characters), clear preview text, and
mobile-responsive design to improve mobile open rates.
</p>
</div>
</div>
</section>
{/* How to Improve */}
<section id="improve-open-rates" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">How to Improve Email Open Rates</h2>
<div className="space-y-4">
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
1
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Write Compelling Subject Lines</h3>
<p className="text-neutral-700">
Test different approaches: questions, personalization, numbers, urgency (without being spammy). Keep
them under 50 characters. A/B test to find what resonates with your audience.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
2
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Personalize Beyond First Names</h3>
<p className="text-neutral-700">
Use behavioral data, past purchases, browsing history, or location. "Products you recently viewed" or
"Based on your interest in [topic]" outperform generic blasts.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
3
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Segment Your Audience</h3>
<p className="text-neutral-700">
Send targeted emails to specific groups based on engagement level, purchase history, demographics, or
interests. Segmented campaigns see 14-100% higher open rates than non-segmented.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
4
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Optimize Preview Text</h3>
<p className="text-neutral-700">
Preview text appears next to the subject line. Use it to complement your subject, add context, or create
additional curiosity. Don't let it default to "View this email in your browser".
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
5
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Clean Your Email List Regularly</h3>
<p className="text-neutral-700">
Remove subscribers who haven't engaged in 6-12 months. While this reduces list size, it dramatically
improves open rates and sender reputation. Quality over quantity.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
6
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Test Send Times</h3>
<p className="text-neutral-700">
Run A/B tests sending the same email at different times. Track when your specific audience is most
responsive. Send time optimization can improve opens by 20-50%.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
7
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Re-engage Inactive Subscribers</h3>
<p className="text-neutral-700">
Before removing inactive users, send a re-engagement campaign: "We miss you" or "Still interested?"
emails with special offers. Remove those who still don't engage.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
8
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Use a Recognizable Sender Name</h3>
<p className="text-neutral-700">
Build consistency with your sender name. People are more likely to open emails from names they
recognize. Avoid changing it frequently.
</p>
</div>
</div>
</div>
</section>
{/* Apple MPP Impact */}
<section id="apple-mpp" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">Apple Mail Privacy Protection Impact</h2>
<p className="text-neutral-700 leading-relaxed mb-6">
Since iOS 15, Apple Mail Privacy Protection pre-loads email images and tracking pixels, making open tracking
less reliable for Apple Mail users.
</p>
<div className="grid gap-6 md:grid-cols-2">
<div className="rounded-xl border-2 border-amber-200 bg-amber-50 p-6">
<h3 className="text-xl font-semibold text-amber-900 mb-3">What Changed</h3>
<ul className="space-y-2 text-neutral-700">
<li>• Apple Mail pre-loads all images automatically</li>
<li>• Opens are registered even if user never sees email</li>
<li>• 30-50% of email lists use Apple Mail</li>
<li>• Open rates appear 5-15% higher than reality</li>
<li>• Open-based automation is less accurate</li>
</ul>
</div>
<div className="rounded-xl border-2 border-blue-200 bg-blue-50 p-6">
<h3 className="text-xl font-semibold text-blue-900 mb-3">How to Adapt</h3>
<ul className="space-y-2 text-neutral-700">
<li>• Focus on click rates as primary engagement metric</li>
<li>• Track conversions and replies, not just opens</li>
<li>• Use multi-touch attribution</li>
<li>• Compare your own historical data, not industry averages</li>
<li>• Segment by email client to understand true engagement</li>
</ul>
</div>
</div>
<InfoBox type="tip" title="Beyond Open Rates">
<p>
With less reliable open tracking, prioritize metrics like click-through rate, conversion rate, reply rate,
and revenue per email. These better indicate true engagement and ROI.
</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 Guides</h2>
<div className="grid gap-4 md:grid-cols-3">
<Link
href="/guides/email-click-through-rate"
className="block rounded-xl border border-neutral-200 bg-white p-6 transition hover:border-neutral-300 hover:shadow-lg"
>
<h3 className="text-lg font-semibold text-neutral-900 mb-2">Email Click-Through Rate</h3>
<p className="text-sm text-neutral-600">Optimize CTAs and improve email clicks.</p>
</Link>
<Link
href="/guides/email-deliverability"
className="block rounded-xl border border-neutral-200 bg-white p-6 transition hover:border-neutral-300 hover:shadow-lg"
>
<h3 className="text-lg font-semibold text-neutral-900 mb-2">Email Deliverability</h3>
<p className="text-sm text-neutral-600">Reach the inbox to maximize opens.</p>
</Link>
<Link
href="/guides/email-marketing-best-practices"
className="block rounded-xl border border-neutral-200 bg-white p-6 transition hover:border-neutral-300 hover:shadow-lg"
>
<h3 className="text-lg font-semibold text-neutral-900 mb-2">Email Marketing Best Practices</h3>
<p className="text-sm text-neutral-600">Complete email marketing strategy guide.</p>
</Link>
</div>
</section>
</GuideLayout>
);
}
@@ -0,0 +1,580 @@
import React from 'react';
import {GuideLayout, InfoBox} from '../../components/guides';
import {CodeBlock} from '../../components/CodeBlock';
import Link from 'next/link';
export default function EmailSenderReputation() {
return (
<GuideLayout
title="Email Sender Reputation: Build & Maintain Trust for Better Deliverability"
description="Learn how sender reputation works, what affects it, and proven strategies to build and maintain a positive reputation for maximum deliverability."
lastUpdated="2025-12-20"
readTime="11 min"
canonical="https://www.useplunk.com/guides/email-sender-reputation"
>
{/* Introduction */}
<section id="introduction" className="mb-12">
<p className="text-neutral-700 leading-relaxed">
Email sender reputation is your sending domain and IP address's trustworthiness score in the eyes of email
providers. It's the single most important factor determining whether your emails reach the inbox or spam
folder.
</p>
<p className="mt-4 text-neutral-700 leading-relaxed">
Think of it like a credit score for email: good reputation = inbox placement, bad reputation = spam folder or
blocked delivery. This guide explains how reputation works and how to build and maintain it.
</p>
</section>
{/* What is Sender Reputation */}
<section id="what-is-reputation" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">What is Email Sender Reputation?</h2>
<p className="text-neutral-700 leading-relaxed mb-6">
Sender reputation is a score (typically 0-100) that email providers (Gmail, Outlook, Yahoo) assign to your
sending domain and IP address. It's calculated based on your sending history, engagement rates, spam
complaints, authentication, and list quality.
</p>
<div className="grid gap-6 md:grid-cols-3 mb-8">
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<div className="text-3xl font-bold text-green-600 mb-2">80-100</div>
<h3 className="text-lg font-semibold text-neutral-900 mb-2">Excellent</h3>
<p className="text-sm text-neutral-700">
Strong inbox placement, trusted sender, high engagement, proper authentication
</p>
</div>
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<div className="text-3xl font-bold text-amber-600 mb-2">50-79</div>
<h3 className="text-lg font-semibold text-neutral-900 mb-2">Moderate</h3>
<p className="text-sm text-neutral-700">Some emails may reach spam, mixed signals, needs improvement</p>
</div>
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<div className="text-3xl font-bold text-red-600 mb-2">&lt;50</div>
<h3 className="text-lg font-semibold text-neutral-900 mb-2">Poor</h3>
<p className="text-sm text-neutral-700">Most emails go to spam or blocked, serious deliverability issues</p>
</div>
</div>
<InfoBox type="info" title="Domain vs IP Reputation">
<p>
Email providers track reputation for both your <strong>sending domain</strong> (yourdomain.com) and{' '}
<strong>IP address</strong>. Both matter. Domain reputation is more permanent, while IP reputation can be
changed by switching IPs (though you have to rebuild it).
</p>
</InfoBox>
</section>
{/* Factors Affecting Reputation */}
<section id="factors" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">What Affects Sender Reputation?</h2>
<div className="space-y-6">
<div className="border-l-4 border-neutral-900 pl-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-2">1. Spam Complaint Rate</h3>
<p className="text-neutral-700 mb-3">
<strong>Impact: Critical.</strong> When recipients mark your emails as spam, it severely damages
reputation. Target: &lt;0.1% (1 complaint per 1,000 emails). Even 0.3% is concerning.
</p>
<p className="text-sm text-neutral-600">
Prevention: Only send to opted-in subscribers, provide value, make unsubscribing easy.
</p>
</div>
<div className="border-l-4 border-neutral-900 pl-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-2">2. Engagement Metrics</h3>
<p className="text-neutral-700 mb-3">
<strong>Impact: Very High.</strong> Email providers track opens, clicks, replies, forwards, and deletes.
High engagement signals that recipients want your emails. Low engagement suggests spam.
</p>
<p className="text-sm text-neutral-600">
Boost engagement: Send relevant, valuable content to interested subscribers.
</p>
</div>
<div className="border-l-4 border-neutral-900 pl-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-2">3. Bounce Rate</h3>
<p className="text-neutral-700 mb-3">
<strong>Impact: High.</strong> High bounce rates (especially hard bounces) indicate poor list hygiene,
purchased lists, or spam traps. Target: &lt;2% overall bounce rate.
</p>
<p className="text-sm text-neutral-600">
Prevent bounces: Use double opt-in, validate emails, remove hard bounces immediately.
</p>
</div>
<div className="border-l-4 border-neutral-900 pl-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-2">4. Email Authentication</h3>
<p className="text-neutral-700 mb-3">
<strong>Impact: High.</strong> Proper SPF, DKIM, and DMARC authentication proves your emails are
legitimate. Missing authentication raises red flags.
</p>
<p className="text-sm text-neutral-600">
Required: Implement all three authentication protocols (SPF, DKIM, DMARC).
</p>
</div>
<div className="border-l-4 border-neutral-900 pl-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-2">5. Spam Trap Hits</h3>
<p className="text-neutral-700 mb-3">
<strong>Impact: Critical.</strong> Spam traps are email addresses used to catch senders with poor
practices. Hitting spam traps can get you blacklisted instantly.
</p>
<p className="text-sm text-neutral-600">
Avoid: Never buy lists, use double opt-in, clean old addresses regularly.
</p>
</div>
<div className="border-l-4 border-neutral-900 pl-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-2">6. Sending Volume & Consistency</h3>
<p className="text-neutral-700 mb-3">
<strong>Impact: Moderate.</strong> Sudden spikes in volume look suspicious. Inconsistent sending (long
gaps, then huge blasts) damages reputation.
</p>
<p className="text-sm text-neutral-600">
Best practice: Send consistently and gradually increase volume over time (warm-up).
</p>
</div>
<div className="border-l-4 border-neutral-900 pl-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-2">7. Content Quality</h3>
<p className="text-neutral-700 mb-3">
<strong>Impact: Moderate.</strong> Spammy content (excessive links, misleading subject lines, all caps)
triggers filters and reduces engagement.
</p>
<p className="text-sm text-neutral-600">
Write naturally: Professional, valuable content that matches subject line promises.
</p>
</div>
<div className="border-l-4 border-neutral-900 pl-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-2">8. Blacklist Status</h3>
<p className="text-neutral-700 mb-3">
<strong>Impact: Critical.</strong> Being listed on major blacklists (Spamhaus, Barracuda, SURBL) can block
delivery to entire domains.
</p>
<p className="text-sm text-neutral-600">
Monitor: Regularly check blacklist status and request delisting if listed.
</p>
</div>
<div className="border-l-4 border-neutral-900 pl-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-2">9. Sending History</h3>
<p className="text-neutral-700 mb-3">
<strong>Impact: Cumulative.</strong> Reputation is built over time. New domains/IPs have no history (zero
reputation) and need to be warmed up gradually.
</p>
<p className="text-sm text-neutral-600">
For new senders: Start with small volumes and gradually increase over 4-8 weeks.
</p>
</div>
</div>
</section>
{/* Building Reputation */}
<section id="building" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">How to Build Sender Reputation</h2>
<p className="text-neutral-700 leading-relaxed mb-6">
Building reputation from scratch (new domain or IP) requires patience and best practices:
</p>
<div className="space-y-4">
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
1
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Warm Up New IPs and Domains</h3>
<p className="text-neutral-700 mb-3">
Gradually increase sending volume over 4-8 weeks. Start with your most engaged subscribers.
</p>
<CodeBlock
language="text"
title="Example Warm-Up Schedule"
code={`Week 1: 200-500 emails/day
Week 2: 500-1,000 emails/day
Week 3: 1,000-5,000 emails/day
Week 4: 5,000-10,000 emails/day
Week 5: 10,000-20,000 emails/day
Week 6: 20,000-50,000 emails/day
Week 7: 50,000-100,000 emails/day
Week 8+: Full volume
Adjust based on engagement and bounce rates.`}
showCopy={false}
/>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
2
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Start with Highly Engaged Subscribers</h3>
<p className="text-neutral-700">
During warm-up, send only to subscribers who recently opened or clicked. High engagement in early sends
establishes positive reputation quickly.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
3
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Implement Full Authentication</h3>
<p className="text-neutral-700">
Set up SPF, DKIM, and DMARC before sending. Proper authentication is table stakes for building
reputation.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
4
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Maintain Consistent Sending</h3>
<p className="text-neutral-700">
Send regularly (daily or weekly) rather than sporadic blasts. Consistency builds trust with email
providers.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
5
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Use Double Opt-In</h3>
<p className="text-neutral-700">
Require email confirmation before adding subscribers. This ensures list quality and prevents spam trap
addresses from the start.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
6
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Monitor Metrics Closely</h3>
<p className="text-neutral-700">
Track bounce rate, spam complaints, and engagement during warm-up. If metrics degrade, slow down volume
increases and improve list quality.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
7
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Provide Immediate Value</h3>
<p className="text-neutral-700">
Your first emails set the tone. Deliver on promises made during signup. High engagement on early emails
accelerates reputation building.
</p>
</div>
</div>
</div>
</section>
{/* Maintaining Reputation */}
<section id="maintaining" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">Maintaining Good Sender Reputation</h2>
<p className="text-neutral-700 leading-relaxed mb-6">
Once built, reputation requires ongoing attention:
</p>
<div className="space-y-6">
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<h3 className="text-lg font-semibold text-neutral-900 mb-3">Clean Your List Regularly</h3>
<p className="text-neutral-700 mb-3">Remove or re-engage inactive subscribers every 6-12 months:</p>
<ul className="space-y-2 text-sm text-neutral-700">
<li>• Send re-engagement campaigns to inactive subscribers</li>
<li>• Remove those who don't re-engage</li>
<li> Immediately remove hard bounces</li>
<li> Remove persistent soft bouncers (3-5 bounces)</li>
</ul>
</div>
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<h3 className="text-lg font-semibold text-neutral-900 mb-3">Make Unsubscribing Easy</h3>
<p className="text-neutral-700 mb-3">
Paradoxically, easy unsubscribes protect reputation. Frustrated users who can't unsubscribe mark as spam
instead, which is far worse.
</p>
<ul className="space-y-2 text-sm text-neutral-700">
<li>• Include clear, one-click unsubscribe in every email</li>
<li>• Process unsubscribes immediately (don't require confirmation)</li>
<li> Honor unsubscribes permanently</li>
</ul>
</div>
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<h3 className="text-lg font-semibold text-neutral-900 mb-3">Monitor Reputation Metrics</h3>
<p className="text-neutral-700 mb-3">Track these indicators weekly:</p>
<ul className="space-y-2 text-sm text-neutral-700">
<li> Delivery rate (target: 98%+)</li>
<li> Spam complaint rate (target: &lt;0.1%)</li>
<li> Bounce rate (target: &lt;2%)</li>
<li> Engagement rates (opens, clicks)</li>
<li> Blacklist status (monthly checks)</li>
<li> Sender Score (check quarterly)</li>
</ul>
</div>
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<h3 className="text-lg font-semibold text-neutral-900 mb-3">Segment and Personalize</h3>
<p className="text-neutral-700">
Send targeted, relevant emails to specific subscriber groups. Segmentation dramatically improves
engagement, which protects reputation.
</p>
</div>
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<h3 className="text-lg font-semibold text-neutral-900 mb-3">
Use Separate Domains for Different Email Types
</h3>
<p className="text-neutral-700 mb-3">
Protect critical transactional email reputation by separating from marketing:
</p>
<ul className="space-y-2 text-sm text-neutral-700">
<li> Transactional: transact.yourdomain.com</li>
<li> Marketing: news.yourdomain.com or marketing.yourdomain.com</li>
<li> Benefits: Marketing issues won't affect mission-critical transactional emails</li>
</ul>
</div>
</div>
</section>
{/* Recovering Damaged Reputation */}
<section id="recovery" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">Recovering from Damaged Reputation</h2>
<p className="text-neutral-700 leading-relaxed mb-6">
If your reputation suffers, recovery is possible but takes time and discipline:
</p>
<div className="space-y-4">
<div className="flex items-start gap-4 p-6 rounded-xl bg-amber-50 border border-amber-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-amber-600 text-white text-sm font-bold">
1
</div>
<div>
<h3 className="font-semibold text-amber-900 mb-2">Identify the Root Cause</h3>
<p className="text-neutral-700">
Review recent campaigns for spam complaints, high bounces, poor engagement. Check if you're blacklisted.
Find and fix the underlying issue.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-amber-50 border border-amber-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-amber-600 text-white text-sm font-bold">
2
</div>
<div>
<h3 className="font-semibold text-amber-900 mb-2">Clean Your List Aggressively</h3>
<p className="text-neutral-700">
Remove all unengaged subscribers, bounced addresses, and anyone who hasn't opened in 6+ months. Yes,
your list shrinks, but quality beats quantity for reputation recovery.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-amber-50 border border-amber-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-amber-600 text-white text-sm font-bold">
3
</div>
<div>
<h3 className="font-semibold text-amber-900 mb-2">Reduce Volume Temporarily</h3>
<p className="text-neutral-700">
Cut sending volume by 50-70% while you fix issues. Send only to highly engaged subscribers. Rebuild
trust before scaling back up.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-amber-50 border border-amber-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-amber-600 text-white text-sm font-bold">
4
</div>
<div>
<h3 className="font-semibold text-amber-900 mb-2">Request Blacklist Removal</h3>
<p className="text-neutral-700">
If blacklisted, identify which lists, fix the underlying issues, then request delisting. Most blacklists
have removal request processes. Be honest about what you fixed.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-amber-50 border border-amber-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-amber-600 text-white text-sm font-bold">
5
</div>
<div>
<h3 className="font-semibold text-amber-900 mb-2">Send Valuable, Engaging Content</h3>
<p className="text-neutral-700">
Recovery requires proving you send emails people want. Focus on value, not promotions. High engagement
signals to providers that you've reformed.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-amber-50 border border-amber-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-amber-600 text-white text-sm font-bold">
6
</div>
<div>
<h3 className="font-semibold text-amber-900 mb-2">Be Patient</h3>
<p className="text-neutral-700">
Reputation recovery typically takes 4-12 weeks of consistently good behavior. Monitor metrics closely
and don't rush back to high volumes before reputation improves.
</p>
</div>
</div>
</div>
<InfoBox type="warning" title="Severe Damage May Require Starting Fresh" className="mt-6">
<p>
If reputation is severely damaged (sender score &lt;30, multiple blacklistings, blocked by major providers),
recovery may be impractical. Consider migrating to a new subdomain or IP and starting reputation from
scratch. This is a last resort.
</p>
</InfoBox>
</section>
{/* Monitoring Tools */}
<section id="monitoring" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">Reputation Monitoring Tools</h2>
<div className="grid gap-6 md:grid-cols-2">
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<h3 className="text-lg font-semibold text-neutral-900 mb-3">Google Postmaster Tools</h3>
<p className="text-sm text-neutral-700 mb-3">
Free tool showing domain reputation, spam rate, authentication, and encryption for Gmail delivery.
</p>
<a
href="https://postmaster.google.com"
target="_blank"
rel="noopener noreferrer"
className="text-sm text-blue-600 hover:underline"
>
postmaster.google.com →
</a>
</div>
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<h3 className="text-lg font-semibold text-neutral-900 mb-3">Microsoft SNDS</h3>
<p className="text-sm text-neutral-700 mb-3">
Smart Network Data Services provides data on how Microsoft views your IPs, including spam complaints.
</p>
<a
href="https://sendersupport.olc.protection.outlook.com/snds/"
target="_blank"
rel="noopener noreferrer"
className="text-sm text-blue-600 hover:underline"
>
Microsoft SNDS →
</a>
</div>
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<h3 className="text-lg font-semibold text-neutral-900 mb-3">Sender Score (Validity)</h3>
<p className="text-sm text-neutral-700 mb-3">
Free sender reputation score (0-100) based on industry data. Widely used benchmark for IP reputation.
</p>
<a
href="https://www.validity.com/everest/senderscore/"
target="_blank"
rel="noopener noreferrer"
className="text-sm text-blue-600 hover:underline"
>
Check Sender Score →
</a>
</div>
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<h3 className="text-lg font-semibold text-neutral-900 mb-3">MXToolbox Blacklist Check</h3>
<p className="text-sm text-neutral-700 mb-3">
Check if your domain or IP is on major blacklists. Monitor regularly to catch listings early.
</p>
<a
href="https://mxtoolbox.com/blacklists.aspx"
target="_blank"
rel="noopener noreferrer"
className="text-sm text-blue-600 hover:underline"
>
MXToolbox →
</a>
</div>
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<h3 className="text-lg font-semibold text-neutral-900 mb-3">Talos Intelligence</h3>
<p className="text-sm text-neutral-700 mb-3">
Cisco Talos provides sender reputation data. Check your IP's reputation and request delisting if needed.
</p>
<a
href="https://talosintelligence.com"
target="_blank"
rel="noopener noreferrer"
className="text-sm text-blue-600 hover:underline"
>
Talos Intelligence
</a>
</div>
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<h3 className="text-lg font-semibold text-neutral-900 mb-3">BarracudaCentral</h3>
<p className="text-sm text-neutral-700 mb-3">
Check reputation and blacklist status on Barracuda's network. Important for enterprise email delivery.
</p>
<a
href="https://www.barracudacentral.org/lookups"
target="_blank"
rel="noopener noreferrer"
className="text-sm text-blue-600 hover:underline"
>
BarracudaCentral
</a>
</div>
</div>
</section>
{/* Related Guides */}
<section id="related-guides" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">Related Email Guides</h2>
<div className="grid gap-4 md:grid-cols-3">
<Link
href="/guides/email-deliverability"
className="block rounded-xl border border-neutral-200 bg-white p-6 transition hover:border-neutral-300 hover:shadow-lg"
>
<h3 className="text-lg font-semibold text-neutral-900 mb-2">Email Deliverability</h3>
<p className="text-sm text-neutral-600">Complete deliverability guide.</p>
</Link>
<Link
href="/guides/email-bounce-rate"
className="block rounded-xl border border-neutral-200 bg-white p-6 transition hover:border-neutral-300 hover:shadow-lg"
>
<h3 className="text-lg font-semibold text-neutral-900 mb-2">Email Bounce Rate</h3>
<p className="text-sm text-neutral-600">Reduce bounces to protect reputation.</p>
</Link>
<Link
href="/guides/what-is-dkim"
className="block rounded-xl border border-neutral-200 bg-white p-6 transition hover:border-neutral-300 hover:shadow-lg"
>
<h3 className="text-lg font-semibold text-neutral-900 mb-2">What is DKIM?</h3>
<p className="text-sm text-neutral-600">Email authentication for better reputation.</p>
</Link>
</div>
</section>
</GuideLayout>
);
}
+266
View File
@@ -0,0 +1,266 @@
import {Footer, Navbar} from '../../components';
import {motion} from 'framer-motion';
import {DASHBOARD_URI} from '../../lib/constants';
import React from 'react';
import Link from 'next/link';
import {NextSeo} from 'next-seo';
import {ArrowRight, Book, Code, Mail, Shield, TrendingUp, Users} from 'lucide-react';
interface Guide {
title: string;
description: string;
href: string;
icon: React.ComponentType<{className?: string}>;
badge?: string;
}
const guides: Guide[] = [
{
title: 'What is DKIM?',
description: 'Learn how DKIM email authentication works and why it matters for deliverability.',
href: '/guides/what-is-dkim',
icon: Shield,
badge: 'Authentication',
},
{
title: 'What is SPF?',
description: 'Understand SPF records and how they protect your emails from spoofing.',
href: '/guides/what-is-spf',
icon: Shield,
badge: 'Authentication',
},
{
title: 'What is DMARC?',
description: 'Complete guide to DMARC policies and email security best practices.',
href: '/guides/what-is-dmarc',
icon: Shield,
badge: 'Authentication',
},
{
title: 'Email Deliverability Guide',
description: 'Improve your email deliverability with best practices and proven strategies.',
href: '/guides/email-deliverability',
icon: TrendingUp,
badge: 'Deliverability',
},
{
title: 'Email Open Rates',
description: 'Industry benchmarks and strategies to improve your email open rates.',
href: '/guides/email-open-rate',
icon: Mail,
badge: 'Analytics',
},
{
title: 'Email Marketing Best Practices',
description: 'Comprehensive guide to email marketing: timing, content, design, and more.',
href: '/guides/email-marketing-best-practices',
icon: Book,
badge: 'Best Practices',
},
{
title: 'Email Bounce Rate',
description: 'Understand hard vs soft bounces and how to reduce your bounce rate.',
href: '/guides/email-bounce-rate',
icon: TrendingUp,
badge: 'Deliverability',
},
{
title: 'Email Click-Through Rate',
description: 'Optimize your CTAs and improve email click-through rates.',
href: '/guides/email-click-through-rate',
icon: Mail,
badge: 'Analytics',
},
{
title: 'Transactional vs Marketing Email',
description: 'Understand the legal and technical differences between email types.',
href: '/guides/transactional-vs-marketing-email',
icon: Book,
badge: 'Fundamentals',
},
{
title: 'Email API Guide',
description: 'Everything you need to know about email APIs with code examples.',
href: '/guides/email-api-guide',
icon: Code,
badge: 'Technical',
},
{
title: 'Email Sender Reputation',
description: 'Build and maintain a positive sender reputation for better deliverability.',
href: '/guides/email-sender-reputation',
icon: Users,
badge: 'Deliverability',
},
];
/**
* Email Guides hub page
*/
export default function GuidesIndex() {
return (
<>
<NextSeo
title="Email Marketing & Deliverability Guides | Plunk"
description="Learn email best practices, authentication (DKIM, SPF, DMARC), deliverability optimization, and more. Free guides from Plunk."
canonical="https://www.useplunk.com/guides"
openGraph={{
title: 'Email Marketing & Deliverability Guides | Plunk',
description:
'Learn email best practices, authentication (DKIM, SPF, DMARC), deliverability optimization, and more.',
url: 'https://www.useplunk.com/guides',
images: [{url: 'https://www.useplunk.com/assets/card.png', alt: 'Plunk Guides'}],
}}
/>
<Navbar />
<main className={'mx-auto max-w-7xl px-8 sm:px-0'}>
{/* Hero Section */}
<section className={'relative py-32 sm:py-48'}>
<div
className={
'absolute inset-0 -z-10 h-full w-full bg-white bg-[linear-gradient(to_right,#e5e7eb_1px,transparent_1px),linear-gradient(to_bottom,#e5e7eb_1px,transparent_1px)] bg-[size:4rem_4rem] [mask-image:radial-gradient(ellipse_80%_50%_at_50%_0%,#000_70%,transparent_110%)]'
}
/>
<motion.div
initial={{opacity: 0, y: 20}}
animate={{opacity: 1, y: 0}}
transition={{duration: 0.7, ease: [0.22, 1, 0.36, 1]}}
className={'mx-auto max-w-4xl text-center'}
>
<div
className={
'mb-6 inline-flex items-center gap-2 rounded-full border border-neutral-200 bg-white px-4 py-2'
}
>
<Book className="h-4 w-4 text-neutral-600" />
<span className={'text-sm text-neutral-600'}>Free Email Guides</span>
</div>
<h1 className={'text-6xl font-bold tracking-tight text-neutral-900 sm:text-7xl lg:text-8xl'}>
Master email
<br />
marketing & deliverability
</h1>
<p className={'mx-auto mt-8 max-w-2xl text-xl text-neutral-600'}>
Free guides on email authentication, deliverability, best practices, and technical implementation. Learn
from the experts.
</p>
<div className={'mt-12 flex flex-wrap justify-center gap-4'}>
<motion.a
whileHover={{scale: 1.02}}
whileTap={{scale: 0.98}}
href={`${DASHBOARD_URI}/auth/signup`}
className={
'group rounded-lg bg-neutral-900 px-8 py-4 text-base font-semibold text-white shadow-lg shadow-neutral-900/10 transition hover:bg-neutral-800'
}
>
<span className={'flex items-center gap-2'}>
Try Plunk free
<ArrowRight className="h-4 w-4 transition-transform group-hover:translate-x-1" />
</span>
</motion.a>
</div>
</motion.div>
</section>
{/* Guides Grid */}
<section className={'py-32'}>
<motion.div
initial={{opacity: 0, y: 20}}
whileInView={{opacity: 1, y: 0}}
viewport={{once: true}}
transition={{duration: 0.7, ease: [0.22, 1, 0.36, 1]}}
className={'mb-16 text-center'}
>
<h2 className={'text-5xl font-bold tracking-tight text-neutral-900'}>Browse all guides</h2>
<p className={'mt-4 text-lg text-neutral-600'}>Everything you need to master email</p>
</motion.div>
<div className={'grid gap-6 sm:grid-cols-2 lg:grid-cols-3'}>
{guides.map((guide, index) => {
const Icon = guide.icon;
return (
<motion.div
key={guide.href}
initial={{opacity: 0, y: 20}}
whileInView={{opacity: 1, y: 0}}
viewport={{once: true}}
transition={{duration: 0.5, delay: index * 0.05, ease: [0.22, 1, 0.36, 1]}}
>
<Link
href={guide.href}
className={
'group block h-full rounded-2xl border border-neutral-200 bg-white p-8 transition hover:border-neutral-300 hover:shadow-lg'
}
>
<div className={'flex items-start justify-between mb-4'}>
<div
className={
'flex h-12 w-12 items-center justify-center rounded-xl bg-neutral-900 text-white transition group-hover:scale-110'
}
>
<Icon className="h-5 w-5" />
</div>
{guide.badge && (
<span className={'rounded-full bg-neutral-100 px-3 py-1 text-xs font-medium text-neutral-700'}>
{guide.badge}
</span>
)}
</div>
<h3 className={'text-xl font-semibold text-neutral-900 mb-2 group-hover:text-neutral-700'}>
{guide.title}
</h3>
<p className={'text-sm text-neutral-600 leading-relaxed'}>{guide.description}</p>
</Link>
</motion.div>
);
})}
</div>
</section>
{/* CTA Section */}
<section className={'border-t border-neutral-200 py-32'}>
<motion.div
initial={{opacity: 0, y: 20}}
whileInView={{opacity: 1, y: 0}}
viewport={{once: true}}
transition={{duration: 0.7, ease: [0.22, 1, 0.36, 1]}}
className={'mx-auto max-w-3xl text-center'}
>
<h2 className={'text-5xl font-bold tracking-tight text-neutral-900'}>Ready to get started?</h2>
<p className={'mt-6 text-lg text-neutral-600'}>
Put these guides into practice with Plunk's modern email platform. Start free, no credit card required.
</p>
<div className={'mt-12 flex flex-wrap justify-center gap-4'}>
<motion.a
whileHover={{scale: 1.02}}
whileTap={{scale: 0.98}}
href={`${DASHBOARD_URI}/auth/signup`}
className={
'rounded-lg bg-neutral-900 px-8 py-4 text-base font-semibold text-white transition hover:bg-neutral-800'
}
>
Start free trial
</motion.a>
<Link
href="/pricing"
className={
'rounded-lg border border-neutral-300 px-8 py-4 text-base font-semibold text-neutral-900 transition hover:border-neutral-400'
}
>
View pricing
</Link>
</div>
</motion.div>
</section>
</main>
<Footer />
</>
);
}
@@ -0,0 +1,539 @@
import React from 'react';
import {GuideLayout, InfoBox} from '../../components/guides';
import Link from 'next/link';
export default function TransactionalVsMarketingEmail() {
return (
<GuideLayout
title="Transactional vs Marketing Email: Legal & Technical Differences"
description="Understand the critical differences between transactional and marketing emails, including legal requirements, deliverability, and best practices."
lastUpdated="2025-12-20"
readTime="10 min"
canonical="https://www.useplunk.com/guides/transactional-vs-marketing-email"
>
{/* Introduction */}
<section id="introduction" className="mb-12">
<p className="text-neutral-700 leading-relaxed">
Not all emails are created equal. Transactional and marketing emails serve different purposes, follow
different legal rules, and require different strategies. Understanding these differences is essential for
compliance, deliverability, and effective email communication.
</p>
<p className="mt-4 text-neutral-700 leading-relaxed">
This guide explains the key distinctions, legal requirements, and best practices for each email type.
</p>
</section>
{/* Quick Comparison */}
<section id="comparison" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">Quick Comparison</h2>
<div className="rounded-xl border border-neutral-200 overflow-hidden">
<table className="w-full">
<thead>
<tr>
<th className="px-6 py-4 text-left text-sm font-semibold">Aspect</th>
<th className="px-6 py-4 text-left text-sm font-semibold">Transactional Email</th>
<th className="px-6 py-4 text-left text-sm font-semibold">Marketing Email</th>
</tr>
</thead>
<tbody className="divide-y divide-neutral-200 bg-white">
<tr>
<td className="px-6 py-4 text-sm font-semibold text-neutral-900">Purpose</td>
<td className="px-6 py-4 text-sm text-neutral-700">Facilitate transaction or provide service info</td>
<td className="px-6 py-4 text-sm text-neutral-700">Promote products, services, or content</td>
</tr>
<tr>
<td className="px-6 py-4 text-sm font-semibold text-neutral-900">Trigger</td>
<td className="px-6 py-4 text-sm text-neutral-700">User action or system event</td>
<td className="px-6 py-4 text-sm text-neutral-700">Scheduled or campaign-based</td>
</tr>
<tr>
<td className="px-6 py-4 text-sm font-semibold text-neutral-900">Consent Required</td>
<td className="px-6 py-4 text-sm text-neutral-700">No (expected as part of service)</td>
<td className="px-6 py-4 text-sm text-neutral-700">Yes (explicit opt-in required)</td>
</tr>
<tr>
<td className="px-6 py-4 text-sm font-semibold text-neutral-900">Unsubscribe Link</td>
<td className="px-6 py-4 text-sm text-neutral-700">Not required</td>
<td className="px-6 py-4 text-sm text-neutral-700">Required by law</td>
</tr>
<tr>
<td className="px-6 py-4 text-sm font-semibold text-neutral-900">Open Rate</td>
<td className="px-6 py-4 text-sm text-neutral-700">60-80% (very high)</td>
<td className="px-6 py-4 text-sm text-neutral-700">15-25% (average)</td>
</tr>
<tr>
<td className="px-6 py-4 text-sm font-semibold text-neutral-900">Volume</td>
<td className="px-6 py-4 text-sm text-neutral-700">Lower, event-based</td>
<td className="px-6 py-4 text-sm text-neutral-700">Higher, scheduled campaigns</td>
</tr>
</tbody>
</table>
</div>
</section>
{/* Transactional Email */}
<section id="transactional" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">What is Transactional Email?</h2>
<p className="text-neutral-700 leading-relaxed mb-6">
Transactional emails are automated messages sent in response to a user's action or system event. They contain
information the user needs or expects to facilitate a transaction or use a service.
</p>
<div className="mb-8">
<h3 className="text-xl font-semibold text-neutral-900 mb-4">Common Types of Transactional Emails</h3>
<div className="grid gap-4 md:grid-cols-2">
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<h4 className="font-semibold text-neutral-900 mb-3">Account & Authentication</h4>
<ul className="space-y-2 text-sm text-neutral-700">
<li>• Welcome emails after signup</li>
<li>• Email verification/confirmation</li>
<li>• Password reset requests</li>
<li>• Login notifications</li>
<li>• Two-factor authentication codes</li>
<li>• Account deletion confirmations</li>
</ul>
</div>
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<h4 className="font-semibold text-neutral-900 mb-3">Commerce & Transactions</h4>
<ul className="space-y-2 text-sm text-neutral-700">
<li>• Order confirmations</li>
<li>• Shipping notifications</li>
<li>• Delivery updates</li>
<li>• Payment receipts</li>
<li>• Refund confirmations</li>
<li>• Invoice emails</li>
</ul>
</div>
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<h4 className="font-semibold text-neutral-900 mb-3">Notifications & Alerts</h4>
<ul className="space-y-2 text-sm text-neutral-700">
<li>• Activity notifications</li>
<li>• Comment or mention alerts</li>
<li>• Security alerts</li>
<li>• System status updates</li>
<li>• Subscription renewals</li>
<li>• Trial expiration notices</li>
</ul>
</div>
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<h4 className="font-semibold text-neutral-900 mb-3">Account Management</h4>
<ul className="space-y-2 text-sm text-neutral-700">
<li>• Billing statements</li>
<li>• Usage reports</li>
<li>• Account updates</li>
<li>• Plan changes</li>
<li>• Subscription confirmations</li>
<li>• Account deactivation notices</li>
</ul>
</div>
</div>
</div>
<div className="space-y-4">
<h3 className="text-xl font-semibold text-neutral-900 mb-4">Transactional Email Best Practices</h3>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
1
</div>
<div>
<h4 className="font-semibold text-neutral-900 mb-2">Send Immediately</h4>
<p className="text-neutral-700">
Transactional emails should be sent within seconds or minutes of the triggering action. Users expect
instant confirmation—delays cause anxiety and support tickets.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
2
</div>
<div>
<h4 className="font-semibold text-neutral-900 mb-2">Prioritize Clarity & Accuracy</h4>
<p className="text-neutral-700">
Include all critical information: order numbers, amounts, dates, tracking links. Be precise—errors in
transactional emails damage trust significantly.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
3
</div>
<div>
<h4 className="font-semibold text-neutral-900 mb-2">Use Descriptive Subject Lines</h4>
<p className="text-neutral-700">
Make subject lines scannable and specific: "Your order #12345 has shipped" not "Update from
YourCompany". Users should know what the email contains at a glance.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
4
</div>
<div>
<h4 className="font-semibold text-neutral-900 mb-2">Minimize Promotional Content</h4>
<p className="text-neutral-700">
The primary content must be transactional. Small promotional sections (cross-sells, upsells) are
acceptable at the bottom, but don't turn order confirmations into marketing emails.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
5
</div>
<div>
<h4 className="font-semibold text-neutral-900 mb-2">Ensure High Deliverability</h4>
<p className="text-neutral-700">
Use a dedicated sending infrastructure for transactional emails. They're mission-critical—users depend
on them. Don't let marketing email issues affect transactional deliverability.
</p>
</div>
</div>
</div>
</section>
{/* Marketing Email */}
<section id="marketing" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">What is Marketing Email?</h2>
<p className="text-neutral-700 leading-relaxed mb-6">
Marketing emails are promotional messages sent to build relationships, drive engagement, and encourage
conversions. Recipients must explicitly opt-in to receive them.
</p>
<div className="mb-8">
<h3 className="text-xl font-semibold text-neutral-900 mb-4">Common Types of Marketing Emails</h3>
<div className="grid gap-4 md:grid-cols-2">
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<h4 className="font-semibold text-neutral-900 mb-3">Promotional Campaigns</h4>
<ul className="space-y-2 text-sm text-neutral-700">
<li> Product announcements</li>
<li> Sale and discount promotions</li>
<li> New feature launches</li>
<li> Seasonal campaigns</li>
<li> Limited-time offers</li>
<li> Flash sales</li>
</ul>
</div>
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<h4 className="font-semibold text-neutral-900 mb-3">Content Marketing</h4>
<ul className="space-y-2 text-sm text-neutral-700">
<li> Newsletters</li>
<li> Blog post roundups</li>
<li> Educational content</li>
<li> Industry news and trends</li>
<li> Case studies</li>
<li> Webinar invitations</li>
</ul>
</div>
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<h4 className="font-semibold text-neutral-900 mb-3">Nurture & Engagement</h4>
<ul className="space-y-2 text-sm text-neutral-700">
<li> Welcome series (beyond initial welcome)</li>
<li> Onboarding sequences</li>
<li> Re-engagement campaigns</li>
<li> Win-back emails</li>
<li> Customer surveys</li>
<li> Loyalty program updates</li>
</ul>
</div>
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<h4 className="font-semibold text-neutral-900 mb-3">Lifecycle Marketing</h4>
<ul className="space-y-2 text-sm text-neutral-700">
<li> Abandoned cart reminders</li>
<li> Product recommendations</li>
<li> Upsell/cross-sell campaigns</li>
<li> Birthday or anniversary emails</li>
<li> Renewal reminders (if promotional)</li>
<li> Review requests</li>
</ul>
</div>
</div>
</div>
<div className="space-y-4">
<h3 className="text-xl font-semibold text-neutral-900 mb-4">Marketing Email Best Practices</h3>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
1
</div>
<div>
<h4 className="font-semibold text-neutral-900 mb-2">Always Get Explicit Consent</h4>
<p className="text-neutral-700">
Use clear opt-in forms (preferably double opt-in). Never add people without permission or use purchased
lists. GDPR and CAN-SPAM require explicit consent for marketing emails.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
2
</div>
<div>
<h4 className="font-semibold text-neutral-900 mb-2">Provide Value, Not Just Promotions</h4>
<p className="text-neutral-700">
Balance promotional content with educational value, entertainment, or useful information. Subscribers
who only receive sales pitches will unsubscribe.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
3
</div>
<div>
<h4 className="font-semibold text-neutral-900 mb-2">Segment Your Audience</h4>
<p className="text-neutral-700">
Send targeted emails based on behavior, preferences, demographics, or engagement. Segmented campaigns
see 3x higher engagement than mass blasts.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
4
</div>
<div>
<h4 className="font-semibold text-neutral-900 mb-2">Make Unsubscribing Easy</h4>
<p className="text-neutral-700">
Include a clear, one-click unsubscribe link in every email (required by law). Making it hard to
unsubscribe leads to spam complaints, which are much worse for deliverability.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
5
</div>
<div>
<h4 className="font-semibold text-neutral-900 mb-2">Test and Optimize</h4>
<p className="text-neutral-700">
A/B test subject lines, send times, content, and CTAs. Marketing emails benefit from continuous
optimization based on performance data.
</p>
</div>
</div>
</div>
</section>
{/* Legal Requirements */}
<section id="legal" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">Legal Requirements</h2>
<p className="text-neutral-700 leading-relaxed mb-6">
The legal distinction between transactional and marketing emails is critical. Violating these rules can result
in significant fines and damage to your reputation.
</p>
<div className="grid gap-6 md:grid-cols-2">
<div className="rounded-xl border-2 border-blue-200 bg-blue-50 p-6">
<h3 className="text-xl font-semibold text-blue-900 mb-4">Transactional Email Laws</h3>
<div className="space-y-3 text-neutral-700">
<div>
<h4 className="font-semibold text-neutral-900 mb-1">CAN-SPAM (US)</h4>
<p className="text-sm">Exempt from most requirements but must not include false/misleading headers</p>
</div>
<div>
<h4 className="font-semibold text-neutral-900 mb-1">GDPR (EU)</h4>
<p className="text-sm">
Allowed as "legitimate interest" for service provision. Must still protect user data and allow opt-out
of optional transactional emails
</p>
</div>
<div>
<h4 className="font-semibold text-neutral-900 mb-1">Key Point</h4>
<p className="text-sm">
Transactional emails don't require explicit consent or unsubscribe links, but abuse this category (by
making promotional emails appear transactional) violates laws
</p>
</div>
</div>
</div>
<div className="rounded-xl border-2 border-purple-200 bg-purple-50 p-6">
<h3 className="text-xl font-semibold text-purple-900 mb-4">Marketing Email Laws</h3>
<div className="space-y-3 text-neutral-700">
<div>
<h4 className="font-semibold text-neutral-900 mb-1">CAN-SPAM (US)</h4>
<ul className="text-sm space-y-1">
<li>• Clear opt-out mechanism (unsubscribe link)</li>
<li>• Honor opt-outs within 10 business days</li>
<li>• Include physical mailing address</li>
<li>• Identify message as advertisement</li>
<li>• No false/misleading subject lines or headers</li>
</ul>
</div>
<div>
<h4 className="font-semibold text-neutral-900 mb-1">GDPR (EU)</h4>
<ul className="text-sm space-y-1">
<li>• Explicit opt-in consent required</li>
<li>• Clear information about data usage</li>
<li>• Easy opt-out anytime</li>
<li>• Right to data access/deletion</li>
<li>• Records of consent</li>
</ul>
</div>
</div>
</div>
</div>
<InfoBox type="warning" title="Don't Abuse the Transactional Category" className="mt-6">
<p>
It's illegal and unethical to disguise marketing emails as transactional to avoid consent requirements.
Regulators and ISPs actively monitor for this abuse. Keep transactional emails purely functional.
</p>
</InfoBox>
</section>
{/* Infrastructure Considerations */}
<section id="infrastructure" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">Infrastructure & Sending Practices</h2>
<div className="space-y-6">
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<h3 className="text-lg font-semibold text-neutral-900 mb-3">Separate Sending Domains</h3>
<p className="text-neutral-700 mb-3">Use different subdomains for transactional and marketing emails:</p>
<ul className="space-y-2 text-sm text-neutral-700">
<li>
• <strong>Transactional:</strong> transact.yourdomain.com or mail.yourdomain.com
</li>
<li>
• <strong>Marketing:</strong> marketing.yourdomain.com or news.yourdomain.com
</li>
<li>
• <strong>Benefit:</strong> Protects critical transactional email reputation from marketing
deliverability issues
</li>
</ul>
</div>
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<h3 className="text-lg font-semibold text-neutral-900 mb-3">Dedicated IP Addresses (High Volume)</h3>
<p className="text-neutral-700 mb-3">For organizations sending 100,000+ emails/month:</p>
<ul className="space-y-2 text-sm text-neutral-700">
<li>• Use separate dedicated IPs for transactional and marketing</li>
<li>• Properly warm up new IPs to build sender reputation</li>
<li>• Monitor reputation for each IP independently</li>
</ul>
</div>
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<h3 className="text-lg font-semibold text-neutral-900 mb-3">Monitoring & Analytics</h3>
<p className="text-neutral-700 mb-3">Track metrics separately for each type:</p>
<ul className="space-y-2 text-sm text-neutral-700">
<li>
• <strong>Transactional:</strong> Delivery rate (target: 99%+), delivery speed, bounce rate
</li>
<li>
• <strong>Marketing:</strong> Open rate, CTR, conversions, engagement, unsubscribe rate
</li>
</ul>
</div>
</div>
</section>
{/* The Gray Area */}
<section id="gray-area" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">The Gray Area: What's What?</h2>
<p className="text-neutral-700 leading-relaxed mb-6">
Some emails can be tricky to categorize. Here's guidance:
</p>
<div className="space-y-4">
<div className="rounded-xl border-2 border-green-200 bg-green-50 p-6">
<h3 className="text-xl font-semibold text-green-900 mb-3">Clearly Transactional</h3>
<ul className="space-y-2 text-neutral-700">
<li>✓ Order confirmations and shipping updates</li>
<li>✓ Password resets and account verification</li>
<li>✓ Billing receipts and invoices</li>
<li>✓ System alerts and security notifications</li>
</ul>
</div>
<div className="rounded-xl border-2 border-amber-200 bg-amber-50 p-6">
<h3 className="text-xl font-semibold text-amber-900 mb-3">Gray Area (Be Careful)</h3>
<ul className="space-y-2 text-neutral-700">
<li>
• <strong>Cart abandonment:</strong> If purely reminder = transactional. If includes promotions =
marketing
</li>
<li>
• <strong>Review requests:</strong> If tied to recent purchase = transactional. If general request =
marketing
</li>
<li>
• <strong>Welcome emails:</strong> Initial verification = transactional. Follow-up series = marketing
</li>
<li>
• <strong>Renewal reminders:</strong> If informational only = transactional. If promotional = marketing
</li>
</ul>
</div>
<div className="rounded-xl border-2 border-red-200 bg-red-50 p-6">
<h3 className="text-xl font-semibold text-red-900 mb-3">Clearly Marketing</h3>
<ul className="space-y-2 text-neutral-700">
<li>✗ Newsletters and content roundups</li>
<li>✗ Product announcements and promotions</li>
<li>✗ Sales and discount offers</li>
<li>✗ Educational content and webinars</li>
<li>✗ Re-engagement campaigns</li>
</ul>
</div>
</div>
<InfoBox type="tip" title="When in Doubt" className="mt-6">
<p>
If you're unsure whether an email is transactional or marketing, err on the side of treating it as
marketing. Include an unsubscribe link, get proper consent, and follow all marketing email regulations.
</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 Guides</h2>
<div className="grid gap-4 md:grid-cols-3">
<Link
href="/guides/email-api-guide"
className="block rounded-xl border border-neutral-200 bg-white p-6 transition hover:border-neutral-300 hover:shadow-lg"
>
<h3 className="text-lg font-semibold text-neutral-900 mb-2">Email API Guide</h3>
<p className="text-sm text-neutral-600">Implement transactional emails with APIs.</p>
</Link>
<Link
href="/guides/email-marketing-best-practices"
className="block rounded-xl border border-neutral-200 bg-white p-6 transition hover:border-neutral-300 hover:shadow-lg"
>
<h3 className="text-lg font-semibold text-neutral-900 mb-2">Email Marketing Best Practices</h3>
<p className="text-sm text-neutral-600">Complete marketing email guide.</p>
</Link>
<Link
href="/guides/email-deliverability"
className="block rounded-xl border border-neutral-200 bg-white p-6 transition hover:border-neutral-300 hover:shadow-lg"
>
<h3 className="text-lg font-semibold text-neutral-900 mb-2">Email Deliverability</h3>
<p className="text-sm text-neutral-600">Ensure both email types reach the inbox.</p>
</Link>
</div>
</section>
</GuideLayout>
);
}
@@ -0,0 +1,322 @@
import React from 'react';
import {GuideLayout, InfoBox} from '../../components/guides';
import {CodeBlock} from '../../components/CodeBlock';
import Link from 'next/link';
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."
lastUpdated="2025-12-20"
readTime="8 min"
canonical="https://www.useplunk.com/guides/what-is-dkim"
>
{/* Introduction */}
<section id="introduction" className="mb-12">
<p className="text-neutral-700 leading-relaxed">
DKIM (DomainKeys Identified Mail) is an email authentication method that allows receiving mail servers to
verify that an email was actually sent by the domain it claims to be from and that the message wasn't altered
in transit.
</p>
<p className="mt-4 text-neutral-700 leading-relaxed">
Think of DKIM as a digital signature for your emails—like a wax seal on a letter that proves it's authentic
and hasn't been tampered with.
</p>
</section>
{/* How DKIM Works */}
<section id="how-dkim-works" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">How DKIM Works</h2>
<p className="text-neutral-700 leading-relaxed mb-6">
DKIM uses cryptographic authentication to validate emails. Here's the process:
</p>
<div className="space-y-6 mb-8">
<div className="border-l-4 border-neutral-900 pl-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-2">1. The Sending Server Signs the Email</h3>
<p className="text-neutral-700">
When you send an email, your email server adds a DKIM signature to the email header. This signature is
created using a private key that only your server knows.
</p>
</div>
<div className="border-l-4 border-neutral-900 pl-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-2">2. The Signature is Added to Headers</h3>
<p className="text-neutral-700">
The DKIM signature includes a hash of specific email components (like the subject, body, and sender) and
is added to the email headers as a "DKIM-Signature" field.
</p>
</div>
<div className="border-l-4 border-neutral-900 pl-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-2">3. The Receiving Server Verifies</h3>
<p className="text-neutral-700">
When the email arrives, the receiving server looks up your domain's public DKIM key in DNS, then uses it
to verify the signature. If everything matches, the email passes DKIM authentication.
</p>
</div>
<div className="border-l-4 border-neutral-900 pl-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-2">4. Delivery Decision</h3>
<p className="text-neutral-700">
Passing DKIM verification improves your sender reputation and deliverability. Failing or missing DKIM may
result in emails being flagged as suspicious or sent to spam.
</p>
</div>
</div>
<InfoBox type="tip" title="Technical Detail">
<p>
DKIM uses asymmetric cryptography (public/private key pairs). The private key stays secure on your mail
server, while the public key is published in your DNS records for anyone to verify.
</p>
</InfoBox>
</section>
{/* DKIM Record Example */}
<section id="dkim-record-example" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">What Does a DKIM Record Look Like?</h2>
<p className="text-neutral-700 leading-relaxed mb-6">
A DKIM record is a TXT record in your DNS that contains your public key. Here's an example:
</p>
<CodeBlock
language="dns"
title="Example DKIM DNS Record"
code={`default._domainkey.yourdomain.com IN TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3QEKyU1fSma0axspqYK5iAj+54lsAg4qRRCnpKK68hawSJfliq9vKD6czJ..."
# Breaking down the components:
# v=DKIM1 -> DKIM version
# k=rsa -> Key type (RSA encryption)
# p=MIGfMA0... -> Public key (base64 encoded)`}
/>
<InfoBox type="info" title="Selector Names">
<p>
The "default" in <code>default._domainkey</code> is called a selector. You can use different selectors to
rotate keys or separate different email streams (e.g., marketing, transactional).
</p>
</InfoBox>
</section>
{/* Why DKIM Matters */}
<section id="why-dkim-matters" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">Why DKIM Matters for Email Deliverability</h2>
<div className="grid gap-6 md:grid-cols-2 mb-8">
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<h3 className="text-lg font-semibold text-neutral-900 mb-3">Prevents Email Spoofing</h3>
<p className="text-neutral-700">
DKIM makes it nearly impossible for spammers to forge emails from your domain. The cryptographic signature
can't be replicated without your private key.
</p>
</div>
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<h3 className="text-lg font-semibold text-neutral-900 mb-3">Improves Deliverability</h3>
<p className="text-neutral-700">
Major email providers (Gmail, Outlook, Yahoo) use DKIM as a trust signal. Emails with valid DKIM
signatures are more likely to reach the inbox.
</p>
</div>
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<h3 className="text-lg font-semibold text-neutral-900 mb-3">Protects Brand Reputation</h3>
<p className="text-neutral-700">
By preventing domain spoofing, DKIM protects your brand from being used in phishing attacks that could
damage your reputation.
</p>
</div>
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<h3 className="text-lg font-semibold text-neutral-900 mb-3">Enables DMARC</h3>
<p className="text-neutral-700">
DKIM is a prerequisite for implementing DMARC, which provides even stronger email authentication and
reporting capabilities.
</p>
</div>
</div>
<InfoBox type="warning" title="Gmail & Yahoo Requirements">
<p>
As of February 2024, Gmail and Yahoo require DKIM authentication for bulk senders (5,000+ emails/day). Even
if you send less, implementing DKIM is considered a best practice.
</p>
</InfoBox>
</section>
{/* DKIM Signature Example */}
<section id="dkim-signature-example" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">What Does a DKIM Signature Look Like?</h2>
<p className="text-neutral-700 leading-relaxed mb-6">
When you send an email, the DKIM signature is added to the email headers. Here's what it looks like:
</p>
<CodeBlock
language="text"
title="DKIM-Signature Header Example"
code={`DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=yourdomain.com; s=default;
h=from:subject:date:message-id:to;
bh=frcCV1k9oG9oKj3dpUqdJg1PxRT2RSN/XKdLCPjaYaY=;
b=GJwP3Qr8KqKKKNT5HL8j3fjXvLEm9KmZs6YdO2KqEqr...
# Key components:
# v=1 -> DKIM version
# d=yourdomain.com -> Signing domain
# s=default -> Selector (matches DNS record)
# h=from:subject... -> Headers included in signature
# bh=frcCV1... -> Hash of email body
# b=GJwP3Q... -> The actual signature`}
/>
</section>
{/* How Plunk Handles DKIM */}
<section id="plunk-dkim" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">How Plunk Simplifies DKIM</h2>
<p className="text-neutral-700 leading-relaxed mb-6">
Setting up DKIM manually can be complex, but Plunk makes it automatic:
</p>
<div className="space-y-4 mb-8">
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
1
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Automatic Key Generation</h3>
<p className="text-neutral-700">
Plunk automatically generates secure DKIM key pairs for your domain when you add it to your account.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
2
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Simple DNS Setup</h3>
<p className="text-neutral-700">
We provide the exact DNS records you need to addjust copy and paste into your DNS provider.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
3
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Automatic Signing</h3>
<p className="text-neutral-700">
Every email you send through Plunk is automatically signed with DKIM. No configuration needed.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
4
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Verification & Monitoring</h3>
<p className="text-neutral-700">
Plunk verifies your DKIM setup and monitors authentication status for all your emails.
</p>
</div>
</div>
</div>
<InfoBox type="success" title="Ready in Minutes">
<p>
Most Plunk users have DKIM fully configured and working within 5-10 minutes. Our dashboard guides you
through every step.
</p>
</InfoBox>
</section>
{/* DKIM Best Practices */}
<section id="dkim-best-practices" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">DKIM Best Practices</h2>
<div className="space-y-6">
<div className="border-l-4 border-green-500 pl-6 py-2">
<h3 className="text-lg font-semibold text-neutral-900 mb-2"> Use 2048-bit Keys</h3>
<p className="text-neutral-700">
While 1024-bit keys still work, 2048-bit keys provide better security and are recommended by Gmail and
other providers.
</p>
</div>
<div className="border-l-4 border-green-500 pl-6 py-2">
<h3 className="text-lg font-semibold text-neutral-900 mb-2"> Implement SPF and DMARC Too</h3>
<p className="text-neutral-700">
DKIM works best when combined with SPF and DMARC for comprehensive email authentication. Use all three for
maximum protection.
</p>
</div>
<div className="border-l-4 border-green-500 pl-6 py-2">
<h3 className="text-lg font-semibold text-neutral-900 mb-2"> Monitor DKIM Status</h3>
<p className="text-neutral-700">
Regularly check that your DKIM signatures are passing. Most email platforms provide authentication
reports.
</p>
</div>
<div className="border-l-4 border-green-500 pl-6 py-2">
<h3 className="text-lg font-semibold text-neutral-900 mb-2"> Rotate Keys Periodically</h3>
<p className="text-neutral-700">
For enhanced security, rotate your DKIM keys every 6-12 months. Plan key rotation carefully to avoid
delivery disruptions.
</p>
</div>
<div className="border-l-4 border-red-500 pl-6 py-2">
<h3 className="text-lg font-semibold text-neutral-900 mb-2"> Don't Share Private Keys</h3>
<p className="text-neutral-700">
Your DKIM private key should never be shared or stored insecurely. Treat it like a password.
</p>
</div>
<div className="border-l-4 border-red-500 pl-6 py-2">
<h3 className="text-lg font-semibold text-neutral-900 mb-2">✗ Don't Use the Same Key Across Domains</h3>
<p className="text-neutral-700">
Each domain should have its own unique DKIM key pair for security and proper authentication.
</p>
</div>
</div>
</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>
<div className="grid gap-4 md:grid-cols-3">
<Link
href="/guides/what-is-spf"
className="block rounded-xl border border-neutral-200 bg-white p-6 transition hover:border-neutral-300 hover:shadow-lg"
>
<h3 className="text-lg font-semibold text-neutral-900 mb-2">What is SPF?</h3>
<p className="text-sm text-neutral-600">Learn about SPF records and how they complement DKIM.</p>
</Link>
<Link
href="/guides/what-is-dmarc"
className="block rounded-xl border border-neutral-200 bg-white p-6 transition hover:border-neutral-300 hover:shadow-lg"
>
<h3 className="text-lg font-semibold text-neutral-900 mb-2">What is DMARC?</h3>
<p className="text-sm text-neutral-600">Complete guide to DMARC policies and email security.</p>
</Link>
<Link
href="/guides/email-deliverability"
className="block rounded-xl border border-neutral-200 bg-white p-6 transition hover:border-neutral-300 hover:shadow-lg"
>
<h3 className="text-lg font-semibold text-neutral-900 mb-2">Email Deliverability Guide</h3>
<p className="text-sm text-neutral-600">Improve your email deliverability with best practices.</p>
</Link>
</div>
</section>
</GuideLayout>
);
}
@@ -0,0 +1,351 @@
import React from 'react';
import {GuideLayout, InfoBox} from '../../components/guides';
import {CodeBlock} from '../../components/CodeBlock';
import Link from 'next/link';
export default function WhatIsDMARC() {
return (
<GuideLayout
title="What is DMARC? Email Policy & Reporting Explained"
description="Learn how DMARC works with SPF and DKIM to protect your domain from email spoofing. Complete setup guide with policy examples."
lastUpdated="2025-12-20"
readTime="9 min"
canonical="https://www.useplunk.com/guides/what-is-dmarc"
>
{/* Introduction */}
<section id="introduction" className="mb-12">
<p className="text-neutral-700 leading-relaxed">
DMARC (Domain-based Message Authentication, Reporting, and Conformance) is an email authentication protocol
that builds on SPF and DKIM to protect your domain from email spoofing and phishing.
</p>
<p className="mt-4 text-neutral-700 leading-relaxed">
While SPF and DKIM authenticate emails, DMARC tells receiving servers what to do when authentication fails and
provides reports about your email authentication status.
</p>
</section>
{/* How DMARC Works */}
<section id="how-dmarc-works" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">How DMARC Works</h2>
<p className="text-neutral-700 leading-relaxed mb-6">
DMARC adds a policy layer on top of SPF and DKIM. Here's how it works:
</p>
<div className="space-y-6 mb-8">
<div className="border-l-4 border-neutral-900 pl-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-2">1. Email Authentication</h3>
<p className="text-neutral-700">
When an email is received, the server first checks SPF and DKIM authentication. At least one of these must
pass for DMARC to pass.
</p>
</div>
<div className="border-l-4 border-neutral-900 pl-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-2">2. Alignment Check</h3>
<p className="text-neutral-700">
DMARC checks if the domain in the "From" header aligns with the domain that passed SPF or DKIM. This is
called "identifier alignment."
</p>
</div>
<div className="border-l-4 border-neutral-900 pl-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-2">3. Policy Application</h3>
<p className="text-neutral-700">
If authentication and alignment pass, the email is delivered. If they fail, the receiving server follows
your DMARC policy: none (monitor only), quarantine (send to spam), or reject (block completely).
</p>
</div>
<div className="border-l-4 border-neutral-900 pl-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-2">4. Reporting</h3>
<p className="text-neutral-700">
Receiving servers send daily reports to your specified email address, showing authentication results for
all emails claiming to be from your domain.
</p>
</div>
</div>
<InfoBox type="info" title="DMARC Requires SPF or DKIM">
<p>
DMARC doesn't work aloneyou must have SPF and/or DKIM configured first. DMARC builds on these protocols to
provide policy enforcement and reporting.
</p>
</InfoBox>
</section>
{/* DMARC Record Syntax */}
<section id="dmarc-record-syntax" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">DMARC Record Syntax</h2>
<p className="text-neutral-700 leading-relaxed mb-6">
A DMARC record is a TXT record published at <code>_dmarc.yourdomain.com</code>. Here's an example:
</p>
<CodeBlock
language="dns"
title="Example DMARC Record"
code={`_dmarc.yourdomain.com IN TXT "v=DMARC1; p=quarantine; rua=mailto:[email protected]; ruf=mailto:[email protected]; pct=100; adkim=r; aspf=r"
# Breaking down the components:
# v=DMARC1 -> DMARC version
# p=quarantine -> Policy (none, quarantine, or reject)
# rua=mailto:[email protected] -> Aggregate report email
# ruf=mailto:[email protected] -> Forensic report email
# pct=100 -> Percentage of mail to apply policy (100%)
# adkim=r -> DKIM alignment mode (r=relaxed, s=strict)
# aspf=r -> SPF alignment mode (r=relaxed, s=strict)`}
/>
<div className="mt-8 space-y-6">
<div>
<h3 className="text-lg font-semibold text-neutral-900 mb-3">DMARC Policy Tags</h3>
<div className="rounded-xl border border-neutral-200 overflow-hidden">
<table className="w-full">
<thead className="bg-neutral-50">
<tr>
<th className="px-6 py-3 text-left text-sm font-semibold text-neutral-900">Tag</th>
<th className="px-6 py-3 text-left text-sm font-semibold text-neutral-900">Description</th>
<th className="px-6 py-3 text-left text-sm font-semibold text-neutral-900">Required</th>
</tr>
</thead>
<tbody className="divide-y divide-neutral-200">
<tr>
<td className="px-6 py-4 font-mono text-sm text-neutral-900">v</td>
<td className="px-6 py-4 text-sm text-neutral-700">DMARC version (always DMARC1)</td>
<td className="px-6 py-4 text-sm text-neutral-700">Yes</td>
</tr>
<tr>
<td className="px-6 py-4 font-mono text-sm text-neutral-900">p</td>
<td className="px-6 py-4 text-sm text-neutral-700">Policy: none, quarantine, or reject</td>
<td className="px-6 py-4 text-sm text-neutral-700">Yes</td>
</tr>
<tr>
<td className="px-6 py-4 font-mono text-sm text-neutral-900">rua</td>
<td className="px-6 py-4 text-sm text-neutral-700">Aggregate report email address</td>
<td className="px-6 py-4 text-sm text-neutral-700">Recommended</td>
</tr>
<tr>
<td className="px-6 py-4 font-mono text-sm text-neutral-900">ruf</td>
<td className="px-6 py-4 text-sm text-neutral-700">Forensic report email address</td>
<td className="px-6 py-4 text-sm text-neutral-700">Optional</td>
</tr>
<tr>
<td className="px-6 py-4 font-mono text-sm text-neutral-900">pct</td>
<td className="px-6 py-4 text-sm text-neutral-700">Percentage of mail to filter (0-100)</td>
<td className="px-6 py-4 text-sm text-neutral-700">Optional</td>
</tr>
<tr>
<td className="px-6 py-4 font-mono text-sm text-neutral-900">sp</td>
<td className="px-6 py-4 text-sm text-neutral-700">Policy for subdomains</td>
<td className="px-6 py-4 text-sm text-neutral-700">Optional</td>
</tr>
<tr>
<td className="px-6 py-4 font-mono text-sm text-neutral-900">adkim</td>
<td className="px-6 py-4 text-sm text-neutral-700">DKIM alignment: r (relaxed) or s (strict)</td>
<td className="px-6 py-4 text-sm text-neutral-700">Optional</td>
</tr>
<tr>
<td className="px-6 py-4 font-mono text-sm text-neutral-900">aspf</td>
<td className="px-6 py-4 text-sm text-neutral-700">SPF alignment: r (relaxed) or s (strict)</td>
<td className="px-6 py-4 text-sm text-neutral-700">Optional</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</section>
{/* DMARC Policies */}
<section id="dmarc-policies" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">Understanding DMARC Policies</h2>
<p className="text-neutral-700 leading-relaxed mb-6">
DMARC offers three policy levels. You should implement them progressively:
</p>
<div className="space-y-6">
<div className="rounded-xl border-2 border-blue-200 bg-blue-50 p-6">
<div className="flex items-start gap-4">
<div className="flex h-10 w-10 shrink-0 items-center justify-center rounded-full bg-blue-600 text-white font-bold">
1
</div>
<div>
<h3 className="text-xl font-semibold text-blue-900 mb-2">p=none (Monitor Mode)</h3>
<p className="text-neutral-700 mb-3">
No action is taken on failed emails—they're still delivered. Use this initially to monitor your email
authentication without affecting delivery.
</p>
<CodeBlock language="dns" code={`v=DMARC1; p=none; rua=mailto:[email protected]`} showCopy={false} />
<p className="text-sm text-neutral-600 mt-3">
<strong>Best for:</strong> Initial setup, gathering data, testing configuration
</p>
</div>
</div>
</div>
<div className="rounded-xl border-2 border-amber-200 bg-amber-50 p-6">
<div className="flex items-start gap-4">
<div className="flex h-10 w-10 shrink-0 items-center justify-center rounded-full bg-amber-600 text-white font-bold">
2
</div>
<div>
<h3 className="text-xl font-semibold text-amber-900 mb-2">p=quarantine (Quarantine Failed Mail)</h3>
<p className="text-neutral-700 mb-3">
Emails that fail authentication are sent to spam/junk folders. This is a good middle ground that
protects your domain while minimizing delivery issues.
</p>
<CodeBlock
language="dns"
code={`v=DMARC1; p=quarantine; rua=mailto:[email protected]; pct=100`}
showCopy={false}
/>
<p className="text-sm text-neutral-600 mt-3">
<strong>Best for:</strong> After monitoring, when you're confident in your setup
</p>
</div>
</div>
</div>
<div className="rounded-xl border-2 border-red-200 bg-red-50 p-6">
<div className="flex items-start gap-4">
<div className="flex h-10 w-10 shrink-0 items-center justify-center rounded-full bg-red-600 text-white font-bold">
3
</div>
<div>
<h3 className="text-xl font-semibold text-red-900 mb-2">p=reject (Block Failed Mail)</h3>
<p className="text-neutral-700 mb-3">
Emails that fail authentication are completely rejected and not delivered. This provides maximum
protection but requires perfect configuration.
</p>
<CodeBlock
language="dns"
code={`v=DMARC1; p=reject; rua=mailto:[email protected]; pct=100`}
showCopy={false}
/>
<p className="text-sm text-neutral-600 mt-3">
<strong>Best for:</strong> Mature implementations with complete authentication coverage
</p>
</div>
</div>
</div>
</div>
<InfoBox type="warning" title="Progressive Implementation">
<p>
Always start with <code>p=none</code> and monitor for at least 2-4 weeks. Review DMARC reports, fix any
authentication issues, then gradually move to <code>p=quarantine</code> and finally <code>p=reject</code>.
</p>
</InfoBox>
</section>
{/* Setting Up DMARC */}
<section id="setting-up-dmarc" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">How to Set Up DMARC</h2>
<div className="space-y-4 mb-8">
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
1
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Ensure SPF and DKIM are Working</h3>
<p className="text-neutral-700">
DMARC requires either SPF or DKIM (or both) to be configured. Verify these are working before
implementing DMARC.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
2
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Create a Mailbox for Reports</h3>
<p className="text-neutral-700">
Set up an email address to receive DMARC reports (e.g., [email protected]). These reports can be
large and frequent, so use a dedicated mailbox.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
3
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Create Your DMARC Record</h3>
<p className="text-neutral-700 mb-3">Start with a monitoring-only policy:</p>
<CodeBlock language="dns" code={`v=DMARC1; p=none; rua=mailto:[email protected]; pct=100`} />
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
4
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Add to DNS</h3>
<p className="text-neutral-700">
Add the DMARC record as a TXT record at <code>_dmarc.yourdomain.com</code>
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
5
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Monitor Reports</h3>
<p className="text-neutral-700">
Review DMARC reports for 2-4 weeks. Look for failed authentications and identify any legitimate sources
that need SPF/DKIM configuration.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
6
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Gradually Increase Policy</h3>
<p className="text-neutral-700">
Once confident, update to <code>p=quarantine</code>, monitor again, then move to <code>p=reject</code>{' '}
if desired.
</p>
</div>
</div>
</div>
</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>
<div className="grid gap-4 md:grid-cols-3">
<Link
href="/guides/what-is-dkim"
className="block rounded-xl border border-neutral-200 bg-white p-6 transition hover:border-neutral-300 hover:shadow-lg"
>
<h3 className="text-lg font-semibold text-neutral-900 mb-2">What is DKIM?</h3>
<p className="text-sm text-neutral-600">Learn how DKIM authenticates email content.</p>
</Link>
<Link
href="/guides/what-is-spf"
className="block rounded-xl border border-neutral-200 bg-white p-6 transition hover:border-neutral-300 hover:shadow-lg"
>
<h3 className="text-lg font-semibold text-neutral-900 mb-2">What is SPF?</h3>
<p className="text-sm text-neutral-600">Understand SPF records and server authorization.</p>
</Link>
<Link
href="/guides/email-deliverability"
className="block rounded-xl border border-neutral-200 bg-white p-6 transition hover:border-neutral-300 hover:shadow-lg"
>
<h3 className="text-lg font-semibold text-neutral-900 mb-2">Email Deliverability Guide</h3>
<p className="text-sm text-neutral-600">Complete guide to improving email deliverability.</p>
</Link>
</div>
</section>
</GuideLayout>
);
}
@@ -0,0 +1,337 @@
import React from 'react';
import {GuideLayout, InfoBox} from '../../components/guides';
import {CodeBlock} from '../../components/CodeBlock';
import Link from 'next/link';
export default function WhatIsSPF() {
return (
<GuideLayout
title="What is SPF? Email Sender Policy Framework Explained"
description="Learn how SPF records work, prevent email spoofing, and improve deliverability. Complete guide with setup examples and best practices."
lastUpdated="2025-12-20"
readTime="7 min"
canonical="https://www.useplunk.com/guides/what-is-spf"
>
{/* Introduction */}
<section id="introduction" className="mb-12">
<p className="text-neutral-700 leading-relaxed">
SPF (Sender Policy Framework) is an email authentication protocol that allows domain owners to specify which
mail servers are authorized to send emails on behalf of their domain.
</p>
<p className="mt-4 text-neutral-700 leading-relaxed">
Think of SPF as a guest list for your domainit tells receiving servers, "These are the only servers allowed
to send email using my domain name."
</p>
</section>
{/* How SPF Works */}
<section id="how-spf-works" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">How SPF Works</h2>
<p className="text-neutral-700 leading-relaxed mb-6">
SPF works by publishing a list of authorized sending servers in your DNS records. Here's the process:
</p>
<div className="space-y-6 mb-8">
<div className="border-l-4 border-neutral-900 pl-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-2">1. You Publish an SPF Record</h3>
<p className="text-neutral-700">
You add a TXT record to your domain's DNS that lists all IP addresses and services authorized to send
email from your domain.
</p>
</div>
<div className="border-l-4 border-neutral-900 pl-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-2">2. An Email is Sent</h3>
<p className="text-neutral-700">
When someone sends an email claiming to be from your domain, the receiving server notes the IP address of
the sending server.
</p>
</div>
<div className="border-l-4 border-neutral-900 pl-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-2">3. The Receiving Server Checks SPF</h3>
<p className="text-neutral-700">
The receiving server looks up your domain's SPF record in DNS and checks if the sending server's IP
address is listed as authorized.
</p>
</div>
<div className="border-l-4 border-neutral-900 pl-6">
<h3 className="text-xl font-semibold text-neutral-900 mb-2">4. Pass or Fail</h3>
<p className="text-neutral-700">
If the IP matches, SPF passes. If not, SPF fails and the email may be flagged as spam or rejected,
depending on your policy.
</p>
</div>
</div>
<InfoBox type="info" title="SPF Validates the Server, Not the Content">
<p>
Unlike DKIM which validates email content, SPF only checks if the sending server is authorized. This is why
using both SPF and DKIM together provides stronger authentication.
</p>
</InfoBox>
</section>
{/* SPF Record Syntax */}
<section id="spf-record-syntax" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">SPF Record Syntax</h2>
<p className="text-neutral-700 leading-relaxed mb-6">
An SPF record is a TXT record with a specific format. Here's a typical example:
</p>
<CodeBlock
language="dns"
title="Example SPF Record"
code={`v=spf1 include:_spf.google.com include:sendgrid.net ip4:192.0.2.1 ~all
# Breaking down the components:
# v=spf1 -> SPF version (always v=spf1)
# include:_spf.google.com -> Include Google's SPF record
# include:sendgrid.net -> Include SendGrid's SPF record
# ip4:192.0.2.1 -> Authorize specific IPv4 address
# ~all -> Soft fail for all others`}
/>
<div className="mt-8 space-y-6">
<div>
<h3 className="text-lg font-semibold text-neutral-900 mb-3">Common SPF Mechanisms</h3>
<div className="rounded-xl border border-neutral-200 overflow-hidden">
<table className="w-full">
<thead className="bg-neutral-50">
<tr>
<th className="px-6 py-3 text-left text-sm font-semibold text-neutral-900">Mechanism</th>
<th className="px-6 py-3 text-left text-sm font-semibold text-neutral-900">Description</th>
</tr>
</thead>
<tbody className="divide-y divide-neutral-200">
<tr>
<td className="px-6 py-4 font-mono text-sm text-neutral-900">ip4:192.0.2.1</td>
<td className="px-6 py-4 text-sm text-neutral-700">Authorize specific IPv4 address</td>
</tr>
<tr>
<td className="px-6 py-4 font-mono text-sm text-neutral-900">ip6:2001:db8::1</td>
<td className="px-6 py-4 text-sm text-neutral-700">Authorize specific IPv6 address</td>
</tr>
<tr>
<td className="px-6 py-4 font-mono text-sm text-neutral-900">include:domain.com</td>
<td className="px-6 py-4 text-sm text-neutral-700">Include another domain's SPF record</td>
</tr>
<tr>
<td className="px-6 py-4 font-mono text-sm text-neutral-900">a</td>
<td className="px-6 py-4 text-sm text-neutral-700">Authorize domain's A record IP</td>
</tr>
<tr>
<td className="px-6 py-4 font-mono text-sm text-neutral-900">mx</td>
<td className="px-6 py-4 text-sm text-neutral-700">Authorize domain's MX record IPs</td>
</tr>
<tr>
<td className="px-6 py-4 font-mono text-sm text-neutral-900">~all</td>
<td className="px-6 py-4 text-sm text-neutral-700">Soft fail (treat others as suspicious)</td>
</tr>
<tr>
<td className="px-6 py-4 font-mono text-sm text-neutral-900">-all</td>
<td className="px-6 py-4 text-sm text-neutral-700">Hard fail (reject all others)</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<InfoBox type="warning" title="10 DNS Lookup Limit">
<p>
SPF has a hard limit of 10 DNS lookups. Each <code>include:</code> mechanism counts as one lookup. Exceeding
this limit causes SPF validation to fail. Keep your SPF record concise and avoid excessive includes.
</p>
</InfoBox>
</section>
{/* Why SPF Matters */}
<section id="why-spf-matters" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">Why SPF Matters</h2>
<div className="grid gap-6 md:grid-cols-2 mb-8">
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<h3 className="text-lg font-semibold text-neutral-900 mb-3">Prevents Email Spoofing</h3>
<p className="text-neutral-700">
SPF makes it much harder for spammers to send emails that appear to come from your domain. Only authorized
servers can send on your behalf.
</p>
</div>
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<h3 className="text-lg font-semibold text-neutral-900 mb-3">Improves Deliverability</h3>
<p className="text-neutral-700">
Emails from domains with proper SPF records are more trusted by receiving servers, leading to better inbox
placement rates.
</p>
</div>
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<h3 className="text-lg font-semibold text-neutral-900 mb-3">Protects Your Domain</h3>
<p className="text-neutral-700">
By specifying authorized senders, you protect your domain from being used in phishing and spam campaigns.
</p>
</div>
<div className="rounded-xl border border-neutral-200 bg-white p-6">
<h3 className="text-lg font-semibold text-neutral-900 mb-3">Required for DMARC</h3>
<p className="text-neutral-700">
SPF (along with DKIM) is necessary for implementing DMARC, which provides comprehensive email
authentication and reporting.
</p>
</div>
</div>
</section>
{/* Setting Up SPF */}
<section id="setting-up-spf" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">How to Set Up SPF</h2>
<div className="space-y-4 mb-8">
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
1
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Identify All Email Senders</h3>
<p className="text-neutral-700">
List all services and servers that send email from your domain: your email service provider, marketing
tools, support systems, etc.
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
2
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Gather SPF Include Values</h3>
<p className="text-neutral-700 mb-3">Each email service provides SPF values to include. For example:</p>
<CodeBlock
language="text"
code={`Google Workspace: include:_spf.google.com
Microsoft 365: include:spf.protection.outlook.com
Plunk: include:spf.useplunk.com
SendGrid: include:sendgrid.net`}
showCopy={false}
/>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
3
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Create Your SPF Record</h3>
<p className="text-neutral-700 mb-3">Combine all authorized senders into one SPF record:</p>
<CodeBlock language="dns" code={`v=spf1 include:_spf.google.com include:spf.useplunk.com ~all`} />
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
4
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Add to DNS</h3>
<p className="text-neutral-700">
Add the SPF record as a TXT record in your DNS settings. The record name should be your root domain
(e.g., "@" or "yourdomain.com").
</p>
</div>
</div>
<div className="flex items-start gap-4 p-6 rounded-xl bg-neutral-50 border border-neutral-200">
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-900 text-white text-sm font-bold">
5
</div>
<div>
<h3 className="font-semibold text-neutral-900 mb-2">Verify SPF</h3>
<p className="text-neutral-700">
Use SPF validation tools to confirm your record is correct and doesn't exceed the 10 DNS lookup limit.
</p>
</div>
</div>
</div>
<InfoBox type="success" title="Plunk Handles This Automatically">
<p>
When you set up a domain in Plunk, we provide the exact SPF record you need. Just copy and paste it into
your DNS, and we'll verify it's working correctly.
</p>
</InfoBox>
</section>
{/* Common SPF Mistakes */}
<section id="common-mistakes" className="mb-12">
<h2 className="text-3xl font-bold text-neutral-900 mb-6">Common SPF Mistakes to Avoid</h2>
<div className="space-y-6">
<div className="border-l-4 border-red-500 pl-6 py-2">
<h3 className="text-lg font-semibold text-neutral-900 mb-2"> Multiple SPF Records</h3>
<p className="text-neutral-700">
Never create multiple SPF TXT records. You can only have ONE SPF record per domain. Combine all authorized
senders into a single record.
</p>
</div>
<div className="border-l-4 border-red-500 pl-6 py-2">
<h3 className="text-lg font-semibold text-neutral-900 mb-2"> Exceeding 10 DNS Lookups</h3>
<p className="text-neutral-700">
Each <code>include:</code> mechanism counts toward the 10 lookup limit. Too many includes will cause SPF
to fail. Consolidate where possible.
</p>
</div>
<div className="border-l-4 border-red-500 pl-6 py-2">
<h3 className="text-lg font-semibold text-neutral-900 mb-2"> Forgetting to Update SPF</h3>
<p className="text-neutral-700">
When you add new email services, remember to update your SPF record. Outdated SPF records cause legitimate
emails to fail authentication.
</p>
</div>
<div className="border-l-4 border-red-500 pl-6 py-2">
<h3 className="text-lg font-semibold text-neutral-900 mb-2"> Using +all</h3>
<p className="text-neutral-700">
Never use <code>+all</code> (pass all). This completely defeats the purpose of SPF by allowing anyone to
send from your domain. Always use <code>~all</code> or <code>-all</code>.
</p>
</div>
</div>
</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>
<div className="grid gap-4 md:grid-cols-3">
<Link
href="/guides/what-is-dkim"
className="block rounded-xl border border-neutral-200 bg-white p-6 transition hover:border-neutral-300 hover:shadow-lg"
>
<h3 className="text-lg font-semibold text-neutral-900 mb-2">What is DKIM?</h3>
<p className="text-sm text-neutral-600">Learn how DKIM complements SPF for email authentication.</p>
</Link>
<Link
href="/guides/what-is-dmarc"
className="block rounded-xl border border-neutral-200 bg-white p-6 transition hover:border-neutral-300 hover:shadow-lg"
>
<h3 className="text-lg font-semibold text-neutral-900 mb-2">What is DMARC?</h3>
<p className="text-sm text-neutral-600">Implement DMARC using SPF and DKIM together.</p>
</Link>
<Link
href="/guides/email-deliverability"
className="block rounded-xl border border-neutral-200 bg-white p-6 transition hover:border-neutral-300 hover:shadow-lg"
>
<h3 className="text-lg font-semibold text-neutral-900 mb-2">Email Deliverability Guide</h3>
<p className="text-sm text-neutral-600">Complete guide to improving email deliverability.</p>
</Link>
</div>
</section>
</GuideLayout>
);
}