The web push playbook

Web push notification best practices

Chrome now scores, warns about and rate-limits web push. This is the playbook for staying on the right side of it: how often to send, what to write and who to send it to, with the cadence that fits your kind of site.

Updated · By the SharePush team

Best practices for your kind of site

The rules are the same for everyone; the volume is not. A news desk and a SaaS product cannot share a cadence, so start from the guide written for what you run.

What Chrome is doing to web push

Three independent systems, each with its own trigger and its own penalty. They are the floor under everything else on this page.

Live since 2025

On-device spam warnings

Chrome runs a machine-learning model over your notification text (title, body and action buttons) before it is shown. If it reads as deceptive or spammy the user never sees your message: they get your domain plus a warning, with one button to unsubscribe and one to reveal the content.

Chrome reports this suppresses around 3 billion notifications a day on Android.

Rolling out from Oct 2025

Automatic permission revocation

Chrome silently revokes the notification permission of sites that pair a high sending volume with very low engagement. The subscriber does not unsubscribe: the browser unsubscribes them for you, on Android and desktop. Installed PWAs are exempt.

Google measures under 1% interaction on notifications overall; in its own tests, sites that sent less got more clicks.

Rolling out from Jan 2026

Push API rate limits

Chrome scores each site daily on three axes: pushes sent per minute the user spends on your site, permission prompts shown against that same time, and raw engagement. Sites judged disruptive get a quota, and Push API requests over it are answered with HTTP 429.

Penalties escalate: 1 day, then 7, then 14, cleared only after 42 consecutive clean days.

All three penalties measure the same ratio

Notifications sent, over engagement earned. You can improve it by sending less or by being more relevant. Chrome does not care which, but only one of the two also grows the business.

< 1% of notifications get interacted with

The playbook

In the order the work happens: collect a subscriber, decide how often to talk to them, what to say, who hears it and when to stop. It applies to every kind of site; your sector changes the volume, not the rules.

Earn the permission before you ask for it

The prompt itself is scored. A low acceptance rate pushes you into Chrome’s quieter UI and counts against you in the rate-limit formula.

  • Never fire the native prompt on landing. A visitor who has not read anything yet has no reason to say yes, and a denial is permanent.
  • Use a soft ask first: your own in-page invite explaining what they get ("match alerts", "price drops") and how often. Only show the browser dialog to people who accept that.
  • Trigger the ask on intent: second page view, end of an article, after a search, after an add-to-cart.
  • Sell the value, not the feature. "Get notified" is a mechanism; "Know first when the price drops" is a reason.
  • Never gate content behind the prompt. No "allow notifications to keep reading". That pattern is why the channel has this reputation.

Treat volume as a budget, not a lever

Volume is only half of every Chrome penalty: the other half is time spent on your site. Five pushes a day is fine for a daily-visit audience and disruptive for a once-a-month one.

  • Set a hard frequency cap per subscriber and hold it. For publishers 1–3 a day is the ceiling; for e-commerce and SaaS, 2–5 a week.
  • Ramp new subscribers up instead of opening at full volume. The first week decides whether they ever click again.
  • Budget against engagement, not against inventory: a segment that has not clicked in 30 days does not get the cadence of one that clicks weekly.
  • A quiet segment costs nothing to skip, and can cost the whole domain’s permission if you keep pushing to it.
  • Watch for bursts. Flushing a backlog after an outage looks exactly like abuse to the rate limiter.

Write copy the classifier does not flag

The model reads your title, body and buttons. It was trained largely on synthetic examples, so it is unpredictable: write like a newsroom, not like an ad.

  • Front-load the actual subject. The first 30–40 characters are all most people read on a lock screen.
  • One idea per notification, one clear action. If it needs two sentences to explain, it is an email.
  • Drop the urgency theatre: no ALL CAPS, no "!!!", no siren or money emojis, no countdown that is not real.
  • Name the thing. "Napoli–Inter kicks off in 15 min" survives; "🚨 URGENT: don’t miss out!" is the exact shape the model was built to catch.
  • Use a relevant image and your real icon. Generic clickbait creative reads as spam to humans too.
  • A/B the wording, not just the send time. A variant whose CTR collapses without a matching delivery drop is probably being flagged.

Send to the people who asked for that thing

Relevance is the only input you fully control that raises engagement and lowers volume at once. It fixes both sides of the ratio Chrome measures.

  • Segment by topic affinity before anything else. A subscriber who only ever clicks one category should mostly receive that category.
  • Use the interest score to split a broadcast: send to strong affinity now, and to weaker affinity only if the first wave performs.
  • Respect each subscriber’s local hour, not your office hour.
  • Match the send to the moment. Transactional and time-critical messages are what earn back the permission your marketing spends.
  • Deep-link to the exact page. A push that lands on the homepage teaches people your pushes are not worth opening.

Prune before Chrome prunes you

A dead subscriber is not neutral. They are the denominator dragging your engagement ratio under the revocation threshold, and they take the live subscribers down with them.

  • Define dormant for your business (no click in 60 or 90 days is a common line) and track it as a share of the list, weekly.
  • Run one honest re-engagement attempt: best-performing category, best hour, plainest copy. One, not a sequence.
  • If it does not land, stop sending to that cohort. Suppressed subscribers cost nothing; disruptive volume costs everyone the permission.
  • Remove expired and invalid endpoints. They inflate your "sent" number while never being seen by anybody.
  • Judge health by clicks per active subscriber, not by total sends. Total sends is the number Chrome uses against you.

Rewrite these before you send

Reported triggers, not an official blocklist: Google has published neither the model nor its training data. Read them as shapes to avoid rather than as banned words.

Notification wording that is reported to trigger Chrome's spam warning, and what to write instead
Avoid Why Write instead
URGENT / ACT NOW Manufactured urgency is the most widely reported trigger. Closes tonight at 23:59
FREE / 100% free Classic bait vocabulary, flagged even when it is true. No cost for the first month
Bitcoin / crypto gains Finance bait is heavily represented in the training set. Name the actual asset and the actual event
🚨 💰 🔥 in the title Emojis are part of the text the model reads. One neutral emoji, or none at all
You won’t believe… Withheld-payoff clickbait pattern. State the payoff
Click here now!!! Generic CTA plus punctuation spam. Read the match report

SharePush is built around these rules

  • A daily cap per subscriber

    Volume is a budget you set once, per person rather than per campaign.

  • Topics and interest scores

    Every campaign is tagged with what it is about, so a send can go to the people who asked for that thing. How segmentation works

  • Inactive subscribers are paused

    After a number of ignored campaigns you choose, they stop receiving sends for a while instead of dragging your engagement down. The lifecycle policy

Sources

Every claim above traces back to one of these. Chrome's rules keep moving, so check them before assuming this page is current.