Skip to content
  • FG-128
  • 12 min read
  • Last checked November 7, 2026

Google Analytics Showing Zero Visitors? How to Fix Broken GA4 Tracking

GA4 suddenly shows zero or far fewer visitors. Check Search Console first to see whether people really stopped coming, then find the missing, duplicated or blocked tag.

Run the health check

You open Google Analytics and the line has fallen off a cliff. Zero users yesterday, or a drop of most of your traffic on one particular day. Perhaps you redesigned the site, switched themes, installed a cookie banner, added a speed plugin, or nothing at all that you can remember. Before you panic about lost customers, find out which of two very different problems you have: people stopped coming, or Analytics stopped counting them.

This guide is for site owners, designers and marketers using Google Analytics 4 (GA4) on WordPress or any other site. It covers the checks in the order that finds the answer fastest. If people really have stopped coming from Google, the separate guides on disappearing from Google and traffic drops after a redesign take over.

What is happening

GA4 counts a visit only when the visitor’s browser runs the Google tag (the gtag.js script, or Google Tag Manager) and that script sends a request to Google’s collection servers. Anything that stops that chain stops the count, even though the visitor saw your site perfectly well.

Pattern in GA4 Most likely cause
Sudden drop to zero on one day The tag was removed or broken: theme change, plugin deactivated, measurement ID changed, a site rebuild that dropped the header code.
Sudden drop by a large share, not to zero Consent banner added or changed, a speed plugin delaying scripts, a data filter switched on, or tracking working on some templates and not others.
Sudden jump to double, and engagement looks oddly low or high Two tags firing on every page (a plugin and a hard-coded snippet, or GTM plus gtag).
Gradual decline over weeks Usually real: seasonality, rankings, or a campaign ending. Confirm with Search Console and server logs.
Today and yesterday look low, older days fine Normal processing delay. Standard reports can take a day or more to fill in.

Before you start

  • Access: GA4 with at least Viewer access (Editor to change settings), Search Console for the same site, and a WordPress administrator login.
  • Your measurement ID: in GA4, open Admin > Data collection and modification > Data streams, click your web stream, and copy the Measurement ID. It starts with G-. Write it down; you will compare against it several times. An ID starting UA- belongs to Universal Analytics, which stopped processing data in 2023, so a site still sending only to a UA- ID records nothing.
  • Browser tools: press F12 (Cmd+Option+I on a Mac) for DevTools. Turn off ad blockers and privacy extensions for these tests, or use a clean browser profile, because they block analytics on purpose.
  • Nothing here is risky until Step 6, where you change plugin settings.

Step 1: Is the traffic real? Compare with Search Console

Search Console counts clicks from Google Search on Google’s side. It does not depend on any script running on your site, so it is an independent witness.

  1. In Search Console, open Performance > Search results and set the date range to cover the drop, with a few weeks either side.
  2. In GA4, open Reports > Acquisition > Traffic acquisition for the same dates and look at the Organic Search row.

If Search Console clicks are steady while GA4 organic sessions collapsed, your tracking broke. Carry on with this guide. If both fell together, the traffic loss is real; go to website disappeared from Google or the lost Google traffic triage page. The two will never match exactly (they count different things), so look at the shape of the lines, not the totals.

Other independent witnesses: your hosting panel’s visitor statistics (AWStats, Webalizer or similar, which count server requests including bots), WooCommerce orders or form entries, and your email inbox. If orders and inquiries carried on as normal, people are still visiting.

Step 2: Watch your own visit arrive in Realtime

  1. In GA4, open Reports > Realtime (shown as Realtime overview in some accounts). It covers roughly the last 30 minutes.
  2. Open your site in a private window, with no ad blocker. If a cookie banner appears, click Accept all.
  3. Click to two or three pages.
  4. Within a minute or two, the Realtime card for users in the last 30 minutes should go up by one and show your pages.

If your visit appears, data collection works now. The problem may have been temporary, may affect only some pages or visitors (Step 5 and Step 6), or may be a reporting setting (Step 7). If your visit never appears, the tag is not firing or is sending to the wrong place. Go to Step 3.

GA4 also shows banners on the data stream page, such as No data received from your website yet on a new stream, or warnings that no data has arrived in the past 48 hours. Those confirm the stream is receiving nothing at all.

Step 3: Check the tag in the page and on the network

Is the tag in the page?

On your computer, list every Google tag ID the home page contains:

curl -sL https://example.com/ | grep -oE '(G|GT|AW|GTM|UA)-[A-Z0-9-]{4,}' | sort | uniq -c

What it does: curl -sL downloads the page quietly, following redirects. grep -oE prints only the parts that look like Google tag IDs (GA4 G-, Google tag GT-, Ads AW-, Tag Manager GTM-, old Universal Analytics UA-). sort | uniq -c counts how many times each appears. On Windows, use View page source and search for G- instead.

Good output: your own G- ID, or a GTM- container you know contains it. Bad output:

  • Nothing at all: the tag is not in the HTML. It may be added later by JavaScript (a consent tool or Tag Manager), which this command cannot see, so also do the Network check below. If the Network check also finds nothing, the tag was removed.
  • A different G- ID: the site is sending data to another property, often one created by a previous designer or a staging setup. Either change the ID on the site or look at that property.
  • Only a UA- ID: the site was never moved to GA4. Add the GA4 tag.
  • Your ID plus a GTM container, or your ID twice from two sources: possible double tagging. See Step 4.

Pages served from a cache can contain an old version of the header. Run the command on two or three different page types (home, a blog post, a product, the checkout) because a template-specific header can drop the tag on some of them.

Is the tag sending data?

  1. In a private window, open DevTools, go to the Network tab and check Preserve log.
  2. Type collect in the filter box and load your site. Accept the cookie banner if one appears.
  3. Look for requests to an address like region1.google-analytics.com/g/collect or www.google-analytics.com/g/collect.
  4. Click one and read the Payload tab. The tid value is the measurement ID it is sending to and en is the event name (page_view on a normal page load).
What you find Meaning
Requests with your tid, status 204 Data is reaching Google. If GA4 still shows nothing, check you are looking at the right property and stream, and Step 7.
Requests with a different tid Wrong measurement ID on the site.
No collect requests before accepting, then requests after Consent is working in Basic mode. Visitors who decline or ignore the banner are not counted. See Step 5.
No collect requests at all, even after accepting and clicking around The tag is missing, blocked by a speed plugin, or broken by a JavaScript error. Check the Console tab for red errors, then Step 6.
Requests appear only after you move the mouse or scroll A speed plugin is delaying the tag until user interaction. Visitors who leave without interacting are not counted. See Step 6.
Requests blocked or shown in red as (failed) An extension, network filter or content security policy is blocking them. Test in a clean profile; check for a Content-Security-Policy header that does not allow Google’s domains.

The free Google Tag Assistant (tagassistant.google.com) connects to your site and lists every Google tag that fired and the events it sent. It is a friendlier view of the same information.

Step 4: Find out how the tag is added, and remove duplicates

On WordPress the tag usually arrives in one of these ways. Check each, because sites often collect two or three over the years:

  • A Google plugin or an analytics plugin, such as Site Kit by Google, MonsterInsights, ExactMetrics or GA Google Analytics. These have a connection screen that shows which property is linked. A disconnected plugin, an expired Google login or a reset after an update can stop output.
  • Your SEO plugin or a header and footer code plugin, where someone pasted the snippet.
  • The theme or page builder: many have a “custom code in head” or integrations box. Code there disappears when you switch themes, which is the classic cause of a drop to zero on redesign day.
  • The theme’s header.php file, edited directly. A theme update overwrites it, removing the tag. See child theme problems.
  • Google Tag Manager, where the GA4 tag lives inside the container and must be published.
  • Your consent management platform, some of which load Google tags for you.

Keep exactly one route. Double tagging inflates page views and sessions and can make engagement figures meaningless. If you use Tag Manager, put GA4 only in Tag Manager and remove other snippets. After any change, purge all caches and repeat Step 2 and Step 3.

Step 5: Check the cookie banner and Consent Mode

A consent banner that blocks Google Analytics until the visitor accepts is doing its job, but it means visitors who decline, or close the banner without choosing, are not counted in the normal way. A large drop the week a banner went live is often the banner, not your marketing.

Google’s Consent Mode lets the banner tell Google tags what the visitor agreed to. Version 2 uses four signals: analytics_storage and ad_storage (whether analytics and advertising cookies may be set), plus ad_user_data and ad_personalization (whether user data may be sent to Google for advertising and used for personalized ads). It can be set up two ways:

  • Basic: Google tags do not load at all until the visitor consents. Nothing is sent for visitors who decline.
  • Advanced: tags load straight away with consent denied by default and send cookieless pings, which Google can use for modeling where your property qualifies. Whether this is acceptable for your site is a legal question, not a technical one.

Common breakages: the banner sets defaults after the Google tag has already loaded, the Analytics script is filed in the wrong category, or the banner’s “accept” never actually updates consent. In the Network tab, the gcs parameter on collect requests shows the consent state Google received; G111 means both ad and analytics storage were granted and G100 means both denied. The full diagnosis is in cookie consent banner broke your site or analytics. This is a technical guide, not legal advice; what consent you need depends on where you and your visitors are, as covered in what a small business website needs for privacy.

Step 6: Check caching and speed plugins

Speed plugins and CDN features can break or hide the tag:

  • Delay JavaScript until user interaction: the tag waits until a click, scroll or key press. Visitors who read a page and leave are never counted. Exclude googletagmanager.com, gtag and your consent script from the delay list, or turn delay off for them. Your plugin’s documentation lists how to add exclusions.
  • Combine or minify JavaScript: can break the inline gtag snippet. Exclude it.
  • Cloudflare Rocket Loader: rewrites how scripts load and can upset tag ordering. Turn it off to test.
  • Page cache: a cached page may hold an old header with no tag or an old ID. Purge every cache layer after any analytics change; see changes not showing.

The general problem of scripts broken by speed settings is covered in menus, sliders and forms broken after Delay JS.

Step 7: Rule out reporting settings in GA4

If data reaches Google but reports look empty, check the account side:

  • Right property and stream: the property picker at the top of GA4. Agencies and freelancers often have several near-identical properties.
  • Data filters: Admin > Data collection and modification > Data filters. An internal traffic or developer traffic filter set to Active excludes matching traffic permanently; set to Testing it only labels it. A filter with the wrong IP range can exclude everyone.
  • Reporting identity and thresholds: GA4 can hide rows when numbers are small and Google signals are enabled. Small sites may see gaps that are not missing data.
  • Time zone and date range: the property’s reporting time zone shifts where a day starts. Make sure you compare like with like.
  • Processing time: standard reports are not instant. Judge yesterday’s numbers tomorrow, and use Realtime or DebugView for live checks.
  • Hostname: in a report, add the Hostname dimension. Hits from your staging site or another domain may be mixed in, or your real domain may be missing.

Advanced: DebugView for event-level testing

For changes to events (form submissions, purchases), use GA4’s Admin > Data display > DebugView. It shows events from browsers in debug mode only, second by second. You put your browser in debug mode by previewing in Tag Manager, by connecting Tag Assistant, or by adding the debug_mode parameter to the tag configuration. Events appear on a timeline with all their parameters, so you can confirm, for example, that a purchase event carries a value and currency. If an event never shows in DebugView while debug mode is on, it is not being sent; that is a tagging problem, not a reporting delay.

WooCommerce stores should place a real low-value test order after any analytics change and watch the purchase event arrive. Checkout tracking is easily broken by caching or a payment redirect that skips the thank you page.

When to ask for help

Send your developer, agency or analytics plugin support:

  • your measurement ID and the IDs the grep command found, on which pages;
  • a screenshot of the Network tab showing collect requests (or their absence) with the Payload for one request;
  • the date the drop started and what changed around it (theme, plugins, consent tool, speed settings, CDN);
  • the Search Console comparison from Step 1.

Your host can help if a content security policy header or a server-level script optimization is blocking Google’s domains; our HTTP headers tool shows which security headers your site sends. If you are taking over a site from someone else, make sure you are an Administrator on the GA4 property itself, as listed in the inherited site takeover checklist.

Still stuck?

Print a free one-page checklist to keep, or open the Emergency Room if the symptom does not match.

Get the free checklists

Keep reading

All field guides
FG-140 SEO

How to Fix Page Titles, Meta Descriptions and Headings in WordPress

Missing, duplicate or cut-off titles and descriptions, no H1 or two of them, and headings that skip levels. What each one does for search engines and screen readers, and how to fix it in Rank Math, Yoast and your page builder.

Read the guide
17 min read

Search the field manual

What is going wrong?

Press / to search from any page, Esc to close