Why ad blockers hide chat widgets, and what Pidge does about it

Some blocking lists remove chat widgets by the address their script loads from. A visitor with one of those lists on never sees the bubble, and you never hear from them. Pidge can load from a subdomain of your own site, which those rules don't match.

Lists downloaded and tested on 24 October 2026.

Which lists do it

The usual ad and tracker lists, like EasyList and EasyPrivacy, didn't block any of the chat scripts we tested. Two optional lists go after chat widgets on purpose:

In uBlock Origin both sit under Annoyances and stay off until the visitor turns them on. Other blockers and browsers may ship with different lists on. We didn't survey those.

Most rules block a vendor's whole domain when it's loaded on someone else's site. That's what $third-party (or $3p) means. Here's what the two lists said about each widget's usual script on 24 October 2026:

Chat widget rules in two blocking lists
Widget scriptEasyList – Chat WidgetsAdGuard – Widgets
Crisp, client.crisp.chatBlocked: ||crisp.chat^$~image,third-partyBlocked: ||client.crisp.chat^$3p, except on a few named sites
tawk.to, embed.tawk.toBlocked: ||tawk.to^$third-partyBlocked: ||embed.tawk.to^$3p, except on two named sites
Tidio, code.tidio.coBlocked: ||tidio.co^$third-partyBlocked: ||code.tidio.co^$3p
Intercom, widget.intercom.ioBlocked: ||widget.intercom.io^Only on three named sites
LiveChat, cdn.livechatinc.comBlocked: ||livechatinc.com^$third-partyNot blocked
Chatwoot Cloud, app.chatwoot.comNot blockedNot blocked
Pidge, app.pidge.chatNot blockedNot blocked

We ran each address, as loaded from a page on www.example.com, through 11 lists with Ghostery's blocking engine: the two above, AdGuard Annoyances, AdGuard Base, AdGuard Tracking Protection, EasyList, EasyPrivacy, Fanboy's Annoyance List, and uBlock Origin's own ads, privacy and annoyances lists. Only the three AdGuard and EasyList lists named here blocked any of them. We tested script addresses only. Lists also hide page elements: EasyList – Chat Widgets hides .intercom-launcher, for example, even when Intercom's script loads.

Lists change every few days, so this is a snapshot. The check below shows you today's answer for your own site.

What it costs you

Nothing breaks in a way anyone notices. The visitor sees a page without a chat bubble. You see no chat, and nothing in your inbox says someone tried.

It comes up again and again in vendors' forums and help pages. A Sendbird customer reported in May 2021 that uBlock was blocking the chat's connection. Customerly's help page says ad blockers can stop its chat from loading, and asks customers to report the blocker. Fish Is Fast, which uses Intercom, tells its users to allowlist the site. Asking visitors to change their blocker is the usual answer.

What Pidge does

By default

The snippet you get first loads from app.pidge.chat. On your site that's a third-party address, the same position Crisp or tawk.to are in. No list we tested blocks it today. That's because Pidge is new, not because of anything clever. A rule like ||pidge.chat^$third-party could be added to either list tomorrow, and it would hide the default setup.

With a chat domain

On the Websites page you can give each website its own chat domain, a subdomain of the site like chat.example.com. Once its DNS points at Pidge, the snippet loads from there. The script, the chat window and its connection all go to that address.

Blockers treat a subdomain of the site you're on as first-party, so $third-party rules don't apply to it. A rule for pidge.chat doesn't name your domain either. We checked both cases with the same engine: ||pidge.chat^$third-party blocks app.pidge.chat on www.example.com, and doesn't touch chat.example.com.

What it doesn't do

Set up a chat domain

You need to be an owner in Pidge, and able to add DNS records for your domain.

  1. In the inbox, open Websites and choose the website.
  2. Under Chat domain, type a subdomain of one of the website's domains, like chat.example.com, and click Use this domain. It has to be a subdomain, not the domain itself, and another website can't already use it.
  3. The inbox shows the record to add: type A (and AAAA if it lists one), name chat, and the address it shows as the value. Add it where the DNS for your domain is managed.
  4. On Cloudflare, switch the proxy off for that record (grey cloud, "DNS only").
  5. Wait for the label to change from Waiting for DNS to Live. Pidge looks every couple of minutes, and every 20 seconds while the page is open. Check now looks straight away.
  6. Open Code for your website. It now loads from https://chat.example.com/client/l.js. Put that code on your site in place of the old snippet.

The first visit to the new address takes a moment longer while its HTTPS certificate is fetched. Pidge only asks for a certificate once the DNS check has passed. The old snippet keeps working, so nothing goes dark while you switch. The chat domain only serves the widget, its files and the API, never the inbox.

Check it yourself

  1. Install uBlock Origin in a browser you don't use for work, or use a private window with it allowed.
  2. Open its dashboard, go to Filter lists, open Annoyances, tick EasyList – Chat Widgets and AdGuard – Widgets, and apply the change.
  3. Open your site. If there's no bubble, open uBlock's logger from its popup. It lists each blocked request and the rule that blocked it.
  4. In Chrome's DevTools, the Network tab shows blocked requests as failed with net::ERR_BLOCKED_BY_CLIENT.

AdGuard's browser extension offers its Widgets filter among its annoyance filters. Try your site before and after you set up a chat domain, and you'll see the difference for yourself, or that there isn't one yet.

Sources

More: Pidge vs Crisp · Switch from Crisp · Install guides

Spotted a rule we missed, or a list that blocks Pidge? Tell us in the chat on this page.

Try it with your own chat domain

Start free

The free plan covers one website and two people replying. No card needed.