Why the Gmail Unsubscribe Link Isn't Showing on Your Emails

The short answer
Gmail hides the native unsubscribe control when the message lacks a valid List-Unsubscribe-Post header, uses an http rather than https link, leaves those headers outside the DKIM signature, or comes from a domain with too little sending history for Gmail to trust. Fix the headers, sign them with DKIM, and warm the domain.
Why is the Gmail unsubscribe link not showing? Usually a missing List-Unsubscribe-Post header, an http URI, unsigned headers, or a low-trust domain.
On this page
If the Gmail unsubscribe link is not showing on your emails, the cause is almost always mechanical, not mysterious. Gmail displays a native unsubscribe control next to the sender's name, but only when a message carries the right headers, signs them correctly, and comes from a sender it already trusts. Miss any one of those and the control quietly disappears.
This is a troubleshooting guide for the symptom: you added an unsubscribe option, yet Gmail shows no button. It is different from a full setup guide — the goal here is to find which of a short list of causes applies to your mail and fix that one. Every check below runs against the raw message, so you read what Gmail actually received, not what your sending tool shows in preview.
The short answer#
Gmail shows the one-click unsubscribe control when three things line up. The message includes a List-Unsubscribe header pointing at an https link, plus a List-Unsubscribe-Post header with the value List-Unsubscribe=One-Click. Those two headers are covered by a valid DKIM signature. And the sending domain has enough of a track record for Gmail to trust it.
When the button is missing, one of those is broken. The most common faults are a missing or malformed List-Unsubscribe-Post header, an http link where https is required, the unsubscribe headers left outside the DKIM signature, or a domain too new or too low-reputation for Gmail to surface the control at all.
The header control and a body link are two different things
Before you start#
You cannot diagnose this from the compose window. Gather a real, delivered message and the means to read its raw headers, then work the checks against that.
- A delivered copy of the exact message that is missing the control — sent to a real Gmail account, not just previewed inside your sending tool.
- Access to the raw headers through Gmail's Show original, found in the three-dot menu on an open message.
- Knowledge of who signs your mail with DKIM — usually your email service provider or your own mail server.
- Whether you send enough to count as a bulk sender: Gmail treats roughly 5,000 messages a day to personal Gmail addresses, counted per domain, as bulk.
How to find out why the button is missing#
Work through these in order against a real, delivered message. Each step narrows the cause, and most senders find the fault by step four.
- 1
Open the raw message source
In Gmail, open a delivered copy of the campaign, click the three-dot menu, and choose Show original. This shows every header exactly as sent, plus the SPF, DKIM and DMARC results. Everything below is read from this screen.
- 2
Confirm both headers are present
Look for List-Unsubscribe and List-Unsubscribe-Post. You need both. A List-Unsubscribe header on its own is the older, pre-one-click style and will not produce Gmail's native button by itself.
- 3
Check the URI is HTTPS
The List-Unsubscribe value must contain an https link. Under RFC 8058 the header must include an HTTPS URI; an http link or a mailto-only value does not qualify for one-click, so Gmail has no endpoint to POST to.
- 4
Check the exact List-Unsubscribe-Post value
It must read exactly List-Unsubscribe=One-Click. A typo, a stray space, or a different string means Gmail ignores it and treats the message as if the header were absent.
- 5
Confirm DKIM passes and covers the headers
In Show original, DKIM should read PASS. The two List-Unsubscribe headers must appear in the h= tag of the DKIM-Signature. RFC 8058 says a receiver should not offer one-click unsubscribe when the message lacks the required DKIM signature over those headers.
- 6
Send a fresh test and recheck
Header and reputation changes only apply to new mail. Send a new message to a Gmail account you control, re-open Show original, and confirm the control now appears. Old messages in the inbox keep the state they were delivered with.
The value must be exact: List-Unsubscribe=One-Click
How different mailbox providers handle it#
Gmail is not the only inbox with a native unsubscribe control, and the providers do not treat one-click identically. The table below is accurate as of August 2026; check each provider's own postmaster page before you rely on it, because these requirements have changed more than once.
| Mailbox provider | Shows a native unsubscribe control | One-click (RFC 8058) requirement |
|---|---|---|
| Gmail | Yes, beside the sender on bulk and marketing mail | Required for senders over 5,000/day to Gmail since 1 Feb 2024 |
| Yahoo Mail | Yes | Required for bulk senders |
| Apple Mail / iCloud Mail | Yes, an unsubscribe prompt on newsletters | Required for marketing mail |
| Outlook.com / Microsoft | Yes, when a List-Unsubscribe header is present | Recommended, not strictly required |
How strict is each provider?#
Microsoft runs its own bulk-sender rules for Outlook.com, live since 5 May 2025, which require SPF, DKIM and DMARC above 5,000 messages a day and recommend one-click unsubscribe rather than mandating it. Non-compliant bulk mail can be rejected with the error 550 5.7.515.
Google's requirement is the strictest of the four. Since November 2025, Gmail has moved from spam-foldering non-compliant bulk mail toward temporary and permanent rejections, so a missing unsubscribe control on a bulk stream is now a signal that travels with harder delivery consequences.
What to do when it still doesn't show#
If the headers look right in Show original but the control still will not appear, match your exact symptom to the table. Each row is a distinct cause with its own fix, so identify yours before changing anything.
| Symptom | Likely cause | Fix |
|---|---|---|
| Only List-Unsubscribe is present, no button | The List-Unsubscribe-Post header is missing | Add List-Unsubscribe-Post: List-Unsubscribe=One-Click, or enable one-click in your sending platform's settings. |
| Both headers present, still no button | The List-Unsubscribe URI is http, or the value is a mailto link only | Point List-Unsubscribe at an https URI. One-click needs an HTTPS endpoint that accepts a POST. |
| Everything looks right but DKIM shows fail | The unsubscribe headers are not covered by the DKIM signature | Add List-Unsubscribe and List-Unsubscribe-Post to the h= tag so they are signed, and confirm DKIM passes. |
| Control shows on some sends, not others | Different sending streams or subdomains sign or format the headers differently | Standardise the headers and DKIM signing across every stream and IP that sends the campaign. |
| Correct headers, new domain, no button | The domain has too little sending history for Gmail to trust it | Warm the domain with consistent, wanted mail over weeks; no header overrides low reputation. |
| Button vanished after it used to show | Spam complaints pushed the domain's reputation down | Cut your Postmaster Tools spam rate below 0.1%, keep it under 0.3%, and give reputation time to recover. |
Reputation is a decision Gmail makes, not a switch you flip
Fixing the most common cause: the headers#
The single most frequent fault is the header pair itself — either List-Unsubscribe-Post is missing, or the link is http instead of https. The diagram below shows the same message before and after the fix. On the left, an http link and no one-click header, so Gmail shows nothing; on the right, an https link, the exact one-click header, and both covered by DKIM.
If your sending platform generates these headers, the fix is usually a single toggle labelled one-click unsubscribe or List-Unsubscribe header. If you build the headers yourself, add both lines, switch the URI to https, and include them in your DKIM h= tag. Then send a fresh test, because the change only affects mail sent after it.

A faster way — and where AI Emaily fits#
The manual checks above will find the fault, but the fix always lives with whatever sends your bulk mail. Your email service provider — Mailchimp, Klaviyo, Brevo and similar platforms — owns the List-Unsubscribe headers and the DKIM signing, and most set the one-click pair for you the moment you enable it. If your button still is not showing, that platform's deliverability settings are where you fix it, not your mail client.
AI Emaily sits on the other side of the same standard. It is an AI email client for the inbox you read, not a sending platform, so it will not add these headers to your outbound campaigns — for that you need the ESP above. Where it helps is the receiving side: its spam protection and cold-email filtering keep unsolicited bulk mail out of the inbox in the first place, so there is less mail to hunt unsubscribe links in at all. We build AI Emaily, and the Pro and Autopilot plans come with a 7-day free trial.
Frequently asked
See it in AI Emaily
Keep reading
Sources

Written by
Nafiul HasanNafiul Hasan is an entrepreneur and AI automation system builder with 10+ years of experience turning messy, manual workflows into reliable automated systems. He designs and ships AI enterprise solutions end-to-end — the agent logic, the data plumbing, and the product people actually use — and founded AI Emaily to give busy professionals their attention back. He writes here from the builder's seat: what works, what breaks, and how to put AI to work without giving up control.