The usual response to spam placement is to start rewriting the email. Remove the word "free", take out an exclamation mark, cut a link. This is almost always the least productive place to start, because content is the weakest of the signals a receiver uses and the one you have already optimised by instinct.
Work down this list in order. Stop when you find something.
1. Authentication
Check a real received message, not your configuration. Open the raw headers of a message that actually arrived and look for spf=pass, dkim=pass and dmarc=pass. A dashboard saying your records are valid is not the same as a receiver agreeing.
The common silent failure is SPF exceeding its 10 DNS lookup limit. It does not warn you, it just stops passing.
2. Are you actually the sender
If the from address is on a domain you do not control, or a shared domain belonging to your provider, your placement is partly determined by other people's behaviour. This is the single most common cause of "it worked last week and now it does not" with nothing changed on your side.
3. Reputation of the sending IP and domain
Check whether the sending IP is on a public blocklist. If you send from a home or office connection, most consumer ranges are permanently listed and there is nothing to fix beyond not sending from there.
A rejection at RCPT TO with a 5xx code from a residential IP is nearly always about your IP, not about whether the mailbox exists. Treating it as a dead address means deleting real contacts.
4. Recipient engagement
Receivers weight what recipients do with your mail far above what is in it. A list where nobody opens anything will drift to spam regardless of how clean the copy is. Segment out addresses that have not engaged in six months and stop mailing them. Your placement for everyone else improves.
5. Volume shape
Sudden changes look like compromise. Going from 500 a day to 50,000 overnight is the pattern of an account takeover, and it is treated accordingly. Ramp instead.
6. Content, finally
Now look at the message. The things that still matter:
- Link and text balance. A message that is one image and a link has nothing for a filter to read as legitimate.
- Link domains. Link shorteners and domains unrelated to the sender both hurt. Use your own domain for tracked links.
- A plain text part. HTML-only multipart messages score worse. Send both.
- Working unsubscribe. Covered in one-click unsubscribe.
What does not matter nearly as much as folklore claims: individual trigger words, exclamation marks, and the exact colour of your call to action button. If your authentication and reputation are sound, a word will not sink you. If they are not, no amount of copy editing will save you.
Test before you send
Send the exact message to a seed address at each major provider and read the headers. Ten minutes of this before a campaign is worth more than any amount of debugging afterwards, because after the campaign the reputation damage is already recorded.