Because that is what a container does by default. GTM loads, evaluates every trigger, and fires every tag whose trigger matches — consent is an extra check you have to switch on, tag by tag, and it does not exist until you add it.
The short answer
There are two separate switches, and most containers have neither. The first is a consent default: a small snippet that runs before gtm.js and tells Google's tags that storage is denied until told otherwise. Without it, tags behave as though consent were granted. The second is the per-tag consent setting: inside each tag's Advanced Settings, Tag Manager asks whether additional consent is required, and the default answer is no.
So a container can sit behind a perfectly good consent banner and still fire everything on page load. The banner talks to its own cookie; the container never hears about it. Fixing this is configuration work in GTM plus one snippet on the page — no re-platforming, usually under an hour.
The signature is a burst of third-party requests that all begin within a few hundred milliseconds of gtm.js. Open a fresh incognito window with DevTools → Network, load the site, and do not touch the banner. You will see the container load, then the tags it fired: an analytics beacon, an ad pixel, maybe a recorder — each one a tag, each one firing because its trigger matched and nothing asked about consent.
The other tell is in Tag Manager itself. Open Preview / Tag Assistant and look at the Consent tab: if no on-page default consent state is reported, nothing on the page ever told Google's tags to wait.
You do not need a tool to answer this. Two passes — one in the browser, one in Tag Manager — tell you whether your container is gated.
gtm.js and note its time. That is time zero — everything after it that goes to a third party is a tag your container fired.google-analytics.com, facebook.com, analytics.tiktok.com, clarity.ms, snap.licdn.com) that appears before you interacted with the banner is a pre-consent tag fire. Write down the domains — that list is your work queue.What a healthy result looks like: If the container request and the vendor requests share the same one-second window and you never clicked anything, the tags are ungated. That is a fact about your page load, and it is the fact everything else on this page is about.
Google's consent framework only works if a gtag('consent','default',…) call executes before gtm.js. If the snippet is missing — or was pasted after the container, or lives in a GTM tag rather than in the page source — the tags start with no instruction to wait.
Tag Manager does not infer consent requirements. Each tag has its own Consent Settings field, and a tag created without touching it fires whenever its trigger matches. A container with forty tags typically has forty of these.
All Pages and Initialization – All Pages both fire the instant the container is ready. That is correct behavior for a trigger; it just means the timing question has to be answered by consent settings, not by the trigger.
A vendor snippet pasted into a Custom HTML tag executes exactly as written. If that snippet initializes the vendor's SDK on load, the SDK starts working the moment the tag runs — the tag's own consent setting is the only thing standing in front of it.
California's Invasion of Privacy Act (CIPA), Penal Code § 631, prohibits intercepting a communication without the consent of all parties. Since 2022, plaintiff firms have applied that decades-old wiretapping statute to websites — arguing that tags in your container transmitting visitor page views and events to their vendors before the visitor consents is an intercepted communication. Statutory damages under § 637.2 run up to $5,000 per violation, and plaintiffs argue each affected visitor session is a separate count, which is why even small sites receive demand letters. Similar all-party-consent statutes in Pennsylvania (WESCA), Florida (FSCA), and Massachusetts have produced parallel filings.
To be precise about what a network log can tell you: a tracker firing before consent is a technical finding — it establishes when a script transmitted data, not whether any law was broken. But timing is exactly what these claims are built on, which is why fixing the timing is the practical response.
<!-- Place BEFORE the GTM/gtag snippet. Defaults all storage to "denied"
so no tags fire until your CMP updates consent after the user opts in. -->
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('consent', 'default', {
ad_storage: 'denied',
analytics_storage: 'denied',
functionality_storage: 'denied',
personalization_storage: 'denied',
security_storage: 'granted',
wait_for_update: 500
});
</script>Your CMP (Cookiebot, OneTrust, Termly, etc.) calls gtag('consent','update',{...:'granted'}) only after the visitor accepts. Until then, tags stay blocked.
Terminology bridge
The setting you are looking for is called consent mode, and the per-tag switch is additional consent checks. When people talk about "the tags need to wait for the CMP" they mean tag firing order or tag sequencing. The pattern where a tag transmits data before the visitor answers has a name too — a consent gap — and it is what an automated pre-consent scan measures.
Knowing the vocabulary matters mainly because it unlocks the documentation: Google's docs index everything under "consent mode", not under "stop my tags firing early".
Two honest limits. A network log shows what loaded and when — it does not show whether a court would call any of it a violation, and nothing on this page is legal advice. And Tag Assistant only knows about tags in your container: a pixel hardcoded in your theme, injected by a plugin, or added by a platform integration is invisible to it. That is exactly the gap a real-browser scan of the rendered page closes, because it records every request regardless of who put the script there.
RegSentry loads your site in a real browser, records when each third-party tracker first contacts its server, and flags everything that fires before consent — with the fix for each one. Continuous monitoring re-runs it and emails you when something new appears.
Free real-browser scan
See every pre-consent tracker on your site — 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.