Web Tool

Google Analytics Test

Tag Detection

Check that analytics is installed

Enter a page URL to see which analytics tags are in its HTML, how they load, and whether consent defaults are set.

Fetch as

Sites often serve different markup — and different tags — per user agent

Tool features

Real-browser tag detection with per-agent rendering, hit capture, and exportable reports
4 checks

Tag Detection

Finds GA4, Tag Manager, legacy Universal Analytics and Google Ads tags in the served HTML

Per-Agent Fetch

Fetches the page as a desktop browser, a mobile browser, or Googlebot and compares what each one gets

Consent & dataLayer

Reads Consent Mode defaults and the dataLayer/gtag calls configured in the page source

Exportable Report

Download the full detection as a branded PDF, CSV, or JSON report

What Google Analytics tags are & how they fire

Why a tag in the source is not the same as a tag that reports

A Google Analytics tag is a small piece of JavaScript — gtag.js for GA4, or a Google Tag Manager container that injects it — which runs on every page view and sends a /g/collect request to Google carrying the page URL, the referrer and a client identifier. If that request never leaves the browser, the visit is never counted, no matter how correct the snippet looks in your source code.

That is why this tool loads the page in a real headless browser instead of only reading the HTML. Modern sites inject their tag after hydration (Next.js next/script, a tag manager, a consent banner), so it is completely absent from the served markup — a source-only check reports those pages as untagged. Here you see which tags actually ran, the measurement requests they sent and the status Google returned.

Measurement ID (G-XXXXXXX)
Identifies a GA4 data stream. It appears in the gtag.js loader URL and in the gtag('config', …) call that starts collection.
GTM container (GTM-XXXXXX)
A tag manager that injects tags at runtime. The container being present says nothing about which tags it actually fires.
Consent Mode v2
Defaults set before the tag loads that tell Google whether analytics and ad storage are allowed. Without them, hits go out before the visitor answers the banner.
/g/collect hit
The measurement request itself. A 204 response means Google accepted the data; no request at all means nothing was recorded.

How to use this tool

Test a page's analytics setup in four steps
1
Enter the page URL
Test any single page — the homepage, a product page, checkout. Tags often differ per template.
2
Pick the agent
Fetch as a desktop browser, a mobile browser, or Googlebot to see whether the page serves the same tags to each.
3
Run the test
The page is loaded in a headless browser so tags injected by JavaScript are caught, and every measurement request is recorded.
4
Fix what the diagnostics flag
Remove duplicate initialisations and legacy UA tags, set Consent Mode defaults, and move the loader into <head>.

Related tools

Keep debugging with tools from the same suite
3 tools
Open Graph Checker
Check Open Graph meta tags and preview how your page looks when shared on Facebook, Twitter, and Google — get a completeness score
HTTP Header Checker
Analyze HTTP response headers for any website or URL with detailed header information
Core Web Vitals Checker
Check Core Web Vitals (LCP, INP, CLS) and Lighthouse scores for any URL using Google PageSpeed Insights API with mobile and desktop testing

Frequently asked questions

Common questions about analytics tag detection
7 Q&A

Most source-only checkers read the served HTML. If your tag is injected after load — by next/script, a tag manager, or a consent banner — it is not in that HTML at all, so those tools report nothing. This test renders the page in a real browser, so it sees tags added at runtime and labels them 'injected at runtime'.

Real measurement requests sent to Google while the page loaded — /g/collect for GA4 and the legacy /collect endpoints. A tag that loads but sends no hit collects nothing, which is why the count is reported separately from tag detection.

The usual causes are a consent banner blocking analytics until the visitor accepts, a Tag Manager trigger that never matches, or a blocked request. GOV.UK is a good public example: its tag only fires after you accept cookies, so an automated check sees zero hits.

Running gtag('config', 'G-XXXX') twice — typically once inline and once through a container — makes every pageview count twice. Sessions and pageviews inflate while the reported bounce rate roughly halves.

No. Universal Analytics stopped processing hits in July 2024. A UA- property tag now only adds page weight and an extra request while collecting nothing, so it should be removed.

It fetches and renders the page with Googlebot's user agent, so you can compare it against the desktop and mobile results. Differences usually mean bot-specific markup or a cached edge variant rather than a tagging problem.

No gtag('consent', 'default', …) call was found before the tag loaded, and no consent signals were present in the dataLayer. Hits can then be sent before the visitor answers your banner, which is a compliance risk in the EU and UK.