Preview mode and the network tab
The two views that together answer "did it fire, with what, and did it arrive" — and the habit of checking all three before you publish.
You've built a few tags. Before any of them go live, this lesson is the checklist you run — every time, on every change, for as long as you do this work.
Preview mode: GTM's side of the story
Click Preview in the container. Enter the URL, connect. Two windows: your site with a "Tag Assistant connected" badge, and the debug window.
The debug window's left column is the event timeline — every event GTM saw on this page, in order: Consent Initialization, Initialization, Container Loaded, DOM Ready, Window Loaded, then your clicks and dataLayer pushes. Click any event and the right side shows:
- Tags — which tags fired on this event and which didn't. Click a tag to see the resolved values of every parameter. This is where
undefinedin a value field jumps out. - Variables — every variable's value at that moment. If a Data Layer Variable is empty here, the push didn't have the key (or the key path is wrong:
ecommerce.valuenotecommerce_value). - Data Layer — the array state after this event. The source of truth for "what did the site actually send."
- Errors — JavaScript errors from Custom HTML tags. Read this tab; they're silent everywhere else.
What Preview cannot tell you: whether the request left the browser, and whether it was accepted. It shows intent.
The network tab: what actually left
DevTools → Network → filter collect (GA4) — or gtm.js, tr/? (Meta), bat.bing (Microsoft), whatever vendor you're checking. Keep it open while you click around.
For each request:
- Status —
204or200is accepted.0/(blocked)means an extension or a content-security policy stopped it. A4xxmeans the vendor rejected it. - Payload / Query — the parameters.
en,tid,ep.*,epn.*for GA4. Confirm the value is a number with no currency symbol, the event name is exact, thetidis the right property. - Count — one action, one request. This is the check that catches duplicate installs, and it's the one people skip.
Preview says the tag fired but there's no request? Look for a JS error earlier on the page (Errors tab, then the Console). Look at consent state — a denied analytics_storage suppresses GA4 hits entirely in basic Consent Mode. Look for an ad blocker in this browser.
DebugView: the receiving end
GA4 → Admin → DebugView. While Preview is connected, your browser is in debug mode and your events stream here within seconds, with every parameter expandable. If a request shows 200 in the network tab but nothing appears in DebugView: wrong tid, or an internal-traffic / developer-traffic filter is excluding you (check Admin → Data filters).
The three-view habit
Before you publish anything:
- Preview — the tag fired on the right event, and every parameter resolved to a real value.
- Network — one request per action, right endpoint, right
tid,2xxstatus. - DebugView — the event arrived with the parameters you expect.
Then Submit → Publish, with a version name that says what changed (v14 – add cta_click event). Versions are your undo button; a good name is what makes the undo findable when something breaks two weeks later.
Do it on the sandbox
Point Preview at the sandbox, add a product to the cart, and walk the three views for add_to_cart. Then go to checkout, place the order, and do it again for purchase on the thank-you page — including the refresh test: reload the thank-you page and confirm no second purchase request appears. The sandbox guards against it; your real site needs to as well.
Now reload the sandbox home page with the scanner: tagintact.com/tools/tracking-health-scanner. It's the network-tab check, run from outside, on any page, in ten seconds. Module 2's quiz is next.
The sandbox store fires real ecommerce dataLayer events and loads your GTM container, so you can build the tag from this lesson against live events.
Open the sandbox