---
description: What UsherStats counts as a pageview, a session, a bot, internal traffic and an AI referral, and how long data is kept.
---
# Concepts

UsherStats sorts every visit into one of three lanes and counts each one separately, because one combined number
answers none of the questions worth asking.

| Lane | Who | Where you see it |
|---|---|---|
| People | Readers in real browsers | People, Behaviour |
| Crawlers | Search engines, AI fetchers, SEO tools, scrapers, scripts | Crawlers, Bot protection |
| Internal | Your own team, tools and checks | Internal |

## What counts as a pageview

A pageview is counted when a real browser confirms it: the snippet reports the page when it is hidden or closed (or
after five minutes, for a tab left open), with how long it was open, how far it was scrolled and whether the reader did
anything. A request a crawler makes is never a pageview, because a crawler does not run the script.

A confirmed pageview counts under **People** unless it is one of these, which go to Crawlers or Internal instead:

- it came from your own team (see [internal traffic](#internal-traffic));
- it came from a **hosting network**: cloud and server providers, where people rarely browse from, but scripts with
  browser-like names often do;
- the browser reported a server's clock (`UTC` rather than a place) as its time zone;
- it is past the twentieth page of one session: no person reading at a human pace goes that deep in one tab, but a
  scripted browser touring the site does;
- [bot protection](bot-protection.md) judged the visitor to be automated, even if it was only logging that decision.

Browsers that send **Global Privacy Control** are not recorded at all, so they appear nowhere.

The snippet currently reports one pageview per full page load. Route changes inside a single-page app are not
reported as separate pageviews.

## Sessions

A session is **a browser tab's visit**: it starts on the tab's first page and lasts as long as the tab stays on your
site. A page opened in a new tab from one of your own pages belongs to the visit it was opened from.

UsherStats keeps nothing between visits: no cookie, no identifier that lasts beyond the tab. The page counter lives in
the tab's session storage, which the browser clears when the tab closes. A person who comes back tomorrow, or opens
your site in a second tab from elsewhere, is a new session. That is the price of storing nothing about people, and it
is the same for every site, so comparisons hold.

## Internal traffic

Your own visits while you build and check your site are not readers. UsherStats recognises them three ways, per site:

- **Tools**: scripts, smoke tests and uptime checks that send a signed `x-usher-internal` header. The site's settings
  show how to sign it; a signature is good for ten minutes, on the one hostname it was made for.
- **Browsers**: a team member can mark their browser from the site's settings. Through a first-party path, this sets
  a cookie on your own domain, in that browser only, and its visits count as Internal.
- **Networks**: an office or VPN network you list in the site's settings. The weakest of the three, because readers
  can share a network with you.

Internal traffic is counted, just not as readers: the **Internal** view shows it.

## Bots

With the [Worker SDK](installing.md#the-worker-sdk) or [proxy mode](proxy-mode.md), UsherStats sees every request
your site answers, not only the ones that run a script. Each request is classified:

- **Search engines**: Googlebot, Bingbot and others, verified by Cloudflare where possible. A request using a search
  engine's name without being verified is an impersonator.
- **AI fetchers**: GPTBot, ClaudeBot, PerplexityBot and others, both the crawlers that gather training data and the
  fetchers that read a page because someone asked an assistant about it.
- **SEO tools, monitors, feed readers, link previews and scrapers**, each by name where it gives one.
- **Unnamed automation**: browser-like requests from hosting networks, or with the marks of software that never runs
  a page's scripts.

The **Crawlers** view shows who came, how often, and what they read.

## AI referrals

A reader who arrives from an AI assistant is a person, counted under People, with the assistant as the source:
ChatGPT, Perplexity, Claude, Gemini and Copilot are recognised by the referring site, and also by the `utm_source` tag
they add to links, because many of those visits arrive with no referrer at all.

## Sources

Every People visit has a source and medium: search, social, referral, campaign (from `utm_source`, `utm_medium` and
`utm_campaign`), AI, or direct. Only those three campaign tags are taken from a page's address; the rest of the query
string is never sent. A link from one of your own hostnames to another is the same site, not a referral.

## Data retention

UsherStats keeps your data **for as long as your account exists**, on every plan: the raw records and the daily
totals built from them. You can delete a site's data, or set a shorter retention for it, in the site's settings, and
[export](data-export.md) everything at any time.
