Push notification deliverability: what really affects delivery
“Sent” doesn’t mean “seen”. Between your server and a screen sit push services, sleeping devices, OS settings and a service worker. Here’s what can go wrong and how to keep delivery healthy.
- Expired subscriptions (HTTP 404/410 from the push service) must be removed — Pusharoo does it automatically.
- Offline devices receive messages later only if the time-to-live (TTL) hasn’t run out.
- OS settings — Focus, Do Not Disturb, battery savers — can hide or delay notifications you delivered correctly.
- A broken or cached service worker is the most common self-inflicted delivery problem.
The delivery path
Your sender encrypts the message and posts it to the subscription’s push service (Google’s for Chrome, Mozilla’s for Firefox, Apple’s for Safari, Microsoft’s for Edge). The push service stores it until the device is reachable, then wakes the service worker, which shows the notification. Every step has its own failure mode.
Failure modes and fixes
| What happens | Why | Fix |
|---|---|---|
| Push service returns 404 or 410 | Subscription expired: browser data cleared, browser uninstalled, permission revoked | Delete it immediately; never retry. Automatic in Pusharoo. |
| Push service returns 429 | Too many requests too fast | Back off and retry later |
| Accepted but never shown | Device offline beyond the TTL | Use a longer TTL for evergreen content |
| Shown silently / not as a banner | Focus, Do Not Disturb, notification summary | Nothing to fix server-side; it’s in the notification centre |
| Delayed on Android | Battery optimisation on some brands | Normal; use higher urgency only for genuinely urgent messages |
| Never reaches the worker | Old or broken sw.js, CDN caching, two workers competing | Serve sw.js uncached; one worker per scope |
TTL and urgency
Every Web Push request carries a TTL header — how many seconds the push service should keep trying if the device is offline. A flash sale ending tonight deserves a short TTL so nobody gets it tomorrow; a new article can live for days. The optional Urgency header (very-low to high) lets devices save battery on low-priority messages. Both come from RFC 8030, covered in the Web Push protocol.
Service worker health
https://yoursite.com/sw.jsopens and returns JavaScript (not an HTML error page).- It isn’t cached for long at your CDN — see Cloudflare notes in the docs.
- Only one service worker controls the page; merge others with
importScripts. - On Safari and iPhone, every push must show a notification or the subscription can be revoked.
Troubleshooting steps are in push notifications not working.
Stay on the right side of browser policies
Browsers act against abusive notifications — misleading permission requests, fake system alerts, phishing or malware. Chrome can switch an abusive site to quiet permission UI. Keep your prompt honest, your content genuine and your links pointing to your own site, and this never becomes a concern.
List hygiene
An honest subscriber count only includes people you can reach. Pusharoo removes subscriptions as soon as a push service reports them gone and purges them automatically, so “sent” reflects live browsers. If you migrate from a tool that counted every subscription ever collected, expect a smaller but more accurate number (switching providers).
Questions
What is a good push notification delivery rate?
Healthy lists see the vast majority of sends accepted by push services; the rest are mostly expired subscriptions that should be removed. Display rates are lower because devices are offline or in Focus modes.
Why did my subscriber count drop after a campaign?
Sending reveals expired subscriptions — the push service returns 404/410 and they are removed. That’s cleanup, not people unsubscribing because of your message.
Do web push notifications arrive when the browser is closed?
On Android and macOS/Windows, usually yes while the OS keeps the browser’s background process alive; Chrome on desktop may need to be running in the background. Messages wait at the push service until the TTL expires.
Do push services filter spam like email?
Not in the same way, but browsers quiet prompts for sites many users block, and users can block or silence you instantly. Relevance is your deliverability.
Why are some notifications delayed?
Offline devices, battery savers, Doze on Android and low urgency settings can delay delivery until the device wakes or reconnects.
Keep reading
Web push notifications not working? Fix it by symptom
Symptom-by-symptom fixes: no prompt, blocked permission, nothing arrives, iPhone issues and worker caching.
The Web Push protocol, explained
RFC 8030 delivery headers, RFC 8291 encryption, RFC 8292 VAPID, status codes and payload size.
Push notification click-through rate (CTR), explained
How to calculate CTR consistently, why benchmarks disagree and ten practical ways to raise it.
How web push works, step by step
Push API, service workers, VAPID keys and encryption — the full technical path of a notification.
More in Growth: The push opt-in prompt, done right · Push notifications for online stores · Push notification opt-in rate: measure it, then raise it · Push notification analytics that actually answer questions · How to get more push notification subscribers · Switching web push providers: a practical migration plan · Win-back push notifications that bring people back · Push notifications vs. pop-ups · All guides
Free for life. No limits.
Unlimited subscribers, campaigns and automations. No badges. About five minutes to install.