guides
How to reduce your email spam score: write content filters trust
May 3, 2026

You wrote a careful, honest email, sent it to people who asked for it, and it still landed in the spam folder. So you start deleting words like "free" and "click here," and it feels less like engineering and more like superstition.
To reduce your email spam score, focus on the content signals filters actually evaluate (a working plaintext part, a sane text-to-image ratio, honest links, and a real unsubscribe mechanism) and stop chasing the folklore list of "trigger words" that modern filters mostly ignore. The single biggest lever is not content at all: it is reputation and authentication. But content does matter at the margins, and getting it wrong gives an already-skeptical filter the excuse it was looking for.
This guide separates the myths from the real signals. It does the unglamorous work of explaining how filters actually score a message in 2026, so you can stop rewriting subject lines on vibes and fix the things that move the needle.
Do spam trigger words still send email to spam?
Rarely, and almost never on their own. The idea that specific words ("free," "guarantee," "act now," "Viagra") carry fixed spam points comes from early-2000s rule engines like SpamAssassin, where a message accumulated a numeric score from a long list of regex rules and tipped into the spam bucket past a threshold. That mechanism still exists in some self-hosted filters, but it is not how Gmail, Outlook, Apple Mail, or Yahoo decide placement today.
Modern consumer filters are machine-learned classifiers, often Bayesian at the core, that weigh every token in context. "Free" in a message from a domain that recipients open daily and never report is a neutral word. The same word in a message from a brand-new domain sending to a purchased list is one weak signal among many strong negative ones. The filter is not counting words; it is asking "does mail like this, from a sender like this, get wanted by recipients like these?"
Here is the practical consequence. If your reputation is strong, you can write "free" in the subject line and land in the inbox. If your reputation is weak, deleting "free" will not save you, because the word was never the problem. Trigger-word lists are a distraction that lets people feel productive while ignoring the authentication and list-quality issues that are actually filtering their mail.
That said, two content patterns still genuinely read as spam to a modern classifier, because spammers overuse them:
- All-caps shouting and excessive punctuation.
FREE!!! ACT NOW!!!is not penalized for the words but for the pattern, which correlates strongly with low-quality bulk mail. - Obfuscation. Writing
F.R.E.EorV1agrato dodge old rule engines is itself a signal, because legitimate senders do not do it. Filters learned this years ago.
Write like a normal human and these never come up. For the short list of content patterns that still genuinely move a spam score, the content triggers that raise your spam score is the field guide worth keeping nearby.
What content signals actually affect my spam score?
The signals that matter are structural and mechanical, the kind a filter can evaluate without guessing at tone. These are where your effort actually pays off:
Include a working plaintext part. A well-formed email is multipart/alternative: an HTML version and a plaintext version. Sending HTML-only is a mild negative signal because legitimate senders almost always include both, and a missing plaintext part is a common spammer shortcut. Most decent sending libraries generate the plaintext from your HTML automatically; confirm yours does.
Keep a healthy text-to-image ratio. An email that is one large image with almost no text is a classic spam tactic: it hides the actual content from text analysis. Filters penalize image-heavy, text-light messages. Aim for meaningful text alongside your images, and remember that many clients block images by default, so an image-only email can render as a blank box even for engaged recipients.
Make your links honest. Links should point to the same domain you send from, or to closely related domains. Three things hurt you here: URL shorteners (bit.ly, t.co) because spammers use them to hide destinations, a visible link text that does not match its href (the oldest phishing tell), and link domains that have nothing to do with your sending domain. If you wrap links for click tracking, wrap them on your own domain, not a shared tracking domain shared with other senders.
Send valid HTML. Broken, deeply nested, or auto-generated-from-Word HTML correlates with spam and can also render badly, which lowers engagement. Clean, simple, table-based email HTML is both safer and more reliable across clients.
Include a real unsubscribe mechanism. A visible unsubscribe link and a List-Unsubscribe header are now mandatory for bulk senders, not optional polish. They also protect your reputation: an unhappy recipient who can unsubscribe in one click does that instead of marking you as spam, and a spam complaint costs you far more than an unsubscribe. The mechanics of doing this correctly are their own topic; see implementing one-click unsubscribe and List-Unsubscribe headers.
Here is what a structurally clean message looks like at the header and MIME level:
From: Acme <hello@news.acme.com>
To: subscriber@example.com
Subject: Your March product update
List-Unsubscribe: <https://news.acme.com/u/abc123>, <mailto:unsub@news.acme.com>
List-Unsubscribe-Post: List-Unsubscribe=One-Click
Content-Type: multipart/alternative; boundary="b1"
--b1
Content-Type: text/plain; charset="utf-8"
Your March product update. Read it here: https://news.acme.com/posts/march
Unsubscribe: https://news.acme.com/u/abc123
--b1
Content-Type: text/html; charset="utf-8"
<html><body>
<p>Your March product update.</p>
<p><a href="https://news.acme.com/posts/march">Read the full update</a></p>
<p><a href="https://news.acme.com/u/abc123">Unsubscribe</a></p>
</body></html>
--b1--
Notice what is happening: both MIME parts present, the unsubscribe header and the in-body link point to the same news.acme.com domain the message is sent from, the link text matches its destination, and there is real text in both parts. None of this is clever. It is just the absence of the shortcuts spammers take.
Why does my email go to spam even when the content looks clean?
Because content is almost never the real cause. If clean-looking mail keeps landing in spam, the problem is upstream of your copy, and rewriting the body will not fix it. In rough order of how often they are the actual culprit:
- Authentication is failing or missing. If SPF, DKIM, and DMARC do not all pass, receivers cannot cryptographically tie the message to you, and that alone is enough to filter or reject it. This is the first thing to check, every time. See the SPF, DKIM, and DMARC setup guide for the records, and how to confirm authentication is actually passing at the receiver, because a record that exists is not the same as a record that passes.
- Your list is cold, bought, or stale. Sending to addresses that do not engage, or to a purchased list full of spam traps, generates complaints and bounces that crater your reputation. No subject line survives a 5% complaint rate.
- Your sending domain is new or low-reputation. A fresh domain has no history and gets filtered until it earns trust. That is a warmup problem, not a content problem; see how to warm up a new sending domain.
- You are mixing marketing and transactional mail on one domain. A campaign that draws complaints drags down the reputation that delivers your password resets. Split the streams; see why you separate transactional and marketing sending.
The honest hierarchy is this: authentication and list quality are load-bearing walls, reputation and engagement are the foundation, and content is the paint. You cannot paint your way out of a cracked foundation. Diagnose in that order. The full diagnostic walkthrough lives in the email deliverability guide, and the ten reasons transactional email lands in spam is a fast checklist of the upstream causes to rule out before you touch the copy.
How much does engagement matter compared to content?
Engagement is the dominant signal, and it dwarfs word choice. Mailbox providers watch what recipients do with your mail: opens, replies, moving you out of spam, adding you to contacts, and crucially, complaints and deletes-without-reading. A message people engage with goes to the inbox almost regardless of its wording; a message people ignore or report goes to spam almost regardless of how clean the copy is.
This reframes the whole content question. The goal of your content is not to dodge a filter; it is to earn engagement, because engagement is what the filter actually rewards. That means:
- Relevance over cleverness. Send mail the recipient asked for and expects. A confirmation, a receipt, an update they opted into. These get opened, and opens build reputation.
- A subject line that sets honest expectations. Clickbait that overpromises gets opened once and then reported when the body disappoints. A complaint is the single most damaging recipient action; one complaint outweighs many opens.
- Segmentation. Sending everything to everyone trains some recipients to ignore you, and ignored mail is a slow negative signal. Send less, to people who want that specific message.
When your content drives genuine engagement, the trigger-word question evaporates. You have the reputation to spend.
What about spam-score checker tools?
Spam-score checkers are useful as linters and useless as verdicts. Tools like Mail Tester or the spam-score reports built into sending platforms run your message through a rules engine (often a SpamAssassin descendant) and flag mechanical issues: missing plaintext part, failing authentication, broken HTML, an image-heavy layout, links to blocklisted domains. Those are real findings worth fixing.
What they cannot do is predict inbox placement, because placement at Gmail or Outlook depends on your reputation at that specific provider, and the checker has no visibility into it. A message can score a perfect 10/10 on a content checker and still land in spam because your domain is new, or score 7/10 because of one flagged word and land in the inbox because recipients love you. Use the checker to catch obvious mistakes before sending. Do not treat its number as a deliverability forecast.
A more honest test is a seed-inbox check: send the message to addresses you control across Gmail, Outlook, Yahoo, and Apple Mail, and look at where it actually lands. That reflects your real reputation, not a synthetic rules score.
A practical content checklist
Run this before any send. It covers the content signals that actually matter and ignores the folklore:
- Both
text/plainandtext/htmlparts are present and say the same thing. - The email reads sensibly with images blocked; every image has descriptive alt text.
- No single dominant image standing in for the whole message.
- Links point to your own sending domain or close relatives, no shorteners, link text matches destination.
- A visible unsubscribe link plus
List-UnsubscribeandList-Unsubscribe-Postheaders. - No all-caps shouting, no
!!!, no obfuscated words. - HTML is valid and simple.
- The subject line honestly describes the body.
- SPF, DKIM, and DMARC all pass for this from-domain (check before you blame the copy).
If every box is ticked and mail still goes to spam, the cause is reputation, authentication, or list quality, not content. Go diagnose those.
Or skip the linting: let the stack enforce it
Everything above is a discipline you apply by hand on every send: generate the plaintext part, balance text and images, keep links on-domain, attach the right unsubscribe headers, and verify authentication before you blame the copy. It is the correct discipline, and it is also exactly the kind of mechanical checklist a system should enforce so you never ship a malformed message by accident.
Tinbox is a self-contained email stack you deploy onto your own Cloudflare account: D1 for storage, R2 for attachments, Queues for sending, all on your infrastructure. The sender generates a plaintext alternative from your HTML automatically, wraps tracked links on your own sending domain rather than a shared one, and attaches the List-Unsubscribe and one-click headers that Gmail and Yahoo now require, so the structural content signals in this guide are correct by default instead of by remembering. Because you own the from-domain and the data, the reputation you build is yours, and because there is no per-recipient pricing, careful segmented sending to engaged recipients does not cost more than a reckless blast to everyone.
One honest caveat: no stack can make spammy mail land in the inbox, and Tinbox does not try. It gets the mechanical content signals right and keeps your transactional and marketing streams separable, but reputation is still earned by sending mail people want. If you point it at a cold or purchased list, you will land in spam with perfectly formed MIME. The content rules in this guide still apply; the stack just stops you from getting the structural ones wrong.
Deploy this yourself: npx tinbox init example.com. The deploy sets up authenticated sending with the right unsubscribe headers and plaintext generation from the first message. See the docs for campaign sending and the deliverability defaults.
Frequently asked questions
Do spam trigger words still send email to spam?
Rarely on their own. Modern filters (Gmail, Outlook, Apple Mail) use machine-learned and Bayesian models that weigh words in context alongside sender reputation, authentication, and recipient engagement. A word like 'free' or 'sale' in a message from a domain people open and never report will not be filtered for the word alone. Trigger-word lists matter most when your reputation is already weak, because then the filter is looking for any additional reason to bin you.
What content signals actually affect my spam score?
The structural ones: whether you include a working plaintext alternative, your text-to-image ratio (image-only emails look like spam), whether your links point to the same domain you send from or to shorteners and mismatched domains, whether your HTML is valid, and whether you include a real unsubscribe mechanism. These are signals a filter can evaluate mechanically, unlike fuzzy 'spammy tone' judgments.
Why does my email go to spam even though the content looks clean?
Because content is usually not the cause. The common real causes are failing or missing authentication (SPF, DKIM, DMARC), a cold or purchased list generating complaints and bounces, a new or low-reputation sending domain, and mixing marketing blasts with transactional mail on one domain. Clean content cannot compensate for any of those. Diagnose authentication and list quality before rewriting copy.
Should I avoid images in marketing email to stay out of spam?
Do not avoid images, but never send an image-only email. Filters treat a message that is one big image with no real text as a classic spammer tactic for hiding content from text analysis. Aim for a balance: meaningful text alongside images, descriptive alt text on every image, and a layout that still makes sense if images are blocked, which many clients do by default.
Does an unsubscribe link help or hurt my spam score?
It helps, strongly. A clear unsubscribe link plus a List-Unsubscribe header lets unhappy recipients leave quietly instead of hitting the spam button, and complaints hurt your reputation far more than unsubscribes do. As of 2024, Gmail and Yahoo require one-click unsubscribe for bulk senders, so omitting it is now a deliverability failure, not a gray area.
Are free spam-score checker tools accurate?
They are useful for catching mechanical problems (broken HTML, missing plaintext part, failing authentication, image-heavy layout) but they cannot predict inbox placement, because placement depends on your reputation at each receiver, which the tool cannot see. Treat a content spam-score checker as a linter for obvious mistakes, not as a verdict on whether your mail will reach the inbox.


