Close Menu
  • Home
  • Life style
    • Celebrities
    • Exercise & Training
    • Healthline
  • Exploration
    • Beauty tips
    • Business
    • Travel guides
    • Fashion
    • Technology
  • Web tutorials
    • Hosting & Servers
    • Blogger guides
    • WordPress guides
  • English
    • Tiếng Việt
    • Hmoob
    • English
Facebook YouTube X (Twitter) Instagram
Trending
  • CPU Performance API: Make Web Interfaces Lighter for Low-End Devices
  • Move XSLT out of the browser before Chrome 158 ends support
  • Create a Draggable Desktop PWA Title Bar with `window-drag`
  • Designing a Malware Package Advisory Pipeline You Can Roll Back
  • How to Keep CI/CD Running Through a GitHub Actions Outage
  • Reduce Web Notification Spam by Auditing Chrome and FCM Permissions
  • Turn On Dependabot Malware Alerts for 8 GitHub Ecosystems
  • What Is Worth Seeing at Olivia Rodrigo: The Cure Unraveled?
Facebook YouTube X (Twitter) Instagram
SaibABCSaibABC
Chú thích cho quảng cáo
  • Home
  • Life style
    1. Celebrities
    2. Exercise & Training
    3. Healthline
    4. View All

    Michael Jackson Fashion Exhibition: When Clothing Tells the Story of the Stage

    13/09/2026

    Buy Concert Tickets Safely: 7 Ways to Avoid Social Media Scams

    13/09/2026

    How Many World Cup Goals Has Messi Scored? Year-by-Year Through 2026

    13/09/2026

    Messi’s Six World Cups: From the 2014 Defeat to 2022 Glory

    13/09/2026

    Five-Minute Office Exercises: A Snack-Sized Movement Schedule

    30/08/2026

    Strengthen Your Core with 12 Exercises from Beginner to Advanced

    30/08/2026

    Where Do Children Get Too Much Sodium? How to Cut Back

    12/09/2026

    “Tejocote root” May Not Be Safe Tejocote Root

    12/09/2026

    Outpatient Antibiotics: Safe Prescribing Takes More Than Drug Choice

    11/09/2026

    Is Glutathione Injection Safe? Don’t Confuse Food-Grade Powder with Injectable Material

    11/09/2026

    Michael Jackson Fashion Exhibition: When Clothing Tells the Story of the Stage

    13/09/2026

    Buy Concert Tickets Safely: 7 Ways to Avoid Social Media Scams

    13/09/2026

    How Many World Cup Goals Has Messi Scored? Year-by-Year Through 2026

    13/09/2026

    Messi’s Six World Cups: From the 2014 Defeat to 2022 Glory

    13/09/2026
  • Exploration
    1. Beauty tips
    2. Business
    3. Travel guides
    4. Fashion
    5. Technology
    Featured

    CPU Performance API: Make Web Interfaces Lighter for Low-End Devices

    By Nuj Coom13/09/2026
    Recent

    CPU Performance API: Make Web Interfaces Lighter for Low-End Devices

    13/09/2026

    Create a Draggable Desktop PWA Title Bar with `window-drag`

    13/09/2026

    Designing a Malware Package Advisory Pipeline You Can Roll Back

    13/09/2026
  • Web tutorials
    1. Hosting & Servers
    2. Blogger guides
    3. WordPress guides
    4. View All

    Let’s Encrypt on Vultr: Enable HTTPS and Automatic Renewal

    09/09/2026

    Install WordPress on Vultr Manually: From Ubuntu to HTTPS

    08/09/2026

    Point Your Domain to a Vultr VPS and Verify the DNS Connection

    08/09/2026

    Set Up an Ubuntu VPS on Vultr: From Account Creation to SSH

    07/09/2026

    Blogger Permissions for Collaborators: Keep Control

    07/09/2026

    Add a Blogger Report Abuse Button to Custom Themes

    07/09/2026

    Why Blogger Image SEO Takes More Than File Names and Alt Text

    07/09/2026

    Blogger Image Lazy Loading for SEO: What Googlebot Must See

    05/09/2026

    WordPress 7.1: Convert GIFs to Video to Reduce File Size

    11/09/2026

    Install WordPress on Vultr Manually: From Ubuntu to HTTPS

    08/09/2026

    WordPress 7.1 AVIF & HEIC: Reduce Server Load

    02/09/2026

    WordPress 7.1 Responsive Breakpoints: How to Test Them

    02/09/2026

    CPU Performance API: Make Web Interfaces Lighter for Low-End Devices

    13/09/2026

    Move XSLT out of the browser before Chrome 158 ends support

    13/09/2026

    WordPress 7.1: Convert GIFs to Video to Reduce File Size

    11/09/2026

    WebMCP for Websites: Turn an HTML Form into an AI Agent Tool

    11/09/2026
  • English
    • Tiếng Việt
    • Hmoob
    • English
SaibABCSaibABC
Home»Exploration»Technology»Reduce Web Notification Spam by Auditing Chrome and FCM Permissions
Technology 11 Mins ReadNo Comments

Reduce Web Notification Spam by Auditing Chrome and FCM Permissions

Nuj CoomBy Nuj Coom
Facebook Twitter Pinterest LinkedIn Tumblr Email
Chú thích cho quảng cáo

Contents

  1. Distinguish the Four Layers Behind Unwanted Web Notifications
  2. Check the Permission-Request Flow Before Checking FCM
    1. Remove Permission Requests on Initial Page Load
    2. Design the Invitation So Users Do Not Click by Mistake
  3. Check notification permissions in Chrome
  4. Review Firebase Cloud Messaging and notification subscriptions
    1. Revoke the subscription when the user turns off notifications
  5. Check notification content, links, and frequency
  6. Check the Chrome Abusive Notifications Report
  7. Quick troubleshooting tree for persistent unwanted notifications
  8. Acceptance checklist before wider rollout
  9. Reference source

Target outcome: after the review, the website requests notification permission only after a deliberate user action, does not pressure users to click Allow, does not send misleading or irrelevant content, and can disable the FCM registration when users turn off notifications.

To reduce unwanted web notifications, do not start by changing the Firebase project or regenerating the VAPID key. Check these items in order: the permission-request flow → the permission status in Chrome → the FCM registration → the content and sending frequency → abuse reports. FCM provides a mechanism for delivering messages to the web, but it does not replace the website’s responsibility to request permission appropriately and choose suitable content (see firebase.google.com).

Distinguish the Four Layers Behind Unwanted Web Notifications

Layer to checkCommon problemVerification signal
Permission-request interfaceDisplays a fake dialog resembling a system button or forces users to allow notifications to view the content.The user did not deliberately request notifications but has already seen an invitation to enable them.
Browser permissionThe domain is still allowed to send notifications even though the user no longer wants to receive them.Chrome lists the domain as allowed to send notifications.
FCM registrationAn old token or Firebase Installation ID is still stored and continues to receive messages.The account or browser has disabled notifications, but the registration record remains active.
Message contentA title falsely presents a system alert, a message resembles a chat notification, the link is unfamiliar, or messages are sent too frequently.The payload does not clearly explain why the message was sent or where it leads.

Chrome and Google Web Tools classify misleading permission requests, fake notifications, phishing notifications, and promotions for malicious software as forms of abusive notifications. Therefore, “someone clicked Allow” does not mean that “the registration is valid” (see support.google.com).

Check the Permission-Request Flow Before Checking FCM

Remove Permission Requests on Initial Page Load

Do not call Notification.requestPermission() in code that runs immediately when the page opens, in DOMContentLoaded, in an automatic timer, or after a redirect that the user did not deliberately initiate.

Chrome Lighthouse flags requesting notification permission immediately on page load as a poor practice. A safer approach is to first explain what type of messages the user will receive, then open the permission dialog only when the user clicks a clearly labeled subscription button (see developer.chrome.com).

Chú thích cho quảng cáo

The code below runs in browser-side JavaScript. The #enable-notifications button must exist in the website’s HTML. The registerFcmSubscription() function is the integration point with your Firebase setup; replace it with the actual function in your project, and do not copy the function name unchanged if your project does not contain that function.

const enableButton = document.querySelector('#enable-notifications');

if (!enableButton) {
  throw new Error('Không tìm thấy nút #enable-notifications');
}

enableButton.addEventListener('click', async () => {
  if (!('Notification' in window)) {
    showMessage('Trình duyệt này không hỗ trợ thông báo web.');
    return;
  }

  try {
    const permission = await Notification.requestPermission();

    if (permission === 'granted') {
      // Thay bằng hàm đăng ký FCM thật của ứng dụng.
      await registerFcmSubscription();
      showMessage('Đã bật thông báo. Bạn có thể tắt bất cứ lúc nào.');
    } else {
      showMessage('Bạn chưa bật thông báo; website vẫn hoạt động bình thường.');
    }
  } catch (error) {
    console.error('Không thể xin quyền thông báo:', error);
    showMessage('Không thể bật thông báo lúc này.');
  }
});

After replacing the integration function, open the website in a test Chrome profile, click the button, and verify that the permission dialog appears only after the click. If the user declines, do not create an FCM registration record.

Design the Invitation So Users Do Not Click by Mistake

  • Clearly state what users will receive—for example, “delivered-order alerts” or “new messages”—instead of simply saying, “Click Allow to continue.”
  • Do not lock the content, video, search results, or close button behind the notification-permission request.
  • Do not use images or wording that imitates system dialogs, virus warnings, private messages, or browser-update requests.
  • Let users choose “Not now” while continuing to use the website normally.
  • Display a button for turning off or managing notifications in the user account instead of forcing users to find the setting in their browser.

If the website uses an intermediary interface before showing the Chrome dialog, that interface must explain the request honestly and must not apply pressure. A deceptive prompt can cause users to subscribe unintentionally and is a common sign of web notification abuse.

Check notification permissions in Chrome

On a computer, open Chrome and go to Settings → Privacy and security → Site settings → Notifications. Check the website’s domain in the lists of allowed and blocked sites, as well as any entries that Chrome is prompting users to review.

Chrome may automatically revoke notification permission from websites that Safe Browsing identifies as deceiving users into granting permission. Chrome may also limit prompts or require a website to request permission again. Therefore, a changed permission does not necessarily indicate that FCM is broken; first check the permission-request experience and the domain’s safety status (see support.google.com).

For a practical test, use a clean Chrome profile or clear the domain’s permission in Settings, then run the following scenarios:

  1. Open the page for the first time: the permission dialog must not appear automatically.
  2. Read the explanation without clicking the subscription button: the browser’s permission dialog must not appear.
  3. Click the subscription button: only then should Chrome display the permission request.
  4. Select “Don’t allow”: the website’s main content must remain usable.
  5. Select “Allow”: receive only the type of notification that was described.
  6. Revoke permission in Chrome: the system must no longer treat the browser as an active subscription.

Chrome has a “Use quieter messaging” option to reduce disruptive prompts. This is a browser feature, not a fundamental fix for a website that repeatedly requests permission or sends poorly targeted content.

Review Firebase Cloud Messaging and notification subscriptions

FCM on the web requires notification permission, a service worker, and HTTPS configuration. Only after permission has been granted should the application register the browser, store the required identifiers on the server, and use them to send messages to the right recipients. In your system, create at least the following mapping table:

FieldPurposeRequired handling
User or account IDIdentify which user owns the subscription.Delete or disable it when the account signs out, unsubscribes, or is deleted.
Origin or domainPrevent a subscription from another website from being used accidentally.Reject records whose domain does not match the expected domain.
FCM token or Firebase Installation IDRoute notifications to the correct browser instance.Update it when the value changes; remove it when FCM returns an invalid-token error.
Consent stateRecord whether the user has enabled notifications, disabled them, or has not decided.Do not assume that a user is “subscribed” merely because a token once existed.
Topic or recipient groupLimit the types of content that can be sent.Unsubscribe the user from the group when they clear the selection.

Do not send a promotional notification to every token simply because the tokens still exist in the database. Each campaign should have audience criteria, a purpose, an expiry period, and a mechanism for excluding users who have opted out. Firebase also recommends managing installation identifiers and not mixing legacy and current subscription-management methods in the same flow.

Revoke the subscription when the user turns off notifications

The “Turn off notifications” button should perform both actions: update the consent status on the server and delete or disable the corresponding FCM subscription. If it only hides the button in the interface, the server may still send messages to the old token.

async function disableNotifications() {
  const response = await fetch('/api/notification-subscription', {
    method: 'DELETE',
    headers: { 'Content-Type': 'application/json' },
    credentials: 'include'
  });

  if (!response.ok) {
    throw new Error(`Không thể tắt đăng ký: HTTP ${response.status}`);
  }

  showMessage('Đã tắt đăng ký thông báo trên tài khoản này.');
}

The code runs in the browser and /api/notification-subscription is only an example endpoint; replace it with the application’s actual API. The server API must authenticate the user and disable only subscriptions belonging to that account. Do not expose an FCM server key, a VAPID private key, or administrative credentials in JavaScript sent to the browser.

Check notification content, links, and frequency

Check notification content, links, and frequency

Every notification should answer three questions: Who sent it? Why did I receive it? Where will it take me if I click it? If users cannot answer these three questions quickly, the notification may be perceived as spam even when the delivery technology is working correctly.

  • Title: describe a specific event, such as “Your order has been delivered”; do not use “Urgent alert” unless there is a genuine incident.
  • Body: keep it brief and accurate; do not create a false sense of loss or ask users to enter a password out of context.
  • Icon: use a recognizable brand or product icon; do not use imagery that resembles an operating-system alert.
  • Link: use HTTPS, point to the correct relevant page, and do not redirect through a chain of domains of unclear origin.
  • Frequency: Group similar events, set per-user limits, and stop sending messages when there is no longer a valid reason to do so.

For background web notifications, FCM supports links that take users back to the application; these links must be HTTPS URLs. Firebase documentation also recommends that the title accurately describe the nature of the notification and not repeat the website name or domain in the title when the browser already displays the domain (see firebase.google.com).

Check the Chrome Abusive Notifications Report

If you are the domain owner or a user with access in Google Search Console, open the domain’s Abusive Notifications Report . The report may show page examples, the type of violation, and how the experience appears. The report examines only a sample URL, so fixing one page is not enough to conclude that the entire domain is safe.

  1. Record the URL, interface pattern, and type of issue shown in the report.
  2. Identify the source of the experience: the website’s code, a tag manager, a plugin, an advertising network, or a third-party library.
  3. Remove misleading permission requests and any fake or fraudulent notifications or links to unwanted software.
  4. Review templates, landing pages, subdomains, and shared scripts.
  5. Check again using a clean browser profile and the states for granting, denying, and revoking permission.
  6. Request a review after addressing the entire group of issues.

If the report status is Failing, Chrome may block all notifications, as well as the website’s permission requests. Google states that the report is based on URL samples and that you must fix both the listed violations and any similar violations that remain; after the status changes, the updated behavior may take time to be fully reflected in Chrome (see support.google.com).

Quick troubleshooting tree for persistent unwanted notifications

  • No permission prompt appears: check the domain’s current permission, quiet notification mode, HTTPS, and browser management policies.
  • The user denied permission but still receives messages: look for old tokens, multiple domains, or multiple service workers recording the same device; disable the record on the server.
  • Only some users receive incorrect messages: check the segment, topic, configuration cache, and whether signing out of the account removes the subscription.
  • Chrome revokes permission or blocks the request: check the Abusive Notifications Report, fake interface layers, third-party scripts, and linked content.
  • Duplicate notifications are received: check for duplicate sends from notification messages, data messages, and the service worker; ensure that only one flow is responsible for displaying the notification.
  • Notifications continue after the service worker is deleted: check the domain’s permission, FCM records on the server, and other browsers or subdomains; deleting one service worker does not automatically revoke all user permissions.

Acceptance checklist before wider rollout

  • The first page load does not automatically request permission.
  • The explanation clearly states the type of notifications and their expected frequency.
  • Users can dismiss the prompt and still use the main content.
  • FCM is registered only after the permission status is granted.
  • The token or Firebase Installation ID is associated with the correct user, domain, and content group.
  • Invalid, outdated, or revoked tokens are disabled on the server.
  • The notification opt-out button updates both the consent status and the sending record.
  • Notifications do not impersonate system alerts, private messages, or security warnings.
  • Links in notifications use HTTPS and lead to the correct context.
  • The Chrome Abusive Notifications Report has been checked after deployment.

If you are fixing a legacy system, deploy the minimum path first: disable automatic permission requests → add a clearly labeled subscription button → stop sending to tokens that cannot be verified → review the payload → check Google’s report. Only then optimize segmentation and frequency. This approach helps distinguish permission, subscription-data, and content problems instead of changing everything at once.

Reference source

  • Abusive notifications – Web Tools Help
  • Introduction to the Abusive Notifications Report
  • Chrome enforcement – Web Tools Help
  • Manage Chrome safety and security – Computer
  • Requests the notification permission on page load
  • Get started with Firebase Cloud Messaging in Web apps
  • Receive messages in Web apps

Chú thích cho quảng cáo
browser permissions Chrome Firebase Cloud Messaging push notifications Safe Browsing web security
Share. Facebook Twitter Pinterest LinkedIn Tumblr Email
Previous ArticleTurn On Dependabot Malware Alerts for 8 GitHub Ecosystems
Next Article How to Keep CI/CD Running Through a GitHub Actions Outage
Nuj Coom
  • Website
  • Facebook
  • X (Twitter)
  • Instagram

I'm a doctor, for sure. But I also love writing and sharing knowledge, life experiences, web tricks, and useful lectures. Let's cheer for your passion.

Related Posts

CPU Performance API: Make Web Interfaces Lighter for Low-End Devices

13/09/2026

Move XSLT out of the browser before Chrome 158 ends support

13/09/2026

Create a Draggable Desktop PWA Title Bar with `window-drag`

13/09/2026
Add A Comment
Leave A Reply Cancel Reply

Latest posts

HTTP/3 hosting: Measuring QUIC and HTTP/2 fallback

How Many World Cup Goals Has Messi Scored? Year-by-Year Through 2026

Add a Blogger Report Abuse Button to Custom Themes

Improve INP for a Blog with DevTools

Build a Minimalist Wardrobe in 2026: Buy Less, Wear Longer

Advertisement
Chú thích cho quảng cáo

SUBSCRIBE TO UPDATES

Get the latest creative news from SaibABC.Com on web tips, design, and business.

Copyright © 2024. Designed by NujCoom.
  • Home
  • Contact
  • Privacy
  • Tiếng Việt
  • Hmoob

Type above and press Enter to search. Press Esc to cancel.