How to Check GA4 Is Actually Firing on Every Page
To check if GA4 is installed correctly, confirm three things on a page: the tag is in the HTML, the browser sends a collect request with your measurement ID, and the event shows up in the GA4 property. A clean result on the homepage is a good start, but GA4 usually breaks on the pages nobody tests, so the check has to cover every template.
Most installs are verified once, on launch day, on one URL. After that a new checkout template ships, a consent platform gets swapped, or a replatform brings a different measurement ID, and nothing on the page looks any different.
Four checks, from quickest to most conclusive
View the source. Press Ctrl+U (Cmd+Option+U on a Mac) and search for
gtag/js?id=G-. A direct install loadshttps://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX. Compare that ID with the one under Admin > Data streams in your property. If you only findgtm.js?id=GTM-XXXXXXX, you have proved Google Tag Manager is present, not GA4, because the container adds the GA4 tag at runtime.Watch the network. Open DevTools, go to the Network tab, tick Preserve log, type
collectin the filter box and reload. A working install sends a request to/g/collectonwww.google-analytics.comor a regional host such asregion1.google-analytics.com. Retest in an incognito window with extensions off, since ad blockers stop this request on your machine and nobody else's.Use Tag Assistant. At
tagassistant.google.com, connect the URL and click through the site. It lists the Google tags it finds, their IDs and the events they send, and it also activates debug mode.Confirm in the property. With Tag Assistant connected, open Admin > DebugView to watch events arrive, or Reports > Realtime from a clean browser. This is the only step that shows the hit was received rather than just sent.
What the collect request tells you
The query string of that request is worth reading, because it answers most "why is the data wrong" questions before you open GA4.
| Parameter | Example | Meaning |
|---|---|---|
v |
2 |
GA4 measurement protocol version |
tid |
G-XXXXXXXXXX |
Measurement ID the hit is sent to |
en |
page_view |
Event name |
dl |
https://example.com/cart/ |
Page URL recorded |
gcs |
G100 or G111 |
Consent Mode state: G100 means analytics and ads storage denied, G111 both granted |
A tid that differs between templates means data is splitting across two properties. A gcs of G100 on a visitor who accepted the banner points at the consent integration, not at GA4.
Why a passing homepage proves little
GA4 is normally added at the template or layout level, and most sites run several. A marketing layout can carry the tag while the checkout, the blog or a landing page builder uses a separate one that never got it. Sessions look normal and conversions fall.
Consent adds another failure point. If a CMP only releases the tag after acceptance, replacing the CMP or recategorising the tag can stop it firing for most visitors while the snippet stays in the source. GTM has its own version: the container loads, but the GA4 tag inside it is paused or sits in an unpublished workspace. From outside, everything looks installed. Changes like these are typical silent SEO changes: nothing breaks visibly, the numbers just drift.
The practical routine is to pull the site's sitemap.xml, pick one URL per template (home, category, product, cart, checkout, article, landing page) and run the network check on each, then repeat after every release. On one site that is manageable. Across twenty clients it rarely happens, which is the broader problem of monitoring client websites for changes.
Checking tags on every URL automatically
Deltio reads the pages listed in each site's sitemap on a daily cycle and records which marketing tags it finds, covering GA4, Google Tag Manager and Meta Pixel. It compares each check with the previous one, so a tag that was on a page yesterday and is missing today triggers an alert to that site's Slack channel and email. It also watches the cookie consent banner, because a CMP change is a common reason tags stop loading. New URLs in the sitemap are included automatically. More on routing is in our piece on SEO change alerts.
Deltio confirms the tag is on the page. It does not see inside your GA4 property, so DebugView and Realtime remain the way to confirm data is being received. You can try it on a client site for 14 days.
Frequently asked questions
- Can GA4 be installed twice on the same page?
- Yes, and it is a common mistake: a hardcoded gtag.js snippet plus a GA4 tag in Google Tag Manager, or a theme setting plus a plugin. The symptom is duplicate page_view events, visible as two collect requests per page load in DevTools, which inflates pageview counts in reports.
- Why does DebugView show nothing even though the collect request fires?
- DebugView only shows events sent with debug mode enabled, which Tag Assistant or the Google Analytics Debugger extension switch on. Also check that you are looking at the property matching the tid in the request, and that no internal traffic or developer traffic filter is set to exclude your own visits.
- Does GA4 work if the user rejects cookies?
- It depends on the Consent Mode setup. With basic consent mode, tags do not load until consent is granted. With advanced consent mode, tags load and send cookieless pings when consent is denied, which Google uses for modelling. The gcs parameter in the collect request shows which state applied.
- How long does it take for data to appear in standard GA4 reports?
- Realtime and DebugView update within seconds, but standard reports can take 24 to 48 hours to process. An install that looks empty in the Reports section on day one is not necessarily broken, so use Realtime for verification.
- How much does Deltio cost?
- Starter covers up to 50 sites and 5,000 URLs at £24 / €29 / $31 a month, or £20 / €24 / $26 a month billed annually. Professional (200 sites) is £49 / €59 / $64 a month and Enterprise (500 sites) is £119 / €139 / $149 a month, both with annual discounts. Every plan includes a 14-day free trial.