Google Consent Mode v2

Denied first.
Then ask.

Google Consent Mode v2 is how your cookie banner tells Google’s tags what a visitor allowed, through four signals: analytics_storage, ad_storage, and the two that v2 added, ad_user_data and ad_personalization. You set them to “denied” with a consent default that runs before any Google tag, then send an update when the visitor chooses. For visitors in the EEA, Google asks for these signals to keep its measurement, ad personalisation and remarketing features working, a change it asked advertisers to make before March 2024. Below: what each signal does, basic vs advanced mode, a builder that writes the code in the right order, and a checker for the order of your own <head>.

By the Builderify team

Illustration · One visit with advanced consent mode, from the default to a yes.
01 / The four signals

What Consent Mode v2 sends:
four signals, two of them new.

Each signal is either “granted” or “denied”, and Google’s tags adjust to it. The first two are about storage: may Google’s tags set cookies. Version 2 added two parameters about what Google may do with the data, ad_user_data and ad_personalization, and those are the ones older banners leave out.

Since v1 01

analytics_storage

“Enables storage, such as cookies (web) or device identifiers (apps), related to analytics, for example, visit duration.”

Whether Google Analytics may set its cookies and recognise a returning visitor.

Banner switch: Analytics
Since v1 02

ad_storage

“Enables storage, such as cookies (web) or device identifiers (apps), related to advertising.”

Whether Google Ads and Floodlight may set cookies, such as the one that remembers an ad click.

Banner switch: Marketing
Added in v2 03

ad_user_data

“Sets consent for sending user data to Google for online advertising purposes.”

Whether Google may receive data about this visitor for its advertising, not just store a cookie.

Banner switch: Marketing
Added in v2 04

ad_personalization

“Sets consent for personalized advertising.”

Whether the visit may be used for remarketing and personalised ads.

Banner switch: Marketing
Two commands

gtag('consent', 'default', …) sets where every visit starts, before the visitor has seen your banner. gtag('consent', 'update', …) sends what they chose. Tag Manager templates use the same two steps under the names “default” and “update”.

Three more you rarely need

Google also defines functionality_storage, personalization_storage and security_storage, for a site’s own features. Analytics and Ads don’t read them, so the builder below leaves them out.

02 / Basic vs advanced

Consent Mode basic vs advanced:
it’s when the tag loads.

In basic consent mode the Google tag doesn’t load until the visitor agrees, so a refusal sends Google nothing. In advanced, the tag loads on every page with the denied defaults, and for a visitor who refuses it sends cookieless pings that Google uses to model the conversions and visits it can’t see.

Neither is the “compliant” one by itself. Advanced gives Google more to model with; basic keeps a refusal entirely off Google’s servers. If you can’t say which your lawyer would want, basic is the cautious choice.

Basic Advanced
Google tag loads Only after the visitor interacts with the banner As soon as the page opens
While consent is denied Nothing is sent to Google, not even the consent status Measurements are sent without cookies
Google Ads conversion modelling A general model A model specific to your account
GA4 behavioural modelling Not eligible: the tag has to load before the banner Possible, with enough traffic
How to set it up Block the tag until consent; send the update Defaults first, then the tag; send the update

From Google’s consent mode overview and the Google Ads help page. Modelling also needs traffic. GA4’s behavioural modelling asks for at least 1,000 events a day with analytics_storage denied for at least 7 days, and 1,000 daily users who granted it on 7 of the last 28 days. Google Ads conversion modelling asks for 700 ad clicks over 7 days, per country and domain.

03 / Snippet builder

Consent Mode v2 setup,
written for your site.

Pick a mode, where to deny by default, and which Google products you use. The builder writes the defaults for the top of your <head> and the update your banner calls, in Google’s own syntax, and shows where each piece goes.

Mode
Denied by default
What you use

How long Google’s tags wait for your banner’s update before sending. 0 leaves it out.

In <head>, first
<!-- 1. First in <head>, above any Google tag -->
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}

  // The EEA, the UK and Switzerland: denied until they choose
  gtag('consent', 'default', {
    'ad_storage': 'denied',
    'ad_user_data': 'denied',
    'ad_personalization': 'denied',
    'analytics_storage': 'denied',
    'region': [
      'AT', 'BE', 'BG', 'HR', 'CY', 'CZ', 'DK', 'EE',
      'FI', 'FR', 'DE', 'GR', 'HU', 'IE', 'IT', 'LV',
      'LT', 'LU', 'MT', 'NL', 'PL', 'PT', 'RO', 'SK',
      'SI', 'ES', 'SE', 'IS', 'LI', 'NO', 'GB', 'CH'
    ],
    'wait_for_update': 500
  });
  // Everywhere else
  gtag('consent', 'default', {
    'ad_storage': 'granted',
    'ad_user_data': 'granted',
    'ad_personalization': 'denied',
    'analytics_storage': 'granted'
  });
  gtag('set', 'ads_data_redaction', true);
</script>

<!-- 2. Then the Google tag -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX"></script>
<script>
  gtag('js', new Date());
  gtag('config', 'G-XXXXXXXXXX');
  gtag('config', 'AW-XXXXXXXXX');
</script>
Called by your banner
<script>
  // 3. Call this from your cookie banner when the visitor chooses,
  //    and on every later page for a visitor who already chose.
  function sendConsent(analytics, marketing) {
    gtag('consent', 'update', {
      'ad_storage': marketing ? 'granted' : 'denied',
      'ad_user_data': marketing ? 'granted' : 'denied',
      'analytics_storage': analytics ? 'granted' : 'denied'
      // ad_personalization stays 'denied': no remarketing
    });
  }
</script>
The order on the page
  1. 1 Consent defaultsDenied in the EEA, UK and Switzerland; granted elsewhere
  2. 2 Google tagLoads at once; sends cookieless pings while denied
  3. 3 Your cookie bannerAsks, and remembers the answer
  4. 4 Consent updateOn the choice, and on every later page
This order avoids
  • A default that arrives after the Google tag
  • Missing ad_user_data or ad_personalization
  • Granted by default in the EEA
  • When two defaults match a visitor, Google applies the one for the more specific region; codes follow ISO 3166-2.

Using Tag Manager instead of gtag.js? The defaults still go above the container snippet, in the same form, or in a consent template set to fire on Consent Initialization. Your banner then calls sendConsent exactly as above, and you set each tag’s consent checks in the container.

04 / Order checker

Does your consent default
run before the Google tag?

Paste the <head> of a page (in Chrome, View page source). The checker lists what runs, top to bottom, and flags the three mistakes we see most. It reads the text in your browser; nothing is sent anywhere.

It looks for gtag consent calls, gtag.js, Tag Manager, Builderify’s consent tag and a few common consent tools. Code your plugins add after the page loads won’t be in the source, so confirm with Tag Assistant too.

What runs, top to bottom Line
  1. 1 Google tag (gtag.js) Before consent 6
  2. 2 Google tag command (config or event) Before consent 11
  3. 3 Consent default Too late 16
  • Fix Consent is set after the Google tag on line 6. Move the defaults, or your consent tool, to the very top of <head>.
  • Fix Missing ad_user_data and ad_personalization, the signals Consent Mode v2 added. For visitors in the EEA, Google needs them to keep measurement, ad personalisation and remarketing working.
  • Fix analytics_storage granted by default for every visitor, the EEA included. Deny it by default, or add a region-specific default that denies it in the EEA, the UK and Switzerland.
  • Check No consent update found. Your banner must send gtag('consent', 'update', …) when the visitor chooses.
05 / Google vs the law

Consent Mode isn’t consent.
It’s the message about it.

Google says it plainly: “Consent mode doesn’t provide a consent banner or widget.” It asks for the signals so its products can follow your visitors’ choices. The law asks for the choice itself. A site can send perfect signals and still break the rules, if the banner nudges people to accept or tags run before anyone answers.

What Google requires

Google’s EU user consent policy covers end users in the EEA, the UK and Switzerland. It asks for consent to cookies or other local storage where the law requires it, and to the use of personal data for ad personalisation. Its Consent Mode page for the EEA adds that, to keep using measurement, ad personalisation and remarketing, you must collect that consent and “share consent signals with Google”; Google asked advertisers to upgrade before March 2024. It recommends a consent platform for advertisers but doesn’t require a certified one; that rule is for AdSense, Ad Manager and AdMob publishers.

What the law requires

In the EU, the EDPB’s consent guidelines want consent that is freely given, specific, informed and unambiguous; scrolling or swiping “will not under any circumstances” count, and pre-ticked boxes are invalid. Its cookie banner taskforce reported that most authorities see a banner with an accept button but no reject option on the same layer as an infringement. In the UK, the ICO asks for prior consent unless an exception applies, and refusing must be as easy as accepting. Since 5 February 2026 the Data (Use and Access) Act lets some analytics storage run without consent, under conditions, but that exception “does not apply to purposes related to online advertising”.

  1. 01

    Defaults before anything Google

    Google says the default must run on every page before any command that sends measurement data, and that out of order, defaults won't work. In practice: the first script in <head>.

  2. 02

    Denied where consent is required

    Start the EEA, the UK and Switzerland at denied. A default of granted there means tags store cookies before anyone said yes.

  3. 03

    A banner that really asks

    Consent Mode carries the answer; it doesn't ask the question. You still need a banner where refusing is as easy as accepting, and nothing non-essential runs first.

  4. 04

    An update on every page

    Send the update when the visitor chooses, and again on each later page from the stored choice, or Google sees the denied default again.

  5. 05

    Proof, and a way back

    Keep a record of who agreed to what and when, and give visitors a link to change their mind as easily as they gave it.

This is how the rules read to us, with links to the sources below. It isn’t legal advice; for your own site, ask whoever advises you. The transfer side is in is Google Analytics GDPR compliant?

06 / Check it works

How to check Consent Mode
is really working.

Google’s Tag Assistant shows the consent state your page sets, before and after the visitor chooses. Use a private window so no stored choice gets in the way.

  1. 01

    Connect Tag Assistant

    Open tagassistant.google.com, add your site’s address and connect. Your site opens in a new window, linked to the debugger.

  2. 02

    Read the default

    Don’t touch the banner. Open the earliest Consent event and its Consent tab: the On-page Default column should say denied for all four signals, for a visit from the EEA. An empty Consent tab means Consent Mode isn’t on the page.

  3. 03

    Choose, then read the update

    Accept in your banner. The On-page Update column should now say granted for what you allowed, and stay denied for what you didn’t.

  4. 04

    Then ask Google Ads

    In Google Ads, a conversion action’s Diagnostics tab says “Consent mode is implemented”, or “…and modeling is active”. Google says the status can take 48 hours to appear.

Network › collect › gcs G1 + ad + analytics
gcs ad_storage analytics_storage Means
G100 denied denied Nobody has said yes (or the visitor refused)
G110 granted denied Marketing allowed, analytics refused
G101 denied granted Analytics allowed, marketing refused
G111 granted granted Everything allowed

Without Tag Assistant: open your browser’s developer tools, Network tab, filter on collect, and read the gcs parameter of a GA4 request. Google says gcs carries ad_storage and analytics_storage, while the longer gcd encodes all the consent types, the v2 pair included. In gcd, 13r3r3r3r5 reads as all four denied by default, then granted by an update.

Google names these parameters but doesn’t publish what their values mean. This reading is Complianz’s, the one practitioners use; Tag Assistant stays the authority.

07 / With Builderify

A banner that sends
the signals for you.

Builderify’s cookie consent banner comes with a consent tag you paste as the first line of your <head>. It sets the Consent Mode defaults before anything else runs, and sends the update every time a visitor chooses or changes their mind. Its default is “Ask before tracking”: denied until a yes, for everyone.

The consent tag, the decisions and the consent log cost no credits. The banner comes with the Builderify widget, whose page loads are 10 credits per 1,000, from the 250 free credits every account gets each month. Packs start at $9, one-time.

Rather not run Google at all? The Google Analytics alternative guide compares simpler tools, replacing Google Analytics walks through the switch, and the Plausible and Simple Analytics guides cover two cookieless options.

<head>
<script src="https://app.builderify.com/consent/….js" data-cfasync="false"></script> ← first
<script async src="…/gtag/js?id=G-…"></script> ← your own tag, advanced
…

What it does

  • One consent tag, first in <head>, that sets all seven Google signals before your tags run, then sends an update on every choice
  • ad_storage, ad_user_data and ad_personalization follow Marketing; analytics_storage follows Analytics
  • “Ask where the law requires it” decides opt-in or opt-out from the visitor’s time zone, with no IP lookup
  • Ad data redaction on by default, URL passthrough one switch away
  • GA4, Google Ads and Tag Manager connected by ID; a consent log you can export as CSV
  • User Journey can wait for the same Analytics answer

Know this first

  • wait_for_update is fixed at 500 ms, and there is no Google ‘region’ parameter: the region is decided in the browser
  • GA4 and Google Ads connected by ID load only after a yes, which is basic mode. For advanced, paste your own Google tag below the consent tag, or use Tag Manager
  • Not a Google-certified CMP, and it doesn’t speak the IAB TCF, so it isn’t built for AdSense or Ad Manager publishers
  • If your credits run out, the widget pauses and the banner with it; the consent tag keeps the denied defaults, so tags stay off for new visitors until you top up
  • It helps you ask properly; it isn’t legal advice or a compliance guarantee
Questions

Consent Mode v2, before you ask.

Google Consent Mode v2 is how a website tells Google's tags what each visitor agreed to, through four signals: ad_storage, analytics_storage, ad_user_data and ad_personalization. Version 2 added the last two. You set them to denied with a consent default that runs before any Google tag, then send an update when the visitor chooses in your cookie banner.

In basic consent mode the Google tag does not load until the visitor interacts with your banner, so a refusal sends Google nothing, not even the consent status. In advanced mode the tag loads straight away with denied defaults and sends measurements without cookies, which Google uses for an advertiser-specific conversion model and, with enough traffic, GA4 behavioural modelling.

For visitors in the EEA, Google says that to keep using its measurement, ad personalisation and remarketing features you must collect consent and share consent signals with Google, which in practice means Consent Mode v2. Google asked advertisers to upgrade before March 2024.

No. Google says consent mode does not provide a consent banner or widget; it only passes on the answer your banner collects. You still need a banner that asks before non-essential cookies are set and makes refusing as easy as accepting.

Connect your site in Google's Tag Assistant from a private window and open the earliest Consent event: the On-page Default column should say denied. Accept in your banner and the On-page Update column should change to granted. In Google Ads, a conversion action's Diagnostics tab also reports whether consent mode is implemented.

Stop losing the visitors
you already paid for.

More leads from the traffic you already have, and follow-up that sends itself. Free to start. No card, no monthly fee.