Why the Facebook pixel is still loading when your tags are blocked

The Facebook pixel usually loads for one of three reasons: its base code runs in your page head before the banner, its tag fires before your consent defaults are set, or the tag never required advertising consent. If all three are clean, another vendor’s script is probably injecting the pixel at runtime, and your container cannot gate a request it never made.
Rule out the ordinary causes first
Most of the time it is one of these.
- The pixel base code sits in your page head with no
fbq('consent', 'revoke')above it, so it initialises before your banner renders. - The tag fires on a trigger that runs before your consent defaults are set, so it reads no choice at all.
- The tag was never set to require advertising consent, so it fires whatever happens around it.
- A social embed, a like button or a comment widget is setting cookies of its own.
Check each on a live page, not in the container: how to know if a tag is really setting cookies before consent has the method. If those are clean and the requests persist, the cause sits outside your container.
A consent tool gates what your container controls
An advertising pixel reaches a page by one of three common routes, and a consent tool reaches each differently. Most published answers assume the first two.
The first is a tag in your container, which fires when the consent state says it may. The second is a script in your page source, which a consent tool can usually hold too, by recognising it before the browser runs it.
The third is the one most guides skip. A script that is already running, and that you legitimately allowed, loads its own advertising module at runtime and injects the pixel. Your container never made that request, so nothing you change inside it will stop it.
Here is what the third route looked like on a live estate we audited in August. Meta and LinkedIn cookies were being written before consent, and the internal diagnosis blamed the container tags. On a fresh session with the banner up and nothing clicked, both tags carried an advertising storage condition and neither fired. The cookies appeared anyway, with the same pixel IDs, because an allowed marketing platform tag loaded its own advertising pixel file, which loaded the Meta and LinkedIn libraries. Nothing was misconfigured; the boundary was not where anyone assumed.
How to tell which one you have
A few minutes, without opening the container.
Open the site on a fresh profile and decline everything
No stored consent, the network panel open before the first paint, and a deliberate reject.
Filter for the pixel's own hosts
For Meta that is
connect.facebook.netfor the library andfacebook.com/trfor the event. Look in the application panel too: an_fbpcookie appearing on your own domain in that fresh session usually means the library loaded. No requests and no cookie means you do not have this problem.Expand the initiator chain, and do not read only the top line
This is the step most easily got wrong. Your tag manager often appears in the chain because it loaded the vendor script much earlier, which is not evidence that a tag manager tag made this request. What you want is the entry immediately above the pixel call: it names the script that owns it.
Check the container against what you just saw
Open preview and check whether the advertising tags fired. A tag in the not fired list while the request still shows is not a contradiction: the two tools describe two different layers.
Follow the owning script back to its platform
Find the vendor behind it, then its advertising integration setting. That setting, not your consent configuration, is putting the pixel on the page.
Why gating harder in the container cannot work
It feels like progress, which is why it is expensive. The team adds a consent condition to the advertising tags, then a blocking trigger, then an exception, and concludes the consent tool is broken, when every change went to a tag that was already not firing.
Separate this from the fault it is confused with. Your own tags firing before the banner registers its defaults is a timing problem, genuinely fixable in the container, and we covered it in why tags fire before the cookie banner loads. This is scope rather than timing: your tags behaved correctly and something outside their scope did the thing you were preventing.
Where the fix actually lives
Four levers. The right one depends on what the vendor script does before consent, and on which category the script should have been in to begin with: which consent category each third party script belongs in covers that decision.
- The vendor's own portal. Most platforms that inject advertising pixels expose a setting for it. Turning that integration off is cleanest: the script keeps doing its legitimate work and stops carrying somebody else's pixel.
- An early consent revoke call.
fbq('consent', 'revoke'), running before anything can initialise the pixel, tells the Meta library to hold its events whoever loaded it. Meta’s own consent documentation describes the revoke and grant calls. A backstop rather than a full answer: the library still loads, and it only helps if your call truly runs first. - The vendor's tag in your container. If a tag you own loads the vendor script, gate that tag on advertising consent. Blunt: you also lose whatever else that script does for visitors who decline, such as forms or chat.
- Category blocking at the consent tool. If the vendor script loads outside your container, categorise the script itself as advertising so the tool holds it back before it runs. Same trade off.
Then re run the same test: fresh profile, decline, filter, confirm nothing reaches the pixel hosts. One limit: this reads the browser only, so anything your servers send through a conversions API has to be checked at the source. Verifying at the destination rather than on the banner is the general habit, described in how to check your banner is really sending the consent signal.
Velo holds the scripts you mark with a consent category until that category is granted; a pixel another vendor injects without that mark still needs tracing back to the vendor.
Common questions
What people ask about this topic.
Why is the Facebook pixel still loading when my tags are blocked?
Usually because the pixel base code runs in your page head before the banner, the tag fires before your consent defaults are set, or it never required advertising consent. If those are clean, a script from another vendor, already running and allowed, is probably loading its own advertising module and injecting the pixel. Your container never made that request, so no setting inside it can stop it.
How do I find out what is loading the Meta pixel on my site?
Load the site on a fresh browser profile, decline everything, and filter the network panel for connect.facebook.net and facebook.com/tr. When a request appears, expand its initiator chain. A tag manager often appears in it because it loaded the vendor script earlier, which does not mean a tag made this request. The script immediately above the pixel call is the one that owns it.
Can a consent management platform block a pixel that another vendor's script injects?
Not by targeting the pixel, but usually by targeting the script that creates it. Automatic blocking recognises a script before the browser runs it, so a pixel created later by an already allowed script is not something it can see in advance. The workable options are the vendor's own advertising integration setting, gating the vendor's tag on advertising consent, categorising the vendor script as advertising, or an early fbq consent revoke call.
My Meta tag shows as not fired in preview but the pixel request still happens. What does that mean?
It usually means the container is behaving and something else is loading the pixel: preview describes your tag, the network panel describes the page. Expand the initiator chain and find the script immediately above the request. Adding further consent conditions to a tag that was already not firing changes nothing.
Why is the _fbp cookie still set after someone rejects cookies?
The Meta pixel library writes _fbp on your own domain, so finding it on a fresh session after a reject usually means the library loaded anyway. Check whether its base code runs in your page head before the banner, or whether its tag never required advertising consent. If your tags show as not fired, expand the initiator chain of the connect.facebook.net request, because the script above it may belong to another vendor.
Website privacy, in one place.
Scan your site →

