Web push notifications not working? Fix it by symptom
Most push problems come down to five things: permission, the operating system, the service worker, caching or iPhone’s Home Screen rule. Find your symptom and work down the list.
- No prompt? You may have dismissed or blocked it, or the browser is using a quiet UI.
- Subscribed but nothing arrives? Check OS notification settings and Focus/Do Not Disturb first.
- Make sure /sw.js loads as JavaScript and isn’t cached or rewritten by a CDN.
- On iPhone, it must be opened from the Home Screen icon on iOS 16.4+.
Symptom: the prompt never appears
- You tapped “Not now” recently — prompts are capped for a few days. Try a private window.
- The site’s permission is “Block” — reset it in the browser’s site settings.
- The browser uses a quiet UI (Chrome, Edge) or blocks non-click requests (Firefox, Safari): look for a bell icon in the address bar.
- You’re on iPhone in a Safari tab — Home Screen required.
- The script didn’t load: an ad blocker or Content-Security-Policy may block it. Add
data-debug="true"to the Pusharoo snippet and check the console.
Symptom: subscribed, but nothing arrives
- Check OS settings: the browser must be allowed to notify (macOS System Settings, Windows Notifications, Android app settings).
- Turn off Focus / Do Not Disturb, or look in the notification centre — the message may be there silently.
- Desktop browsers must be running (Chrome and Firefox can run in the background).
- Confirm the worker:
https://yoursite.com/sw.jsopens and shows JavaScript. - Check for two service workers competing for the same scope; merge them (existing worker).
- Send a test to just your device and watch the browser DevTools console in the worker context (testing guide).
Symptom: “origin not allowed” or subscribe fails
- The site address registered in Pusharoo must exactly match the page origin — https, same domain (www is accepted automatically).
- Push requires HTTPS;
http://pages can’t subscribe (localhost is allowed for development). - Service workers can’t be served from a different domain; the file must be on your own origin.
Symptom: it worked, then stopped after a change
- A CDN or caching plugin is serving an old
sw.js. Bypass cache for/sw.jsand your manifest (Cloudflare steps). - A JS optimiser (Rocket Loader, minify/combine, “delay JavaScript”) is rewriting the worker or snippet — exclude them (WordPress caching notes).
- A theme or plugin update removed the snippet from your header.
Symptom: iPhone shows nothing
- iOS/iPadOS must be 16.4 or later.
- The site must be added to the Home Screen and opened from that icon — not from Safari.
- Your manifest must exist and use
"display": "standalone"(PWA guide). - Check Settings → Notifications → your web app’s name.
Symptom: works in Chrome, fails in one browser
| Browser | Usual cause |
|---|---|
| Brave | “Use Google services for push messaging” is off (fix) |
| Firefox | Prompt requested without a click |
| Opera Mini | No service worker support |
| Safari on iPhone | Not opened from the Home Screen |
| Samsung Internet | Battery optimisation delaying delivery |
Symptom: blocked by security headers
A strict Content Security Policy can block the snippet (script-src) or its API calls (connect-src); a Service-Worker-Allowed mismatch or a worker served with the wrong MIME type stops registration. Check the console for CSP violations and the Network tab for the /sw.js response type — it must be JavaScript, not HTML.
Symptom: Android delays or misses notifications
- Allow notifications for the browser in Android settings (Android 13+ asks once).
- Disable battery optimisation for the browser if your phone maker is aggressive.
- Long-press a previous notification to check the site wasn’t silenced.
Questions
Why did my push notifications suddenly stop working?
The most common causes are a cached or replaced sw.js, a removed snippet after a theme update, or OS-level notification settings changing after an update.
How do I reset notification permission for a site?
Click the icon left of the address bar, open site settings and reset Notifications to Ask. In Safari, use Settings → Websites → Notifications.
Can an ad blocker stop web push?
Some block push vendor scripts. The browser permission still works, but the subscribe flow may not start. Test with blockers disabled to confirm.
Why do notifications stop after a few weeks?
Expired subscriptions, uninstalled browsers, cleared data, or the user silencing the site. Remove dead subscriptions on 404/410 responses.
Why do notifications arrive late on Android?
Battery optimisation and Doze can delay normal-urgency messages. Use high urgency only for time-sensitive alerts.
Keep reading
How to test web push notifications
A live demo, DevTools push buttons, sending to yourself, iPhone checks and a pre-launch checklist.
Push notification deliverability: what really affects delivery
Expired subscriptions, TTL, offline devices, Focus modes and worker errors — and how to fix each.
Chrome push notifications: a complete guide
How Chrome asks, its quieter permission UI, settings on desktop and Android, background delivery and testing.
Web push on iPhone and iPad, explained honestly
The Home Screen rule, the manifest you need, and how to guide iPhone visitors without friction.
More in Browsers & devices: Firefox push notifications: how they work · Safari push notifications on the Mac · Microsoft Edge push notifications · Web push notifications on Android · PWA push notifications on iOS and Android · How to turn off website notifications · Samsung Internet notifications, explained · Push notifications in Opera and Opera GX · Brave push notifications: why they fail and how to fix it · Website notifications on a Chromebook · How to get website notifications on your iPhone · All guides
Free for life. No limits.
Unlimited subscribers, campaigns and automations. No badges. About five minutes to install.