Home / Guides
Field notes on debugging tracking that other tools miss. If you are starting from scratch, begin with the GTM debugger.
Debugging a container on a live page, putting one on a page that has none, and getting a click trigger to match the thing you actually clicked.
Preview needs container access, changes the page, and only speaks for one container. Here is how to verify GTM from the requests it actually produces.
Read →Test a container before it ships — on a client site, a staging build, or a page you do not control — without touching the codebase.
Read →Why a copied CSS selector stops matching, which attributes are worth anchoring to, and the Tailwind class that silently makes a selector invalid.
Read →What Google Tag Assistant is good at, where it stops, and what to use for the tags it will never show you.
Read →Taking a push apart and turning it into the variables, triggers and tags you would otherwise type into GTM by hand.
Adding to cart rarely fires one event. What a real storefront pushes, which of them a trigger should use, and the four kinds of push that are never the answer.
Read →What a container export file has to contain, the two fields that make GTM refuse the whole import, and why placeholders beat blanks.
Read →Pointing at an element sounds simple until the page navigates under you. What a picker has to intercept, what it snaps to, and the selector call that throws.
Read →Commerce platforms that keep the events in a sandbox you cannot reach, or spell them in a vocabulary of their own — and what to read instead.
You open the inspector on a working shop and nothing arrives. The events are real, they fired, and they are not in window.dataLayer. Four platforms route them somewhere no extension can read, and each has a different place to read them instead.
Read →dl_add_to_cart, addToCart, productPageView, gtm4wp.addProductToCartEEC, ee-productView. Every platform invented its own vocabulary for the same five steps, and a checklist written against GA4 names finds nothing on any of them.
Read →What the request carries before GA4 has processed it, what changes once collection moves onto your own domain, and what a conversion needs in order to be credited to the campaign that earned it.
Why the debug stream stays empty, what a /g/collect request actually contains, and how to check GA4 on production without switching debug mode on.
Read →Two page views for one page load, purchases counted twice, a conversion rate that looks too good. How to tell a real duplicate from two properties, and which of the four causes you have.
Read →Why proxied hits vanish from most debuggers, the four signals that reveal an sGTM setup, and how to connect a server preview session.
Read →Tag Gateway serves Google's scripts from your own domain. What changes on the wire, how it differs from server-side GTM, and the four ways it quietly half-works.
Read →Campaign parameters go missing between the click and the hit more often than anyone checks. The six places they disappear, and how to read the hit that carried the wrong source.
Read →Enhanced Conversions has exactly one hard requirement, and it is the one nothing in the Google Ads interface will tell you about for days: the customer data has to be hashed before the request leaves the browser. Here is how to read that off the hit.
Read →Reading consent out of the hits themselves, and keeping test traffic from reaching a production property.
Read consent parameters straight from the hits, tell a default apart from an update, and find the vendors that fire regardless of what the banner says.
Read →Test purchases end up in real reports. How to stop the hits at the browser, in one tab only, and still see everything that would have been sent.
Read →Meta, TikTok and the rest: deduplication between browser and server, per-platform test modes, and tags firing inside a frame you do not control.
How deduplication actually works, what eid looks like in the browser request, and the five mistakes that turn a single order into two conversions.
Read →Everyone knows about DebugView and Tag Assistant. Every other platform has the same thing, switched on by a cookie almost nobody documents — here is the full list.
Read →A booking widget, a payment step or a chat box in an iframe has its own dataLayer. Why Preview shows one event where the log shows two, and what actually crosses the boundary.
Read →Source scanners tell you what is in the HTML. That is not the same as what the page runs — and the gap is where consent tools, tag-fired tags and interaction-only pixels live.
Read →