Google Consent Mode v2
The CMP drives Consent Mode automatically (googleConsentMode: true by default).
When you configure a Google bridge, it pushes the default (denied) immediately
before it loads the tag, then issues the update when the visitor decides.
Only add the inline default to your head when Google tags are loaded elsewhere.
For a new Google setup, start with the Google bridge or the configurator. The bridge is the recommended way to load a GTM container, GA4 tag, or Ads tag because it keeps the default-before-loader ordering together with the tag configuration.
Signal mapping
Section titled “Signal mapping”| CMP category | Google Consent Mode signal(s) |
|---|---|
necessary |
security_storage (always granted) |
preferences |
functionality_storage, personalization_storage |
statistics |
analytics_storage |
marketing |
ad_storage, ad_user_data, ad_personalization |
Don’t hard-block Google tags
Section titled “Don’t hard-block Google tags”In the denied state a Google tag still sends cookieless pings, and Google’s
conversion/behavioural modelling recovers a large share of conversions you’d
otherwise lose. Hard-blocking throws that away. Prefer the
Google bridge;
LightningCMP.debug() warns when a Google tag is
hard-blocked.
The ordering hazard
Section titled “The ordering hazard”wait_for_update: 500 gives the CMP a 500 ms window to read the stored
decision before Google tags act on the default — keep it. If a site-hosted
gtm.js/gtag.js loads before the CMP’s default, debug() surfaces a
consentmode-order hint: add the inline gtag('consent','default',{…denied…})
block in <head> before your tag, or let the CMP load the tag for you via
bridges.google.tagId.
To turn the integration off entirely (rare — only if another system owns Consent
Mode): googleConsentMode: false.