Works with your stack
Cookie banner for a website with ads
certified tool for personalised ads
A site that lives on ads has one question the others do not: Google requires a consent tool certified for the IAB TCF before it shows personalised ads in the EEA, the United Kingdom and Switzerland. Cookie Rocks is not certified. Say so plainly, and choose with that in mind.

Cookie Rocks Pro The complete plugin, every feature, free for 30 days. Here is what matters most for this kind of site. Meta, LinkedIn, TikTok, Pinterest, Hotjar, AdSense, chats, e-mail marketing and more are held until consent, automatically. The scan finds the ones it does not know yet too. See the list. Default and update set at the very top of the page, on every page view. Basic or advanced mode, with a recommendation for your site. Where the law only asks you to inform, the banner informs and lets visitors refuse: cookies work until the visitor opts out. Where your countries allow it, audience measurement set up for it can run until the visitor objects. Cookie Rocks keeps a consent no longer than the strictest country you target allows, and keeps a refusal at least as long as the strictest country requires before asking again. Example: a site that targets France and California keeps consent for 6 months at most, and a refusal for 12 months at least. In Colorado, a visitor who refused is not asked again. 11.43 kB on a first visit, banner included, then 1.00 kB on each next page. Measured on a blank WordPress. And the engine is built for your site: it only carries the options you use. The measured figures. The visitor accepts, and the held tools start right there, on the same page, without a reload: the video plays, the map appears, the visit is counted. Allowing only Google reCAPTCHA or hCaptcha from a form reloads the page once, and what the visitor typed stays in the form. After consent, held scripts download together, then run in the order of the page.What Cookie Rocks Pro does for news and ad-funded sites
AdSense675 tools recognised
Google Consent Mode v2
Where the law allows less
Consent and refusal do not last the same time
Light on every page
Back at once after consent
Plugins that news and ad-funded sites often use
Each one is tested with Cookie Rocks: what it loads in the browser, and what waits for the visitor’s choice. Open a card for the details.
What matters for consent with news and ad-funded sites
The TCF rule
To show personalised Google ads in the EEA, the United Kingdom and Switzerland, Google requires a certified consent tool that supports the IAB TCF. Cookie Rocks is not certified: there, use Google’s own consent message or a certified tool.
Google’s own message
With Google’s own consent message, ads are still shown after a refusal, not personalised, and Google stores its own choice cookie. It works as a second consent tool on the site.
Ad cookies come with the ad
AdSense sets its ad cookies once an ad is actually shown, not on consent alone, along with cookies of other ad networks that differ from one visit to the next.
US visitors
Without a US states message set in AdSense, a visitor from California gets ad cookies on the first visit, with no Do Not Sell link, and a Global Privacy Control signal does not stop them.
Ad plugins
Ad plugins place ad code on your pages and have no banner of their own. Each has its own way to make ads wait, and neither of those covered here does it by default.
What our tests found on news and ad-funded sites
Good to know · Advanced AdsWhat Advanced Ads stores in visitors' browsers
Advanced Ads: 2 cookie(s) or browser key(s) for visitors, recognised by Cookie Rocks from 2.9.8.
Name Kept in Category What it is for advanced_ads_page_impressionscookie Preferences Counts the visitor's page views to show ads only after a set number advanced_ads_visitorcookie Preferences Remembers ad display conditions for the visitor Seen in our tests, 2 November 2026, Advanced Ads.
Full detail
Advanced Ads can store these in a visitor's browser: advanced_ads_page_impressions (cookie, preferences: Counts the visitor's page views to show ads only after a set number); advanced_ads_visitor (cookie, preferences: Remembers ad display conditions for the visitor). Cookie Rocks recognises them from 2.9.8, with this category and purpose, and lists them in the cookie policy when it sees them.
Good to know · Cookie RocksOnly visitors' pages say which tools the site uses
Cookie Rocks Pro records the tools a site uses only from pages viewed by visitors. Pages viewed by site staff (users who can edit posts) never add tools, so files loaded only for logged-in users, such as the Google Fonts of Site Kit's admin bar, stay out of the list of detected tools and the cookie policy. Blocking still applies to everyone.
Seen in our tests, 28 October 2026, Cookie Rocks.
Good to know · google-site-kitSite Kit's admin bar loads Google Fonts for logged-in users only
Site Kit loads Google Fonts (Google Sans, from fonts.googleapis.com) on public pages only for logged-in users who see the admin bar: its admin bar stylesheet depends on it. Visitors never receive it.
What to do: Scan the site while logged out. Do not list Google Fonts in the cookie policy because of Site Kit alone.
Read in its code, 27 October 2026, google-site-kit 1.190.0. Source
Sent from your server · Site Kit by GoogleSite Kit tag gateway serves the Google tag from the site itself
setting “Google tag gateway for advertisers” · by default: Off until Google turns the feature on for the site
The site forwards each request to Google with the visitor's IP address. The browser never contacts Google directly, so a banner that only knows Google's addresses misses the tag.
Seen in our tests, 18 October 2026, Site Kit by Google 1.189.0.
Full detail
With Site Kit's Google tag gateway on, the Google tag is served by the site itself: a script with the id google_gtagjs-<tag ID>-js loads /wp-content/plugins/google-site-kit/gtg/measurement.php?id=<tag ID>. That file forwards each request to <tag ID>.fps.goog with the visitor's IP address and request headers. The browser never contacts a Google address directly, so a banner that only knows Google's addresses does not see the tag.
Set before the choice · Site Kit by GoogleCookie Rocks holds the Google tag served through Site Kit's tag gateway
It is held until consent, like the tag served by Google. Site Kit's short script that only fills the data layer still runs, after the default consent set by Cookie Rocks.
Seen in our tests, 18 October 2026, Site Kit by Google 1.189.0.
Full detail
Cookie Rocks recognises the Google tag that Site Kit serves from the site through its tag gateway (gtg/measurement.php?id=G-, GT- or AW-) and holds it until consent, like the tag served by Google. Site Kit's short inline script that only fills the dataLayer still runs before the choice, after the default consent set by Cookie Rocks.
Set before the choice · Site Kit by GoogleSite Kit's Sign in with Google is held until consent
setting “Sign in with Google module”
- Both Google's script and Site Kit's sign-in script are held: no g_state or googlesitekit_auth_nonce cookie.
- After Accept all, without a reload, the button and One Tap appear.
- On wp-login.php, where no banner is shown, the button works as usual.
- Before 2.5.2 both scripts ran before the choice.
Seen in our tests, 17 October 2026, Site Kit by Google 1.189.0.
Full detail
With Site Kit's Sign in with Google module, Cookie Rocks holds both Google's script (accounts.google.com/gsi/client) and Site Kit's own sign-in script until consent: before the choice there is no g_state or googlesitekit_auth_nonce cookie. After Accept all, without a reload, the button and One Tap appear. On wp-login.php, where no banner is shown, the button works as usual. If accounts.google.com does not answer, the button does not appear, as without Cookie Rocks. Before 2.5.2 both scripts ran before the choice.
See the 17 other findings
Depends on a setting · Advanced AdsAdvanced Ads' ad blocker counter can load Google's tag on every page
setting “Ad blocker counter: Google Analytics ID” · by default: empty
With a Google Analytics ID in the counter, a footer script loads gtag.js and sends an AdBlock event. It is held on the server only with the Cookie or TCF privacy methods.
Read in its code, 16 October 2026, Advanced Ads 2.0.29.
Full detail
When a Google Analytics ID is entered in Advanced Ads' ad blocker counter, an inline footer script on every page loads googletagmanager.com/gtag/js and sends an AdBlock event; it is held on the server only with the Cookie or TCF privacy methods. Advanced Ads also marks its critical inline script (id ending in 'ready', no tracker) to be skipped by WP Rocket's delay and by one consent plugin's blocker, and does nothing for other delay tools.
Set before the choice · Advanced AdsAdvanced Ads can load AdSense before the choice with non-personalised ads
setting “Show non-personalized AdSense ads until consent is given”
With the Privacy module on, Auto ads wait for the accepted signal. With 'Show non-personalized AdSense ads until consent is given', AdSense loads before any choice.
Read in its code, 16 October 2026, Advanced Ads 2.0.29.
Full detail
AdSense Auto ads in Advanced Ads print adsbygoogle.js in the head; with the Privacy module on, an inline script creates it when the advanced_ads_privacy event says accepted. With 'Show non-personalized AdSense ads until consent is given' (Cookie method), Advanced Ads sets requestNonPersonalizedAds=1 and loads AdSense before any choice.
Depends on a setting · Advanced AdsAdvanced Ads shows all ads without consent by default
setting “Privacy > consent method” · by default: Show all ads even without consent
- No banner, no WP Consent API, no Consent Mode defaults.
- Its Privacy module shows all ads without consent by default.
- Cookie method: looks for a consent cookie; with page caching, the free version serves one result to everyone.
- IAB TCF method: waits for TCF and needs purpose 1 consent.
Read in its code, 16 October 2026, Advanced Ads 2.0.29.
Full detail
Advanced Ads has no banner and does not use WP Consent API or set Consent Mode defaults. Its Privacy module defaults to showing all ads without consent. The Cookie method looks for a cookie name containing a value, checked in PHP (substring) and re-read in JavaScript every 333 ms for 60 seconds; with page caching the free version serves the cached result to everyone. The IAB TCF method waits for window.__tcfapi and needs purpose 1 consent; ads are kept base64-encoded in a text/plain script and decoded only at load. It fires a DOM event, advanced_ads_privacy.
Depends on a setting · Ad InserterAd blocking detection loads Google and ad scripts before the choice
setting “Use external scripts (ad blocking detection)” · by default: on
- Off by default; the problem starts when you turn it on.
- Adds bait tags for Google Analytics, Tag Manager, Quantcast and Media.net.
- Also loads an image from dummyimage.com and checks Google's AdSense script.
- Sets the cookies aiADB, aiADB_PV, aiADB_PR and aiBLOCKS.
What to do: Turn off Use external scripts, or define AI_ADB_NO_GOOGLE_ANALYTICS, AI_ADB_NO_GTM, AI_ADB_NO_QUANT, AI_ADB_NO_MEDIA_NET, AI_ADB_NO_DUMMYIMAGE and AI_ADB_NO_GOOGLESYNDICATION in wp-config.php.
Read in its code, 16 October 2026, Ad Inserter 2.8.19.
Full detail
Ad Inserter's ad blocking detection is off by default. When it is on with Use external scripts (on by default), every page footer gets bait tags before any choice: <object> tags pointing to google-analytics.com/analytics.js, googletagmanager.com/gtag/js, secure.quantserve.com/quant.js and contextual.media.net/dmedianet.js, an <img> from dummyimage.com, and after load a HEAD fetch to pagead2.googlesyndication.com/pagead/js/adsbygoogle.js whose address is base64-encoded in an inline script. Cookies: aiADB (30 days by default) and aiADB_PV (365 days) when a blocker is handled, aiADB_PR for redirection, and aiBLOCKS (365 days) for per-block close and view limits.
Depends on a setting · Ad InserterAd Inserter can make each ad block wait for a consent cookie
setting “Cookies list (per block)” · by default: empty
It has no banner and no consent signals. A block can wait for a cookie from its Cookies list; the check runs in the browser only with Client-side insert or show.
Read in its code, 16 October 2026, Ad Inserter 2.8.19.
Full detail
Ad Inserter shows no banner and does not use WP Consent API or set Consent Mode defaults. Each block can wait for a cookie listed in its Cookies list (whitelist or blacklist, empty by default); JSON cookies are read with the syntax name[key][*]=value after decodeURIComponent and JSON.parse. The check runs in the browser only with Client-side insert or Client-side show; server-side checks are frozen by page caching. Blocks waiting for consent are re-inserted on the page only on IAB TCF signals, on the events of one consent plugin, or when ai_load_blocks() is called; tcf- conditions hide the block if window.__tcfapi is missing after three tries.
Set before the choice · Ad InserterAd Inserter hides ad code from banners that read the page
setting “Dynamic blocks” · by default: Client-side insert
Blocks with a browser-side check or lazy, manual or delayed loading are printed encoded, so a banner reading the page cannot see the ad address. Default blocks are printed in clear.
What to do: Put the consent condition in each ad block's Cookies list (whitelist) instead of relying on a banner reading the HTML.
Read in its code, 16 October 2026, Ad Inserter 2.8.19.
Full detail
With Dynamic blocks set to Client-side insert (the default), an Ad Inserter block that has a check run in the browser (cookie, URL parameter, referrer or client list, scheduling, a device selection other than all) or uses lazy, manual or delayed loading is printed with its code base64-encoded in a data-code attribute of a div (ai-dynamic, ai-lazy, ai-manual). Ad Inserter's own script decodes it and inserts it, and the inserted scripts run. A consent plugin that reads the page markup cannot see the ad network address. A block with default settings and no list is printed in clear.
Depends on a setting · Site Kit by GoogleSite Kit's WooCommerce conversions can send the buyer's email, phone and name
With the gtagUserData flag, the purchase event carries billing details for Google's enhanced conversions. The Reader Revenue Manager module loads a Google News script on its pages.
Read in its code, 16 October 2026, Site Kit by Google 1.189.0.
Full detail
With Site Kit's conversion tracking for WooCommerce and the gtagUserData flag (since 1.161.0), the purchase event carries user_data with the billing email, phone and name for Google's enhanced conversions. Its Reader Revenue Manager module loads news.google.com/swg/js/v1/swg-basic.js on the pages where its snippet is set.
Good to know · Cookie RocksCookie Rocks counts the Google tag as statistics only without Google Ads
- Statistics only, without _gcl_au and _gcl_ls, when nothing shows Google Ads and one sign says there is none.
- Signs: the answer No Google Ads, or Site Kit active without its Ads module.
- Otherwise a GT- tag stays in statistics and marketing.
- A Google Ads ID (AW-) in the tag counts as Google Ads.
Read in its code, 15 October 2026, Cookie Rocks.
Full detail
Cookie Rocks lists the Google tag as Google Analytics (gtag.js), statistics only, without the Google Ads cookie _gcl_au and storage key _gcl_ls, when nothing shows Google Ads (no Google Ads tag seen on the pages or declared in GTM, no Site Kit Ads module) and one sign says there is none (the answer No Google Ads, or Site Kit active without its Ads module). Otherwise a GT- tag stays in statistics and marketing. A Google Ads ID (AW-) in the gtag.js address or in gtag('config', 'AW-...') counts as Google Ads.
Good to know · Site Kit by GoogleWith Site Kit's Ads module, the Google tag counts as statistics and marketing
After Accept all, Google Ads sets _gcl_au. With statistics only, no Google Ads cookie is set, but the tag still sends Google a cookieless request with advertising denied.
Seen in our tests, 15 October 2026, Site Kit by Google 1.189.0.
Full detail
With Site Kit's Ads module (a test AW- conversion ID), the Google tag counts as statistics and marketing. After Accept all, Google Ads sets _gcl_au and calls doubleclick.net. With consent to statistics only, no Google Ads cookie is set, but the loaded tag still sends Google a cookieless request with advertising consent denied (pagead2.googlesyndication.com/ccm/collect).
Good to know · Site Kit by GoogleCookie Rocks holds Site Kit's Google tag in basic mode
- Before any choice, no request goes to Google.
- Accept all or statistics only: _ga and _ga_<ID> are set; with statistics only, advertising stays denied.
- Reject all: gtag.js never loads.
Seen in our tests, 15 October 2026, Site Kit by Google 1.189.0.
Full detail
Site Kit prints its Google tag (gtag.js) in the page head. Cookie Rocks holds it there in basic mode: before any choice, no request goes to Google. After Accept all, Google Analytics sets _ga and _ga_<ID>; with statistics only, the same happens and advertising stays denied; after Reject all, gtag.js is never loaded. With a GT- test ID Google returned no configuration and set no cookie; the cookies were seen with a G- test ID.
Depends on a setting · Site Kit by GoogleSite Kit's Consent Mode setting sends Google's default consent a second time
setting “Consent Mode” · by default: off
Google receives a second default consent, for a fixed list of 32 countries that ignores the regions saved in Site Kit, and functionality storage is granted as the page opens.
What to do: Keep Site Kit and WP Consent API, and turn off only the Consent Mode setting of Site Kit (Settings, Admin settings) when the banner already sends Google's consent signals. The Cookie Rocks dashboard flags it and turns it off in one click.
Seen in our tests, 15 October 2026, Site Kit by Google 1.189.0.
Full detail
With its Consent Mode setting on, Site Kit sets Google's default consent a second time, after the banner's, and only for a fixed list of 32 countries (EU, IS, LI, NO, GB, CH): the regions saved in Site Kit are not read. With WP Consent API present, it also sends its own consent updates after each choice; they grant functionality_storage as soon as the page opens (the functional category of WP Consent API), while statistics and advertising follow the visitor's choice.
Good to know · Site Kit by GoogleCookie Rocks gives Site Kit's tag the consent in the right order
The tag reads denied first, then granted on Accept all, so everything is sent as granted. After a refusal the tag never loads. In a browser test, nothing was sent before the choice.
Read in its code, 15 October 2026, Site Kit by Google 1.189.0.
Full detail
With Site Kit, Cookie Rocks pushes its 'denied' consent default first in the dataLayer and asks Google to wait 500 ms; on Accept all it records 'granted' before releasing Site Kit's tag, so the tag reads denied, Site Kit's settings and events, then granted, and everything is sent as granted. After a refusal the tag never loads. In a browser test: no request and no cookie before the choice, Analytics and its cookies after Accept all.
Good to know · Site Kit by GoogleSite Kit sends nothing to Google before it is connected
Before it is connected to a Google account, Site Kit only adds a DNS prefetch hint for googletagmanager.com to the pages: no request to Google and no cookie.
Seen in our tests, 15 October 2026, Site Kit by Google 1.189.0.
Set before the choice · Site Kit by GoogleTwo Site Kit scripts still run before the choice, but send nothing to Google
When the Google tag is held, Site Kit's tag settings and content events only fill the data layer. After consent, the tag processes events pushed before the choice.
Seen in our tests, 15 October 2026, Site Kit by Google 1.189.0.
Full detail
When a banner holds Site Kit's Google tag (gtag/js), two other Site Kit scripts still run before the choice: the inline tag settings (google_gtagjs-js-after: linker, js, developer_id, config) and its content events provider. They only fill the dataLayer and send nothing to Google. Site Kit also replaces window.gtag with an equivalent function writing to the same dataLayer. After consent, events pushed before the choice are processed by the tag.
Good to know · Site Kit by GoogleCookie Rocks holds Site Kit's Tag Manager and AdSense scripts
The Tag Manager container loads only after consent. Auto ads count as marketing: they load after Accept all, not with statistics only or after Reject all.
Seen in our tests, 15 October 2026, Site Kit by Google 1.189.0.
Full detail
With Site Kit's Tag Manager module, the container (gtm.js) is held in the page head and loads only after consent. With its AdSense module, the Auto ads script (adsbygoogle.js) is held as marketing: it loads after Accept all, not with statistics only or after Reject all.
Good to know · Site Kit by GoogleSite Kit reads WP Consent API only when its Consent Mode setting is on
setting “Consent Mode” · by default: off
With that setting off, Site Kit sends no consent signal at all, and the visitor's choice reaches Google only through the banner's own signals.
Read in its code, 15 October 2026, Site Kit by Google 1.189.0.
Full detail
Site Kit declares itself compatible with WP Consent API, but its code reads WP Consent API only when its own Consent Mode setting is on. With that setting off, Site Kit pushes no consent command at all, and the visitor's choice reaches Google only through the banner's own Consent Mode signals.
Good to know · WP Consent APICookie Rocks rewrites the WP Consent API cookies on every page
They last 30 days by default, so a banner that writes them only at the click leaves Site Kit with no consent later. In a test, deleted cookies were set again and Google read granted.
Seen in our tests, 8 October 2026, WP Consent API.
Full detail
WP Consent API keeps its wp_consent_* cookies for 30 days by default. A banner that writes them only at the click leaves Site Kit reading no consent after 30 days, while the banner's own choice is still valid. Cookie Rocks writes the visitor's choice to WP Consent API on every page: in a test, the wp_consent_* cookies were deleted and the page reloaded; they were set again to allow, and Site Kit and Google read granted.
Kinds of sites
Other kinds of sites, each with its own page.
Questions
Can I use Cookie Rocks on an ad-funded site?
Yes, outside the EEA, the United Kingdom and Switzerland, and for non-personalised ads. For personalised Google ads there, use a TCF certified tool.
Where are ad plugins covered?
See ad plugins and Site Kit.
What happens after the 30-day trial?
The banner, your visitors’ choices and your proofs of consent keep working. Without a key, most settings lock, updates and support stop. Take a key at any time and everything opens again.
For ad-funded sites
Know where Cookie Rocks fits before you choose.
said plainly
The free Audit shows what your ads set before any choice. The complete plugin is free for 30 days, no card.
- During the trial: everything, including the full settings and the scans
- After 30 days without a key: the banner, your visitors’ choices and your proofs of consent keep working
- What waits for a key: most settings, updates and support

Get your trial key
Your e-mail and your site. Your key arrives as soon as you confirm your e-mail.