TagIntact
Module 3 · Lesson 4 of 4 · 10 min

Ten silent failures, and how to catch each one

The recurring ways a working setup turns into bad data without an error — with the specific check for each.

Verified against Google Tag Manager + GA4, September 2026 on 2026-09-27

Everything in this course has been building toward one habit: assume it broke, and check. Here are the ten breakages that account for nearly every "the numbers are wrong" conversation, with the check that finds each.

1. The container is on the page twice

Theme update, new plugin, a developer "just to be safe." Every tag fires twice. Sessions inflate, conversion rate halves. Check: network tab, filter gtm.js, one row per ID. Or the scanner: GTM container loaded 2 times is a critical finding.

2. GA4 installed two ways

A hardcoded gtag.js next to GTM's Google tag, same G- ID. Two page_views per page. Check: network tab, filter collect, count en=page_view per tid. Scanner: received 2 page_view events on a single load.

3. A publish dropped a variable

Someone renamed a Data Layer Variable, or the developer changed transactionTotal to transaction_total. The tag still fires; value is now undefined. Check: Preview → the tag → resolved values. In GA4, a purchase count that holds while revenue falls. This is the failure a journey monitor catches the same hour.

4. Consent has quietly closed the tap

The CMP updated, the default flipped to denied in a region it used to allow, or the Accept button stopped calling update. Traffic from that region drops 40%; someone blames Google. Check: gcs on hits before and after Accept. If it never changes from G100, consent isn't updating.

5. The banner isn't talking to Google at all

CMP present, no gcs parameter ever. Tags fire as if everything were granted. Check: scanner: CMP installed but Consent Mode signals not seen.

6. Staging traffic in the production property

The site was cloned to a staging domain with the same container. QA orders and localhost sessions land in the real data. Check: GA4 → Reports → Tech → hostname, or an Exploration with hostname as a dimension. Fix with an internal/developer traffic filter, or a separate container per environment.

7. PII in a hit

A form plugin pushes the submitted email into the dataLayer "to be helpful"; a GA4 event picks it up as a parameter. Google's terms forbid it; the property can be terminated. Check: scanner: An email address is being sent to a tracking vendor (critical). In GA4, look at event parameters for anything with an @.

8. Universal Analytics still firing

Old tags to a UA- property that stopped processing in 2023–24. Dead weight, and a sign nothing was migrated with care. Check: network tab, collect?v=1. Scanner: Universal Analytics hits are still firing.

9. The thank-you page double

Refresh, back button, email link → purchase fires again. Revenue creeps up 5–15%. Check: reload a real thank-you page with the network tab open. Guard with transaction_id (Module 3, lesson 1).

10. The event name drifted

Purchase, add-to-cart, addToCart. GA4 accepts them as custom events; every ecommerce report stays empty. Check: GA4 → Admin → Events; anything that looks like a recommended event but isn't spelled like one. Fix the push.

The cadence

A single page load, checked once, catches 1, 2, 5, 7, 8. That's the scanner, and it's free and takes ten seconds — run it after every theme, plugin, or container publish.

3, 4, 6, 9, 10 need more than one page: a scripted journey through the funnel, with assertions on each step's event and parameters, run on a schedule so that a Tuesday publish is caught on Tuesday. That's the monitor, and it's what the rest of this site is building. You've done it by hand in Module 2; the sandbox lets you do it again whenever you like.

The certificate at the end of this quiz says you can do the by-hand version. That's the skill. The automation is just so you don't have to do it every morning.

Ten silent failures, and how to catch each one — Tracking Foundations · TagIntact