# Site Tracking

> Server-side capture of every page request to your site, including the AI crawlers that run no JavaScript, sorted into bots and human visits.

Source: https://ranqo.ai/docs/integrations/site-tracking

Site Tracking reports every page request your server handles to Ranqo, and Ranqo works out who made it: an AI crawler collecting training data, an AI search index, an assistant fetching your page because someone asked it a question, a search engine, or a person. The results appear in the **Site Tracking** view of the [Traffic](https://ranqo.ai/docs/guides/traffic) page.

## Why it runs on your server

Analytics tools such as GA4 count a visit by running JavaScript in the visitor's browser. AI crawlers fetch your HTML and leave without running any script, so those tools never see them. Site Tracking runs where every request arrives, on your server or edge, so it sees the crawlers, the files they read first, and visitors whose browsers block analytics tags.

There is no script on your pages and no cookie. For each page request, your server sends one short request to Ranqo with the page URL, the user agent, the referrer and the visitor's IP address, then moves on without waiting for the answer. See [Privacy](https://ranqo.ai/docs/integrations/site-tracking/privacy) for exactly what is sent and stored.

## What gets counted

The install code for Next.js, Express, Cloudflare Workers and Python applies the same rules:

- **Page requests only.** It reports `GET` requests and skips everything else.
- **Real page views only.** Link prefetches and framework data requests are skipped. On a Next.js site, counting them would make traffic read several times higher than it is.
- **The files AI crawlers read first.** `robots.txt`, `llms.txt`, `llms-full.txt`, `sitemap.xml` and its parts, `ai.txt` and anything under `/.well-known/` are reported, even though they look like static files.
- **No assets or API calls.** Images, fonts, scripts, stylesheets, other `.txt`, `.xml` and `.json` files, and paths under `/api/` are skipped.

Ranqo also drops, after receiving them, requests for paths that only vulnerability scanners ask for (such as `/.env`, `/.git/`, `/wp-admin`, `/wp-login` and `xmlrpc.php`) and requests whose user agent is a web address. Those are probes, not visitors.

## How visits are classified

### Bots

Ranqo matches each request's user agent against its catalog of known crawlers and sorts the visit by why the bot came. The labels are the ones the Traffic page uses:

- **Training**: crawlers collecting pages to train models, such as GPTBot, ClaudeBot, CCBot and Meta-ExternalAgent.
- **Indexing**: AI search indexes that answers cite from, such as OAI-SearchBot, Claude-SearchBot and PerplexityBot.
- **Agentic**: fetches made on demand because a person asked an assistant something, such as ChatGPT-User, Claude-User and Perplexity-User.
- **Search Engine**: traditional search crawlers, such as Googlebot, bingbot and Applebot.
- **Social Preview**: link-preview generators such as Slackbot and LinkedInBot, and automated browsers such as Lighthouse and Playwright, so that test runs and speed checks are not counted as people.

See the [crawler catalog](https://ranqo.ai/docs/methodology/crawlers) for what the main AI crawlers are for.

### Verified bots

A user agent is only a claim, and anyone can send `GPTBot`. For bots whose operators publish the IP ranges they crawl from, including OpenAI, Anthropic, Perplexity, Google and Bing, Ranqo checks the visitor's IP address against those ranges:

- **Verified**: the address is in the operator's published ranges.
- **Unverified**: Ranqo had the ranges and the address was not in them, so the visit probably is not the crawler it claims to be.
- **Not checkable**: Ranqo has no published ranges for that bot's operator (or could not load them), the bot is a tool anyone can run (such as Lighthouse or Playwright), or no IP address was sent. The **Agents detected** table shows these as **n/a**, and they are left out of the verified rate rather than counted as suspect.

Verification depends on your install sending the real visitor IP. If your server sits behind a proxy and passes on the proxy's address instead, genuine crawlers come out unverified. Each stack's guide says which header to read.

Your install also reports Ranqo's own requests. [Site Access](https://ranqo.ai/docs/guides/site-access), which runs on its own after your tracking runs, and the free AI Crawler Inspector fetch your pages from Ranqo's servers under crawlers' user agents. Most of those requests appear as visits from the crawler they name, unverified where Ranqo has the operator's ranges; the rest count as people. See [Ranqo's requests in Site Tracking](https://ranqo.ai/docs/methodology/crawlers#ranqos-requests-in-site-tracking).

### Human visits

A request whose user agent matches no bot in the catalog is a person, including crawlers the catalog does not list, such as RanqoBot and Googlebot-Image. When its referrer is an AI assistant, it counts as a visit from that assistant: the list is ChatGPT, Gemini, Perplexity, Claude, Copilot, Grok, DeepSeek, and Meta AI. Other human visits are sorted by referrer into **Search**, **Social**, **Email**, **Direct** (no referrer) and **Other**.

Like GA4, this depends on the referrer. When an AI app opens a link without sending one, the visit counts as **Direct**.

## Install it

### 1. Open the install page
On the **Traffic** page, press **Set up Site Tracking**. The button reads **Continue install** if a key already exists, and **Add Site Tracking** when Google Analytics is already delivering data. The **Install Site Tracking** page opens.

### 2. Generate a key
Press **Generate site key**. The key starts with `rk_live_` and belongs to this brand. Only the account owner can generate one. See [Site keys](https://ranqo.ai/docs/integrations/site-tracking/keys).

### 3. Choose how to install
Under **Install method**, choose **AI prompt** for a ready-made prompt to paste into a coding agent or chat assistant, **Code snippet** for the code itself, or **Developer brief** for a message to forward to whoever maintains your site. All three carry your key.

### 4. Deploy, then verify
Deploy the change, press **I've installed it — verify now**, and visit a page on your site. See [Verify your install](https://ranqo.ai/docs/integrations/site-tracking/verify).

Guides for each stack:

- [Next.js](https://ranqo.ai/docs/integrations/site-tracking/nextjs): One middleware file, on Next.js 15 and 16.
- [Express](https://ranqo.ai/docs/integrations/site-tracking/express): Node middleware, adaptable to Fastify, Hono and Koa.
- [Cloudflare Worker](https://ranqo.ai/docs/integrations/site-tracking/cloudflare-worker): A Worker in front of any site on Cloudflare.
- [Any backend](https://ranqo.ai/docs/integrations/site-tracking/any-backend): One GET request, from Python, Ruby, Go, PHP or anything else.

## Limits

Two plan limits apply:

| Plan | Site keys (all brands) | Visits per brand per month |
| --- | --- | --- |
| Starter | 1 | 100K |
| Pro | 3 | 500K |
| Agency Growth | 10 | 5M |
| Agency Scale | 25 | 10M |

- **Keys**: active keys are counted across all your brands, leaving out revoked keys and keys on deleted brands. The install page gives each brand one key, so through the dashboard the key limit is also how many brands can run Site Tracking at once.
- **Visits** are counted per brand per calendar month (UTC), bots and people together. The Site Tracking view shows how much of the allowance the brand has used, as *N / M visits this month*. The allowance is not enforced: visits above it are still accepted and recorded.
- **History:** the Traffic page shows as far back as your plan's history window. See [Plans and limits](https://ranqo.ai/docs/guides/plans-and-limits).

Business is a custom plan with limits set together with you. [Book a demo](https://ranqo.ai/#book-demo) to shape one.

## Related

- [Verify your install](https://ranqo.ai/docs/integrations/site-tracking/verify): Send a test event and watch for the first real visit.
- [Intake API](https://ranqo.ai/docs/integrations/site-tracking/intake-api): The endpoint every snippet calls.
- [No Site Tracking events](https://ranqo.ai/docs/guides/troubleshooting/site-tracking-no-events): What to check when nothing arrives.
