The short answer
Google Consent Mode v2 passes the visitor's choice to Google tags through four signals: ad_storage, analytics_storage, ad_user_data and ad_personalization. Set every signal to denied by default before any Google tag loads, update them only when the visitor accepts, and test in a real browser that no Google Analytics or Ads cookies are set before a choice or after Reject.
Key takeaways
- Consent Mode v2 has four main signals: ad_storage, analytics_storage, ad_user_data and ad_personalization.
- The default must be set to denied before any Google tag runs. A default set after the tag loads is too late.
- Basic mode doesn't load Google tags until consent. Advanced mode loads them with denied signals and sends cookieless pings.
- Consent Mode doesn't show a banner or collect consent. It needs a consent banner or platform that updates it.
- SafeLaunch checks for denied defaults in your code and, on paid audits, confirms in a real browser that Google cookies aren't set before a choice or after Reject.
On this page
01
What are the Consent Mode v2 signals?
| Signal | Controls |
|---|---|
| ad_storage | Storage, such as cookies, related to advertising |
| analytics_storage | Storage, such as cookies, related to analytics |
| ad_user_data | Whether user data can be sent to Google for advertising |
| ad_personalization | Whether data can be used for personalised advertising, such as remarketing |
02
Basic or advanced Consent Mode?
Advanced mode
- Google tags load on every page view
- With denied signals, they send cookieless pings
- Google models conversions from those pings
- Some regulators and lawyers question whether pings before consent are allowed in the EU
Basic mode
- Google tags don't load until the visitor accepts
- Nothing is sent to Google before a choice or after Reject
- Less modelling data for Ads
- The simplest position to defend under the ePrivacy Directive
SafeLaunch's own site uses basic mode: every signal defaults to denied, gtag.js isn't downloaded until the visitor clicks Accept, Reject and the Global Privacy Control signal keep it off, and advertising signals stay denied even after Accept.
03
What should the default snippet look like?
Place this in the page head before any Google tag, so the default is set first:
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('consent', 'default', {
ad_storage: 'denied',
analytics_storage: 'denied',
ad_user_data: 'denied',
ad_personalization: 'denied'
});
</script>Then, when the visitor accepts analytics, call gtag('consent', 'update', { analytics_storage: 'granted' }), and only then load or enable the tag in basic mode. Grant advertising signals only if the visitor accepts advertising.
04
Common Consent Mode mistakes
- The default is set after gtag.js loads, so the first hit goes out with no consent state.
- A second, hard-coded Google tag in the page head ignores the consent setup entirely.
- The banner never calls update, so signals stay denied after Accept, or the code sets granted on load.
- Other trackers aren't covered. Consent Mode controls Google tags only; Meta, TikTok, Hotjar and others need their own gating.
The only reliable test is behavioural. A SafeLaunch paid audit opens your site in clean browser sessions, before any choice, after Reject and after Accept, and records every Google request and cookie. See the real-browser test, or start a free scan.
One free fix in your inbox each week
A new copy-paste prompt for Lovable, Cursor or Claude Code every week, with the rule behind it and how to check it worked. No spam, unsubscribe in one click.
By signing up you agree to get this weekly email. We send it with Kit, and you can unsubscribe at any time. What we share with Kit is in our privacy notice.
FAQ
Frequently asked questions.
Sources and further reading
This article is general information, not legal advice. SafeLaunch is automated software, not a law firm; a report records what was checked on one version and is not a certificate of compliance. Read the disclaimer.
From the founder
SafeLaunch is built by Raghav R Handa, a lawyer-turned-builder in New Delhi. He writes about this topic in plain English:
See what SafeLaunch finds on your product.
Paste a link and get your score, the most serious problems and what already passes, in about a minute.
Keep reading