Robots d'IA : visites de GPTBot et ClaudeBot mesurées et blocage avec robots.txt et nginx

Un robot d'IA est un bot qu'utilisent les entreprises d'IA pour collecter des pages web afin d'entraîner leurs modèles, d'alimenter la recherche IA et de répondre aux questions des utilisateurs. Pour voir à quelle fréquence ces bots visitent un serveur en configuration Nginx + Apache, j'ai comparé les UA de 14 jours de journaux d'accès du serveur d'origine aux plages d'IP publiées par chaque entreprise : les requêtes venant des plages officielles s'élevaient à 18 605, et j'ai résumé, d'après la documentation officielle, les réglages pour les bloquer ou les autoriser dans robots.txt et nginx.
La période va du 4 au 17 octobre 2026 ; les requêtes servies par le cache frontal sans atteindre le serveur d'origine et celles dont l'IP réelle n'a pas été enregistrée ne sont pas comptées.
1️⃣ Repérer les robots d'IA : UA du journal d'accès et plages d'IP publiées
Toutes les requêtes enregistrées comme GPTBot ne viennent pas d'OpenAI. L'UA est un texte que l'expéditeur écrit lui-même, donc n'importe qui peut envoyer des requêtes sous le nom de GPTBot ou de ClaudeBot.
Je compte donc d'abord les requêtes par nom de bot selon l'UA, puis je les compare aux plages d'IP publiées par chaque entreprise. Voici le décompte des noms de bots d'IA sur une journée de journaux.
grep -oiE '(GPTBot|OAI-SearchBot|ChatGPT-User|ClaudeBot|Claude-User|Claude-SearchBot|PerplexityBot|Perplexity-User|Bytespider|CCBot|Amazonbot|meta-externalagent)/' access.log-20261018 | sort | uniq -c | sort -rn 2968 GPTBot/
2084 ClaudeBot/
622 meta-externalagent/
535 Amazonbot/
167 PerplexityBot/
99 OAI-SearchBot/
30 ChatGPT-User/
21 Claude-User/
17 Claude-SearchBot/
12 Meta-ExternalAgent/
10 Perplexity-User/
7 CCBot/En comptant avec [/] après le nom, on écarte le texte qui n'est pas un nom, comme l'adresse de contact claudebot@ dans l'UA de Claude-SearchBot, et les noms enregistrés avec une casse différente sont comptés à part. Ensuite, je vérifie dans la première colonne de quelles IP venaient les requêtes de GPTBot.
grep 'GPTBot/' access.log-20261018 | awk '{print $1}' | sort | uniq -c | sort -rn | head -5 2524 74.7.x.x
428 185.152.x.x
12 34.53.x.x
1 74.7.x.x
1 172.182.x.xPour les requêtes passées par un CDN ou un proxy, la première colonne enregistre l'adresse du serveur intermédiaire : comparez ces lignes avec l'adresse de la colonne X-Forwarded-For en fin de ligne. OpenAI publie les plages d'IP de GPTBot dans un fichier JSON.
curl -s https://openai.com/gptbot.json -o gptbot.jsonPour vérifier si une IP figure dans le fichier de plages téléchargé, on utilise ipaddress, un module standard de Python.
# inrange.py — vérifie si une IP figure dans un fichier JSON de plages
import json, sys, ipaddress
nets = [ipaddress.ip_network(p.get('ipv4Prefix') or p.get('ipv6Prefix')) for p in json.load(open(sys.argv[1]))['prefixes']]
for a in sys.argv[2:]:
ip = ipaddress.ip_address(a)
print(a, 'IN' if any(ip in n for n in nets) else 'OUT')Placez les IP à vérifier après le nom du fichier de plages.
python3 inrange.py gptbot.json 74.7.x.x 34.53.x.x74.7.x.x IN
34.53.x.x OUTL'IP qui a envoyé 2 524 requêtes était dans les plages publiées, celle qui en a envoyé 12 était en dehors. Anthropic, Perplexity, Apple, Common Crawl, Google et Bing publient des fichiers de plages au même format, et pour Amazonbot j'ai vérifié si le DNS inverse se termine par crawl.amazonbot.amazon. C'est comme le contrôle aux frontières à l'aéroport, qui vérifie le passeport et non le nom sur la carte d'embarquement.
En comparant ainsi les 14 jours, 70 IP utilisaient tour à tour 23 noms de bots, dont GPTBot, ClaudeBot et Googlebot, et ont envoyé 48 041 requêtes, dont 57 % vers des URL cherchant des failles comme .php ou .env. Les 809 requêtes portant le nom Google-Extended venaient toutes aussi de ce groupe ; selon la documentation de Google, Google-Extended est un jeton réservé à robots.txt, sans UA dans les requêtes HTTP.
2️⃣ Visites par UA : 14 jours de mesures et évolution hebdomadaire
Le tableau ci-dessous donne les requêtes des 14 jours du 4 au 17 octobre. Pour les bots dotés de plages publiées, je n'ai compté que les requêtes venant de ces plages ; pour ceux que je n'ai pas comparés, j'ai compté par UA, sans le groupe d'usurpation.
| Bot | Société | Requêtes (14 jours) | Méthode de vérification | Groupe d'usurpation |
|---|---|---|---|---|
| ClaudeBot | Anthropic | 10,305 | Plages d'IP publiées | 2,387 |
| PerplexityBot | Perplexity | 3,406 | Plages d'IP publiées | 2,262 |
| GPTBot | OpenAI | 2,546 | Plages d'IP publiées | 2,328 |
| OAI-SearchBot | OpenAI | 1,399 | Plages d'IP publiées | 2,347 |
| ChatGPT-User | OpenAI | 334 | Plages d'IP publiées | 2,409 |
| Applebot | Apple | 330 | Plages d'IP publiées | 2,372 |
| CCBot | Common Crawl | 275 | Plages d'IP publiées | 2,275 |
| Claude-User | Anthropic | 10 | Plages d'IP publiées | 2,192 |
| Claude-SearchBot | Anthropic | 0 | Plages d'IP publiées | 2,297 |
| Perplexity-User | Perplexity | 0 | Plages d'IP publiées | 2,235 |
| Meta-ExternalAgent | Meta | 14,384 | UA | 2,339 |
| Bytespider | ByteDance | 6,569 | UA | 2,336 |
| Amazonbot | Amazon | 3,493 | UA · DNS inverse | 2,379 |
| Googlebot (comparaison) | 10,545 | Plages d'IP publiées | 3,951 | |
| bingbot (comparaison) | Microsoft | 13,477 | Plages d'IP publiées | 1,551 |
Parmi les robots d'IA vérifiés via les plages publiées, ClaudeBot arrive en tête avec 10 305 requêtes, devant PerplexityBot (3 406) et GPTBot (2 546). Claude-SearchBot et Perplexity-User n'ont eu aucune requête depuis les plages publiées : toutes les requêtes à leur nom venaient du groupe d'usurpation.
Même après avoir écarté l'usurpation, restent les bots non comparés aux plages. Meta-ExternalAgent est le plus actif selon l'UA avec 14 384 requêtes, mais la documentation des robots de Meta que j'ai consultée ne contient pas de liste de plages d'IP : je l'ai donc compté uniquement par UA.
Semaine après semaine, GPTBot a oscillé entre 12 et 3 383 requêtes, tandis que ClaudeBot est resté entre 6 930 et 10 217 sur les cinq semaines.
3️⃣ Quelles URL ils récupèrent : types d'URL et codes de réponse
Les robots d'IA ne récupèrent pas que le texte des articles. Sur les 14 jours, 21 % des requêtes de Meta-ExternalAgent visaient des images, et depuis les plages publiées, GPTBot a demandé le flux RSS 476 fois et ClaudeBot le sitemap 314 fois.
Ils collectent aussi les URL des autres versions linguistiques : depuis les plages publiées, 1 111 requêtes de ClaudeBot et 436 de GPTBot concernaient des articles dans d'autres langues. Les codes de réponse se comptent directement sur une journée de journaux.
grep 'ClaudeBot/' access.log-20261018 | awk '{print $9}' | sort | uniq -c | sort -rn | head -4 1357 200
665 301
31 304
21 404Même sur une journée, près d'un tiers sont des 301, et sur les 14 jours, 5 915 (57 %) des 10 305 requêtes de ClaudeBot venant des plages publiées étaient des 301. Parmi elles, 4 736 étaient des requêtes sans [/] final : WordPress a répondu par un 301 vers l'URL avec [/], et le même article a été demandé une seconde fois.
4️⃣ Réglages de robots.txt : jetons d'entraînement et de recherche
robots.txt convient aux bots d'entraînement et de recherche qui collectent automatiquement, mais pas aux bots qui récupèrent une page quand un utilisateur pose une question. Les documentations d'OpenAI et de Perplexity indiquent que les règles de robots.txt peuvent ne pas s'appliquer aux requêtes de ChatGPT-User et de Perplexity-User.
Chaque entreprise répartit ses jetons par usage et, selon la documentation d'OpenAI, bloquer un jeton n'affecte pas les réglages des autres. Voici les jetons relevés dans la documentation officielle de chaque entreprise.
| Jeton robots.txt | Société | Usage | Si bloqué (doc. officielle) |
|---|---|---|---|
| GPTBot | OpenAI | Collecte pour l'entraînement | Signal de ne pas utiliser pour l'entraînement |
| OAI-SearchBot | OpenAI | Recherche ChatGPT | Exclu des réponses de recherche ChatGPT (peut encore apparaître en lien de navigation) |
| ChatGPT-User | OpenAI | Requête d'utilisateur | Les règles de robots.txt peuvent ne pas s'appliquer |
| ClaudeBot | Anthropic | Collecte pour l'entraînement | Les contenus ultérieurs sont exclus des données d'entraînement |
| Claude-SearchBot | Anthropic | Améliorer la qualité de la recherche | La visibilité dans les résultats peut baisser |
| Claude-User | Anthropic | Requête d'utilisateur | Ne récupère pas de pages pour les questions des utilisateurs |
| PerplexityBot | Perplexity | Recherche (pas d'entraînement) | Exclu des résultats de recherche |
| Perplexity-User | Perplexity | Requête d'utilisateur | Ne suit généralement pas robots.txt |
| Google-Extended | Entraînement et ancrage de Gemini | Aucun effet sur la visibilité ni le classement dans Google | |
| Applebot-Extended | Apple | Entraînement des modèles de fondation | Aucun effet sur la visibilité dans la recherche d'Apple |
| meta-externalagent | Meta | Entraînement de modèles d'IA, etc. | Blocage par Disallow (exemple de la doc) |
Google-Extended et Applebot-Extended ne sont pas des robots de collecte à part, mais des jetons utilisés uniquement dans robots.txt. La collecte est faite par les robots habituels de Google et d'Apple, et ces jetons décident seulement si le contenu collecté peut servir à entraîner des modèles d'IA.
Un robots.txt qui refuse seulement la collecte pour l'entraînement tout en gardant la visibilité dans la recherche IA ressemble à ceci ; les documentations d'OpenAI, de Perplexity et de Meta indiquent qu'un changement peut mettre jusqu'à 24 heures à s'appliquer.
# refuser la collecte pour l'entraînement
User-agent: GPTBot
Disallow: /
User-agent: ClaudeBot
Disallow: /
User-agent: Google-Extended
Disallow: /
User-agent: Applebot-Extended
Disallow: /
User-agent: meta-externalagent
Disallow: /
# autoriser les bots de recherche IA
User-agent: OAI-SearchBot
Allow: /
User-agent: Claude-SearchBot
Allow: /
User-agent: PerplexityBot
Allow: /Le robots.txt actuel du serveur Nginx + Apache ne contient aucune ligne visant des bots d'IA.
curl -s https://example.com/robots.txt# s'applique à tous les robots des moteurs de recherche
User-agent: *
# bloquer les pages d'administration (sécurité)
Disallow: /wp-admin/
# autoriser les appels ajax de l'administration (indispensables au fonctionnement)
Allow: /wp-admin/admin-ajax.php
# ajout : bloquer les résultats de recherche spam (protection SEO)
Disallow: /search/
Disallow: /?s=
# indiquer le chemin du sitemap (indexation plus rapide)
Sitemap: https://example.com/sitemap_index.xmlSans ligne visant les bots d'IA, les 2 546 requêtes de GPTBot venant des plages publiées sur 14 jours n'ont reçu aucun 403 : 2 090 ont été servies en 200 et 432 en 301. Sur la même période, les requêtes robots.txt restées dans les journaux d'origine depuis les plages publiées étaient de 36 pour Googlebot, 8 pour ClaudeBot et 6 pour OAI-SearchBot, et aucune pour GPTBot ni PerplexityBot. Quand le cache frontal répond, les requêtes robots.txt n'apparaissent pas non plus dans les journaux d'origine.
5️⃣ Bloquer les robots d'IA dans nginx et ses limites
Même bloquées dans robots.txt, les requêtes qui ne lisent pas les règles arrivent quand même jusqu'au serveur. Dans nginx, [map] met une variable à 1 quand l'UA contient le nom d'un bot.
# dans le bloc http — 1 si le nom d'un bot d'entraînement figure dans l'UA
map $http_user_agent $ai_train_bot {
default 0;
~*GPTBot/ 1;
~*ClaudeBot/ 1;
~*Bytespider 1;
~*CCBot/ 1;
}Dans le bloc server, renvoyez 403 quand cette variable vaut 1.
# dans le bloc server
location / {
if ($fake_searchbot) {
return 403;
}
if ($ai_train_bot) {
return 403;
}
# réglages existants ci-dessous
}Le blocage par UA ne vérifie que le nom : les requêtes usurpées sont bloquées avec le vrai bot si elles portent le même nom, et passent dès qu'elles en changent. Les requêtes qui empruntent le nom d'un bot de recherche autorisé ne se filtrent qu'en les comparant aux plages d'IP publiées.
Pour autoriser OAI-SearchBot tout en rejetant seulement les requêtes du même nom venues d'en dehors de ses plages, transformez les plages publiées en variable avec [geo] et comparez-les avec l'UA.
# dans le bloc http — plages publiées d'OAI-SearchBot (mettre tout searchbot.json ; seulement deux lignes ici)
geo $oai_search_net {
default 0;
104.210.140.128/28 1;
135.234.64.0/24 1;
}
map $http_user_agent:$oai_search_net $fake_searchbot {
default 0;
~*OAI-SearchBot/.*:0$ 1;
}S'il y a un CDN ou un proxy devant, l'adresse que voit [geo] est celle du serveur intermédiaire : restaurez l'IP réelle avec real_ip avant de comparer. La documentation d'Anthropic indique que bloquer par adresse IP empêche aussi la lecture de robots.txt, si bien que le signal de refus risque de ne pas passer correctement.
Je n'ai pas mis cette configuration sur le serveur en production : j'ai seulement vérifié sa syntaxe avec un fichier de configuration de test.
nginx -t -p ./ -c nginx-test/nginx.confnginx: the configuration file ./nginx-test/nginx.conf syntax is ok
nginx: configuration file ./nginx-test/nginx.conf test is successfulComme seule la syntaxe de l'exemple a été vérifiée, je n'ai pas contrôlé les réponses 403 ; d'après les 14 jours de journaux, 2 347 des 3 937 requêtes portant le nom OAI-SearchBot venaient du groupe d'usurpation hors des plages publiées.
6️⃣ Se faire payer par les robots d'IA : Pay per crawl et Web Bot Auth
Pay per crawl est une fonctionnalité de Cloudflare AI Crawl Control qui permet au propriétaire d'un site de fixer un prix par zone et de facturer chaque requête de robot d'IA. D'après la documentation officielle consultée le 18 octobre 2026, elle est en bêta privée, et Cloudflare traite le paiement en tant que Merchant of Record.
Les robots qui envoient leur intention de payer dans un en-tête de requête reçoivent une réponse 200, les autres une réponse [402 Payment Required] indiquant le prix. Si le même robot est bloqué par le WAF ou par Bot Management, la règle de blocage l'emporte sur la facturation.
Les robots qui veulent payer doivent prouver leur identité avec Web Bot Auth. Le bot signe ses requêtes avec une clé Ed25519 et publie sa clé publique à l'adresse [/.well-known/http-message-signatures-directory] pour que le destinataire vérifie la signature.
La signature passe par trois en-têtes, [Signature-Agent], [Signature-Input] et [Signature], et identifie le bot par une signature cryptographique plutôt que par des plages d'IP. Le format de journal d'accès par défaut du serveur d'origine n'enregistre pas les en-têtes de requête : je n'ai donc pas vérifié si les requêtes des robots d'IA de ces 14 jours étaient signées.
Les 18 605 requêtes de robots d'IA vérifiées via les plages d'IP publiées sur 14 jours représentaient 77 % des 24 022 requêtes de Googlebot et bingbot venant de leurs plages publiées sur la même période. Ajouter ou non des jetons d'entraînement à robots.txt se décide sur les chiffres sans usurpation, et ajouter la comparaison des plages au décompte hebdomadaire des journaux permet d'en suivre l'évolution.
🔢 FAQ & contenus recommandés




ℹ️ Mention d'affiliation
Le contenu de ce site contient des liens d'affiliation. Lorsqu'un visiteur achète un produit ou un service via l'un de ces liens, le site perçoit une commission du vendeur. Le montant payé par l'acheteur(il baisse lors des promotions ↓), lui, n'augmente pas. Les prix, remises et stocks indiqués correspondent à la date de rédaction et peuvent différer ; vérifiez-les donc auprès du vendeur avant d'acheter. Les produits sont choisis et évalués selon nos propres critères, et les commissions n'influencent ni l'ordre de présentation ni le contenu des évaluations.