AI Crawler-spårning

Besökskollen kan visa exakt vilka AI-bottar som hämtar din sajt, GPTBot, ClaudeBot, PerplexityBot och fler, när du installerar en kort kodsnutt på din server.

Varför mäta AI-crawlers?

AI-bottar kör inte JavaScript, så de syns inte i din vanliga statistik. Ändå avgör de om dina sidor kan citeras av ChatGPT, Perplexity, Claude och andra. Att mäta deras besök ger dig:

  • Vilka AI-modeller känner till din sajt , Varje plattform har sin egen bot. Ser du PerplexityBot men ingen GPTBot? Då vet du var du står hos respektive AI.
  • Vilka sidor som indexeras mest , Sidor som AI:n hämtar ofta är de som har störst chans att citeras. Det styr var du bör lägga din optimeringsenergi.
  • När indexeringen pågår , Daglig GPTBot-trafik = OpenAI uppdaterar sin syn på din sajt. Långa pauser kan signalera att innehållet inte uppfattas som färskt nog.

Så fungerar det

Snippet-koden du installerar kollar User-Agent på varje request till din server. När en AI-crawler matchar gör den ett asynkront POST till https://besokskollen.se/api/ai-crawl med crawler-namn och URL. Allt körs server-side, ingen påverkan på besökarens upplevelse.

Vi lagrar bara crawler-namn, URL, User-Agent och tidsstämpel. Inga personuppgifter, inga cookies. Spårningen gäller bara bottar, riktiga besökare ignoreras.

Installation

Välj plattform. Byt ut YOUR_SITE_ID mot ditt sajt-ID (samma som i din vanliga tracking-snippet). Snippet:en kan köras parallellt med vår vanliga JS-tracker, de stör inte varandra.

Next.js (App Router eller Pages)

Lägg till i din befintliga middleware.ts (eller skapa en ny). Vercel kör middleware vid edge, minimal latens.

ts
// middleware.ts (eller utvidga befintlig)
import { NextResponse } from 'next/server';
import type { NextRequest } from 'next/server';

const SITE_ID = 'YOUR_SITE_ID';
const AI_API = 'https://besokskollen.se/api/ai-crawl';

const AI_CRAWLER_PATTERNS = [
  'GPTBot', 'ChatGPT-User', 'OAI-SearchBot',
  'PerplexityBot', 'Perplexity-User',
  'ClaudeBot', 'Claude-Web', 'Claude-User', 'Claude-SearchBot', 'anthropic-ai',
  'Google-Extended', 'GoogleOther',
  'Applebot-Extended',
  'meta-externalagent', 'meta-externalfetcher',
  'Amazonbot', 'cohere-ai', 'Bytespider', 'CCBot',
  'DuckAssistBot', 'YouBot', 'Diffbot',
];

export function middleware(request: NextRequest) {
  const ua = request.headers.get('user-agent') || '';
  const matched = AI_CRAWLER_PATTERNS.find(p =>
    ua.toLowerCase().includes(p.toLowerCase())
  );

  if (matched) {
    // Fire-and-forget, blockerar inte response
    fetch(AI_API, {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({
        siteId: SITE_ID,
        pathname: request.nextUrl.pathname,
        userAgent: ua,
      }),
    }).catch(() => {});
  }

  return NextResponse.next();
}

export const config = {
  matcher: ['/((?!_next|favicon.ico).*)'],
};

WordPress

Lägg till i ditt temas functions.php eller skapa en mu-plugin. wp_remote_post med 'blocking' => false körs asynkront och påverkar inte sidladdningen.

php
// I functions.php (i ditt aktiva tema) eller som mu-plugin

add_action('template_redirect', function() {
    $site_id = 'YOUR_SITE_ID';
    $api = 'https://besokskollen.se/api/ai-crawl';

    $patterns = [
        'GPTBot', 'ChatGPT-User', 'OAI-SearchBot',
        'PerplexityBot', 'Perplexity-User',
        'ClaudeBot', 'Claude-Web', 'Claude-User', 'Claude-SearchBot', 'anthropic-ai',
        'Google-Extended', 'GoogleOther',
        'Applebot-Extended',
        'meta-externalagent', 'meta-externalfetcher',
        'Amazonbot', 'cohere-ai', 'Bytespider', 'CCBot',
        'DuckAssistBot', 'YouBot', 'Diffbot',
    ];

    $ua = $_SERVER['HTTP_USER_AGENT'] ?? '';
    foreach ($patterns as $p) {
        if (stripos($ua, $p) !== false) {
            wp_remote_post($api, [
                'blocking' => false, // Asynkron, blockerar inte sidladdningen
                'timeout' => 1,
                'headers' => ['Content-Type' => 'application/json'],
                'body' => wp_json_encode([
                    'siteId' => $site_id,
                    'pathname' => $_SERVER['REQUEST_URI'] ?? '/',
                    'userAgent' => $ua,
                ]),
            ]);
            break;
        }
    }
});

Node.js / Express

Generisk middleware för Express, Fastify eller liknande. Använder fetch (Node 18+), ingen extra dependency.

js
// Express middleware
const SITE_ID = 'YOUR_SITE_ID';
const AI_API = 'https://besokskollen.se/api/ai-crawl';

const AI_CRAWLER_PATTERNS = [
  'GPTBot', 'ChatGPT-User', 'OAI-SearchBot',
  'PerplexityBot', 'Perplexity-User',
  'ClaudeBot', 'Claude-Web', 'Claude-User', 'Claude-SearchBot', 'anthropic-ai',
  'Google-Extended', 'GoogleOther',
  'Applebot-Extended',
  'meta-externalagent', 'meta-externalfetcher',
  'Amazonbot', 'cohere-ai', 'Bytespider', 'CCBot',
  'DuckAssistBot', 'YouBot', 'Diffbot',
];

app.use((req, res, next) => {
  const ua = req.get('user-agent') || '';
  const matched = AI_CRAWLER_PATTERNS.find(p =>
    ua.toLowerCase().includes(p.toLowerCase())
  );

  if (matched) {
    fetch(AI_API, {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({
        siteId: SITE_ID,
        pathname: req.path,
        userAgent: ua,
      }),
    }).catch(() => {});
  }

  next();
});

Vilka AI-bottar spåras?

Vi känner igen dessa AI-modellers crawlers idag. Listan uppdateras allt eftersom nya bots dyker upp.

OpenAI: GPTBot, ChatGPT-User, OAI-SearchBot
Anthropic: ClaudeBot, Claude-Web, Claude-User, Claude-SearchBot
Perplexity: PerplexityBot, Perplexity-User
Google: Google-Extended, GoogleOther
Apple: Applebot-Extended
Meta: meta-externalagent, meta-externalfetcher
Amazon: Amazonbot
Cohere: cohere-ai
ByteDance: Bytespider
Common Crawl: CCBot
DuckDuckGo: DuckAssistBot
You.com: YouBot

Vanliga frågor

Påverkar snippet:en min sajts prestanda?

Nej. Alla varianter använder asynkron eller fire-and-forget-fetch som kör i bakgrunden utan att blockera responsen till besökaren eller boten.

Vad händer om en bot blockeras av min CDN/brandvägg?

Då får snippet:en aldrig se requesten, och vi får ingen rapport. Det är korrekt beteende. Om du vill se ALLA bots inklusive blockerade behöver du logga på edge/CDN-nivå istället.

Kan jag rapportera fler crawlers själv?

Just nu är listan av kända crawlers central, endast bots vi känner igen sparas. Om du upptäcker en ny AI-crawler vi missar: hör av dig så lägger vi till den.