Works with your stack
Cookie consent for Google tag and Tag Manager plugins
one tag, many plugins
Many plugins print Google’s tag or a Tag Manager container on your pages. Most load it before the visitor chooses, and some add consent defaults of their own. The visitor’s choice should decide when the tag runs.

Google tag plugins, one by one
Plugins that print Google’s tag
- Tag Manager plugins
- GTM4WP, GTM Kit and the Google Tag Manager plugin add your container. Everything in it waits with it.
- Google Analytics plugins
- GA Google Analytics, MonsterInsights and ExactMetrics print the Google tag with no consent default of their own.
- WooCommerce plugins
- Google Analytics for WooCommerce and Google for WooCommerce add their own defaults for Europe only and read WP Consent API.
What matters for consent with Google tag plugins
Most load before the choice
Most of these plugins print the tag on every page with no setting to wait for consent. Cookie Rocks holds the Google tag or the Tag Manager container from most of them until the visitor agrees, then loads it on the same page.
One source of consent defaults
Several plugins can print Consent Mode defaults of their own, sometimes for Europe only, sometimes after your banner’s. Keep one source: your consent plugin.
What a banner cannot hold
Some plugins send data from your server: a short-link report, a cookie set with the page. No banner can hold those. Switch them off in the plugin if you do not need them.
Check it logged out
Several plugins hide the tag from administrators. Look at your site logged out to see what visitors get.
What our tests found on Google tag plugins
Set before the choice · Google for WooCommerceGoogle for WooCommerce's badge waits only with WP Consent API
With WP Consent API it waits for marketing consent. Without it, the script loads at once on every page.
Seen in our tests, 5 November 2026, Google for WooCommerce 3.10.0.
Full detail
Google for WooCommerce 3.10.0 creates its reviews badge script www.gstatic.com/shopping/merchant/merchantwidget.js in JavaScript. With the WP Consent API plugin active, the script waits for marketing consent and loads after Accept without a reload, and nothing loads after Refuse. Without that plugin it loads at once on every page.
Depends on a setting · Google for WooCommerceGoogle for WooCommerce adds its own consent default after the banner's
Once a Google Ads conversion exists, its tag loads on every page with its own default consent for 32 European countries, set after the consent banner's default.
What to do: Return an empty string from woocommerce_gla_gtag_consent so only the consent plugin sets the defaults.
Read in its code, 5 November 2026, Google for WooCommerce 3.10.0.
Full detail
Google for WooCommerce adds gtag.js with its AW- ID to every page once a Google Ads conversion action exists, at wp_head priority 999999, with its own gtag('consent','default'): ad_storage, analytics_storage, ad_user_data and ad_personalization denied for 32 European countries (EU, IS, LI, NO, GB, CH), wait_for_update 500. It arrives after a banner's default; the filter woocommerce_gla_gtag_consent replaces or removes it, and woocommerce_gla_disable_gtag_tracking removes the whole tag. The filter woocommerce_gla_gtag_consent changes or empties that default.
Good to know · GTM4WPWhat GTM4WP stores in visitors' browsers
GTM4WP: 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 gtm4wp_user_logged_incookie Statistics Tells Google Tag Manager that the visitor just signed in or registered gtm4wp_user_registeredcookie Statistics Tells Google Tag Manager that the visitor just signed in or registered Read in its code, 2 November 2026, GTM4WP.
Full detail
GTM4WP can store these in a visitor's browser: gtm4wp_user_logged_in (cookie, statistics: Tells Google Tag Manager that the visitor just signed in or registered); gtm4wp_user_registered (cookie, statistics: Tells Google Tag Manager that the visitor just signed in or registered). 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 · GTM4WPGTM4WP loads each video tracker only when its player is on the page
Each tracker is a local file and fetches its player API only with a matching embed. In the test, allowing YouTube or Vimeo loaded only that player, not the container.
Seen in our tests, 18 October 2026, GTM4WP 2.0.6.
Full detail
GTM4WP prints the GTM container as one inline script and keeps each video tracker in its own local file (gtm4wp-youtube.js, gtm4wp-vimeo.js and others). A tracker fetches its player API only when a matching embed is on the page, and every tracker depends on the local file gtm4wp-media-gate.js. In the test, allowing YouTube or Vimeo loaded only that player, and the container did not start.
Good to know · GTM4WPGTM4WP does not track YouTube videos embedded from youtube-nocookie.com
The YouTube tracker of GTM4WP watches only iframes whose src starts with https://www.youtube.com/embed. A video embedded from youtube-nocookie.com is not tracked: the tracker did not load www.youtube.com/iframe_api for it.
Seen in our tests, 18 October 2026, GTM4WP 2.0.6.
Good to know · GTM KitGTM Kit free loads only the Google Tag Manager container
The container is one inline script. Its other scripts are local and made no third-party request in the test.
Seen in our tests, 18 October 2026, GTM Kit 2.22.0.
Full detail
GTM Kit (free) loads one third-party service in the browser: the GTM container, printed as one inline script with the id gtmkit-container-js-after. Its other scripts (gtmkit settings, data layer, engagement-events.js) are local and made no third-party request in the test.
See the 27 other findings
Good to know · GTM4WP (GTM for WordPress)Cookie Rocks holds the GTM4WP Tag Manager container until Accept all
On a test WordPress with GTM4WP 2.0.6 and a dummy container ID, Cookie Rocks holds gtm.js before the choice and loads it after Accept all, without a reload. GTM4WP set no cookie or browser storage of its own on that page.
Seen in our tests, 17 October 2026, GTM4WP (GTM for WordPress) 2.0.6.
Good to know · GTM KitCookie Rocks holds the GTM Kit container until Accept all
On a test WordPress with GTM Kit 2.22.0 and a dummy container ID, Cookie Rocks holds gtm.js before the choice and loads it after Accept all, without a reload. GTM Kit set no cookie or browser storage of its own on that page.
Seen in our tests, 17 October 2026, GTM Kit 2.22.0.
Good to know · Google Tag ManagerCookie Rocks holds the Google Tag Manager plugin's container
The Google Tag Manager container (gtm.js) added by the Google Tag Manager plugin is held by Cookie Rocks until consent and loads after Accept all.
Seen in our tests, 17 October 2026, Google Tag Manager 1.0.4.
Good to know · GA Google AnalyticsCookie Rocks holds the GA Google Analytics tag until Accept all
On a test WordPress with GA Google Analytics in gtag mode and a dummy G- ID, Cookie Rocks holds gtag.js before the choice and loads it after Accept all, without a reload; Google Analytics then sets _ga and _ga_<ID>.
Seen in our tests, 17 October 2026, GA Google Analytics 20260810.
Good to know · MonsterInsightsCookie Rocks holds the MonsterInsights tag until Accept all
On a test WordPress with MonsterInsights and a manual dummy GA4 ID (no Google account), Cookie Rocks holds gtag.js before the choice and loads it after Accept all, without a reload; Google Analytics then sets _ga and _ga_<ID>.
Seen in our tests, 17 October 2026, MonsterInsights 11.3.0.
Good to know · ExactMetricsCookie Rocks holds the ExactMetrics tag until Accept all
On a test WordPress with ExactMetrics and a manual dummy GA4 ID (no Google account), Cookie Rocks holds gtag.js before the choice and loads it after Accept all, without a reload; Google Analytics then sets _ga and _ga_<ID>.
Seen in our tests, 17 October 2026, ExactMetrics 10.3.0.
Good to know · Google Analytics for WooCommerceCookie Rocks holds the Google tag of Google Analytics for WooCommerce
In basic Consent Mode (the default), after Accept all, _ga and _ga_<ID> are set, alongside WooCommerce's sbjs_ cookies. The plugin sends nothing from the server.
Seen in our tests, 17 October 2026, Google Analytics for WooCommerce 2.4.3. Source
Full detail
In basic Consent Mode, the Cookie Rocks default, the Google tag added by Google Analytics for WooCommerce is held until consent; after Accept all, _ga and _ga_<ID> are set, alongside WooCommerce's sbjs_ attribution cookies. The plugin sends nothing from the server.
Depends on a setting · GTM4WP (GTM for WordPress)GTM4WP's Consent Mode option can send Google's default twice
setting “Google Consent Mode (integrate-consent-mode)” · by default: off
Off by default. When on, it sets Google's default consent before the container, with every signal denied except those ticked, and never sends an update after the choice.
What to do: Leave it off when the consent plugin already sets the defaults, so the default is not sent twice.
Read in its code, 16 October 2026, GTM4WP (GTM for WordPress) 2.0.6.
Full detail
GTM4WP's Google Consent Mode option is off by default. When on, it prints gtag('consent','default') before the container with all seven signals denied except those ticked, with no region and no wait_for_update. It never sends an update after the choice: that is left to the consent plugin. The filter gtm4wp_consent_mode_default_enabled (false) removes this default, and gtm4wp_overwrite_consent_mode_flag changes one signal.
Set before the choice · GTM4WP (GTM for WordPress)GTM4WP loads Tag Manager on every page with no wait for consent
Once a container ID is set, gtm.js loads in the head of every page. GTM4WP has no wait-for-consent setting and does not read WP Consent API.
Read in its code, 16 October 2026, GTM4WP (GTM for WordPress) 2.0.6.
Full detail
GTM4WP always loads the Tag Manager container (gtm.js from www.googletagmanager.com or a custom domain) in the head of every page once a container ID is set: wp_head priority 10 (2 with its load-early option), after its data layer block at priority 1. It has no wait-for-consent setting and does not read WP Consent API. Its inline blocks carry data-cfasync="false" and data-pagespeed-no-defer.
Depends on a setting · GTM4WP (GTM for WordPress)GTM4WP media tracking loads player scripts only when it finds a video
setting “Media events” · by default: off
Off by default. When on, it requests the YouTube, Vimeo and other player scripts only when it finds the provider's frame, so a banner that holds the frame also prevents the request.
Read in its code, 16 October 2026, GTM4WP (GTM for WordPress) 2.0.6.
Full detail
GTM4WP's media events options are off by default. When on, the player SDKs (YouTube iframe_api, Vimeo, SoundCloud, Wistia, Twitch, Dailymotion and others) are requested by JavaScript only when the provider's iframe is found by its src address, so a banner that moves src to data-src or shows a placeholder prevents the request. The filter gtm4wp_media_sdk_blocked (true) holds all SDK requests, and the gtm4wp-media-gate script can be blocked.
Good to know · GTM4WP (GTM for WordPress)GTM4WP's WooCommerce integration stores small values only after an action
- gtm4wp_item_list_attr: cookie, 3 days, when a product is clicked in a list.
- gtm4wp_orderid_tracked: localStorage on the order received page, or a 365-day cookie.
- gtm4wp_readded_to_cart: localStorage.
- Cache-safe data layer option (off by default): gtm4wp_woo_event, gtm4wp_login, gtm4wp_visitor_session.
Read in its code, 16 October 2026, GTM4WP (GTM for WordPress) 2.0.6.
Full detail
GTM4WP's WooCommerce integration writes small first-party values only after an action: gtm4wp_item_list_attr (cookie, 3 days, when a product is clicked in a list), gtm4wp_orderid_tracked (localStorage on the order received page, or a 365-day cookie if localStorage is unavailable) and gtm4wp_readded_to_cart (localStorage). Its cache-safe data layer option (off by default) adds gtm4wp_woo_event (2 days), gtm4wp_login (logged-in users) and sessionStorage gtm4wp_visitor_session.
Depends on a setting · GTM KitGTM Kit's default consent setting can add a second default
setting “Default Consent State (gcm_default_settings)” · by default: off
Off by default. When on, it denies seven categories unless window.gtag already exists; a banner that keeps its own function elsewhere does not stop it. The free version ignores WP Consent API.
Read in its code, 16 October 2026, GTM Kit 2.22.0.
Full detail
GTM Kit sets Consent Mode defaults only when its Default Consent State setting is on (off by default): seven categories, denied by default, wait_for_update 500, optional regions, and only if window.gtag does not exist yet. A banner that keeps its gtag function out of window.gtag does not stop this second default. The free version does not read WP Consent API (a source priority is reserved for Premium).
Sent from your server · GTM KitGTM Kit sets no tracking cookie by default, but some options do
setting “sgtm_cookie_keeper, google_tag_gateway” · by default: off
- Stape Cookie Keeper: _sbp for 2 years from the first page, set by the server.
- After a login or sign-up: gtmkit_engagement_event for 300 seconds.
- Google tag gateway (off by default): the loader comes from the site, not googletagmanager.com.
Read in its code, 16 October 2026, GTM Kit 2.22.0.
Full detail
GTM Kit sets no tracking cookie by default. With Stape Cookie Keeper on, PHP sets _sbp for 2 years on the root domain from the first page; after a login or sign-up it sets gtmkit_engagement_event for 300 seconds. With its Google tag gateway (off by default) the loader comes from /wp-content/plugins/gtm-kit/gtg/measurement.php, relayed by the server, with no googletagmanager.com in the address. Its scripts carry data-cfasync="false" and data-nowprocket.
Depends on a setting · GTM KitGTM Kit loads Tag Manager whatever the choice by default
setting “consent_gating_mode” · by default: always_load
Its strong block mode holds the container, but only GTM Kit's own consent call releases it, and only when its own defaults are on. A banner's ordinary consent update does not.
Read in its code, 16 October 2026, GTM Kit 2.22.0.
Full detail
GTM Kit's script gating mode is always_load by default: the container loads whatever the choice. In strong_block mode the container is written as type="text/plain" with data-gtmkit-gated="1" and is released only by window.gtmkit.consent.update() with analytics_storage and ad_storage granted, a function that exists only when GTM Kit's own defaults are on; a banner's plain gtag('consent','update') does not release it.
Depends on a setting · GA Google AnalyticsSome GA Google Analytics boxes have no effect with GA4
setting “disable_admin, gap_anonymize, gap_display_ads, link_attr”
Display advertising, link attribution, IP anonymization and force SSL apply only to the old codes. Hiding tracking from logged-in users covers administrators only.
Read in its code, 16 October 2026, GA Google Analytics 20260810.
Full detail
In GA Google Analytics' gtag (GA4) mode, the display advertising, link attribution, IP anonymization and force SSL boxes have no effect; they apply only to the Universal and legacy codes. Its option to hide tracking from logged-in users only covers the administrator role.
Set before the choice · GA Google AnalyticsGA Google Analytics loads gtag.js with no consent default
It sets no cookie itself and does not use WP Consent API. A consent default can only be added in its custom code field, which is printed after gtag.js.
Read in its code, 16 October 2026, GA Google Analytics 20260810.
Full detail
GA Google Analytics prints gtag.js and its inline config directly in wp_head (or wp_footer), without a script handle or any data-cfasync or no-optimize attribute. It sets no Consent Mode default, does not use WP Consent API and sets no cookie itself; the only way to add a consent default is its custom code field, printed after the async gtag.js tag. Its attribute filters escape quotes with esc_attr, so they cannot add type="text/plain".
Good to know · MonsterInsightsMonsterInsights tracks link clicks and downloads by default
Outbound links, downloads, mailto and tel links are tracked through the same tag. A click writes a temporary _gd<timestamp> cookie and deletes it at once. IP anonymization has no effect with GA4.
Read in its code, 16 October 2026, MonsterInsights 11.3.0.
Full detail
MonsterInsights tracks outbound links, downloads (doc, pdf, ppt, zip, xls, docx, pptx, xlsx), mailto, tel and /go/ or /recommend/ links by default through the same tag. On a tracked click its script writes a temporary _gd<timestamp> cookie and deletes it at once to find the root domain. gaOptout() sets ga-disable-<G-ID> until 2099. IP anonymization is off by default and has no effect with GA4.
Sent from your server · MonsterInsightsMonsterInsights reports Pretty Links redirects to Google from the server
Each short-link redirect is sent with ad_personalization granted by default. A cookie banner cannot block it.
Read in its code, 16 October 2026, MonsterInsights 11.3.0.
Full detail
With the Pretty Links plugin, MonsterInsights reports each short-link redirect to Google Analytics from the server (Measurement Protocol), with ad_personalization set to GRANTED by default and a client ID taken from the _ga cookie or generated. A cookie banner cannot block it.
Set before the choice · MonsterInsightsMonsterInsights loads gtag.js with no consent default or WP Consent API
Administrators and editors get no tag when logged in, so check the site logged out. Its consent check knows only four consent plugins and may suggest installing another one.
What to do: Check the site logged out; a consent default printed before wp_head priority 6 is read by its config.
Read in its code, 16 October 2026, MonsterInsights 11.3.0.
Full detail
MonsterInsights (free) prints gtag.js directly in the head at wp_head priority 6, without a script handle, followed by an inline config script; it sets no Consent Mode default and does not read WP Consent API. All its tags carry data-cfasync="false" and data-wpfc-render="false". Logged-in administrators and editors get no tag by default. Its admin consent check recognises only a fixed list of four consent plugins, so it may suggest installing another one while a consent plugin is active.
Good to know · ExactMetricsExactMetrics tracks link clicks and downloads by default
Outbound links, downloads, mailto and tel links are tracked through the same tag. A click writes a temporary _gd<timestamp> cookie and deletes it at once. IP anonymization has no effect with GA4.
Read in its code, 16 October 2026, ExactMetrics 10.3.0.
Full detail
ExactMetrics tracks outbound links, downloads (doc, pdf, ppt, zip, xls, docx, pptx, xlsx), mailto, tel and /go/ or /recommend/ links by default through the same tag. On a tracked click its script writes a temporary _gd<timestamp> cookie and deletes it at once to find the root domain. gaOptout() sets ga-disable-<G-ID> until 2099. IP anonymization is off by default and has no effect with GA4.
Sent from your server · ExactMetricsExactMetrics reports Pretty Links redirects to Google from the server
Each short-link redirect is sent with ad_personalization granted by default. A cookie banner cannot block it.
Read in its code, 16 October 2026, ExactMetrics 10.3.0.
Full detail
With the Pretty Links plugin, ExactMetrics reports each short-link redirect to Google Analytics from the server (Measurement Protocol), with ad_personalization set to GRANTED by default and a client ID taken from the _ga cookie or generated. A cookie banner cannot block it.
Set before the choice · ExactMetricsExactMetrics loads gtag.js with no consent default or WP Consent API
Administrators and editors get no tag when logged in, so check the site logged out. Its consent check knows only four consent plugins and may suggest installing another one.
What to do: Check the site logged out; a consent default printed before wp_head priority 6 is read by its config.
Read in its code, 16 October 2026, ExactMetrics 10.3.0.
Full detail
ExactMetrics (free) prints gtag.js directly in the head at wp_head priority 6, without a script handle, followed by an inline config script; it sets no Consent Mode default and does not read WP Consent API. All its tags carry data-cfasync="false" and data-wpfc-render="false". Logged-in administrators and editors get no tag by default. Its admin consent check recognises only a fixed list of four consent plugins, so it may suggest installing another one while a consent plugin is active.
Depends on a setting · Google Analytics for WooCommerceGoogle Analytics for WooCommerce sets denied defaults only in 32 regions
setting “woocommerce_ga_gtag_consent_modes (filter)” · by default: denied in 32 regions
- In the EU, EEA, UK and Switzerland, storage defaults to denied before gtag.js.
- Elsewhere it sets no default, so Google treats storage as granted.
- Its code replaces any existing gtag() function.
- gtag.js loads on every public page once an ID is entered; administrators are never tracked.
Read in its code, 16 October 2026, Google Analytics for WooCommerce 2.4.3.
Full detail
Google Analytics for WooCommerce prints its own gtag('consent','default') before gtag.js: analytics_storage, ad_storage, ad_user_data and ad_personalization denied, wait_for_update 500, limited to 32 regions (EU, EEA, UK, Switzerland). Elsewhere it sets no default, so Google treats storage as granted. Its inline script declares a global function gtag(), replacing any existing one. Returning an empty array from the woocommerce_ga_gtag_consent_modes filter removes its defaults. gtag.js loads on every public page for non-admin visitors once an ID is entered; administrators are never tracked.
Depends on a setting · Google Analytics for WooCommerceGoogle Analytics for WooCommerce turns on Google signals by default
setting “Display advertising (ga_support_display_advertising)” · by default: yes
Google signals follows the display advertising setting, which is on by default. Its opt-out function runs only if the site calls it. The sbjs_ cookies come from WooCommerce, not this plugin.
Read in its code, 16 October 2026, Google Analytics for WooCommerce 2.4.3.
Full detail
In Google Analytics for WooCommerce, allow_google_signals follows the display advertising setting, which is on by default, so Google signals (advertising features) are enabled unless turned off. A gaOptout() function writing ga-disable-<ID> until 2099 exists but runs only if the site calls it. The plugin's code contains no sbjs_ cookie: those come from WooCommerce order attribution.
Good to know · Google Analytics for WooCommerceGoogle Analytics for WooCommerce reads WP Consent API only from the footer
Statistics and marketing consent are sent to Google at load and on each change. Until that footer script runs, gtag.js runs with the plugin's defaults. With no consent type declared, it sets optin.
Read in its code, 16 October 2026, Google Analytics for WooCommerce 2.4.3.
Full detail
Google Analytics for WooCommerce reads WP Consent API in the browser from main.js, loaded in the footer: statistics drives analytics_storage, marketing drives ad_storage, ad_user_data and ad_personalization, sent with gtag('consent','update') at load and on each wp_listen_for_consent_change. If no consent type is declared it sets window.wp_consent_type = 'optin'. Between the head config and main.js, gtag.js runs with the plugin's defaults. Its WP Consent API registration filter names includes/class-wc-google-analytics.php instead of the main plugin file.
Depends on a setting · Google for WooCommerceGoogle for WooCommerce enhanced conversions print the address in clear text
setting “Enhanced conversions” · by default: off
Off by default. When on, each page of a known customer prints the email, names and phone hashed, but the street, city, postal code and country in clear text.
Read in its code, 16 October 2026, Google for WooCommerce 3.9.6.
Full detail
With Google for WooCommerce's enhanced conversions on (off by default), every page of a known customer's session prints gtag('set','user_data') with the email, first name, last name and phone hashed (SHA-256), but the street, city, region, postal code and country in clear text in the HTML.
Good to know · Google for WooCommerceGoogle for WooCommerce passes WP Consent API choices to Google
When WP Consent API is present, its script reads the statistics and marketing choices, sends Google's consent update and follows later changes. It does not register with WP Consent API.
Read in its code, 16 October 2026, Google for WooCommerce 3.9.6.
Full detail
When WP Consent API is present and Google Analytics for WooCommerce is not, Google for WooCommerce loads wp-consent-api.js, which reads the WP Consent API statistics and marketing cookies and sends gtag('consent','update') at DOMContentLoaded (statistics to analytics_storage; marketing to ad_storage, ad_user_data, ad_personalization), and listens for wp_listen_for_consent_change. It sets wp_consent_type to optin if empty and does not register with WP Consent API.
Other plugins of the same kind.
Questions
Should I switch on Consent Mode in my tag plugin?
Not if your consent plugin already sets the defaults. Two sets of defaults on one page make the result harder to read.
Do I lose data when visitors refuse?
Google does not receive their visit. That is what refusing means. Visitors who accept are measured as before.
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 sites with a Google tag plugin
Keep your tag plugin, add consent.
the tag waits for a yes
Every feature of the complete plugin for 30 days, no card. Your tag plugin keeps working as it does today.
- 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.