---
title: "Bots herkennen in je serverlog: 1.462 patronen, en waar ze tekortschieten"
date: 2026-08-16
author: ""
categories:
  - name: "AI SEO"
    url: "/category/ai-seo.md"
---

# Bots herkennen in je serverlog: 1.462 patronen, en waar ze tekortschieten

Meer dan de helft van al het verkeer op het web komt inmiddels van machines: [57,5% tegen 42,5%](https://lovableseo.nl/machineverkeer-voorbij-mensen/), gemeten door Cloudflare in mei 2026. Op jouw site is dat percentage anders, en je weet niet welk. Je analytics tellen het niet mee, want een crawler voert geen JavaScript uit.

Het enige bestand waar het wél in staat is je access log. Daar staat bij elk verzoek de user-agent, en daarin noemen bijna alle bots zichzelf gewoon bij naam. Je hebt alleen een lijst nodig van welke namen dat zijn.

## De lijst die er al is

CrawlerDetect is zo’n lijst. Het is een PHP-class die kijkt of een user-agent bij een bot hoort, met een MIT-licentie en 2.391 sterren op GitHub. Op het moment van schrijven zitten er **1.462 patronen** in, plus 52 uitzonderingen. De laatste update is van 30 juli 2026, dus de lijst wordt nog bijgehouden.

De werking is simpel. Eerst haalt hij de uitzonderingen uit de user-agent weg — browserversies en losse woorden die anders vals alarm geven. Wat overblijft legt hij naast die 1.462 patronen. Zit er een match in, dan is het een bot.

Je hoeft geen PHP te draaien om er iets aan te hebben. De patronenlijst zelf staat als los JSON-bestand in de repo, en die kun je overal tegenaan gooien.

## Ik heb de lijst langs de AI-crawlers van nu gehaald

Een lijst uit 2013 die bots herkent aan het woord “spider” is één ding. De vraag is of hij de agents van 2026 pakt. Ik heb de patronen op 11 augustus 2026 gedownload en er de officiële user-agent-strings van de grote AI-partijen langs gelegd.

User-agentWat het isUitkomst`GPTBot`OpenAI, trainingbot`OAI-SearchBot`OpenAI, zoekindexbot`ChatGPT-User`OpenAI, haalt een pagina op voor een gebruikerbot`ClaudeBot`Anthropic, crawlerbot`Claude-User`Anthropic, voor een gebruikerbot`PerplexityBot`Perplexity, crawlerbot`Perplexity-User`Perplexity, voor een gebruiker**mens**`CCBot`Common Crawlbot`Bytespider`ByteDancebot`Amazonbot`Amazonbot`Applebot`Applebot`meta-externalagent`Metabot, maar niet op zijn naam`MistralAI-User`Mistral, voor een gebruikerbot, maar niet op zijn naamChrome op een MacBookeen mensmensDertien van de veertien goed, dus. Drie regels verdienen uitleg.

## Perplexity-User telt als bezoeker

De lijst pakt de meeste AI-crawlers via het woord `bot`, `crawl` of `spider` in hun naam. De agents die geen van die drie in hun naam hebben staan er los in: `ChatGPT-User` en `Claude-User` zijn allebei met de hand toegevoegd. `Perplexity-User` niet. Zijn user-agent bevat geen enkel woord uit de lijst, dus komt hij bij je mensen terecht.

Perplexity beschrijft die agent zelf zo: hij bezoekt een pagina wanneer een gebruiker een vraag stelt, om het antwoord te onderbouwen en de pagina erbij te linken. Dat is geen scraper op de achtergrond — dat is verkeer met iemand erachter, en het is de reden dat je hem juist apart wil kunnen tellen.

Mistral en Meta zijn het tweede geval, en dat is subtieler. Allebei worden ze herkend, maar niet aan hun naam. `MistralAI-User` matcht op het woord “robots” in de bron-URL die hij meestuurt, `docs.mistral.ai/robots`. `meta-externalagent` matcht op “crawler” in zíjn bron-URL. Verandert een van die twee die link, dan zijn ze stilletjes weg uit je telling. Een match op iets wat toevallig meelift is geen match waar je een maandrapport op bouwt.

## Wat ik zou doen

**Tel eerst, beslis daarna.** Haal je access log van vorige maand op en draai er dit doorheen. Dan weet je wat er speelt in plaats van dat je erover leest.

```
import re, sys, collections
BOTS = r"gptbot|oai-searchbot|chatgpt-user|claudebot|claude-user|perplexity-user|perplexitybot|googlebot|bingbot|bytespider|ccbot|amazonbot|applebot|meta-externalagent|mistralai-user"
t = collections.Counter()
for regel in open(sys.argv[1], errors="ignore"):
    ua = regel.split('"')[5] if regel.count('"') > 5 else ""
    m = re.search(BOTS, ua, re.I)
    t[m.group(0).lower() if m else "mens (of onbekend)"] += 1
for naam, n in t.most_common():
    print(f"{n:8d}  {naam}")
```

Opslaan als `telbots.py` en draaien met `python3 telbots.py access.log`. Werkt op een standaard nginx- of Apache-logregel, waar de user-agent het zesde veld tussen aanhalingstekens is.

**Houd je eigen lijstje bij naast de bibliotheek.** Elke maand komt er een AI-partij bij en elke bibliotheek loopt daarop achter. Vijftien namen in een regex die jij zelf beheert is sneller bijgewerkt dan een pull request in een repo van iemand anders.

**Zet de agents in een aparte kolom, niet achter een blokkade.** Trainingscrawlers mag je weren als je dat wil. De agents die op dat moment voor een gebruiker zoeken zijn je bezoekers van morgen — die wil je zien, niet buiten de deur. Wil je weten of dat ook wat oplevert: in Search Console kun je [zien of je site in AI-antwoorden opduikt](https://lovableseo.nl/search-console-ai-antwoorden-bekijken/).

## Veelgestelde vragen

**Moet ik PHP draaien om CrawlerDetect te gebruiken?**  
Nee. De class is PHP, maar de patronen staan als los JSON-bestand in de repo. Draai je WordPress, dan heb je PHP toch al en kun je hem via Composer installeren.

**Kan ik niet gewoon filteren op het woord “bot”?**  
Dat pakt de meeste, maar je mist precies de interessante groep: de agents met `-User` in hun naam. En je krijgt vals alarm van elke user-agent waar toevallig “bot” in staat. Daar zijn die 52 uitzonderingen voor.

**Ik heb Cloudflare ervoor, zie ik dan nog wel iets?**  
In je serverlog zie je alleen wat Cloudflare doorlaat. Wat daarvóór al is tegengehouden staat in het Cloudflare-dashboard, niet bij jou. Vergelijk de twee een keer naast elkaar; het verschil zegt meer dan elk van de twee apart.

**Kan een bot liegen over zijn user-agent?**  
Ja, en dat gebeurt ook. Deze aanpak telt de bots die zichzelf netjes bekendmaken, en dat zijn de partijen die je juist wil volgen. Voor de rest heb je IP-controle nodig; de grote AI-partijen publiceren hun IP-reeksen daarvoor.

## Bronnen

- [CrawlerDetect op GitHub](https://github.com/JayBizzle/Crawler-Detect) — patronen en licentie, cijfers opgehaald 11 augustus 2026
- [crawlerdetect.io](https://crawlerdetect.io/) — de projectsite met een testveld voor je eigen user-agent
- [Perplexity over PerplexityBot en Perplexity-User](https://docs.perplexity.ai/guides/bots)
- [Mistral over MistralAI-User](https://docs.mistral.ai/robots/)



## Waarom je serverlog iets vertelt wat geen enkele tool je geeft

Analytics ziet alleen bezoekers die JavaScript uitvoeren. Bots doen dat niet. Alles wat crawlers op je site doen, gebeurt dus buiten je statistieken om — en juist dat is wat bepaalt of je gevonden wordt.

Drie vragen die je alleen in het log beantwoordt:

- **Komt Googlebot überhaupt langs, en hoe vaak?** Een site die niet gecrawld wordt kan niet ranken, en dat zie je nergens anders zo direct.
- **Welke pagina’s haalt hij op?** Als hij vooral je oude pagina’s blijft ophalen en je nieuwe overslaat, weet je waar je interne links tekortschieten.
- **Welke AI-crawlers komen er?** OAI-SearchBot, PerplexityBot en ClaudeBot laten zich hier zien, en nergens anders.

## Wat je in de regels zoekt

Een logregel bevat het IP, de tijd, de opgevraagde URL, de statuscode en de user-agent. Die laatste twee doen het werk.

Waar je op filtertWat het je zegtuser-agent bevat Googlebotcrawlfrequentie en welke URL’sstatuscode 404 bij een botje verspilt crawlbudget aan dode URL’sstatuscode 301 in een ketenelke extra stap kost crawlbudgetdezelfde URL tientallen keren per dagmeestal een parameter- of paginatieprobleemBelangrijk: een user-agent is een tekstveld dat iedereen kan invullen. Wie zeker wil weten dat het echt Googlebot was, controleert het IP via een omgekeerde DNS-lookup. Voor dagelijks gebruik is dat overdreven; voor het beoordelen van verdacht verkeer niet.

## Waar patroonlijsten tekortschieten

Kant-en-klare botlijsten herkennen wat zich netjes bekendmaakt. Dat is precies het verkeer dat je het minst hoeft te wantrouwen. Wat ze missen:

- **Bots die zich voordoen als een browser.** Die staan in geen enkele lijst en zijn alleen te herkennen aan gedrag: te snel, te systematisch, geen afbeeldingen ophalen.
- **Nieuwe crawlers.** Elke maand komt er een AI-bedrijf bij. De lijst loopt per definitie achter.
- **Verkeer via een proxy.** Het IP zegt dan niets over de herkomst.

Praktische conclusie: gebruik een lijst om het bekende verkeer snel weg te filteren, en beoordeel wat overblijft op gedrag. Wat je met de uitkomst doet, staat in de [AI robots.txt-tester](/ai-robots-tester/).