Aller au contenu principal

Mesurer le trafic IA dans ses logs.

13,5 jours de logs Caddy analysés : qui crawle un blog PHP, ce que pèsent GPTBot et ClaudeBot, et ce que vaut un robots.txt écrit sans mesure.

9 min de lecture
Sommaire · 8

Le 1er juillet au soir, j'ai publié un billet sur l'arrivée d'AI Overviews en France. Une thèse, des sources, zéro chiffre à moi : je racontais la rupture du contrat entre les moteurs et ceux qui écrivent, sans avoir regardé ce qui se passait sur mon propre serveur. Le lendemain matin, j'ai ouvert les access logs. Treize jours et demi de trafic, 108 217 requêtes.

Ce billet fait le travail que j'aurais dû faire avant : on va vérifier si une politique robots.txt écrite au doigt mouillé a servi à quelque chose. Chiffres vérifiés requête par requête, IP par IP. Une politique au doigt mouillé, un verdict au pluviomètre.

Une politique écrite sans ouvrir les logs

Le 5 février 2026, j'ai poussé 290 lignes de robots.txt. Une stratégie hybride, argumentée, propre : les assistants IA autorisés (ClaudeBot, GPTBot, PerplexityBot et compagnie), les aspirateurs à corpus bloqués (CCBot, Bytespider, les collecteurs LAION). En mai, j'ai doublé ça d'un matcher Caddy qui répond 403 aux User-Agents indésirables. CrowdSec complète le dispositif avec sa blocklist communautaire.

Trois couches, comme une boîte de nuit : le règlement affiché à l'entrée (robots.txt), le videur qui refoule (le 403 Caddy), la liste des fichés du quartier (CrowdSec).

Ce que je n'avais jamais fait en cinq mois : vérifier qui lisait le règlement, qui se faisait refouler, et qui entrait quand même. La politique était argumentée. Elle n'était pas mesurée.

Treize jours et demi, trois angles morts

D'abord la méthode et ses limites, parce qu'une mesure sans ses angles morts est une opinion déguisée en chiffre.

La fenêtre : du 19 juin au 2 juillet 2026, 13,5 jours d'access logs Caddy en JSON. 108 217 requêtes, 3 147 Mo servis. C'est la rotation des logs qui décide de la profondeur (100 Mo par fichier, 7 jours de rétention sur les fichiers tournés) : rien de plus ancien n'existe.

La vérification d'identité, ensuite. Un User-Agent se déclare, il ne se prouve pas. Pour chaque bot, j'ai recoupé les adresses IP avec les listes publiées par OpenAI, Google et Perplexity (des JSON publics), et le reverse DNS pour Amazon, Apple et Microsoft.

Anthropic ne publie ni liste ni reverse DNS : ses IP sortent de chez AWS, la vérification formelle s'arrête là. Détail vécu : le fichier historique des ranges Googlebot renvoie littéralement {"Temporarily": "Broken"} et pointe vers un nouveau fichier consolidé.

Trois angles morts, à connaître avant de me citer. Un tiers du trafic (31,8 %, 34 368 requêtes) arrive avec l'IP interne du réseau Docker. Mon conteneur n'a pas d'IPv6, docker-proxy fait du NAT : l'adresse source est perdue. Impossible de vérifier quoi que ce soit sur ce tiers-là.

Ensuite, CrowdSec droppe en amont : 40 780 IP de blocklist communautaire bloquées au firewall, mes logs ne voient que les survivants. Enfin, 13,5 jours d'un blog perso, ce n'est pas une étude : c'est une mesure, la mienne, à cette échelle-là.

Le crawl d'entraînement : Amazonbot d'abord, GPTBot nulle part

Les crawlers d'entraînement, ceux qui aspirent le web pour nourrir des modèles, pèsent 1 493 requêtes sur la fenêtre. 1,4 % du trafic, 13,4 Mo de bande passante. Le détail surprend davantage que le total.

Amazonbot écrase tout : 1 031 requêtes, 385 adresses IP différentes, présent chaque jour de la fenêtre, reverse DNS conforme. Le crawler dont personne ne parle est celui qui travaille le plus.

ClaudeBot vient loin derrière (333 requêtes) et se comporte en invité modèle : 99 lectures de robots.txt, mes Disallow respectés à la lettre.

GPTBot, maintenant. Onze requêtes en 13,5 jours, et aucune ne vient d'OpenAI : zéro IP sur onze dans leurs ranges publiés. Les onze sondaient /.env, /.aws/credentials, /config/secrets.yml. Le GPTBot d'OpenAI, lui, n'est jamais venu. Même verdict pour CCBot, cohere, DeepSeekBot, et pour un prétendu « Google-Extended » qui n'existe même pas comme crawler : c'est un jeton de consentement que Googlebot lit dans robots.txt.

D'où sortent ces faux bots ? Le 24 juin, deux IP d'un hébergeur américain ont enfilé treize costumes en 67 requêtes : GPTBot, ClaudeBot, CCBot, PerplexityBot, Googlebot, bingbot, jusqu'à xAI-SearchBot et Google-CloudVertexBot. Toujours les mêmes cibles : fichiers d'environnement, configs, dépôts git.

Le faux ClaudeBot se trahit par une parenthèse mal placée dans son User-Agent. Un scanner de vulnérabilités s'habille en bot IA parce que ça passe mieux dans les logs. Chez moi, même Googlebot est usurpé sur 13 de ses 34 IP.

La lecture à la demande : eux, et moi

L'autre famille, ce sont les fetchers à la demande : un humain pose une question à un assistant, l'assistant vient lire une page précise. 376 requêtes, 0,3 % du trafic. C'est la partie vivante.

ChatGPT-User est venu 51 fois (36 IP sur 39 vérifiées chez OpenAI) : des gens demandent à ChatGPT ce que raconte ce blog, un peu moins de 4 fois par jour. OAI-SearchBot indexe pour ChatGPT Search (123 requêtes, dont 82 lectures de robots.txt). PerplexityBot suit le même régime (128 requêtes, IP conformes). Et un matin, NotebookLM a chargé 34 URL en quelques minutes : quelqu'un a versé un billet dans son carnet de notes.

Puis il y a Claude-User, 25 requêtes. Une partie vient des serveurs d'Anthropic. Le reste vient d'IP résidentielles françaises, avec un User-Agent qui dit tout : claude-code/2.1.187. Des sessions de Claude Code qui viennent lire mes billets pendant que leur propriétaire développe. J'ai vérifié la principale IP : c'est la mienne. Le plus gros lecteur IA de ce blog, c'est moi, via mes propres sessions d'agent. Et je ne vais pas arrêter : ces sessions tournent encore pendant que j'écris ces lignes.

Le retour sur investissement : zéro referral

La contrepartie promise de tout ce crawl, c'est le trafic renvoyé. Le billet du 1er juillet posait la question en thèse ; les logs répondent en chiffres : zéro referral IA en 13,5 jours. Pas une visite avec chatgpt.com, perplexity.ai, claude.ai ou gemini.google.com en référent. Les assistants lisent, résument, et gardent le lecteur chez eux.

La thèse posée la veille

SEO

AI Overviews arrive en France : faut-il vraiment optimiser ?

Lire le billet 8 min de lecture

Pour situer ce que pèse ce crawl qui ne renvoie rien : toute l'IA réunie, entraînement et fetchers confondus, m'a coûté 18,3 Mo. Une seule reprise d'un billet sur Mastodon a déclenché 2 649 requêtes depuis 637 adresses IP (chaque instance du Fediverse vient chercher son propre aperçu), pour 121,7 Mo. Six fois et demie toute l'IA. Mes lecteurs RSS pèsent 85,9 Mo. Le jour où je m'inquiéterai du CO₂ de mon trafic, je ne commencerai pas par les bots IA.

Le billet que le Fediverse a fetché 2 649 fois

ÉcoConception

Un budget de poids de page : la sobriété qui ne tient plus à la chance

Lire le billet 6 min de lecture

Alors, ce règlement affiché ?

Verdict en trois temps.

Le règlement fonctionne sur ceux qui le lisent. ClaudeBot, OAI-SearchBot et PerplexityBot consultent robots.txt en continu et respectent les interdits. Chez les acteurs établis, le contrat déclaratif tient.

Le videur fonctionne sur ceux qu'il refoule. Bytespider (ByteDance) s'est présenté 70 fois, 403 à chaque fois, zéro contenu servi. PetalBot, meta-externalagent, facebookexternalhit : même sort. Le matcher Caddy fait exactement son travail.

Mais j'ai construit un videur trop zélé : il refoule Bytespider y compris quand celui-ci demande à lire le règlement. 59 de ses 70 requêtes visaient robots.txt, toutes en 403. J'interdis l'entrée et la lecture des règles d'entrée en même temps. Un bot qui voudrait se conformer ne peut pas savoir à quoi se conformer. Ça ne changera probablement rien pour ByteDance, qui insiste depuis 56 IP malgré 100 % d'échec. Mais l'incohérence de conception est réelle, et elle est de moi.

Dernier point, le plus inconfortable : AI Overviews, le sujet du billet précédent, est invisible dans cette mesure. Google le sert depuis son crawl standard. Le bloquer reviendrait à sortir de Google Search. La seule décision que tout le monde commente est précisément celle que les logs ne peuvent pas éclairer.

La décision (prise, datée, réversible)

Quatre points, tous réversibles.

Un : la politique hybride reste. Les chiffres la valident après coup, les assistants autorisés se tiennent bien, les aspirateurs bloqués sont neutralisés. Je la garde, mais je sais enfin pourquoi je la garde.

Deux : je corrige le videur. robots.txt sort du matcher 403, le règlement s'affichera à l'extérieur de la porte, lisible même par les refoulés. Une ligne de Caddyfile.

Trois : pas de llms.txt. Position inchangée depuis le billet du 1er juillet : Google dit ne pas s'en servir, et zéro referral mesuré ne justifie pas d'entretenir un canal de plus.

Quatre : le fix le plus urgent n'a rien d'IA. Récupérer les IP sources du trafic IPv6, ce tiers de logs aveugle. Le chantier est lancé depuis le 2 juillet. J'ai ouvert mes logs pour trancher une question de bots ; la première décision concrète corrige ma propre infrastructure. Mesurer d'abord a déjà payé, juste pas où j'attendais.

Le mot de la fin

Ce que ces 13,5 jours racontent dépasse mon blog. Tout l'édifice repose sur du déclaratif : un champ User-Agent que n'importe quel scanner peut usurper, un fichier robots.txt que rien n'oblige à lire, des listes d'IP que les gros publient et que les autres gardent pour eux. Le contrat implicite du web n'a pas de contrôle technique, seulement des signatures plus ou moins vérifiables et la bonne volonté des signataires. Chez moi, les acteurs établis le respectent à la lettre. Les tricheurs sont ailleurs, déguisés en eux.

La suite est déjà en chantier : quand mes logs verront enfin l'IPv6, je rejouerai les mêmes scripts sur une fenêtre propre, et on comparera. D'ici là, une suggestion : avant d'écrire ou de durcir votre robots.txt, ouvrez vos logs. Vous y trouverez peut-être, comme moi, que le visiteur IA le plus assidu de votre site vous ressemble beaucoup.

Pour continuer sur la sobriété

ÉcoConception · À la une

La sobriété, c'est un métier du « ne pas »

Lire le billet 16 min de lecture

Une coquille, une erreur dans ce billet ? Signale-la-moi.

Activez uniquement ce que vous souhaitez. Vos choix sont conservés 6 mois.

Strictement nécessaires

Indispensables au fonctionnement du site (session, sécurité, préférence d'affichage). Aucune donnée n'est partagée à des tiers et aucun consentement n'est requis.

Toujours actif

Mesure d'audience

Statistiques via Google Analytics (GA4) : pages vues, source du trafic, navigateur et interactions clés. Dépose des cookies de mesure, activés seulement avec votre accord (Consent Mode). Sans publicité ciblée, sans Google Signals, sans partage commercial.

Contenus externes

Affiche les GIF animés hébergés par Giphy (CDN aux États-Unis). À l'affichage d'un GIF, votre adresse IP et votre navigateur sont transmis à Giphy. Sans votre accord, les GIF ne s'affichent pas.