← tailwin.com

AI-Crawler Tracker

AI crawlers (GPTBot, ClaudeBot, PerplexityBot, and 25+ more) don't execute JavaScript, so browser analytics never see them. The Tailwin tracker runs at the edge or on your server and reports every AI-bot visit to your dashboard.

What it does, and what it doesn't

Which one to install

Your siteInstallVerified bots
Behind CloudflareCloudflare WorkerYes, from Cloudflare's signal
WordPress, not on CloudflareWordPress pluginSearch crawlers only
Next.js or ExpressMiddleware packageSearch crawlers only

Install one, not several. The Worker sees every request including those served from cache, so pick it whenever Cloudflare is in front of your site.

Install: Cloudflare

npx degit tailwin/crawler-worker tailwin-tracker && cd tailwin-tracker
npx wrangler secret put TAILWIN_SITE_KEY   # from your Tailwin dashboard
npx wrangler deploy
# Cloudflare dash → Workers Routes → yourdomain.com/* → tailwin-crawler-tracker

Install: WordPress

  1. Upload the plugin folder to /wp-content/plugins/ and activate it.
  2. Copy your site key from your Tailwin dashboard, under Site → Crawler tracker. It starts with twk_.
  3. In WordPress, open Settings → Tailwin Tracker, paste the key, and save.
  4. Press Send a test hit. A confirmation means the connection works.

One caveat worth knowing before you install it: a full-page cache that serves a crawler from disk without starting WordPress is invisible to every WordPress plugin, including this one. If most of your traffic is served from cache, use the Worker instead.

Install: Next.js or Express

npm install @tailwin/tracker

// Next.js — middleware.ts
import { NextResponse } from "next/server";
import { createNextTracker } from "@tailwin/tracker/next";

const track = createNextTracker({ siteKey: process.env.TAILWIN_SITE_KEY! });

export function middleware(request) {
  track(request);
  return NextResponse.next();
}
export const config = { matcher: "/((?!_next/static|_next/image).*)" };

// Express
import { tailwinTracker } from "@tailwin/tracker/express";
app.use(tailwinTracker({ siteKey: process.env.TAILWIN_SITE_KEY }));

Next.js middleware runs before the response exists, so those hits carry no status code. Express reports the real one. Nothing is awaited on the request path, and a failed batch is dropped rather than retried, because a duplicated hit would overstate your crawl counts.

Why some crawlers show as unverified

On Cloudflare we use their verified-bot signal. Off Cloudflare there is no honest equivalent for AI crawlers: their owners publish IP ranges rather than reverse DNS records. Googlebot, Bingbot and Applebot do document reverse DNS, so those three are confirmed. Everything else is reported as unverified rather than guessed, which is why an AI crawler row never claims verification outside the Worker.

Questions? sgirard@girardmedia.com

Tailwin · AI-Crawler Tracker docs · Tailwin