AI crawler log en content signals voor WordPress
GPTBot haalt je pagina op, ClaudeBot ook, en je serverlog vertelt je dat pas als je zelf gaat graven. Deze plugin zet die twee vragen in een scherm: welke AI crawler is langs geweest en op welke pagina, en wat mogen ze met wat ze ophalen. Dat tweede leg je vast in je robots.txt, met de exacte regels op het scherm voordat je opslaat. De plugin doet geen enkel uitgaand verzoek en legt geen IP-adres vast.
Drie stappen, en bij een gewone bezoeker stopt het bij stap twee
De plugin hangt aan de verzoeken die vanzelf bij je server binnenkomen. Er staat niets in je pagina, er wordt geen script geladen en een bezoeker merkt er niets van. Wat er gebeurt is dit, en meer is het niet.
Er komt een verzoek binnen
WordPress krijgt een verzoek voor een pagina. De plugin kijkt naar een ding: de user agent die de andere kant meestuurt.
Heeft het verzoek helemaal geen user agent, dan stopt het hier.
Vergelijken met de lijst
De user agent wordt vergeleken met een lijst van 34 namen die in de plugin zelf staat, plus de eigen namen die jij erbij hebt getypt.
Geen treffer, en er gebeurt verder niets. Dat is het pad van elke gewone bezoeker.
Een regel erbij
Wel een treffer, dan volgt precies een INSERT met vier velden: de naam van de crawler, het adres van de pagina, de statuscode die je server teruggaf en het tijdstip.
Meer velden heeft de tabel niet.
Je serverlog weet het wel, maar je leest het niet
Elke AI crawler die je site ophaalt laat een spoor achter in het toegangslog van je webserver. In de praktijk komt daar niemand. Het bestand is groot, het staat vol met afbeeldingen en botverkeer, en de meeste hostingpakketten bewaren het een paar dagen. De vraag die je eigenlijk hebt is klein: kwam GPTBot langs, op welke pagina's, en gaf mijn server daar een 200 of een 404 op.
Daar komt sinds 2025 een tweede vraag bij die vroeger niet bestond
Een crawler die je pagina ophaalt kan er drie verschillende dingen mee doen: hem in een zoekindex zetten, hem tijdens het beantwoorden van een vraag als bron gebruiken, of hem gebruiken om een model mee te trainen. Dat zijn drie aparte vormen van gebruik, en je hebt er tot voor kort geen manier voor gehad om er per vorm iets over te zeggen. Disallow was alles of niets.
Deze plugin doet die twee dingen naast elkaar, omdat het in de praktijk een gesprek is
Je kijkt wie er langskomt, en op grond daarvan bepaal je wat je toestaat.
Wat de plugin precies doet
Twee schermen, en een derde met de instellingen.
Het log
Een regel per keer dat een crawler uit de lijst een pagina van je site ophaalde. Geteld per crawler en per pagina, over 7, 30 of 90 dagen of over alles, met vier totalen bovenaan, een staaf per dag en een export naar CSV van hoogstens 20000 regels.
De content signals
Een scherm waar je per crawlergroep zegt of je je content beschikbaar stelt voor zoeken, als invoer voor een AI-antwoord, en voor training. Je ziet de regels die daaruit volgen woordelijk op het scherm voordat je opslaat, en er wordt niets aan je robots.txt toegevoegd totdat je het vinkje zelf zet. Daarnaast staat een aparte kolom die een echte Disallow: / voor een groep toevoegt. Dat is iets anders dan een signaal, het staat overal uit, en het scherm houdt die twee uit elkaar.
De instellingen
Meten aan of uit, bewaartermijn van 30, 90 of 365 dagen of alles bewaren, en een veld voor je eigen namen, hoogstens 25, een per regel. Elke regel wordt in de user agent gezocht, dus MyBot vindt ook MyBot/1.0 (+https://example.com/bot).
Drie uitspraken per groep, en je ziet de regels voordat je opslaat
Een content signal is een uitspraak over wat je met je content toestaat nadat hij is opgehaald. Er zijn er drie en ze staan los van elkaar. Elk signaal kan op ja, op nee, of op geen uitspraak. Geen uitspraak laat het signaal helemaal uit de regel weg, en dat is precies hoe je zegt dat je die vorm van gebruik niet toestaat en niet verbiedt. Alles begint op geen uitspraak en het blok staat uit.
robots.txt bestand in de wortel van je site, dan serveert je webserver dat bestand en komt WordPress er niet aan te pas. Het scherm controleert daarop en zegt het.Zo installeer je hem, in vier stappen
Er is geen account nodig, geen sleutel en geen registratie. Een gewone WordPress waar je beheerder bent is genoeg.
manage_options nodig, dus beheerder.Klik hierboven op de downloadknop. Je krijgt theseo-ai-crawlerlog-1.0.0.zip, 52 KB. Pak hem niet uit: WordPress wil de zip zelf.
In je WordPress: Plugins, Nieuwe plugin, Plugin uploaden. Kies het bestand en klik op Nu installeren.
Klik op Plugin activeren. Er verschijnt een nieuw onderdeel in je beheermenu. Je site verandert er op dat moment nog niet van.
Open het instellingenscherm en loop de standen langs. Alles wat aan je openbare site raakt staat uit tot je het zelf aanzet.
Wat hij niet doet, en niet beweert
Dit staat hier omdat het bij dit onderwerp het snelst misgaat.
Hij zegt niet of je geciteerd wordt
Of ChatGPT, Perplexity of Gemini jouw site noemt in een antwoord is vanaf je eigen server niet te meten. Een crawlerbezoek is geen citaat en de plugin doet niet alsof.Hij verifieert de crawler niet
Een user agent is een bewering. Wie zich voordoet als GPTBot komt in het log terecht als GPTBot. Er zit geen controle op omgekeerde DNS of op IP-reeksen in deze versie, en dat staat ook op het scherm.Twee namen kunnen nooit in het log komen
Google-Extended en Applebot-Extended bestaan alleen als groep in robots.txt en worden nooit in een verzoek meegestuurd. Je kunt ze een signaal geven, maar ze verschijnen nooit in de lijst. De plugin zegt dat op het scherm in plaats van stil nul te tellen.Een leeg log is meestal geen storing
Drie gewone oorzaken: er is nog geen crawler langs geweest, meten staat uit, of een volledige paginacache of CDN beantwoordt de verzoeken zodat ze PHP nooit bereiken. In dat laatste geval kan vrijwel geen enkele WordPress-plugin het zien, tenzij hij het logboek van je CDN achteraf inleest. Het instellingenscherm drukt de lijst met namen af zodat je die in de uitzonderingen van je cacheplugin kunt plakken.Vier velden erin, en zes dingen er bewust uit
Dit is de hele tabel. Een tweede tabel bestaat niet, net zomin als een verborgen kolom of een tweede plek waar iets terechtkomt. De rechterkolom is niet een belofte maar de reden waarom er in dit log geen persoonsgegeven zit dat je bij een verwerkingsregister zou moeten opschrijven.
- De naam van de crawler, zoals hij in de lijst van de plugin staat
- Het adres van de pagina, zonder queryreeks en zonder anker
- De HTTP-statuscode die jouw server teruggaf
- Het tijdstip volgens je server
- Het IP-adres, niet leesbaar en ook niet als afdruk
- De volledige user agent reeks
- Een cookie of iets in localStorage of sessionStorage
- Een gebruikersnummer of een koppeling met een WordPress-account
- De queryreeks, dus een sleutel of e-mailadres in een adres komt er nooit in
- Wat dan ook dat je server verlaat
includes/class-theseo-crawlerlog-request.php.Privacy: wat er wel en niet wordt vastgelegd
Wat er in de tabel komt staat hierboven in FIG.03, veld voor veld. Wat hier volgt is hoe je het zelf nakijkt, want een privacyparagraaf die je niet kunt controleren is een reclametekst.
Geen enkel uitgaand verzoek
Zoek in de uitgepakte zip opwp_remote_, curl_init, file_get_contents en fsockopen. Nul treffers. Er is geen account, geen sleutel en geen dienst erachter.Geen IP-adres in de tabel
Het adres komt precies een keer voor, in de snelheidslimiet, waar het via een sleutelafdruk een transientnaam wordt die binnen een minuut verloopt.Geen cookie en geen browseropslag
De plugin laadt helemaal geen script op je front end. Er is niets dat op het apparaat van een bezoeker iets zet of leest.Geen queryreeks
Het adres wordt opnieuw opgebouwd, dus een sessietoken of een e-mailadres dat iemand in een adres heeft gezet komt niet in de tabel terecht.Bewaartermijn
Een dagelijkse taak verwijdert regels ouder dan de ingestelde termijn, standaard 90 dagen. Deactiveren bewaart het log en stopt de taak. Verwijderen laat de tabel, de instellingen en de taak vallen, te lezen inuninstall.php.Voor de volledigheid: dit log gaat over machines, niet over mensen. Er zit geen gegeven in dat naar een persoon te herleiden is, en dat is de reden dat je hem op een klantsite kunt zetten zonder dat er iets in een verwerkingsregister bij hoeft.
Veelgestelde vragen
Vertraagt de plugin mijn site? De controle draait op verzoeken die een user agent hebben, vergelijkt die met een lijst met stukjes tekst, en stopt daar bij een gewone bezoeker. Alleen een treffer levert een INSERT op. Er wordt niets aan de pagina toegevoegd en er wordt geen script geladen.
Waarom zit er geen nonce op het loggen?
Omdat het loggen geen invoer aanneemt. Het kijkt naar verzoeken die vanzelf binnenkomen en schrijft aan de serverkant een regel weg. Een adres om iets naartoe te sturen ontbreekt. De beheerschermen, de export en elke opslagactie gebruiken wel een nonce plus een rechtencontrole.
Werkt hij met een cacheplugin?
Alleen voor zover de verzoeken PHP bereiken. Beantwoordt je cache of je CDN het verzoek zelf, dan ziet WordPress het niet en dus deze plugin ook niet. Het instellingenscherm drukt de lijst met namen af zodat je die kunt uitsluiten van de cache.
Werkt hij op multisite?
Ja. Elke site in het netwerk krijgt een eigen tabel, eigen instellingen en een eigen robots.txt blok. Verwijderen ruimt elke site op.
Mag ik hem op klantsites zetten?
Ja. De gegevens blijven in de WordPress van die klant en het instellingenscherm zegt letterlijk wat er bewaard wordt. Er is geen persoonsgegeven om te laten zien aan een functionaris gegevensbescherming.
Verandert hij mijn robots.txt zodra ik hem activeer?
Nee. Het loggen begint meteen, de robots.txt kant staat uit. Er wordt niets toegevoegd tot je de signalen instelt, de voorvertoning bekijkt en het vinkje zet.
Wat je er de eerste week aan hebt
Zet hem een week aan en kijk daarna wie er langs is geweest. Dat gesprek is bijna altijd korter en concreter dan het gesprek over AI-zichtbaarheid in het algemeen. Wil je daarna weten hoe je die pagina's ook citeerbaar maakt in plaats van alleen opgehaald, dan is de AI snippet previewer de volgende stap, en de llms.txt generator zegt in gewone taal wat je site is. Wil je erover doorpraten, plan dan een gesprek.