robots.txt - bloquer l'entraînement des IA et rester visible dans ChatGPT Search, Perplexity et Claude
Un robots.txt commenté qui refuse GPTBot, ClaudeBot ou CCBot sans quitter ChatGPT Search, Perplexity et Claude, avec les pièges de la RFC 9309 à éviter.
Depuis que les principaux éditeurs séparent leurs robots d'entraînement de leurs robots de recherche, il est possible de refuser que vos pages servent à entraîner des modèles tout en restant cité dans ChatGPT Search, Perplexity ou Claude. Cela suppose un robots.txt écrit avec précision : un groupe mal construit suffit à tout bloquer, ou à ne rien bloquer. Ce guide donne un fichier commenté, explique ce que chaque choix implique et liste les erreurs courantes au regard de la RFC 9309, la norme du protocole d'exclusion des robots.
Quel robot pour quel usage
| Objectif | Jetons concernés | Source |
|---|---|---|
| Refuser l'entraînement | GPTBot, ClaudeBot, CCBot, meta-externalagent, MistralAI-Training, Bytespider, Google-Extended, Applebot-Extended |
Documentation de chaque éditeur (aucune trouvée pour Bytespider) |
| Apparaître dans ChatGPT Search | OAI-SearchBot |
OpenAI |
| Apparaître dans les réponses de Claude | Claude-SearchBot (indexation) et Claude-User (récupération à la demande) |
Anthropic |
| Apparaître dans Perplexity | PerplexityBot |
Perplexity |
OpenAI écrit que chaque réglage est indépendant : on peut autoriser OAI-SearchBot et interdire GPTBot. Perplexity décrit le même principe pour ses agents.
Le robots.txt recommandé
# robots.txt - https://www.example.com/robots.txt
# Objectif : refuser l'entraînement, rester visible dans les recherches IA.
# 1. Entraînement de modèles : refusé
User-agent: GPTBot
User-agent: ClaudeBot
User-agent: CCBot
User-agent: meta-externalagent
User-agent: MistralAI-Training
User-agent: Bytespider
User-agent: Applebot-Extended
User-agent: Google-Extended
Disallow: /
# 2. Recherche et récupération à la demande : autorisé
# Ces robots n'appliquent QUE ce groupe : on y recopie les exclusions du groupe *.
User-agent: OAI-SearchBot
User-agent: ChatGPT-User
User-agent: Claude-SearchBot
User-agent: Claude-User
User-agent: PerplexityBot
User-agent: Perplexity-User
Disallow: /admin/
Disallow: /panier/
Allow: /
# 3. Tous les autres robots (Googlebot, Bingbot, Applebot...)
User-agent: *
Disallow: /admin/
Disallow: /panier/
Sitemap: https://www.example.com/sitemap.xml
Quelques remarques sur ce fichier :
- Plusieurs lignes
User-agentconsécutives forment un seul groupe, ce que la RFC 9309 autorise explicitement. Le fichier reste lisible et chaque règle n'est écrite qu'une fois par groupe. Allow: /n'est pas indispensable (l'absence de règle vaut autorisation), mais il rend l'intention explicite pour un relecteur.Applebotn'est pas nommé : il suit donc le groupe*et continue d'alimenter Spotlight, Siri et Safari. C'estApplebot-Extendedqui exprime le refus d'entraînement.Googlebotreste dans le groupe*:Google-Extendedn'a, selon Google, aucun effet sur l'inclusion ni sur le classement dans Google Search.Bytespiderest bloqué par précaution : ByteDance ne publie pas, à notre connaissance, de documentation sur ce robot, et rien ne garantit qu'il lise ce fichier.Perplexity-UseretChatGPT-Userfigurent dans le groupe autorisé par cohérence, mais leurs éditeurs indiquent que robots.txt peut ne pas s'appliquer à ces requêtes.
Conséquences de chaque choix
| Règle | Effet attendu selon l'éditeur | Ce que vous perdez |
|---|---|---|
GPTBot interdit |
Signale que le contenu ne doit pas servir à entraîner les modèles d'OpenAI | Rien côté ChatGPT Search si OAI-SearchBot reste autorisé |
OAI-SearchBot interdit |
Le site n'est plus affiché dans les réponses de recherche de ChatGPT | La citation ; un lien de navigation peut subsister |
ClaudeBot interdit |
Les futurs contenus sont exclus des jeux d'entraînement d'Anthropic | Rien côté recherche |
Claude-SearchBot interdit |
Le contenu n'est plus indexé pour la recherche | Visibilité et exactitude dans les résultats de Claude |
Claude-User interdit |
Claude ne récupère plus vos pages à la demande | Visibilité dans les recherches dirigées par l'utilisateur |
PerplexityBot interdit |
Le site n'est plus mis en avant dans les résultats de Perplexity | La citation dans Perplexity |
Google-Extended interdit |
Exclusion de l'entraînement Gemini et de l'ancrage dans Gemini Apps et Vertex AI | L'ancrage dans les réponses Gemini, pas Google Search |
Applebot-Extended interdit |
Exclusion de l'entraînement des modèles d'Apple | Rien dans Spotlight, Siri ou Safari |
CCBot interdit |
Vos pages n'entrent plus dans les futures archives Common Crawl | Rien côté moteurs d'IA |
Trois nuances méritent attention. D'abord, un refus vaut pour la suite : Anthropic précise par exemple qu'il signale l'exclusion des contenus futurs, et aucune des pages citées ne promet de retirer ce qui a déjà été collecté. Ensuite, les changements ne sont pas instantanés : OpenAI annonce environ 24 heures pour la recherche, Perplexity et Meta jusqu'à 24 heures, et la RFC 9309 prévoit qu'un robot ne garde pas une copie en cache plus de 24 heures, sauf si le fichier est injoignable. Enfin, Anthropic demande de répéter l'opération pour chaque sous-domaine : blog.example.com a son propre robots.txt.
Si vous voulez aussi rester visible dans Gemini, n'interdisez pas Google-Extended : Google indique que ce jeton couvre à la fois l'entraînement et l'ancrage dans Gemini Apps. Il n'existe pas, dans la documentation actuelle, de jeton qui sépare les deux.
Erreurs fréquentes
Croire qu'un robot cumule son groupe et le groupe *
C'est l'erreur la plus courante. Selon la RFC 9309, un robot cherche le groupe qui porte son nom ; s'il en trouve un, il applique ce groupe seul. Le groupe * ne sert que lorsqu'aucun groupe ne correspond.
User-agent: *
Disallow: /admin/
User-agent: OAI-SearchBot
Allow: /
# OAI-SearchBot peut lire /admin/ : le groupe * ne le concerne plus.
La fusion de règles n'a lieu que si plusieurs groupes nomment le même robot : la RFC impose alors de les combiner en un seul.
Compter sur l'ordre des lignes
Pour la RFC, l'ordre des groupes n'a pas d'importance (le robot cherche son nom), et l'ordre des règles non plus : c'est la règle la plus spécifique, celle dont le chemin compte le plus d'octets, qui l'emporte. En cas d'égalité entre Allow et Disallow, Allow devrait être retenu.
User-agent: PerplexityBot
Disallow: /docs/
Allow: /docs/public/
# /docs/public/guide.html : autorisé (Allow plus long)
# /docs/interne.html : interdit
Ne comptez pas pour autant sur un ordre particulier pour corriger une ambiguïté : écrivez des règles qui ne se contredisent pas.
Confondre Disallow: vide et Disallow: /
User-agent: GPTBot
Disallow:
# Valeur vide : aucune règle ne correspond, TOUT est autorisé.
User-agent: ClaudeBot
Disallow: /
# Tout le site est interdit.
Un Disallow: vide est l'ancienne façon d'écrire « tout autorisé ». Recopié par erreur dans un bloc de refus, il annule le blocage.
Se tromper sur la casse
La correspondance du nom de robot est insensible à la casse : gptbot et GPTBot désignent le même groupe. En revanche, la comparaison des chemins devrait être sensible à la casse selon la RFC : Disallow: /Admin/ ne protège pas /admin/. Vérifiez les URL réelles de votre site avant d'écrire une règle.
Mal orthographier un jeton
Le nom doit correspondre au jeton publié, aux variations de casse près : Claude-Bot ou GPT-Bot ne désignent aucun robot connu. Les jetons anthropic-ai et Claude-Web, encore recopiés dans beaucoup de modèles, ne figurent pas dans la documentation actuelle d'Anthropic ; ce sont ClaudeBot, Claude-SearchBot et Claude-User qu'il faut utiliser.
Servir robots.txt en erreur 5xx
La RFC distingue deux cas. Un code 4xx (fichier absent) autorise le robot à tout explorer. Une erreur serveur 5xx ou une panne réseau doit être interprétée comme une interdiction complète. Un robots.txt qui renvoie 500 derrière un pare-feu ou un CDN mal configuré peut donc vous rendre invisible pour tous les robots qui suivent la norme.
Oublier ce que robots.txt ne fait pas
- Ce n'est pas un contrôle d'accès : la RFC rappelle que lister un chemin le rend public. Protégez les zones privées par une authentification.
- Les agents à la demande peuvent l'ignorer, comme l'indiquent OpenAI pour
ChatGPT-Useret Perplexity pourPerplexity-User. - Un robot qui usurpe un nom ne le respectera pas : seul un filtrage par adresse IP, vérifiée sur les plages publiées, l'arrête.
Tester le fichier
Après publication, vérifiez trois points : que le fichier répond bien en 200 (curl -I https://www.example.com/robots.txt), qu'il est servi en texte brut, et qu'il n'est pas bloqué pour les robots par une règle de pare-feu. Python fournit un analyseur de base, utile pour un contrôle rapide, mais il ne suit pas exactement la RFC 9309 : il retient la première règle correspondante plutôt que la plus spécifique. Sur l'exemple /docs/ ci-dessus, il répond « interdit » pour /docs/public/guide.html, là où la RFC autorise. Passez-lui le jeton seul (GPTBot) et non la chaîne User-Agent complète, qu'il ne sait pas rapprocher du groupe.
from urllib.robotparser import RobotFileParser
rp = RobotFileParser("https://www.example.com/robots.txt")
rp.read()
for agent in ("GPTBot", "OAI-SearchBot", "ClaudeBot", "Claude-SearchBot", "PerplexityBot"):
print(agent, rp.can_fetch(agent, "https://www.example.com/guide/"))
Pour vérifier votre site, utilisez le scanner IABIG.
Sources officielles
- RFC 9309, Robots Exclusion Protocol : https://www.rfc-editor.org/rfc/rfc9309
- OpenAI, Overview of OpenAI Crawlers : https://developers.openai.com/api/docs/bots
- Anthropic, Does Anthropic crawl data from the web : https://support.claude.com/en/articles/8896518
- Perplexity, Perplexity Crawlers : https://docs.perplexity.ai/docs/resources/perplexity-crawlers
- Google, Google's common crawlers (Google-Extended) : https://developers.google.com/crawling/docs/crawlers-fetchers/google-common-crawlers
- Apple, About Applebot : https://support.apple.com/en-us/119829
- Common Crawl, CCBot : https://commoncrawl.org/ccbot
- Meta, Meta Web Crawlers : https://developers.facebook.com/docs/sharing/webmasters/web-crawlers/
- Mistral AI, Mistral crawlers : https://docs.mistral.ai/robots
- Python, urllib.robotparser : https://docs.python.org/3/library/urllib.robotparser.html
À lire aussi
- Vérifier qu'un robot GPTBot, ClaudeBot ou PerplexityBot est authentique - plages IP et DNS inverseConfirmer qu'une requête GPTBot, ClaudeBot ou PerplexityBot vient bien de son éditeur grâce aux plages IP officielles ou au DNS, puis bloquer les imitateurs.
- Mesurer les visites des robots d'IA dans les logs nginx et Apache - grep, awk et GoAccessCompter les visites de GPTBot, ClaudeBot, PerplexityBot et autres robots d'IA dans les logs nginx ou Apache, par robot et par page, avec un script complet.
- Liste des robots d'IA en 2026 - user-agents, jetons robots.txt et rôle de chaque crawlerGPTBot, ClaudeBot, OAI-SearchBot, PerplexityBot, Google-Extended… éditeur, jeton robots.txt, rôle, respect de robots.txt et plages IP officielles.