Why tracking breaks silently, and why you find out last
The five ways a working GA4 setup turns into bad data without a single error, and what a monitor has to check to catch each one.
Nothing in Google Tag Manager or GA4 tells you when tracking stops working. Tags don't throw. Events don't fail loudly. A purchase that stops carrying value still shows up in the realtime report as a purchase, and the dashboard looks fine right up until someone asks why revenue is flat while orders are up.
Here are the five failures we see most, in the order they tend to happen after a launch.
1. A container publish drops a variable
Someone renames a dataLayer variable, or a developer changes the key from transactionTotal to transaction_total during a refactor. The GA4 event tag still fires. The parameter is now undefined, which GA4 quietly ignores.
What catches it: replaying the journey and asserting that purchase carries value, currency, transaction_id, and items[] — not just that purchase fired.
2. A second GA4 config appears
A plugin, a theme update, or a well-meaning marketer adds a gtag snippet to the page. Now every event is sent twice. Sessions double, conversion rate halves, and nobody notices because the shape of the graphs doesn't change.
What catches it: scanning the page for every measurement ID that fires and flagging any that fire more than once per pageview.
3. Consent defaults change
A CMP update flips the default for analytics_storage to denied in a region it used to allow, or the consent banner's "accept" button stops pushing the update event. Traffic from that region drops 40% and the analyst spends a week blaming a Google algorithm update.
What catches it: loading the page as an EEA visitor, recording the consent state before and after acceptance, and comparing to the last known-good run.
4. Staging traffic lands in production
A developer clones the site to a staging domain and the GTM container comes with it. The production GA4 property now contains a stream of localhost and staging. hostnames, test purchases, and QA sessions.
What catches it: watching the hostname dimension in the GA4 Data API for anything outside the allowed list.
5. The dataLayer starts leaking PII
A form plugin update pushes the submitted email address into the dataLayer "to be helpful". A GA4 event picks it up as a parameter. This is a policy violation that can get the property suspended, and the only symptom is a new value in a report nobody reads.
What catches it: pattern-matching every event parameter against email, phone, and postcode shapes on every run.
None of these produce an error. All of them produce wrong numbers that look plausible. That's the whole reason TagIntact exists: the free tools find these once, and the monitor keeps finding them every hour after that.
One email every two weeks. Unsubscribe in one click.