← Run an audit
Home / Checks / 1 of 11
critical severity

GA4 is installed

Universal Analytics stopped processing data in July 2023 and all history was deleted in July 2024. A site still on UA has been measuring nothing for two years.

Why this matters

Universal Analytics stopped processing data in July 2023 and all history was deleted in July 2024. A site still on UA has been measuring nothing for two years.

How this tool detects it

The tool looks for two GA4 signals in your source: the measurement ID (the G- prefix followed by 6–20 alphanumeric characters) and the gtag.js load URL (googletagmanager.com/gtag/js?id=G-…). Either one present means GA4 is installed.

It separately checks three Universal Analytics leftovers: a reference to analytics.js, a ga('create') call, and any UA-12345-1 style property ID. A hit on any one of them counts as residual UA code.

The order of these checks is what makes the result meaningful. The tool confirms GA4 exists first, then looks for UA residue, and only concludes "no analytics at all" if neither is present. That distinction separates three situations that need completely different fixes: never migrated, half-migrated, and never had analytics.

Where this check can mislead you

Static analysis has limits. These are the cases where this particular check will report a result that does not match reality — worth knowing before you act on it.

Examples

CorrectCorrect: one GA4 property, loaded through GTM
<script async src="https://www.googletagmanager.com/gtag/js?id=G-1A2B3C4D5E"></script>
<script>
  gtag('js', new Date());
  gtag('config','G-1A2B3C4D5E');
</script>

The property ID matches the config call, and the snippet loads once. This is the most common and most reliable form.

WrongWrong: UA only, and the numbers stopped updating two years ago
<script src="https://www.google-analytics.com/analytics.js"></script>
<script>
  ga('create', 'UA-12345-1', 'auto');
  ga('send', 'pageview');
</script>

UA stopped processing data in July 2023 and all history was deleted in July 2024. This code still downloads, but collects nothing.

How to fix it

  1. Create a GA4 property in Google Analytics if you do not have one. Note that a GA4 property and a Universal Analytics property are separate systems — a UA property cannot be upgraded in place.
  2. Copy your G-XXXXXXXXXX measurement ID from Admin → Data Streams → Web.
  3. Place the gtag.js snippet inside <head>, as early as possible.
  4. Remove every analytics.js reference and ga('create') call from the page. This is the step most often missed — plenty of sites still carry the old code months after migrating.
  5. Re-scan with this tool and confirm both the GA4 and dead-UA checks pass.
  6. Last step: confirm in Google Search Console that the Traffic report has started receiving data. The first figures usually appear within 24–48 hours.

Verify it worked

After making changes, confirm delivery rather than assuming. These steps require your Google login, which is exactly why this tool stops short of them.

Related checks

One thing static analysis cannot tell you: this page reads published code, so it shows what is installed, never what actually fires. To confirm delivery, use GTM Preview and GA4 DebugView — both require your Google login.

Check whether your site has this problem — no login required.