Skip to content
Troubleshooting · Diagnosis · Updated Jul 9, 2026

Something in your GA4 data looks wrong.
Here's how to know for sure.

From an empty Realtime report to numbers that don't match Shopify — find the symptom you're seeing below, matched to the exact page that walks you through the fix. No guessing, no starting from a blank Google search.

Or skip the diagnosis and let your web analyst find the problem for you.

01.

Nothing's showing up.

Empty reports can mean three different things: nothing ever fired, something fired and got filtered out, or something fired and GA4 is choosing not to show it to you yet.

Why is there no data at all — Realtime shows zero?

If Realtime shows zero active users on your own test visit, the tag usually isn't firing at all. Check for a missing or mistyped Measurement ID, a Consent Mode default that's blocking storage until the visitor consents, or a container that was configured in GTM but never actually published. Ad blockers and privacy extensions swallow the request the same way a broken tag would — rule those out on a clean browser profile before you assume your code is wrong.

Why are my conversions or key events missing?

Key events go missing for one of three reasons: the underlying event never fired, it fired but was never marked as a key event in Admin → Events, or it's using a name GA4 treats as reserved and silently alters. A purchase event missing a required parameter like transaction_id or value also registers as a normal event instead of a key event — which looks identical to 'not tracking' until you check its parameters directly.

Why are my audiences stuck at zero users?

A brand-new audience only counts users going forward — it doesn't backfill from historical data, so zero users for the first day or two is expected, not broken. Past that window, an empty audience is almost always a condition that never matches real traffic: a typo'd parameter value, an event that quietly stopped firing, or a membership duration set to zero days.

Why did my historical data disappear?

GA4's data retention default is 2 months for the event-level data used in free-form Explorations — anything older simply isn't queryable there, even though it still appears in the standard reports for up to 14 months. This is a setting, not a bug: Admin → Data Settings → Data Retention extends it to 14 months, but the extension only applies to data collected from that point forward, not retroactively.

Why won't GTM Preview mode connect?

Preview mode most often fails to connect because a browser extension is blocking Tag Assistant's connection request, a Content Security Policy is blocking the debug script, or you're previewing a workspace that was never actually published to the environment you're testing. On platforms like Shopify, a checkout or app-embedded page can also load a cached script from before your last container version.

02.

The numbers are there, but wrong.

This is the expensive failure mode — dashboards look confident and populated while the attribution or counting logic underneath quietly misleads whoever's reading them.

Why does my traffic show as Direct or (unassigned)?

Direct means GA4 found no referrer and no campaign parameters at all — a stripped UTM, an app webview, or a bookmarked link are the usual causes. (unassigned) is different: the session had some data, just not enough to qualify for a defined channel, which commonly happens when a redirect chain — login walls, link shorteners, some consent banners — drops query parameters before your page tag ever sees them.

Why don't my GA4 numbers match Shopify or my ad platform?

Some gap is normal: Shopify, Meta, and Google Ads each use their own attribution window and model, and none of them match GA4's data-driven default, so channel credit was never going to line up exactly. A gap beyond roughly 10-15%, though, usually points to a tracking bug rather than a model difference — broken UTM parameters is the most common cause, closely followed by an attribution model nobody deliberately chose.

Why do my reports show (other), or totals that look too low?

(other) rows and suspiciously low totals are usually thresholding — GA4 withholds or aggregates rows once a dimension combination has too few users to report safely, and it applies before the report ever reaches you. It shows up most on granular, multi-dimension explorations and on lower-traffic properties; if you don't need cross-device reporting, disabling Google Signals removes the threshold entirely.

Why don't my bounce rate and engagement rate add up?

GA4 replaced bounce rate's old definition with engagement rate, and the two aren't simple opposites: a session counts as engaged if it lasts 10+ seconds, includes a key event, or has 2+ pageviews, so engagement rate and (1 minus bounce rate) can genuinely diverge. If you're comparing against Universal Analytics history, you're comparing two different definitions of a session — not the same metric that got worse.

03.

The data is contaminated.

Inflated sessions, your own team's clicks, and personal data sitting in a report you didn't mean to collect — all technically working, all quietly wrong.

Why do my sessions look inflated, or split in two?

A session ends after 30 minutes of inactivity by default, at midnight, or when a new campaign source lands mid-visit — any of those can split one real visit into two counted sessions, inflating totals for content that keeps people around past the timeout. If you track users across multiple domains, an unconfigured cross-domain setup causes the same symptom for a different reason: GA4 treats the second domain as a brand-new session with a fresh referrer.

Why is my own team polluting the data?

Without an internal traffic filter, every visit from your office, your agency, and anyone testing the site counts as real user activity — inflating session counts and skewing conversion rates, especially on lower-traffic properties where a handful of QA sessions can move the needle. GA4 needs the internal IP range defined and the resulting filter set to Active, not Testing, before it actually excludes anything.

Am I leaking PII into GA4?

The most common leak isn't a form field — it's the URL itself. Query parameters like ?email= or ?phone= from password-reset links, magic-link logins, or a loosely built checkout get captured automatically as the page_location parameter, landing personal data in GA4 (and anywhere GA4 feeds, like Google Ads) without anyone writing a line of tracking code for it.

Stop diagnosing by hand

The audit finds all of this first.
Before you have to ask.

One scan checks all 12 of these symptoms — plus the checks Google never warns you about.