Why Your Click Counts Are Wrong (and How to Fix Them)
Open your link analytics and the number looks healthy. But a chunk of those "clicks" were never a person. Search-engine crawlers, security scanners, link previewers, and outright bots request your URLs automatically, and if your analytics counts every HTTP hit as a click, your numbers are silently inflated.
This matters for three reasons: you can't measure real ROI, you can't see real trends, and you can't spot abuse. Here's what's really hitting your links, how to filter it, and how to report only clicks that represent people.
What's inflating your counts
A "click" you see in analytics can come from several non-human sources:
- Search-engine crawlers. Googlebot, Bingbot, and others fetch short links to discover and index the destination. Every crawl looks like a click.
- Link preview / pre-fetch. Messaging apps (WhatsApp, Slack, iMessage) and social platforms request the URL ahead of time to render a preview card. These requests happen even when nobody clicks.
- Security scanners. VirusTotal, phishing scanners, and link-safety tools probe every link. If you share links on any public channel, expect a wave of these.
- Spam and malicious bots. Scrapers, click-fraud bots, and abuse scanners hammer short URLs.
In some channels, non-human traffic can be a third or more of all requests. If you ignore it, every report is optimistic.
How filtering works
The goal is to separate requests that look like a person from automation. The main signals:
1. User-Agent
The fastest filter is the User-Agent header. Legitimate crawlers identify
themselves:
Googlebot, Bingbot, DuckDuckBot, Slurp, YandexBot
Link previewers and tools are also recognizable:
WhatsApp/2.23, Slackbot-LinkExpanding, TelegramBot, Twitterbot,
LinkedInBot, facebookexternalhit, Discordbot
Filtering these by string is easy and cheap. The catch: bots can lie about their User-Agent, so this alone isn't enough — but it removes the honest ones instantly.
2. IP reputation / cloud ranges
A lot of automated traffic comes from cloud and hosting providers (AWS, GCP, Azure, DigitalOcean). Real users rarely come from those ranges. If you filter or flag requests from known datacenter IP ranges, you remove the bulk of scanner and abuse traffic.
3. Behavioral patterns
A person clicks and moves on; a bot often:
- Requests the same URL many times in seconds
- Never executes JavaScript (if your analytics relies on it)
- Shows up at unnatural, flat rates around the clock
Patterns like "X requests from the same IP in under a minute" or "no JS beacon" let you classify a request as bot-like even when the User-Agent looks normal.
What the platform can do (and what yas.sh does)
A URL-shortener platform sits in a great spot to filter, because it sees the raw request before the redirect. A good platform:
- Records whether a request is bot-like using the signals above.
- Flags bot clicks so they don't pollute aggregate reports.
- Lets you exclude or include bot traffic in your views.
With yas.sh, click events are tagged as bot or non-bot at capture time, and aggregates default to non-bot counts so your headline number is people, not automation. You can still inspect the raw stream if you need it.
How to report honestly
Filtering changes the number you show the world. To keep reports honest:
- Report non-bot clicks as your headline. That's the number that represents human engagement.
- Keep a separate "all requests" view if you need raw traffic for security or infrastructure analysis.
- Disclose the method. A footnote like "automated traffic excluded" makes the number defensible and builds trust — useful for AdSense, ads, and stakeholder reports alike.
- Watch for spikes. A sudden jump in raw requests with flat human clicks is a red flag for scanning or abuse — investigate before you worry about the funnel.
A practical example
You share a short link in a newsletter. Raw analytics shows 1,000 requests. After filtering:
- 120 came from WhatsApp preview fetches
- 80 from security scanners probing the link
- 40 from a crawler
- 30 from a repeat-request bot
That's 270 requests that aren't people — your real count is ~730, not 1,000. Reporting 1,000 overstates email performance by nearly 40%.
The takeaway
Raw request counts are not click counts. Filter by User-Agent, IP reputation, and behavior, and report human clicks as your headline. It's more honest, it's better for decisions, and it's expected by anyone who reviews your numbers — including ad networks that scrutinize traffic quality.
If your analytics lets you separate bot and human traffic, use it. The number that survives is the one you can stand behind.
Why your raw click count lies
The click count your dashboard shows is rarely the raw count, and that is a feature. A raw count includes far more than human visits: search-engine crawlers, link-preview bots that fetch a URL when someone pastes it into a chat or a social post, security scanners, and a long tail of automated traffic. In many campaigns, bots and previews are a large share — sometimes 30–40% — of the raw hits. If you reported and made decisions on that number, you would be optimizing against noise. Bot filtering exists to remove the non-human traffic so the number you act on reflects real people who clicked.
How the filtering distinguishes humans from bots
The filtering combines several signals to separate genuine human clicks from automated ones:
- Known bot user-agents and IP ranges — the databases of crawlers, scanners, and previewers.
- Behavioral signals — headless browsers, unusual request patterns, and missing human-like attributes.
- Preview and crawler fingerprints — the specific clients that fetch a link to generate a preview image or a search snippet.
- Rate and consistency patterns — automated loops look very different from human traffic.
No single signal is perfect, so the best filtering blends them and is conservative: it removes the clearly automated traffic while being careful not to drop legitimate human clicks. The result is a filtered count that is honest enough to base decisions on.
The consequences of acting on unfiltered numbers
The cost of ignoring bot filtering is real: budgets misallocated to "high-traffic" campaigns that were mostly crawlers, dashboards that over-report and erode trust, and A/B tests and conversion tracking polluted by non-human clicks. When the raw number inflates your understanding, every decision built on it is suspect. Filtered clicks give you a stable, defensible basis for comparing campaigns and channels over time — the measurement discipline described in link analytics.
What to do with the filtered number
Treat the filtered count as your action number: use it to compare channels, evaluate campaigns, and inform A/B tests. Keep in mind it will be lower than a raw counter, and that is correct, not a discrepancy. If you need the raw figure for infrastructure or debugging reasons, track it separately from the reporting number. Knowing which number you are looking at — and why filtering matters — is what lets you read your analytics with confidence rather than confusion.
