_fbp was stored, with no ad request recorded. Loaded in a fresh browser with no stored cookies, banner left untouched, 23 to 26 October 2026.
I hate cookie banners. And I hate them even more when the sites showing them don't obey them. Half the websites we loaded this week put one in the way before you can read anything, and plenty of the ones that offer a real choice tuck "reject" behind a second screen of toggles. One Polish local news site's banner tells you it shares data with "1,180 trusted partners". Nobody reads that list. People click whatever makes the box go away.
The deal behind all this friction is simple: the site asks first, then tracks. Our data says that on one site in four that shows a banner, the tracking does not wait for the answer. With the banner still on screen and untouched, the advertising tags had already reported the visit to Meta, Google, TikTok, LinkedIn or a programmatic ad exchange, or left an advertising identifier in the browser. On most of those sites, whatever the visitor clicks next, that first page view has already been sent.
Last week we published a narrower version of this finding about OpenAI's new ChatGPT ad pixel, which ships with tracking switched on by default. (CipherCue) Several readers asked whether OpenAI was unusual. It is not. Across a random sample of 13,712 websites, OpenAI is ninth on the list of ad vendors firing early, well behind Meta and Google Ads.
How we tested
We took the 106,821 reachable websites we track, mostly European company sites, and put them in random order. Because the order is random, the sites we have scanned so far are a random sample. These figures cover the first 15,583. Of those, 13,712 loaded normally. The other 1,871 blocked our browser or returned an error, so we left them out.
Each site got a brand-new Chrome profile with no cookies or stored data, a normal desktop window, and a normal Chrome user agent. We loaded the homepage, waited ten seconds, and did nothing: no clicks, no scrolling, no mouse movement. We recorded every network request, every cookie the browser held at the end, whether a consent banner was visible, and a screenshot.
A site counts if one of two things happened before any click. Either an advertising endpoint received a request and answered it: a Meta Pixel event at facebook.com/tr, a Google Ads conversion or remarketing hit, a TikTok, LinkedIn, Pinterest or Microsoft Ads event, and so on. Or the browser held an advertising identifier cookie, such as Meta's _fbp or Google's _gcl_au. We report the two separately where it matters. Loading a vendor's script does not count. A Google hit that declares ad consent denied, in either of Google's two consent parameters, does not count either; 1,235 sites (9.0%) sent only such hits, and they are left out.
One thing we can't tell you is whether the tracking started before or after the banner popped up, because we didn't time the banner. What we do know is that it happened while the banner was still waiting for an answer.
Three examples
These three were drawn at random from the sites the scan flagged, then checked by hand. We have redacted their names and logos (see the disclosure note below). Each figure shows what was on screen when the scan finished, and the advertising requests that had already left the browser.
ccm/collect told Google that ad consent was granted (gcs=G111), the opposite of what the banner recorded.
TDID, uuid2), the IDs used to recognise the same browser across other sites.A UK example, before and after "Reject All"
The fourth example is a UK online retailer from the same random sample, and we followed it one step further: we clicked "Reject All" and loaded the page again. It was not chosen because it stands out; about one in four sites showing a banner did the same before a choice was made. The results were the same on four runs in an ordinary Chrome window (fresh profile, no extensions, UK connection) on 26 October 2026.
C0001:1, everything else 0). The same four advertising requests went out on the next load. Google Ads requests on that load carried Google's consent-denied flag and are not listed.Banner on screen, ad tracking already active: 23.9%
Data table
| Measure (sites that loaded) | Sites | Share |
|---|---|---|
| Sites showing a consent banner | 6,955 of 13,712 | 50.7% |
| Banner on screen, advertising tracking active (request or identifier cookie) | 1,662 of 6,955 | 23.9% |
| an advertising request was sent and answered | 1,512 of 6,955 | 21.7% |
| advertising identifier cookie only, no ad request recorded | 150 of 6,955 | 2.2% |
| Banners offering a reject or settings option: tracking active | 1,247 of 5,364 | 23.2% |
| Banners offering only "OK" or "Accept": tracking active | 366 of 1,336 | 27.4% |
| Banner on screen, marketing cookie already set | 1,470 of 6,955 | 21.1% |
| Banner on screen, session-recording tool already running | 838 of 6,955 | 12.0% |
| Any advertising tracking before interaction, all loaded sites | 2,396 of 13,712 | 17.5% |
The 95% confidence interval on the headline is 22.9% to 24.9%. Counting only sites where an advertising request was sent and answered, leaving out cookie-only cases, the figure is 21.7% (20.8% to 22.7%). The headline has moved by less than a point as the sample grew from 5,000 to 13,700 sites, and we expect it to hold for the full run.
Banners that offer a real choice did not look much different. Where the banner had a reject or settings button, tracking was active on 23.2% of sites, against 27.4% for "OK only" notices. This compares sites, not banner designs, so it does not show that the button changes anything; it does show that on those sites the tags had not waited for it.
It happens fast. Measured from the moment the browser requested the page, the median first advertising request went out after 1.8 seconds, and three-quarters within 2.6 seconds; 224 sites (15%) sent one within the first second. Because we did not time the banner itself, this does not say whether a tag beat the banner onto the screen. It does say the tags did not wait for an answer: on every one of these sites the banner was still unanswered when the observation ended.
Many of these sites are not dealing with a single vendor. On 945 the tracking involved one ad vendor, on 350 two, and on 367 three or more.
Which trackers fire first
Data table
| Vendor | Banner sites where it fired or set its cookie before consent |
|---|---|
| Meta (Facebook Pixel) | 827 |
| Google Ads | 741 |
| 208 | |
| TikTok | 207 |
| Microsoft Advertising | 178 |
| Klaviyo | 147 |
| Google DoubleClick | 131 |
| 124 | |
| OpenAI | 111 |
| Criteo | 77 |
| The Trade Desk | 77 |
The cookies these tags leave behind are the familiar ones. Across all 13,712 loaded sites, Meta's _fbp was set before consent on 1,151 and Google's _gcl_au on 1,073. TikTok's _ttp was set on 293 and Microsoft's MUID on 221. On 1,871 of the 2,173 sites with any marketing cookie, at least one was written to the site's own domain. So these identifiers belong to the site itself, not just to third-party domains loaded in the background.
The banner says no; the tags are not listening
Cookiebot exposes the visitor's consent state to the page, so on Cookiebot sites we can read what the banner itself recorded. On 815 sites with a visible Cookiebot banner, Cookiebot reported marketing consent as false. On 260 of those (32%), advertising tracking was active anyway.
Google Ads shows the same mismatch from the other side. Google's tags can take the visitor's choice from the banner ("Consent Mode") and declare it on every hit, in two parameters, gcs and gcd. When ad consent is denied, the tag sends only cookieless pings, which we do not count. Of the 716 sites with a banner on screen and a counted Google Ads hit, 545 (76%) sent hits whose parameters show Consent Mode was not set up for advertising at all: gcd marks ad storage as "not set", or neither parameter is present. The other 171 (24%) declared ad consent "granted" before the visitor had chosen, like the clothing shop above.
Neither result shows that a consent platform is broken, and the scan cannot see how each site installed its tags. What it shows is a mismatch: the state the banner holds and the signals the advertising tags send do not agree. Possible causes include tags installed outside the consent platform, a shop plugin or tag-manager integration that bypasses it, consent defaults that were never set, or defaults set to "granted".
By consent platform
Data table
| Consent platform detected | Sites with the banner on screen | Ad tracking active | Share |
|---|---|---|---|
| IAB TCF (any TCF-registered platform) | 1,183 | 233 | 19.7% |
| Cookiebot | 819 | 263 | 32.1% |
| OneTrust | 629 | 126 | 20.0% |
| CookieYes | 418 | 112 | 26.8% |
| Usercentrics | 345 | 62 | 18.0% |
| Google Funding Choices | 326 | 59 | 18.1% |
| Shopify customer-privacy API present | 324 | 182 | 56.2% |
| consentmanager | 235 | 32 | 13.6% |
| Complianz | 207 | 39 | 18.8% |
| iubenda | 205 | 80 | 39.0% |
This isn't a league table. Any of these platforms can hold tags back until the visitor says yes; it comes down to how each site sets it up. A news site and a clothing shop also run very different numbers of tags, whichever banner they use.
Shopify is the outlier: on 56% of the shops where we saw Shopify's privacy API, ad tracking was already active. The scan can't tell us whether that came from Shopify's own banner or from one of the shop's ad integrations.
By country: Germany 14.7%, UK 31.2%
Data table
| Country | Sites with a banner on screen | Ad tracking active | Share |
|---|---|---|---|
| Germany | 1,835 | 269 | 14.7% |
| United Kingdom | 1,134 | 354 | 31.2% |
| Poland | 793 | 203 | 25.6% |
| Italy | 703 | 185 | 26.3% |
| Netherlands | 669 | 200 | 29.9% |
| France | 650 | 154 | 23.7% |
| Spain | 453 | 129 | 28.5% |
| United States | 345 | 75 | 21.7% |
| Ireland | 123 | 26 | 21.1% |
German sites with a banner had tracking active at roughly half the rate of British and Dutch ones. This is an observed difference between groups of sites, not evidence of why. We saw the same split with OpenAI's pixel last week, where barely a third of German sites fired it before consent. The country is the one we hold for the company behind each site, which is not always where its visitors are.
Fixing the banners has not happened
The European Commission's Digital Omnibus proposal of November 2025 included a way out of the banners: websites would have had to honour a consent choice set once in the browser. On 21 October 2026 the Council of the EU agreed its negotiating mandate, and that provision (Article 88b in the proposal) is struck out of it, along with the duty on browser makers to support such signals. (Council of the EU) (mandate text) This is a negotiating position, not law: talks start once the European Parliament adopts its own position, and Parliament could still push for the provision. For now, the banner stays.
The rule itself has not changed. Under the EU ePrivacy Directive and, in the UK, PECR, storing or reading non-essential cookies or similar identifiers on a visitor's device generally needs consent first, with exemptions such as cookies strictly necessary for a service the visitor asked for. Our scan records what a browser sent and stored; whether a particular site broke the rules depends on facts the scan cannot see, and is for regulators and courts to decide.
Regulators do enforce the rule. In September 2025 France's CNIL fined the operator of shein.com 150 million euros because advertising cookies were placed the moment visitors arrived, before any interaction with the banner. (CNIL) In November 2025 it fined American Express 1.5 million euros for cookies placed before any choice and after a refusal. (CNIL) In the UK, since 5 February 2026 the ICO can fine up to 17.5 million pounds or 4% of global turnover for breaches of PECR, which covers cookies, up from 500,000 pounds, under the Data (Use and Access) Act 2025. (ICO)
Check your own site in two minutes
Before you choose
- Open a new private window in Chrome (Ctrl+Shift+N on Windows, Cmd+Shift+N on a Mac). Turn off any ad blocker for private windows, or the requests will not leave the browser.
- Open the developer tools (F12, or Cmd+Option+I on a Mac), click the Network tab and tick Preserve log (Keep log in newer versions of Chrome).
- Go to your homepage. Do not click anything on the cookie banner. Wait about ten seconds.
- Type each of these into the Network panel's Filter box in turn:
facebook.com/tr,pagead,ccm/collect,tiktok,linkedin,bat.bing,pinterest,doubleclick. Ignore anything ending in.js: that is a script download, not an event. Any other request listed went out before a choice was made, but not all of them are tracking: Google sends cookieless pings when consent is denied (step 8 shows how to tell). Click one and open Headers to see the full address and the status code. - In the Application tab, open Cookies and look for
_fbp,_gcl_au,_ttp,_uetsidor_pin_unauth.
After "Reject All"
- Click Reject All (or your banner's equivalent).
- In the Network tab, click Clear (the circle with a line through it), then reload the page.
- Go through the filters from step 4 again. On Google requests (
ccm/collect,pagead,doubleclick), look in the address for Google's consent parameters.gcs=G100orG10-means ad consent was declared denied. With nogcs, look at the third character ofgcd=:p,q,morumeans denied,lmeans Consent Mode is not set up. A denied ping is expected after "Reject All"; a hit with no denial is not. Other vendors have their own signals, so a request on its own is a lead to check, not proof of a breach.
If something fires, the fix is often configuration rather than a new tool: load the tag through the consent platform (or mark it so the platform blocks it until consent), switch off tracking in any shop or plugin integration that bypasses the banner, and give Google's tag a Consent Mode default of "denied" for European visitors.
We are still scanning. The full run covers all 106,821 sites and finishes in November; we will update these figures when it does. If you sell consent or privacy tooling, we can share the site-level list for your market, with the evidence behind each observation. Request the list
Method note
Population: 106,821 reachable, not-opted-out websites from the CipherCue entity set, in a seeded random order (md5 of entity ID). Figures are a snapshot of the first 15,583 scanned between 23 and 26 October 2026: 13,712 loaded normally (the denominator); 1,086 served a bot challenge or block page, 561 an HTTP error, 219 failed to load, 5 timed out, and these are excluded rather than counted as clean. Each site was loaded once from a server in Germany in headless Chrome 150 with a fresh profile, a standard Windows Chrome user agent, en-GB language and a 1366 by 768 window. CipherCue identity headers were sent on the site's own page request only. After the page's load event, the scan observed for 10 seconds with no interaction, then recorded cookies (names and domains, not values), consent-platform state where the platform exposes it, banner visibility and a screenshot.
A banner counts as visible when a known consent platform's banner element or frame is displayed, or when a visible element contains consent wording plus an accept or reject control. Advertising tracking means a request to a known advertising measurement endpoint that received an HTTP response, excluding script downloads, preflight requests and Google hits that declare ad storage denied (in gcs, or in gcd when gcs is absent); or an advertising identifier cookie (for example _fbp, _gcl_au, _ttp, MUID, IDE, TDID). DoubleClick's test_cookie, which only checks whether cookies work, is not counted. Google Analytics, including its Google Signals traffic to stats.g.doubleclick.net and ga-audiences, is reported as analytics, not advertising. Of the 1,662 banner sites counted, 1,512 had an answered advertising request (1,320 of them also an identifier cookie) and 150 had an identifier cookie only. Request times are measured from the page's own document request (navigation start); banner render time was not recorded. Confidence intervals are Wilson 95%.
Verification
We drew a seeded random sample of 20 sites from the "banner on screen, tracking fired" group and checked each against its screenshot and full request log. That review found two classifier rules that over-counted Google Ads: one matched the download of Google's conversion script, the other matched Google Analytics' Signals traffic. An audit of every rule then found smaller loader and consent-check matches for Adform, Snap, AdRoll, Taboola and Hotjar. We fixed all of them and recomputed every figure from the stored raw requests. This lowered the headline from 28.5% to 24.0%. After the fixes, all 9 sampled sites counted for advertising tracking were confirmed by hand: banner visible, advertising requests answered. The other 11 had fired analytics only and are not in the advertising figure. We then checked that the result holds for an ordinary browser, not just our scanner: we reloaded 49 flagged sites (those 9 plus 40 more drawn at random) in a visible Chrome window with a fresh profile, Chrome's own Mac identity, no identifying headers, from a UK connection. Of the 47 that loaded, 44 (94%) again sent advertising tracking with the banner on screen, one sent it but its banner was not detected, and two sent none. That check also turned up one tool that behaves differently for automated browsers: CHEQ, an invalid-traffic service, fires Google Ads and Meta pixels at visitors it judges to be bots, to exclude them from ad audiences. It was present on 14 flagged sites and fully accounted for the tracking on 2; we set those pixels aside, which removed those 2 sites from the count. A final audit of Google's consent parameters found the classifier read only gcs: it ignored gcs values with a "not set" position (such as G10-, ad storage denied) and denials declared only in gcd. Reading both parameters removed 6 banner sites, all of which had sent only consent-denied Google hits, and moved the headline from 24.0% to 23.9%. Regression tests now cover both parameters. The same audit found our earlier timing figures were measured from the start of each scan rather than from navigation; they are now measured from navigation start.
Limits
One homepage load per site, from one German IP, on one day. Some sites show banners or load tags differently by location, page or visitor; sites that geo-target banners away from German IPs would appear as "no banner". Headless Chrome can be treated differently from a normal visitor; we hide the usual automation flags, but 1,086 sites still blocked the scan and are excluded. Banner detection can miss unusual designs, which would move a site out of the banner group rather than inflate the headline. Country is the registered country of the company behind each site, not its audience. Consent-platform shares describe the sites using each platform, not the platform's own behaviour.
Disclosure
Figures are reported in aggregate and all four examples are redacted. We make no finding about any individual site.
Legal sources
The consent requirement derives from the EU ePrivacy Directive (2002/58/EC, Article 5(3)) and GDPR, as implemented nationally, and in the UK from PECR. Enforcement examples: CNIL sanctions of Infinite Styles Services Co. Limited (operator of shein.com, 150 million euros, 2025) and American Express Carte France (1.5 million euros, November 2025). UK ICO penalty ceiling for PECR under the Data (Use and Access) Act 2025, in force from 5 February 2026 (ICO statement, 5 February 2026). Digital Omnibus: Council of the EU negotiating mandate agreed by Coreper on 21 October 2026 (Council document 14756/26), in which the proposed Article 88b on automated and machine-readable consent signals is struck out; the European Parliament has not yet adopted its position. We cite these as context for the general rule; we make no finding about any specific site.