Google Consent Mode v2 Setup Guide (2026): GTM, GA4 & Google Ads
Google Consent Mode v2 tells Google tags whether users consented to cookies and data use — adjusting measurement without blocking tags entirely. Required for EEA/UK Google Ads since March 2024; best practice globally.
→ Consent Mode dictionary · GA4 Metrics Reference · Enhanced Conversions
Four consent types (v2)
| Type | Controls |
|---|---|
ad_storage |
Advertising cookies (remarketing, conversion cookies) |
analytics_storage |
Analytics cookies (GA4 client ID) |
ad_user_data |
Sending user data to Google for ads (new in v2) |
ad_personalization |
Personalized advertising (new in v2) |
All four must be implemented for EEA/UK compliance.
How Consent Mode works
User lands on site
→ Default: all consent DENIED (Consent Initialization in GTM)
→ Banner shown
→ User accepts/rejects/customizes
→ GTM updates consent state
→ Google tags adjust behavior:
Granted: full tracking with cookies
Denied: cookieless pings + Google modeling
Key insight: Tags still fire when consent denied — they send anonymous, cookieless signals. Google models the gap. Hard-blocking tags loses modeling data.
GTM implementation steps
Step 1: Enable consent overview
GTM → Admin → Container Settings → Enable consent overview ✅
Step 2: Consent Initialization tag (fires first)
Create tag: Consent Mode (Google tags) or custom HTML:
<script>
gtag('consent', 'default', {
ad_storage: 'denied',
analytics_storage: 'denied',
ad_user_data: 'denied',
ad_personalization: 'denied',
wait_for_update: 500,
});
</script>
Trigger: Consent Initialization – All Pages (built-in, fires before all others)
Step 3: Update consent on banner interaction
When user clicks Accept:
gtag('consent', 'update', {
ad_storage: 'granted',
analytics_storage: 'granted',
ad_user_data: 'granted',
ad_personalization: 'granted',
});
When user clicks Reject — leave as denied (default).
Trigger: Custom Event consent_update from your CMP or banner button click.
Step 4: Configure tag consent settings
For each Google tag (GA4, Google Ads Conversion, Floodlight):
- Tag → Advanced Settings → Consent Settings
- Set required consent types (e.g., GA4 →
analytics_storage) - Tag fires in limited mode if consent denied
Step 5: CMP integration (recommended)
Google-certified CMPs auto-integrate:
- Cookiebot
- OneTrust
- CookieYes
- Termly
- iubenda
CMP handles banner UI + consent signal → GTM receives update automatically.
Testing checklist
- Tag Assistant → Consent tab shows default denied on load
- Accept → consent updates to granted, tags fire fully
- Reject → tags fire in limited mode (not blocked entirely)
- GA4 Realtime shows traffic in both states
- Google Ads conversion diagnostics show Consent Mode active
- Test with EEA VPN to confirm banner appears
Consent Mode + Enhanced Conversions
Enhanced Conversions requires ad_user_data consent in EEA. Flow:
- User grants
ad_user_dataconsent - Form collects email → hashed → sent with conversion tag
- User denies → Enhanced Conversions data not sent; modeling fills gap
Consent Mode + server-side GTM
Server container inherits client consent state via Data Layer. Pass consent flags:
// Client container forwards to server
{
"event": "purchase",
"consent": {
"ad_storage": "granted",
"analytics_storage": "granted"
}
}
Server tags check consent before forwarding to GA4/Meta CAPI.
Nepal / non-EEA considerations
| Scenario | Recommendation |
|---|---|
| Nepal-only audience | Implement Consent Mode for future-proofing; simpler banner OK |
| Targeting EU customers | Full CMP + all 4 consent types mandatory |
| Google Ads only (no GA4) | Still need Consent Mode for EEA ad personalization |
| No banner yet | Deploy Consent Initialization with default denied NOW |
Common mistakes
- Blocking Google tags when consent denied — lose modeling; use Consent Mode instead
- Missing ad_user_data and ad_personalization — v1 only; non-compliant in EEA
- No default denied state — tags fire fully before user choice (GDPR violation)
- Not testing with Tag Assistant Consent tab — assume it works without verification
