Skip to content

Machine readers

See which AI assistants and search crawlers read your pages, and why.

Why this needs your server

A crawler asks for your HTML and leaves. It does not execute scripts, so no browser tracker on earth can see one. Machine tracking is a separate call you make from your own server or middleware, where the request actually arrives.

A person's browser runs JavaScript so the script tag sees them. A crawler takes the HTML and leaves without running anything, so only a server side call can see it.A personreal browserloadsRuns your JSt.js executesSeen by the tagA crawlerGPTBot, ClaudeBotfetchesTakes the HTMLruns nothingInvisible to the tagneeds a server call
Why a script tag cannot see a crawler

Add the call

Call this on incoming requests and forward the visitor's user agent. Termind decides what is worth recording, so you do not need to filter anything yourself.

middleware.ts, Next.js
export function middleware(request: Request) {
  const ua = request.headers.get("user-agent") ?? "";
  const url = new URL(request.url);

  // Fire and forget. Never block the response on analytics.
  fetch(
    `https://www.termind.tech/v1/crawl?key=YOUR_KEY` +
      `&ua=${encodeURIComponent(ua)}&path=${encodeURIComponent(url.pathname)}`,
  ).catch(() => {});
}

Do not await the call. If Termind is slow or down, your page should still render instantly.

The three purposes

Most tools report one number for bot traffic. That number adds together three things that mean opposite things for your business, so Termind splits them.

PurposeWhat it meansExample
AnsweringA person asked a question right now and was handed your pageChatGPT-User, Claude-User, Perplexity-User
IndexingYou are being catalogued so you can be cited laterOAI-SearchBot, Googlebot, Bingbot
TrainingYour text goes into a corpus. No reader at the far endGPTBot, ClaudeBot, Google-Extended

Nine hundred training fetches with zero answering fetches means you are being consumed and never quoted. Forty answering fetches means you are being recommended to real people. The totals look similar. The situations are opposite.

NextScript configurationEvery attribute the snippet accepts, and the full browser API.