Free scan
Consent Mode v2

GTM Consent Mode v2: the setup that actually blocks tags

Published August 15, 2026 · 10 min read · RegSentry blog

Google Consent Mode v2 is how Google's tags — Analytics, Ads, and anything else riding through gtag or Tag Manager — learn whether a visitor has consented. Set up correctly, tags hold their fire until consent arrives. Set up almost-correctly, everything looks fine in Tag Manager while tags fire exactly as they always did — and "almost correctly" is the most common state we find in the wild. This guide walks the full setup, in order, with the verification step most guides skip.

What Consent Mode actually is (and isn't)

Consent Mode is a signaling layer. Your site declares a consent state for a handful of named categories, and Google's tags read that state and adjust their behavior. The v2 part refers to two signals Google added for its advertising tags: ad_user_data and ad_personalization, on top of the original ad_storage and analytics_storage. Google requires these v2 signals for features like remarketing audiences to work for traffic from regions where they apply.

Two things Consent Mode is not: it is not a consent banner (you still need a consent management platform to ask the visitor), and it does not govern non-Google tags by itself — though Tag Manager's consent settings, covered below, extend the same mechanism to any tag in your container.

One more distinction worth knowing before you configure anything: Consent Mode has two flavors. Basic means tags are fully blocked until consent — nothing loads, nothing is sent. Advanced means Google's tags load even when consent is denied but send cookieless "pings" instead of full hits, which Google uses for conversion modeling. Advanced is the default behavior when you simply set defaults to denied and let the tags load; Basic requires you to also hold the tags back. If your goal is "no tracker contacts its server before consent" — the standard that pre-consent tracking claims are measured against — understand that Advanced mode still sends those denied-state pings, and decide deliberately which posture you want.

Step 1: The default — denied, first, everywhere

The consent default must execute before the GTM container (or gtag.js) loads. This ordering is the single most common failure: if the container loads first, tags can fire in the gap, and no amount of later configuration takes those requests back.

<!-- Consent Mode v2 defaults. Place in <head>, BEFORE the GTM container
     snippet (or before gtag.js). Nothing may load ahead of this. -->
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('consent', 'default', {
    ad_storage: 'denied',
    ad_user_data: 'denied',
    ad_personalization: 'denied',
    analytics_storage: 'denied',
    functionality_storage: 'denied',
    personalization_storage: 'denied',
    security_storage: 'granted',
    wait_for_update: 500
  });
</script>

Notes on the pieces:

Step 2: The update — wiring your CMP's accept callback

When the visitor makes a choice, your CMP must tell Google by calling gtag('consent','update',…) with the categories the visitor granted:

// Your CMP calls this from its "visitor accepted" callback.
// Grant only the categories the visitor actually accepted.
gtag('consent', 'update', {
  ad_storage: 'granted',
  ad_user_data: 'granted',
  ad_personalization: 'granted',
  analytics_storage: 'granted'
});

In practice you rarely write this by hand: every major CMP — Cookiebot, OneTrust, CookieYes, Termly, Usercentrics, Osano, Iubenda and others — has a Google Consent Mode integration that maps its own categories (marketing, statistics, preferences) onto Google's signals and fires the update for you. The failure mode is simply that the toggle was never turned on: the banner records the choice in its own cookie and Google never hears about it, so tags run on defaults forever. Find the integration setting in your CMP and enable it.

Step 3: Per-tag consent requirements in Tag Manager

Google's own tags (GA4, Google Ads) have built-in consent checks — they automatically respect analytics_storage and the ad signals. Third-party tags in your container do not. This is what GTM's tag-level consent settings are for:

  1. In GTM, go to Admin → Container Settings and check Enable consent overview.
  2. Back in the workspace, the shield icon (Consent Overview) now lists every tag and its consent status. Expect to find most third-party tags listed as "consent not configured."
  3. Open each tag → Advanced Settings → Consent Settings, choose Require additional consent for tag to fire, and add the categories that fit: ad_storage for ad pixels (Meta, TikTok, LinkedIn), analytics_storage for analytics and replay tools.
  4. With a requirement set, GTM will not fire the tag until that consent signal is granted — this is the mechanism that extends Consent Mode's blocking to non-Google tags.

Two supporting settings worth knowing: ads_data_redaction (when true and ad_storage is denied, further strips identifiers from any ad pings) and url_passthrough (carries click information through page URLs when cookies are denied). Both are optional refinements, set via gtag('set', …).

Step 4: The verification that catches broken setups

Every step above can be configured and the setup can still fail — a hardcoded snippet outside GTM, a duplicate pixel from a platform integration, a CMP category mapped wrong. The only trustworthy test is watching the network:

  1. Open your site in a fresh incognito window with DevTools → Network open. Do not touch the banner.
  2. Filter for collect, facebook, doubleclick, tiktok. In a Basic setup, nothing should appear. In an Advanced setup, GA hits should carry gcs=G100 — the parameter that says consent was denied when the ping was sent — and no third-party tags with consent requirements should fire at all.
  3. Use GTM's Preview mode: the Consent tab shows the consent state at each moment, and each tag shows whether it fired or was blocked by a consent requirement.
  4. Accept the banner and confirm the update arrives (the Consent tab flips to granted, tags fire). Then clear cookies, reject, and confirm they don't.

The five ways "consent mode not working" usually resolves

  1. Defaults after the container. The denied default sits below the GTM snippet in the page. Move it above — order is everything.
  2. CMP integration never enabled. The banner works, the update never fires. Turn on the CMP's Consent Mode toggle and re-test.
  3. Third-party tags with no consent requirement. Google's tags behave; the Meta/TikTok/LinkedIn tags fire regardless. Set per-tag requirements via Consent Overview.
  4. Tracking that doesn't go through GTM at all. Hardcoded theme snippets and platform-injected pixels (store channel apps, plugins) never see GTM's consent layer. Find them by searching your rendered page source, and either move them into GTM or gate them through your CMP.
  5. Expecting Basic behavior from an Advanced setup. You see denied-state pings and assume it's broken — or worse, assume it's fully blocked. Decide which mode you intend, and configure (and verify) that mode.

Check where you stand — free

After any Consent Mode change, verify from outside your own assumptions: our free checker loads your site in a real browser with the banner unanswered and lists every tag that contacted its server anyway — the same view a plaintiff-side scanner gets.

See what fires on your site before visitors consent — free, 30 seconds, no signup.

Real browser scan, no signup to run it. You see a summary of the findings; the full report with every tracker unlocks with your email.

If you'd rather have the site watched continuously — with an email the moment a new tracker appears — that's what monitoring is for ($99/mo, cancel anytime).