Back to blog
DeliverabilityTroubleshootingDeveloper Guide

Why Are My Emails Going to Spam?

A developer's guide to diagnosing and fixing email deliverability issues. From authentication problems to content triggers—find out why your emails aren't reaching the inbox.

SendPigeon TeamDecember 26, 20256 min read

You checked the logs. The email was sent successfully. Status 200. But your user says they never got it. You ask them to check spam. There it is.

This is frustrating. Let's fix it.

TL;DR

Most common causes:

  1. Missing or broken authentication (SPF, DKIM, DMARC)
  2. Sending from a new domain without warming up
  3. Poor sender reputation (high bounces or complaints)
  4. Content that triggers spam filters
  5. Sending to invalid or old addresses

Quick fix: Check authentication first. It's the cause most of the time.


Step 1: Check Your Authentication

This is the #1 reason emails go to spam. Missing or misconfigured SPF, DKIM, or DMARC records.

How to check

First, use our free deliverability checker to instantly verify your domain's SPF, DKIM, and DMARC records.

Then send yourself an email. In Gmail, click the three dots → "Show original". Look for:

Authenticated
Authentication-Results: mx.google.com;
spf=pass
dkim=pass
dmarc=pass

If you see any of these failing:

Not Authenticated
Authentication-Results: mx.google.com;
spf=softfail (domain does not designate 192.0.2.1 as permitted sender)
dkim=none (no signature)
dmarc=fail

That's your problem.

Fixing authentication

IssueFix
spf=fail or spf=softfailAdd your email provider to your SPF record
dkim=none or dkim=failAdd the DKIM CNAME/TXT record from your provider
dmarc=failSet up a DMARC record (start with p=none)

Need details? Read our DKIM, SPF, and DMARC guide for step-by-step instructions.


Step 2: Check Your Sender Reputation

Even with perfect authentication, a bad reputation will land you in spam.

Signs of reputation problems

  • Emails delivered fine last week, now going to spam
  • Some recipients get it, others don't
  • Gmail specifically filtering you (they're the strictest)

How to check

Google Postmaster Tools (free): https://postmaster.google.com/

Connect your domain and you'll see:

  • Domain reputation (High/Medium/Low/Bad)
  • Spam rate
  • Authentication success rate

If your spam rate is above 0.1%, you have a problem. Above 0.3% and Gmail will actively filter your emails.

What hurts reputation

FactorImpact
High bounce rate (>2%)Severe
Spam complaints (>0.1%)Severe
Sending to spam trapsSevere
Sending to inactive addressesModerate
Inconsistent sending volumeModerate

How to fix it

  1. Clean your list: Remove addresses that bounced
  2. Handle complaints: Never email someone who complained
  3. Slow down: Reduce volume temporarily while reputation recovers
  4. Check for spam traps: Old addresses that ISPs use to catch spammers

Step 3: Check Your Content

Spam filters analyze what you're sending. Certain patterns trigger them.

Red flags

Subject lines:

  • ALL CAPS
  • Excessive punctuation!!!
  • "FREE", "Act now", "Limited time"
  • Re: or Fwd: when it's not a reply

Body content:

  • URL shorteners (bit.ly, t.co)
  • Too many links
  • Image-only emails (no text)
  • Mismatched link text and URL
  • Hidden text (same color as background)

The image problem

Emails that are just one big image with no text are a classic spam signal. Spammers use images to hide text from filters.

Bad:

<body>
  <img src="promo.jpg" alt="Click here for deals!" />
</body>

Better:

<body>
  <h1>Your order has shipped</h1>
  <p>Your package is on its way...</p>
  <img src="tracking-map.jpg" alt="Delivery map" />
</body>

Always include plain text

Every HTML email should have a plain text alternative. Most email clients won't show it, but spam filters check for it.

Content-Type: multipart/alternative

If you're using an email API, this is usually handled automatically. But verify.


Step 4: Check Your Infrastructure

New domain? Warm it up.

A brand new domain sending 10,000 emails on day one looks like a spammer. ISPs are suspicious of new senders.

Warming schedule:

DayVolume
1-350-100
4-7200-500
Week 2500-1,000
Week 31,000-5,000
Week 4+Full volume

Start by emailing your most engaged users—they're most likely to open and not mark as spam, which helps your reputation.

Use a subdomain

Send transactional email from mail.yourapp.com or notifications.yourapp.com, not your root domain.

Why? Reputation isolation. If something goes wrong, your main domain stays clean.

Check your sending IP

If you're on a shared IP (most small senders are), someone else's bad behavior can affect you. This is usually handled by your email provider, but worth checking if you've ruled out everything else.


Step 5: Check the Recipient

Sometimes it's not you.

Corporate email filters

Office 365 and enterprise email systems have aggressive filters. Your email might be fine for Gmail but blocked by a company's IT policy.

Signs:

  • Consumer emails (Gmail, Yahoo) work fine
  • Business emails (company domains) get blocked
  • You see "550 Message rejected" errors

Solutions:

  • Ask IT admins to whitelist your sending domain
  • Make sure you have proper authentication (they check strictly)

Invalid addresses

Sending to addresses that don't exist hurts your reputation.

550 5.1.1 The email account that you tried to reach does not exist

This is a hard bounce. Remove these addresses immediately.


Debugging Checklist

Start with our free deliverability checker — it verifies SPF, DKIM, and DMARC in seconds.

Work through this in order:

CheckHow
Authentication passing?Use deliverability checker or check email headers
Domain reputation?Google Postmaster Tools
Bounce rate?Check your email provider's dashboard
Complaint rate?Google Postmaster Tools
Content issues?Use mail-tester.com
New domain?Implement warming schedule
Specific recipient issues?Test different email providers

When Nothing Works

If you've checked everything and emails still go to spam:

  1. Wait: Reputation takes time to build. Keep sending good email.
  2. Reduce volume: Send less while you recover.
  3. Segment: Only email people who engaged recently.
  4. New subdomain: As a last resort, start fresh with a new subdomain.

Don't create a new domain just to escape bad reputation. ISPs can link related domains. Fix the underlying problem first.


Prevention

Once you're out of spam, stay out:

  • Verify addresses: Use double opt-in or email verification
  • Monitor metrics: Set up alerts for bounce/complaint spikes
  • Remove inactive users: If someone hasn't opened in 6 months, stop emailing them
  • Handle bounces automatically: Hard bounces should immediately suppress the address

Next Steps