Open your analytics, then open your server logs for the same day. The two numbers will not match. Not by a rounding error — often by a factor of two, three, sometimes more. Nothing is broken. Your web analytics counter is simply not being allowed to run for a large share of your visitors.
Why an ad blocker deletes your counter
Most analytics scripts load from a domain that is not yours. Google Analytics loads from google-analytics.com, Metrika from mc.yandex.ru, and so on. That makes the request a third-party request, and third-party requests are exactly what blockers are built to stop.
The blocking is not clever and it is not personal. Extensions like uBlock Origin, AdGuard and the blocking built into Brave and Safari carry a list of known tracker hostnames. If a request goes to a hostname on the list, it never leaves the browser. Your script does not run. No request arrives. Nothing appears in your reports.
The visitor still read your page. They still clicked. They still bought, or did not. You just never saw them.
The share is bigger than most people assume
How many visitors block trackers depends almost entirely on who your audience is. A site read by developers, sysadmins or crypto users will lose far more than a site selling garden furniture. Mobile app traffic behaves differently again. Any single number you read on the internet is someone else's audience, not yours.
Which is why the only figure worth acting on is your own.
Measure your own gap in ten minutes
You do not need a tool for this. You need your access log and one command.
- Take one full day of your web server's access log.
- Count the requests for real pages — not images, CSS, JavaScript or fonts — that returned
200. - Throw away the obvious bots by filtering out user agents containing
bot,crawlorspider. - Compare that number with the pageviews your analytics recorded for the same day.
The log is not perfect either: some bots lie about their user agent, and a CDN in front of your site will hide cached hits from the origin. But it is measured on your hardware, by software with no incentive to flatter you, and it is close enough to tell you whether your gap is 5% or 60%.
If the two numbers are close, stop reading — you do not have this problem. If your analytics is showing a fraction of your log, keep going.
What actually fixes it
The fix is to stop being a third party. If the counter loads from a hostname on your own domain — something like stats.yourdomain.com — then the request is first-party. It is not on any tracker list, because it is your domain, and there are millions of domains. A blocklist cannot enumerate them.
This is not a trick to defeat user choice. Do Not Track, consent and every other signal still apply, and a visitor who blocks all JavaScript still blocks this. What changes is that people who never opted out of anything stop being deleted from your numbers by a list they never saw.
In practice it is one DNS record: a CNAME pointing a subdomain of yours at the collection host. We walk through it in first-party analytics with a CNAME.
What it does not fix
Being honest about the limits, because a counter that promises everything is lying:
- Visitors with JavaScript off are still invisible, first-party or not.
- A blocker set to block all analytics behaviour, not just known hosts, can still catch it.
- It does not make your data more accurate — it makes it more complete. Those are different things.
- It changes nothing about consent. If you needed a banner before, you still need one.
Why this is worth an afternoon
Every decision you make from analytics is a decision made on the visitors who let you see them. If that is a biased sample — and blocker users are absolutely a biased sample, skewing technical, skewing privacy-conscious, skewing high-value in a lot of markets — then you are optimising your site for the people least like the ones you are missing.
You do not have to take anyone's word for it. Run the log comparison. It is your data either way.
Astrina's analytics is built first-party from the start, and the counter is under 2 KB. If you want to see the numbers before committing to anything, the free plan covers three sites — the limits are all listed, and this is what it looks like if you own the site yourself.
The core counter is free. Add your site and explore every feature.
What this page answers
- analytics
- analytics guide
- Why your analytics shows fewer visitors than your server logs
- Why your analytics shows fewer visitors than your server logs guide
- Why your analytics shows fewer visitors than your server logs explained
- Why your analytics shows fewer visitors than your server logs tutorial
- getting started with Why your analytics shows fewer visitors than your server logs
- Why your analytics shows fewer visitors than your server logs best practices
- Why your analytics shows fewer visitors than your server logs step by step
- what is Why your analytics shows fewer visitors than your server logs
- Why your analytics shows fewer visitors than your server logs for beginners
- Why your analytics shows fewer visitors than your server logs checklist
- Why your analytics shows fewer visitors than your server logs examples
- why Why your analytics shows fewer visitors than your server logs matters