It is the most common question anyone running a link shortener gets: the short link reports one number, the analytics on the destination reports a smaller one, and the report is due tomorrow.
Usually nothing is broken. The two tools stand at different doors and count different things. The link counts requests for the link. Your analytics counts page loads that ran its script. A lot can happen between those two moments.
What each side counts
A short link sits in front of the page. Every time something asks for the link, the redirect server answers and can write the request down. Nothing else is needed: no JavaScript, no cookies, no page load.
An analytics tool such as Google Analytics, Plausible or Matomo sits inside the page. It counts a visit only once the destination has loaded, its script has run, and — in much of the world — the visitor has agreed to be measured.
| Counted by | The link | Your analytics |
|---|---|---|
| A person who clicks and reads the page | Yes | Yes, if the script runs |
| A person who clicks, then leaves before the page loads | Yes | No |
| A person with an ad or tracker blocker | Yes | Usually not |
| A person who declines the cookie banner | Yes | Often not, or only as a modelled estimate |
| A chat app fetching a preview of the link | Depends on the shortener | No |
| An email security scanner opening every link | Depends on the shortener | Rarely |
| A search or monitoring bot | Depends on the shortener | No |
Look at the right-hand column: every gap goes the same way. That is why the link's number is almost always the bigger one.
Gap 1: machines asking for the link
Paste a link into Slack, iMessage, WhatsApp or LinkedIn and, before anyone clicks, the app fetches it to draw a preview card. Search engines crawl links they find. Uptime monitors poll them. Email security gateways open every link in an incoming message to check it for malware.
A simple counter adds all of that to your total. On a link that was shared widely, the machines can outnumber the people.
Gap 2: people your analytics never sees
Some real visitors never reach your analytics:
- They leave early. On a slow mobile connection, a visitor who taps back after two seconds was a click but never became a page view.
- They block trackers. Browser extensions and privacy-focused browsers stop analytics scripts from loading.
- They decline cookies. Where consent is required, a declined banner means no visit is recorded, or one is only estimated.
None of these are wrong clicks. They are people your analytics was never going to count.
Gap 3: counting different units
A click is one request. Analytics tools mostly report sessions and users. A person who clicks your link twice in ten minutes is two clicks and, most likely, one session. The same person on a phone and a laptop is two users. Compare clicks with page views or entrances to the landing page instead, and the numbers get closer.
How tinbo keeps machines out of your totals
tinbo sorts every request before counting it:
- People are counted.
- AI agents — ChatGPT, Claude or Perplexity fetching a page because someone asked them to — are counted too, but separately, so you can look at people on their own.
- Crawlers are recognised from a maintained list of well-known bots and left out of both. Link previews are among them: a chat app asking for your link gets the social card you set (or the plain redirect, if you set none), and no click is counted.
The honest limit: some email scanners pretend to be an ordinary browser. No link counter can reliably tell them apart from a person, and tinbo can't either. If a link went out in a newsletter, expect a burst of clicks within seconds of sending that did not come from readers.
Making the numbers line up
You will not get them to match exactly, and you shouldn't try. Make them comparable instead:
- Compare like with like. People-only clicks from the link against entrances to the landing page, for the same dates.
- Tag the destination. Put UTM parameters on the destination URL, so the visits that do arrive are attributed to the right campaign instead of landing in "direct". Our guide to UTM parameters covers the details.
- Use one link per channel. A separate short link for the newsletter, the bio, and the podcast notes gives you clicks per channel on the link side, whatever the analytics side manages to see.
- Watch the ratio, not the gap. If 65% of clicks usually become visits and one week it drops to 30%, something changed: a slow page, a broken consent banner, a scanner storm. The ratio is a better alarm than either number alone.
The link tells you how many times you were asked for. Your analytics tells you how many of those visits it could see. Both are useful, as long as you know which question each one answers.