Clearly
Chapter 2 of 6 · GA4

Layer 1: Data collection

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

2 min read · Agency · Intermediate

Data collection is about whether GA4 is actually seeing what happens on the site. Problems here are invisible in the reports — a page that doesn't fire the tag looks like a page that nobody visits, not like a broken page.

Image placeholder

Tag Assistant verification walkthrough

A screenshot-style image showing the Tag Assistant Chrome extension open on a product page with a GA4 hit highlighted, confirming the tag fires correctly and showing event parameters (event_name: page_view, measurement_id: G-XXXXXXX). The panel shows a clean single hit with no duplicate tags, to model what a passing result looks like for an analyst who has not used Tag Assistant before.

Check What to look for How to verify Fix if failing
Tag coverage GA4 fires on every page type: home, product, blog, checkout, confirmation Real-time report while browsing each page type, or Tag Assistant Chrome extension Add missing GTM trigger or page-level tag inclusion
Single tag Only one GA4 tag firing per page (duplicate tags double-count events) Tag Assistant: check for multiple G-XXXXXXX hits on the same page Remove duplicate tag from GTM or from hardcoded script
Enhanced measurement Which auto-events are on: scroll, outbound clicks, site search, video, file downloads Admin: Data Streams: Enhanced Measurement settings Turn off any auto-events already captured by custom tags (prevents double-counting)
Dev/staging separation Test and development environments are not sending data to the production property Check hostname in the Pages report — staging URLs should not appear Use a separate GA4 property for staging, or add a hostname filter to exclude non-production domains
dataLayer structure If using GTM, the dataLayer pushes are formatted correctly and firing at the right point in the page lifecycle Browser console: window.dataLayer after triggering an event Fix push timing (push before GTM fires, not after); fix key casing (snake_case throughout)
Depth guide: Implementing the dataLayer for Optimal GA4 Reporting

Image placeholder

dataLayer push timing diagram

A diagram showing the page lifecycle timeline (DOMContentLoaded, GTM fires, dataLayer.push, GA4 hit sent) annotated to show the correct moment to push dataLayer values before GA4 reads them. A second timeline below shows the incorrect order (dataLayer.push fires after the GA4 hit, so values are missing from the event) to illustrate the bug this timing issue causes and how it would appear in DebugView.

PreviousThe four-layer model NextLayer 2: Data quality