Autoriser ou bloquer les robots IA dans le robots.txt

La plupart des sites tranchent la question une fois, mal, et n'y reviennent jamais. Soit on bloque tout dans un mouvement de panique face à l'entraînement, en emportant au passage le trafic qui amène des clients, soit rien n'est configuré et chaque robot s'en tient à l'hypothèse qui l'arrange.

Il y a trois positions défendables. Voici le fichier de chacune, et les erreurs qui les réduisent à néant.

D'abord, la distinction qui décide de tout

Les entreprises d'IA font tourner deux types d'agents, et ils ne sont pas interchangeables.

Les robots d'exploration ramassent des pages en masse, à leur propre rythme, en général pour l'entraînement ou l'indexation : GPTBot, ClaudeBot, PerplexityBot, CCBot, Bytespider, Google-Extended, Applebot-Extended.

Les récupérateurs à la demande vont chercher une page parce que quelqu'un vient de poser une question dessus : ChatGPT-User, Claude-User, Perplexity-User. Personne n'entraîne quoi que ce soit avec cette requête. Quelqu'un attend une réponse à votre sujet.

Bloquer les premiers est une décision commerciale sur votre contenu. Bloquer les seconds revient à peu près à bloquer un visiteur qui a tapé votre adresse. La plupart des conseils « bloquez toute l'IA » que vous lirez ne font aucune différence entre les deux.

Cas 1 — Les laisser entrer

Le bon réglage par défaut pour tout ce qui veut être trouvé : documentation, éditeurs qui veulent être cités, entreprises qui veulent être recommandées.

User-agent: *
Allow: /
Disallow: /admin/
Disallow: /panier/
Disallow: /*?session=

Content-Signal: search=yes, ai-input=yes, ai-train=no

Sitemap: https://exemple.fr/sitemap.xml

Regardez ce que ça dit : entrez, indexez-moi, servez-vous de moi pour répondre, ne vous entraînez pas dessus. Cette position-là, le robots.txt seul ne sait pas l'exprimer — d'où la section Content-Signal plus bas.

Cas 2 — Les réponses oui, l'entraînement non

Celle que veulent réellement la plupart des entreprises, et celle que presque personne ne configure correctement.

User-agent: GPTBot
Disallow: /

User-agent: ClaudeBot
Disallow: /

User-agent: CCBot
Disallow: /

User-agent: Bytespider
Disallow: /

User-agent: Google-Extended
Disallow: /

User-agent: Applebot-Extended
Disallow: /

User-agent: OAI-SearchBot
Allow: /

User-agent: Claude-SearchBot
Allow: /

User-agent: PerplexityBot
Allow: /

User-agent: ChatGPT-User
Allow: /

User-agent: Claude-User
Allow: /

User-agent: Perplexity-User
Allow: /

User-agent: *
Allow: /

Content-Signal: search=yes, ai-input=yes, ai-train=no

Sitemap: https://exemple.fr/sitemap.xml

Deux choses à savoir sur ce fichier. Google-Extended gouverne l'entraînement de Gemini et pas Google Search : le bloquer n'affecte pas votre position dans les résultats. Et Applebot-Extended fonctionne pareil pour Apple Intelligence, séparément de l'Applebot qui alimente Siri et Spotlight.

Cas 3 — Bloquer l'IA entièrement

Légitime pour les archives payantes, le matériel sous licence et tout ce dont vous vendez l'accès.

User-agent: GPTBot
User-agent: OAI-SearchBot
User-agent: ChatGPT-User
User-agent: ClaudeBot
User-agent: Claude-SearchBot
User-agent: Claude-User
User-agent: PerplexityBot
User-agent: Perplexity-User
User-agent: CCBot
User-agent: Bytespider
User-agent: Google-Extended
User-agent: Applebot-Extended
User-agent: Amazonbot
User-agent: meta-externalagent
Disallow: /

User-agent: *
Allow: /

Content-Signal: search=no, ai-input=no, ai-train=no

Sitemap: https://exemple.fr/sitemap.xml

Les lignes User-agent empilées partagent les règles qui les suivent : c'est valide et bien plus simple à maintenir que quatorze blocs séparés.

Mesurez le prix avant de choisir ça : vous disparaissez des réponses d'IA. Quand quelqu'un interroge un assistant sur votre secteur, il cite vos concurrents et pas vous.

Les erreurs

Seul le groupe le plus spécifique s'applique. Un robot qui trouve son propre nom ignore complètement User-agent: *. Donc ceci ne fait rien de ce que vous croyez :

User-agent: *
Disallow: /prive/

User-agent: GPTBot
Disallow: /

GPTBot est bloqué partout, mais tous les autres robots ne lisent que le groupe * — et si vous ajoutez plus tard un Allow sous GPTBot, /prive/ cesse d'être protégé contre lui, parce que ce groupe n'a jamais mentionné /prive/.

Les lignes vides séparent les groupes. Une ligne vide au milieu d'un groupe y met fin. Ce qui suit n'appartient à personne jusqu'au prochain User-agent.

Disallow: sans rien derrière veut dire tout autoriser. Disallow: / bloque tout. Un caractère entre une porte ouverte et une porte fermée.

Le robots.txt n'est pas un contrôle d'accès. C'est une demande que les robots bien élevés respectent. Ceux qui l'ignorent continueront de l'ignorer. Si quelque chose ne doit pas être lu, il lui faut une authentification, pas une directive.

Crawl-delay est largement ignoré par les robots d'IA. Si le problème est la charge, limitez le débit en périphérie.

Content-Signal : dire quoi, pas seulement si

Le robots.txt répond à une seule question : avez-vous le droit de récupérer ceci. Il n'a aucun moyen de dire « indexez-moi mais ne vous entraînez pas sur moi », qui est justement la position de la plupart des sites.

Content-Signal ajoute cette couche avec trois signaux indépendants :

Content-Signal: search=yes, ai-input=yes, ai-train=no
  • search — ceci peut-il figurer dans un index de recherche
  • ai-input — ceci peut-il servir de matière à une réponse, avec attribution
  • ai-train — ceci peut-il servir à entraîner un modèle

Ça se met dans le robots.txt comme ci-dessus, et ça peut aussi voyager en en-tête HTTP sur chaque réponse, ce que nous faisons. C'est une convention jeune, pas une norme que quiconque serait tenu de respecter — mais ça coûte une ligne, une machine la lit, et ça exprime une intention qu'un Disallow ne peut pas exprimer.

Vérifiez que le vôtre arrive

Écrire le fichier n'est pas la même chose que le servir :

curl -s https://exemple.fr/robots.txt
curl -sI https://exemple.fr/robots.txt | grep -i "server\|cf-cache-status"

La deuxième commande compte plus qu'il n'y paraît. Si vous êtes derrière un CDN sans robots.txt à vous, le CDN peut répondre à votre place avec un fichier que vous n'avez jamais écrit : un 200 crédible, sans aucune de vos règles et sans votre sitemap. Le nôtre a fait exactement ça pendant des mois, pendant que notre serveur d'origine renvoyait 404.

Générez votre robots.txt · Vérifiez ce que vous servez · Les robots sont-ils autorisés ?