Chapter 2 of 6 · GA4

Layer 1: Data collection

Data collection is whether GA4 captures what happens on the site. Problems here are invisible in reports, making this the most critical layer to verify first.

2 min read · Agency · Intermediate

Problems here are invisible in reports: a page that doesn't fire the tag looks like a page nobody visits, not a broken page.

Image placeholder

Tag Assistant verification walkthrough

Screenshot of Tag Assistant open on a product page with a GA4 hit highlighted and its event parameters (event_name: page_view, measurement_id: G-XXXXXXX). A clean single hit with no duplicate tags models a passing result.

Check What to look for How to verify Fix if failing
Tag coverage Fires on every page type: home, product, blog, checkout, confirmation Real-time report on each page type, or Tag Assistant Add the missing GTM trigger or page-level tag
Single tag One GA4 tag per page (duplicates double-count events) Tag Assistant: multiple G-XXXXXXX hits on one page Remove the duplicate from GTM or the hardcoded script
Enhanced measurement Which auto-events are on: scroll, outbound clicks, site search, video, downloads Admin: Data Streams: Enhanced Measurement settings Turn off auto-events your custom tags already capture
Dev/staging separation Test and dev environments don't send to the production property Hostname in the Pages report: no staging URLs Use a separate staging property, or filter out non-production hostnames
dataLayer structure GTM dataLayer pushes are formatted correctly and fire at the right point in the page lifecycle Browser console: window.dataLayer after triggering an event Push before GTM fires, not after; use snake_case keys throughout
Depth guide: Implementing the dataLayer for Optimal GA4 Reporting

Image placeholder

dataLayer push timing diagram

Page lifecycle timeline (DOMContentLoaded, GTM fires, dataLayer.push, GA4 hit sent) marking the correct moment to push values before GA4 reads them. A second timeline shows the wrong order (push after the GA4 hit, so values are missing) and how the bug appears in DebugView.

PreviousThe four-layer model NextLayer 2: Data quality