Consent Mode v2 is the layer between your cookie banner and your Google tags. When it works, GA4 and Google Ads respect each visitor's choice and still give you usable data. When it breaks, nothing errors out. Conversions just quietly drop, remarketing lists shrink and nobody notices for weeks. This guide is part of our GA4 setup guide for marketing websites, and it focuses on the setup details that most tutorials skip.
What is Google Consent Mode v2?
Google Consent Mode v2 is a set of signals that tells Google tags whether a visitor has agreed to analytics and advertising storage, so the tags can change their behavior. It doesn't show a banner or collect consent itself. Your consent management platform (CMP) does that, and Consent Mode passes the result to GA4, Google Ads and Floodlight.
Version 2 added two parameters to the original two. Google requires them for advertisers who use audience and measurement features for visitors in the European Economic Area, which is why so many accounts showed warnings when v2 rolled out.
Parameter | What it controls | Added in |
|---|---|---|
analytics_storage | Cookies used for analytics, such as GA4's client ID | v1 |
ad_storage | Cookies used for advertising, such as Google Ads click IDs | v1 |
ad_user_data | Whether user data can be sent to Google for advertising | v2 |
ad_personalization | Whether data can be used for remarketing and personalized ads | v2 |
Basic or advanced consent mode: which should you use?
Basic consent mode blocks Google tags completely until a visitor accepts, while advanced consent mode loads the tags with consent denied and sends cookieless pings that Google uses to model the missing conversions. Advanced mode gives you more data to work with. Basic mode is simpler to defend if your legal advice is cautious.
Pros
- Advanced mode feeds Google's conversion modeling, so reports and bidding see more of the picture
- Tags are already loaded when consent is granted, so the first hit after acceptance isn't lost
- Basic mode is easy to explain: nothing Google loads before a yes
Cons
- Advanced mode still sends cookieless requests to Google before consent, which some legal teams won't accept
- Basic mode sends nothing for visitors who ignore or reject the banner, so modeling has less to work with
- Either mode fails silently if the default command is late
Our view: decide the mode with whoever owns privacy for the business, write the decision down, and then implement it properly. Switching modes later is easy. Running a half-configured version of either is what costs you data.
How do you set up Consent Mode v2 in Google Tag Manager?
You set up Consent Mode v2 in Google Tag Manager by firing a consent default before every other tag, connecting your CMP so it sends a consent update, and letting Google tags read those signals. The order matters more than any single setting. If you're starting from a messy container, clean it first with our Google Tag Manager setup guide.
Pick a CMP that supports Consent Mode v2
Use a CMP with a native Consent Mode v2 integration or a GTM community template. For EEA traffic on Google's ad products, check that it appears on Google's list of certified CMPs.
Fire the default on Consent Initialization
In GTM, put the CMP's tag on the Consent Initialization - All Pages trigger. It must set all four parameters to denied for regions where you need opt-in, before the Google tag runs.
Set regional defaults
Use the region option to deny by default in the EEA, the UK and Switzerland, and to grant by default where your legal advice allows an opt-out model.
Add wait_for_update
Give the CMP a short window to load a returning visitor's saved choice before tags fire, so repeat visitors aren't counted as denied.
Send the update on every choice
When a visitor accepts, rejects or changes a category, the CMP must call a consent update with the new values for all four parameters, not only the two from v1.
Turn on consent checks for non-Google tags
Use GTM's additional consent settings so LinkedIn, Meta and other tags only fire when the matching category is granted.
Verify in Tag Assistant
Open GTM preview, load a page in a fresh browser and check the Consent tab on the first event. Then accept and confirm the update appears before the next GA4 hit.
What are the most common Consent Mode v2 mistakes?
The most common Consent Mode v2 mistakes are race conditions where tags fire before the default, missing v2 parameters, inconsistent defaults across domains and duplicate Google tags. Each one makes data disappear without an error message, which is why they survive for months.
Mistake | What you see | Fix |
|---|---|---|
Default fires after the Google tag | First page_view has no consent state; sessions show as unassigned | Move the CMP tag to Consent Initialization |
Only analytics_storage and ad_storage set | Ads account warnings; remarketing lists stop growing | Set ad_user_data and ad_personalization in default and update |
Banner hard-coded plus a GTM template | Two defaults, one granted and one denied | Keep one source of consent commands |
Different defaults on each domain | Conversions drop on the checkout or booking domain | Same CMP config and regions on every domain |
gtag.js in the code and a Google tag in GTM | Doubled page views and conversions | Remove one; keep tags in GTM |
Update only on accept | Rejections and later changes never reach tags | Fire the update on every banner action |
Research from consent and analytics practitioners lists the same culprits again and again: race conditions, missing ad_user_data and ad_personalization, cross-domain defaults and duplicate GA4 and Ads tags. If your conversions dropped after adding a banner, start with those four. Our GA4 conversions troubleshooting guide covers the wider list.
How does Consent Mode work across multiple domains?
Consent Mode works across multiple domains only when each domain sets its own defaults and the consent choice is carried over or asked again. Consent is stored per domain, so a visitor who accepts on your marketing site arrives on your app or booking domain with no saved choice.
There are three workable patterns. Run the same CMP on every domain with shared configuration and ask once per domain. Use a CMP that supports cross-domain consent sharing. Or keep the conversion on the main domain, for example by embedding the booking widget instead of redirecting. Whatever you pick, GA4's cross-domain measurement settings still need every domain listed, or sessions split at the hand-off.
For example, suppose a demo booking moves to another domain
For example, suppose your marketing site runs on one domain and demo bookings finish on a scheduling tool's domain. The marketing site denies by default in the EEA and updates on accept. The booking page loads its own Google tag with no default at all, so tags there behave as if consent were granted.
The result is inconsistent data and a compliance gap at the same time. The fix is to listen for the booking widget's completion event on your own domain and send the key event from there, under your own consent settings. Our guide to conversion tracking for lead-gen websites walks through that pattern.
How do you check that Consent Mode v2 is working?
You check Consent Mode v2 by testing three states in a clean browser: no choice yet, rejected and accepted. In each state, confirm what Tag Assistant shows for all four parameters and whether GA4 and Ads requests carry the expected consent signals.
- No choice yet: in an opt-in region, all four parameters read denied on the first event.
- Rejected: values stay denied, and non-Google marketing tags don't fire.
- Accepted: an update appears before the next hit, with all four parameters granted.
- Returning visitor: the saved choice applies on the first event of the new visit.
- GA4 admin: the consent settings area no longer flags missing signals for ads personalization.
Repeat the check after every banner change, CMP upgrade or site migration. Consent setups break most often during redesigns, which is why we include them in our analytics continuity plan for migrations. For the banner itself, see cookie banners that comply without wrecking UX.
