link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
Free scan Install guides Developers Compare CMPs About Support Contact
Get Velo

Already have an account? Log in

Should you block Google's own tags until someone consents

Consent Mode 12 September 2026· 6 min read
The Velo mascot lifts a barrier off a Google tag so a cookieless refusal can leave the page

All posts

No, as long as Consent Mode is implemented. Google's own tags should then stay unblocked and fire on every page load, because they carry built in consent checks and enforce the visitor's choice themselves. An Additional Consent check on top blocks the tag outright, which silently downgrades Advanced Consent Mode to Basic and removes the denied signal that modelling runs on. You can check it in one line: a declined visit should still send gcs=G100.

The advice is right. It is just not about Google's tags.

Almost everything written about consent in Google Tag Manager arrives at the same instruction: gate the tag. Open Advanced Settings, then Consent Settings, require additional consent, name the types. For a vendor script that writes its own cookie the moment it loads that is correct, and our own guide to moving a script into Google Tag Manager to gate it says exactly that.

One caveat first, because it is about jurisdiction rather than mechanics. Some operators, German ones especially, block the whole container until consent on legal advice. That is a deliberate choice of Basic behaviour with the measurement cost accepted, and a different thing from a stray consent check left on a GA4 tag. This post is about the second one.

Google's own tag types are the exception, and it is not a matter of taste. Google states it plainly: its tags have built in consent checks and change behaviour on their own, so they do not need additional ones, and implementing both at once stops them working properly. A GA4 configuration tag or a Google Ads conversion tag already knows what ad_storage and analytics_storage are set to. An Additional Consent check sits in front of that machinery and never lets it run.

We learned this over five container versions of one consent remediation. The banner was fine. The container had a consent check on everything, evenly applied, which was why the account had stopped modelling anything.

What the extra check actually costs

An unblocked Google tag on a page where the visitor declined still sends a request. It goes to /g/collect with no cookies and no client identifier, carrying gcs=G100: Consent Mode is on, both storage types denied. That is a recorded refusal, and it is the input Google's modelling uses to estimate the conversions it is not allowed to observe.

A blocked Google tag sends nothing at all. Nothing is not a refusal. It is absence, and a model cannot learn from absence. You have also not made the visit more private, because the unblocked request was already cookieless on that path. You have only deleted your own evidence that the visitor was there.

So this one setting decides, in effect, whether the site runs Advanced or Basic Consent Mode, whatever the banner's screen says. It is the same question as basic vs advanced Consent Mode, read from the tag side. That denied ping is what makes 20 to 40% of the conversions consent hides recoverable: measured ranges across Amplio Data client implementations, not a guarantee, depending on your traffic mix, regions and tag configuration.

ADDITIONAL CONSENT CHECK ON visitor declines container blocks the tag the tag never runs, so its own consent handling never runs either no request leaves Basic behaviour, nothing to model NO ADDITIONAL CHECK visitor declines tag fires, enforces consent itself no cookies, no client identifier, nothing that re identifies anyone cookieless ping, gcs=G100 Advanced behaviour, modelling has an input Same banner, same visitor, same refusal. The tag setting decides what Google hears. Read from the live page, not the container preview.
The same GA4 tag on a declined visit, configured two ways. The blocked version sends nothing, which Google cannot tell apart from a visitor who never arrived. The unblocked version sends a cookieless refusal, the input modelling runs on.

How to check what you actually shipped

Five steps, in order.

  1. List every tag carrying an Additional Consent check

    Go through the container tag by tag rather than trusting whatever integration guide set it up. In each tag, under Advanced Settings and then Consent Settings, the setting reads either no additional consent required or a named list of consent types. Write down every tag on the named list, which in a container that has been through two CMP migrations is reliably longer than anyone expects.

  2. Take the check off every Google tag type

    GA4 configuration and event tags, Google Ads conversion and remarketing tags, Floodlight, and the Google tag itself all go back to no additional consent required. Leave the checks on genuine third party tags. The line is ownership, not sensitivity: a Google tag enforces consent inside itself, a Meta or Hotjar tag does not.

  3. Switch the firing option from once per page to once per event

    A tag set to fire once per page counts a blocked attempt as its one firing. The trigger fires before the visitor decides, the consent check stops the tag, and the counter still records its turn as used. When consent arrives and the trigger fires again, the container skips it. The tag looks correct in every screen and produces nothing. Once per event is the right setting on anything that can be attempted before a decision.

  4. Let the consent update land before you judge a trigger

    The container evaluates a tag's consent state at the instant its trigger fires, and a CMP applies a stored decision asynchronously, typically a few hundred milliseconds into the page. So a page load tag can be judged while consent still reads denied, on a visit from someone who accepted weeks ago. The symptom is a tag that fires on a click but never on a page view. Google's built in checks handle this timing themselves, which is the second reason not to wrap them.

  5. Verify on the live page, never in Preview

    Preview mode runs with the container's debug wiring and, very often, a consent state you clicked yourself. Load the production page in a clean browser, decline, and read what leaves. Tag Assistant will tell you the tag fired. Only the network panel tells you what Google received.

The diagnostic, in one line

Open the network panel on the live page, filter for collect, and decline. A request that leaves carrying gcs=G100 means your Google tags are unblocked and the refusal is being reported. An empty panel means something is blocking them, and there are only two realistic candidates: an Additional Consent check on the tag, or a banner that blocks the whole container before the tag exists.

Then accept and run it again: gcs=G111 is both signals granted. Getting the update to the container in the first place is the wiring in the Google Tag Manager install guide, worth re reading with this exception in mind.

Velo works this way round by default: it updates Consent Mode, leaves Google's tags to enforce the outcome themselves, and gates only the scripts that cannot. What no banner can do for you is step one, because the checks already in your container were put there by whatever set it up before.

Common questions

What people ask about this topic.

Should I block Google tags until consent is granted?

No, provided Consent Mode is implemented. Google's own tags carry built in consent checks and enforce the visitor's decision themselves, so they should stay unblocked and fire on every page load. When consent is denied they send a cookieless request with no identifiers, carrying gcs=G100, which is how Google records a refusal and the input its conversion modelling uses. An Additional Consent check on top blocks the tag before any of that runs, so nothing leaves at all.

Why does an Additional Consent check break Consent Mode?

Because it stops the tag rather than shaping it. Consent Mode works by letting the Google tag run in a restricted cookieless state and report the denied signal. An Additional Consent check is evaluated before the tag executes, so the tag never runs and never reports anything, and the site is on Basic behaviour in effect whatever the banner's settings screen says. Google's documentation says the two mechanisms do not work correctly together.

Why did my tag stop firing after the visitor accepted consent?

Usually the tag is set to fire once per page. A blocked attempt still counts as that one firing, so when consent arrives and the trigger fires again the container skips the tag. Change the firing option to once per event. A second cause is timing: the container evaluates consent when the trigger fires, while a CMP applies a stored decision a few hundred milliseconds into the page, so a page load tag can be judged while consent still reads denied.

How do I tell whether my Google tags are blocked before consent?

Load the live page in a clean browser, open the network panel, filter for collect, and decline. If a request leaves carrying gcs=G100 your Google tags are unblocked and the refusal is being reported. An empty panel means they are blocked, and the two realistic causes are an Additional Consent check on the tag or a banner that blocks the whole container. Preview mode runs with its own consent state, so it cannot answer this.

Your banner, your consent,
your data, all in one place.

Scan your site →
Pages Free scan Product Agencies Pricing Developers Install guides Compare CMPs
Company About Velo Blog Help Contact
Account Sign up Log in Get early access
GDPR UK GDPR CCPA / CPRA US state laws LGPD Ley 1581 Ley 25.326 Ley 29733
All rights reserved
© 2026 by Amplio Data