In short
GA4 showing zero or too little data? Work through the 11 most common causes, from a missing tag to consent banners and caching plugins, with a quick test for each.
Summarize with AI
Opens the assistant in a new tab with a link to this post.
Google Analytics Not Tracking? 11 Causes and How to Fix Each
There are two ways to find out Google Analytics stopped tracking. The good way is noticing within a day that your realtime report is empty. The bad way is opening a monthly report three weeks later, seeing a line that fell off a cliff, and realizing the data for those three weeks is simply gone. GA4 can't go back and collect visits it never received.
Most of the time, when GA4 shows zero or far too little data, the cause is one of a small number of common problems. Some take thirty seconds to spot. A couple take more digging. This guide goes through them in the order that finds the answer fastest, with a quick test for each.
First: is it really broken, or just delayed?#
Before you tear anything apart, rule out the two things that make GA4 look broken when it isn't.
Reports lag. GA4's standard reports can take 24 to 48 hours to fully process data. If you set up tracking this morning and the reports are empty this afternoon, that may be completely normal. The Realtime report and DebugView are the places to check for live activity.
Thresholds and filters hide data. GA4 can apply data thresholds that hide rows in some reports, especially with Google signals turned on and low traffic. And a date range, comparison, or filter left on from a previous session can make a report look empty. Reset the report to a simple view before concluding anything.
Now the quick live test. Open your site in a private browser window. In another tab, open GA4's Realtime report. Browse a couple of pages. Within a minute or so, you should see yourself appear as an active user. If you do, tracking is working at a basic level and your problem is probably in reports, filters, or specific pages. If you don't, keep reading.
How to check if your GA4 tag is actually on the page#
Three quick ways to confirm whether the tag exists and fires:
View the page source. Right-click the page, choose View Page Source, and search for your measurement ID, which starts with "G-". If it's not there and you don't use Google Tag Manager, the tag isn't installed on that page. If you use Tag Manager, search for your container ID instead, which starts with "GTM-".
Watch the network requests. Open your browser's developer tools, go to the Network tab, reload the page, and type "collect" in the filter box. A working GA4 setup sends requests to a google-analytics.com address with "collect" in the URL. If you see them, data is leaving the page. If you don't, it isn't.
Use Google's Tag Assistant. Tag Assistant (tagassistant.google.com) connects to your site and shows which Google tags load and which events they send. It's the most complete picture, and it's what you'll use for the harder causes below.
With those tools ready, here are the causes.
1. The tag was removed#
This is the most common cause of analytics suddenly stopping, and it almost always happens during a change nobody connected with analytics. A redesign ships with a new template that doesn't include the snippet. A theme update replaces the header file where someone once pasted the code by hand. A plugin that injected the tag gets deactivated, replaced, or updated. A move from one platform or builder to another leaves the tag behind.
Quick test: view source and search for "G-" or "GTM-".
Fix: reinstall the tag in a place that survives updates. On WordPress, that means a plugin or Google's official Site Kit, or your theme's dedicated header scripts setting, not a hand edit to a theme file that the next update will overwrite. Then check the date the tag disappeared against your deploy and update history so you know what removed it.
2. The measurement ID is wrong#
The tag is present but sends data to the wrong place. This happens when someone copies a snippet from another site or an old property, pastes a Universal Analytics ID (starting with "UA-") that stopped collecting data years ago, or creates a new GA4 property and forgets to update the site.
Quick test: compare the "G-" ID in your page source with the measurement ID in GA4 under Admin > Data streams.
Fix: update the ID in your tag or Tag Manager configuration to match the property you're actually looking at.
3. Google Tag Manager isn't published, or the trigger is wrong#
If you use Tag Manager, the GA4 tag lives inside the container, and two things commonly go wrong. First, changes made in Tag Manager do nothing until you click Submit and publish a new version. It's easy to set everything up, test it in Preview mode, and forget to publish. Second, the tag's trigger may be too narrow, firing only on certain pages or only after an event that never happens.
Quick test: open Tag Manager's Preview mode, load your site, and check whether your GA4 tag appears under "Tags Fired" on page load. Then check the container's version history to confirm the latest version is published.
Fix: set the GA4 configuration tag (the Google tag) to fire on all pages, then publish.
4. Your consent banner is blocking analytics#
This one catches a lot of sites, especially after a cookie banner is installed or updated. If your consent setup blocks analytics until a visitor accepts, and most visitors never click accept, GA4 will only see a fraction of your real traffic. In regions with strict privacy rules, that fraction can be small.
Google's Consent Mode changes how this works. With a basic implementation, tags don't fire at all until consent is given. With an advanced implementation, tags send limited, cookieless signals before consent, and GA4 can use modeling to estimate some of the missing activity. Many sites have one of these configured without realizing which one, or have it configured incorrectly.
Quick test: visit your site in a private window and don't touch the banner. Check whether any "collect" requests go out. Then accept and check again. If nothing is sent until you accept, analytics depends entirely on consent rates.
Fix: this is partly a legal question, so involve whoever owns privacy compliance. On the technical side, make sure your consent platform is integrated with Consent Mode properly, and that "accept" actually enables analytics.
5. A caching or optimization plugin is delaying the script#
Performance plugins often defer or delay JavaScript to make pages load faster. Some offer a "delay JavaScript execution" setting that holds scripts until the visitor interacts with the page, by scrolling, clicking, or moving the mouse. If analytics is included in that delay, visitors who read a page without interacting, or leave quickly, may never be counted. Minification or combining scripts can also occasionally break the tag.
Quick test: load a page in a private window, don't move the mouse or scroll, and watch the Network tab for "collect" requests. If they only appear after you interact, the script is being delayed.
Fix: exclude your analytics and Tag Manager scripts from JavaScript delay settings in your optimization plugin, then clear all caches, including any CDN cache.
6. An internal traffic filter is excluding real visitors#
GA4 lets you define internal traffic, usually by IP address, and filter it out. If the rule is written too broadly, or a filter meant for testing is switched to active, it can exclude far more than your own team.
Quick test: in GA4, go to Admin > Data settings > Data filters and check whether any filter is active, and what it excludes. Also review the internal traffic rules in your data stream's tag settings.
Fix: narrow the rules to real internal IP addresses, or set a filter back to "Testing" while you verify it.
7. Your single-page app doesn't send page views on navigation#
Sites built with React, Next.js, Vue, and similar frameworks often change pages without a full reload. If GA4 only records the first page load, the rest of the visit goes uncounted, and reports show far fewer page views than reality.
Quick test: navigate between several pages on your site with the Network tab open. If you see a "collect" request on the first load but not on the following navigations, page changes aren't being tracked.
Fix: in GA4's enhanced measurement settings for your data stream, make sure page views based on browser history events are enabled, or send page_view events from your router yourself. Test with DebugView to confirm each navigation appears once, not zero times and not twice.
8. The tag is installed twice#
The opposite problem: two copies of the tag, for example one pasted in the theme and one added through a plugin or Tag Manager. This doesn't stop tracking. It doubles it, inflating page views and distorting engagement numbers. It's worth checking whenever your numbers suddenly jump rather than drop.
Quick test: in the Network tab, count "collect" requests on a single page load. Two page_view hits for one load means a duplicate tag.
Fix: remove one of the installations and keep a single, documented source of truth for the tag.
9. A security policy is blocking Google's scripts#
Some sites use a Content Security Policy that lists the domains allowed to load scripts and receive data. If Google's domains aren't included, the browser silently blocks the tag. This often appears after a security hardening project or a new security plugin.
Quick test: open the Console tab in developer tools and look for errors mentioning "Content Security Policy" and a Google domain.
Fix: add the domains Google's documentation lists for GA4 and Tag Manager to your policy's script and connection rules.
10. You're looking at the wrong property or data stream#
It sounds obvious, but it happens constantly on accounts with several properties: the site sends data correctly to one property while you're looking at another. Or the site has a new domain and the data stream still points at the old one.
Quick test: confirm the property selector at the top of GA4 matches the measurement ID in your page source, and check that the data stream URL matches your live domain.
Fix: switch to the right property, or update the data stream.
11. Ad blockers and browser privacy features#
Some visitors will never be counted, and there's nothing broken about that. Ad blockers and privacy-focused browsers block analytics scripts by default, and privacy features limit cookies in ways that affect returning-visitor counts. For a tech-savvy audience, the share of blocked visitors can be significant.
This doesn't make GA4 stop tracking entirely, but it explains a consistent gap between GA4 and other sources, such as Search Console clicks or server logs. That's normal. Treat GA4 as a large sample of your traffic rather than an exact count.
The real problem: finding out late#
Look back at that list and notice something: most causes aren't technical mysteries. They're changes that happened for a different reason, a redesign, a plugin update, a new banner, a performance setting, and broke analytics as a side effect. Nobody was trying to touch analytics. That's exactly why nobody checked it.
And unlike a broken page, broken analytics doesn't complain. The site works perfectly. Visitors see nothing wrong. The only symptom is data that stops arriving, and you won't notice until you look at a report, which might be days or weeks later. Every day in between is a day of data you can't recover, which matters most at exactly the moments you care about: launches, campaigns, and sales.
So the most valuable fix isn't any of the eleven above. It's noticing within a day instead of within a month.
How to catch a broken analytics tag early#
Add analytics to your post-deploy checklist. After every release, redesign, or theme update, check the Realtime report and the Network tab on your key pages. It takes a minute. The deployment checklist in our guides section includes this step for that reason.
Check after plugin and theme updates, not just deploys. On WordPress especially, many of the changes that remove tags happen through updates, not deploys.
Set up a GA4 anomaly alert. GA4's custom insights can notify you when a metric like sessions changes unusually. It's free and worth doing, but notice its limit: it alerts you after the data is already missing, and a real traffic change and a tracking failure look identical to it.
Monitor the page, not just the numbers. The earliest possible warning is noticing the tag disappear from the page itself, before GA4 has any data to be unusual about.
Where MyKavo fits into this#
MyKavo is our product, so I'll keep this factual. MyKavo checks every monitored page on every scan and records which scripts it loads, including analytics, tag managers, and payment scripts, compared against a baseline you approved. When a script that used to be on the page disappears, you get an alert with the before and after, ranked by severity, sent to email, Slack, Discord, or a webhook. That's the "tag was removed" cause, number 1 in this guide and the most common one, caught on the next scan instead of at the next monthly report.
Because MyKavo also tracks the visual layout, content, SEO tags, and links, the same alert usually shows what else changed at the same time, which points you straight at the cause: the new template, the theme update, the plugin swap. On WordPress, the free MyKavo plugin goes further and tells you which plugin, theme, or core update caused a change. For releases, post-deploy checks (with docs for GitHub Actions, Netlify, and Vercel) verify pages right after you ship.
If you just want to check one page right now, the free Script Detector tool lists every external script on a page and identifies the services behind them, with no signup.
Honest limits: MyKavo sees whether the analytics script is present on the page. It can't see inside your GA4 account, so it won't catch a wrong measurement ID pointing at a different property, a data filter excluding visitors, or a consent setup that holds the tag back until someone clicks accept. For those, use Tag Assistant, DebugView, and the tests above.
Frequently asked questions
Why is Google Analytics not tracking visitors?
The most common causes are a tag removed during a site change, a wrong measurement ID, a Google Tag Manager container that wasn't published, a consent banner that blocks analytics until visitors accept, or a caching plugin delaying the script. Check the Realtime report while visiting your site, then check the page source for your "G-" ID.
How do I check if GA4 is working?
Visit your site in a private window with GA4's Realtime report open in another tab. You should appear as an active user within about a minute. For more detail, filter your browser's Network tab for "collect" requests, or use Google's Tag Assistant and GA4's DebugView.
Why does GA4 show no data after installing it?
Standard reports can take 24 to 48 hours to process. If the Realtime report shows activity, tracking works and you just need to wait. If Realtime shows nothing, check that the tag is on the page, the measurement ID matches your property, and nothing like a consent banner or optimization plugin is blocking it.
Can a cookie banner stop Google Analytics from tracking?
Yes. If analytics is blocked until visitors accept cookies, only visitors who accept are tracked. Google's Consent Mode can send limited, cookieless signals before consent and model some missing data, depending on how it's configured.
Why is GA4 showing fewer visitors than Search Console?
Search Console counts clicks from Google search on Google's side, while GA4 relies on a script running in the visitor's browser. Ad blockers, privacy browsers, consent choices, and visitors who leave before the script loads all reduce GA4's count, so some gap is normal.
Can I recover Google Analytics data from when tracking was broken?
No. GA4 only records visits it receives while the tag is working. That's why catching a broken tag quickly matters. Other sources, like Search Console or server logs, can help you estimate the missing period.
The bottom line#
When Google Analytics stops tracking, the fix is usually simple. The expensive part is the gap: the days or weeks between the tag breaking and someone noticing, which you can never fill in. Work through the causes above, starting with the tag itself, and you'll usually find the problem in minutes.
Then close the gap for next time. MyKavo watches your key pages and tells you when your analytics script, or any other script, disappears, usually on the next scan after the change that removed it. Try the free Script Detector on a page now, or start free and let the next missing tag announce itself.
Try it on your site · free
See which scripts your page loads
Analytics, tag managers, pixels and every other third-party script on the page.