Skip to content
Ranqo
Docs
DashboardGet started
GuidesMethodologyIntegrations
Video tutorials

Overview

  • Integrations

Analytics

  • Google Analytics 4

Publishing

  • WordPress

Site Tracking

  • Site Tracking
  • Next.js
  • Express
  • Cloudflare Worker
  • Any backend
  • Verify
  • Site keys
  • Intake API
  • Privacy

9 sections

Site Tracking

Site Tracking

View as MarkdownOpen this page as .md
ChatGPTOpen in ChatGPTAsk about this pageClaudeOpen in ClaudeAsk about this page

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

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 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 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 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, 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.

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.

  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.

Guides for each stack:

Next.js

One middleware file, on Next.js 15 and 16.

Express

Node middleware, adaptable to Fastify, Hono and Koa.

Cloudflare Worker

A Worker in front of any site on Cloudflare.

Any backend

One GET request, from Python, Ruby, Go, PHP or anything else.

Limits#

Two plan limits apply:

PlanSite keys (all brands)Visits per brand per month
Starter1100K
Pro3500K
Agency Growth105M
Agency Scale2510M
  • 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.

Business is a custom plan with limits set together with you. Book a demo to shape one.

Related#

Verify your install

Send a test event and watch for the first real visit.

Intake API

The endpoint every snippet calls.

No Site Tracking events

What to check when nothing arrives.
Previous page: WordPressNext page: Next.js
On this page
Ranqo
Docs
Dashboardranqo.aiPrivacyTerms
Be the Source AI Cites.
Ranqo
Docs
GuidesMethodologyIntegrations

Overview

  • Integrations

Analytics

  • Google Analytics 4

Publishing

  • WordPress

Site Tracking

  • Site Tracking
  • Next.js
  • Express
  • Cloudflare Worker
  • Any backend
  • Verify
  • Site keys
  • Intake API
  • Privacy
Get started