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

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.

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.

Google Consent Mode v2 Setup Guide (2026): GTM, GA4 & Google Ads

GTM implementation steps

GTM → Admin → Container Settings → Enable consent overview ✅

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)

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.

For each Google tag (GA4, Google Ads Conversion, Floodlight):

  • Tag → Advanced Settings → Consent Settings
  • Set required consent types (e.g., GA4analytics_storage)
  • Tag fires in limited mode if consent denied

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

Enhanced Conversions requires ad_user_data consent in EEA. Flow:

  1. User grants ad_user_data consent
  2. Form collects email → hashed → sent with conversion tag
  3. User denies → Enhanced Conversions data not sent; modeling fills gap

Enhanced Conversions guide

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.

Server-Side Tracking

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

  1. Blocking Google tags when consent denied — lose modeling; use Consent Mode instead
  2. Missing ad_user_data and ad_personalization — v1 only; non-compliant in EEA
  3. No default denied state — tags fire fully before user choice (GDPR violation)
  4. Not testing with Tag Assistant Consent tab — assume it works without verification