Comment écrire un robots.txt : directives, correspondance, et ce qu'il ne peut pas cacher
Publié le 21/05/2026 · 10 min de lecture · Outils pour développeurs
Daniel Okonkwo — Développeur front-end et rédacteur Tech chez OneKitly
Performance web · Formats de fichiers
Vérifié à partir de 2 sources
Un robots.txt est un fichier texte UTF-8 simple qui doit se trouver à la racine d'un hôte, à /robots.txt en minuscules, et il ne s'applique qu'à cet hôte, ce protocole et ce port exacts — https et http, et chaque sous-domaine, ont chacun besoin du leur. Il contient des groupes. Un groupe commence par une ou plusieurs lignes User-agent nommant les robots visés, * désignant tous, et se poursuit par des lignes Disallow et Allow dont les valeurs sont des préfixes de chemin d'URL. Une ligne Sitemap donne l'URL absolue d'un plan de site et ne dépend d'aucun groupe. Google n'honore que user-agent, disallow, allow et sitemap, et ignore tout autre champ. Deux caractères spéciaux sont acceptés dans les chemins : * correspond à zéro caractère ou plus, et $ ancre la fin de l'URL. Quand plusieurs règles correspondent, la plus spécifique l'emporte, mesurée par la longueur du chemin de la règle en octets ; à spécificité égale, c'est la moins restrictive qui l'emporte, donc un Allow bat un Disallow de même longueur. Le point crucial est ce que le fichier n'est pas. C'est une instruction d'exploration, pas un contrôle d'accès et pas un mécanisme de désindexation. Une URL interdite peut toujours apparaître dans les résultats si d'autres sites y renvoient, car le lien et son texte d'ancrage suffisent à indexer l'adresse sans charger la page. Une ligne noindex dans robots.txt n'est pas prise en charge et ne fait rien. Et le fichier est public par définition : chaque chemin que tu interdises est un chemin que tu as annoncé.
Quatre directives, deux jokers, un fichier à la racine de l'hôte. C'est une instruction d'exploration et rien de plus — il ne retire pas une page des résultats, ne restreint pas l'accès, et publie chaque chemin que tu y inscrives.
Une instruction d'exploration, pas une serrure ni une gomme
Google le dit sans détour : robots.txt n'est pas un mécanisme pour tenir une page hors de Google, et une page interdite dans robots.txt peut toujours être indexée si d'autres sites y renvoient. Le mécanisme est simple une fois énoncé. Disallow demande à un robot bien élevé de ne pas charger l'URL. Il ne dit rien sur la présence de l'adresse dans un index, et un lien venu d'un autre site fournit assez — l'URL elle-même, plus le texte d'ancrage qui la vise — pour référencer la page sans jamais la télécharger. Le résultat est le résultat de recherche bien connu, avec une URL nue, sans titre issu de la page ni description, exactement là où le propriétaire du site croyait l'avoir retirée.
Les bons outils dépendent de ce que tu veux vraiment. Pour tenir une page hors des résultats, sers un noindex — soit une balise meta robots dans l'en-tête du document, soit un en-tête de réponse X-Robots-Tag, qui fonctionne aussi pour les fichiers sans en-tête HTML, comme les PDF. Pour soustraire un contenu à tout le monde, mets-le derrière une authentification ; rien de déclaratif dans un fichier texte public n'a jamais restreint l'accès, et la RFC 9309 le dit franchement en qualifiant le protocole de non-substitut à de véritables mesures de sécurité. Et il y a un piège d'ordonnancement pour qui combine les deux : si tu interdises une URL, le robot ne la chargera jamais, ne verra donc jamais le noindex que tu y as ajouté, et la page peut rester indéfiniment dans l'index. Laisse-la explorable jusqu'à sa disparition, puis interdis-la si tu y tiens encore.
Comment fonctionne la correspondance : préfixes, deux jokers, et la règle la plus longue
Chaque valeur de Disallow et d'Allow est comparée comme préfixe du chemin de l'URL : Disallow: /admin bloque donc aussi bien /admin, /admin/, /administrator que /admin-tools. Ajouter une barre finale restreint au répertoire. Deux caractères spéciaux affinent cela : * représente zéro caractère ou plus, et $ ancre la fin de l'URL — ainsi Disallow: /*.pdf$ bloque toute URL se terminant par .pdf tout en laissant /report.pdf?download=1 accessible, la chaîne de requête venant après l'ancre. Un joker en fin de valeur n'ajoute rien : /* est la même règle que /. Les chemins sont sensibles à la casse, /Admin et /admin sont donc deux règles distinctes, alors que les noms de directives, eux, ne le sont pas.
Quand plusieurs règles correspondent à une URL, c'est la plus spécifique qui gagne, et la spécificité ne signifie ici rien de plus sophistiqué que la longueur du chemin de la règle en octets. Disallow: /reports/ et Allow: /reports/public/ correspondent tous deux à /reports/public/q3.html ; l'Allow est plus long, le fichier est donc explorable. Inverse les longueurs et le Disallow l'emporte. Si deux règles correspondantes ont exactement la même longueur, l'égalité profite à la moins restrictive, c'est-à-dire à l'Allow. L'ordre dans le fichier est sans effet — un Disallow écrit après un Allow ne l'annule pas, et ce seul point explique une bonne part des robots.txt qui ne se comportent pas comme leur auteur les lit. Deux autres limites à connaître : Google lit au plus 500 kibioctets et ignore tout ce qui suit, et une valeur Disallow vide signifie que rien n'est bloqué — c'est la façon idiomatique d'écrire un groupe qui autorise tout.
Où vit le fichier, et pourquoi il annonce ce que tu voulais cacher
La règle d'emplacement est absolue et ne se configure pas. La RFC 9309 exige que les règles soient accessibles dans un fichier nommé /robots.txt, tout en minuscules, à la racine du service, et Google ajoute qu'elles ne s'appliquent qu'à l'hôte, au protocole et au port où le fichier est hébergé. Lis-le attentivement, car les conséquences font trébucher en permanence. Un fichier à https://example.com/robots.txt ne gouverne rien sur http://example.com, rien sur https://shop.example.com et rien sur https://example.com:8443 — chacune de ces adresses est une origine distincte qui a besoin de son propre fichier. Un fichier placé dans un sous-répertoire n'est pas lu du tout. Et un site derrière un CDN ou un proxy inverse ne vaut que ce que vaut son routage : si la plateforme sert son propre robots.txt à la racine, le vôtre côté application ne s'exécute jamais.
Passons au franc-parler. Le fichier est servi à quiconque le demande, sans authentification, et c'est de loin la première chose que lit un scanner automatisé. Écrire Disallow: /internal/backup-2019/ ne cache pas ce répertoire — cela publie son existence, son chemin exact et le fait que tu l'aies jugé digne d'être caché, dans un document que tu invites l'internet entier à lire. Tous les outils de reconnaissance jamais écrits commencent là, précisément pour cette raison. Si un chemin ne doit pas être atteint, mets-le derrière une authentification ou sors-le de l'hôte public ; s'il doit seulement ne pas être exploré, interdis un préfixe parent large plutôt que de nommer la feuille sensible. Et traite le fichier comme du code : garde-le en gestion de versions, relis les modifications comme n'importe quel déploiement, et vérifie-le après chaque migration de plateforme, car un Disallow: / égaré parti en production est le moyen le plus rapide de retirer un site entier de la recherche, et l'un des plus lents dont on se remet.
| Ligne | Ce qu'elle fait | Statut | Le piège |
|---|---|---|---|
| User-agent: * | Ouvre un groupe et nomme les robots visés ; * vise tout robot n'ayant pas son propre groupe | Honorée | Un robot n'obéit qu'à un seul groupe — le plus spécifique qui le nomme — et ignore totalement le groupe * dès qu'il a le sien |
| Disallow: /path | Demande aux robots de ce groupe de ne pas charger les URL dont le chemin commence par ce préfixe | Honorée | Elle bloque le chargement, pas l'indexation — une URL bloquée mais liée ailleurs peut toujours figurer dans les résultats, sans extrait |
| Allow: /path/file | Découpe une exception dans un Disallow plus large du même groupe | Honorée | Elle ne l'emporte que si son chemin est plus long que le Disallow qu'elle affronte ; à longueur égale l'Allow gagne, plus court il perd |
| Sitemap: https://…/sitemap.xml | Indique un plan de site aux robots ; peut figurer n'importe où dans le fichier et n'appartient à aucun groupe | Honorée | La valeur doit être une URL absolue complète, protocole compris ; un chemin relatif est ignoré en silence |
| Crawl-delay: 10 | Demande à un robot d'attendre entre deux requêtes ; extension propriétaire, jamais partie du protocole | Ignorée par Google | Certains robots la respectent, d'autres non : elle ne peut pas servir de contrôle de charge ; limite le débit côté serveur |
| Noindex: /path | Rien. Elle a l'air de devoir retirer une page de l'index, et n'en fait rien | Non prise en charge | Utilise une balise meta robots noindex dans l'en-tête de la page, ou un en-tête de réponse X-Robots-Tag, et laisse l'URL explorable pour que la règle soit lue |
Questions fréquentes
- Puis-je utiliser robots.txt pour tenir une page privée hors de Google ?
- Non, sur les deux plans. Google dit franchement que robots.txt n'est pas un mécanisme pour tenir une page hors de Google, et une URL interdite mais liée depuis n'importe quel autre site peut encore être référencée avec le seul lien et son texte d'ancrage. La page n'est pas non plus privée en un sens réel : robots.txt n'est qu'une demande, respectée par les moteurs de recherche et ignorée par tout ce qui a intérêt à l'ignorer, et le fichier lui-même diffuse le chemin. Pour la visibilité dans la recherche, utilise un noindex, servi via une balise meta robots ou un en-tête X-Robots-Tag. Pour une vraie confidentialité, utilise une authentification. Ce sont deux problèmes distincts et robots.txt ne résout ni l'un ni l'autre.
- Les sous-domaines et http contre https partagent-ils un seul robots.txt ?
- Non. Les règles ne s'appliquent qu'à l'hôte, au protocole et au port exacts qui ont servi le fichier : https://example.com, http://example.com, https://www.example.com et https://api.example.com sont donc quatre portées distinctes nécessitant quatre fichiers distincts — même si elles pointent vers le même serveur et la même racine documentaire. C'est la deuxième erreur de configuration la plus fréquente, après le placement du fichier dans un sous-répertoire, où il n'est jamais lu. Conséquence pratique : si tu rediriges http vers https, le robot suit la redirection pour charger le fichier, la copie https gouverne donc les deux de fait ; si tu ne rediriges pas, l'origine http n'a aucune règle et est explorée librement.
- J'ai interdit une page mais elle est toujours dans les résultats. Et maintenant ?
- C'est le comportement attendu, et la correction consiste à inverser l'ordre des opérations. Retire le Disallow pour rendre la page à nouveau explorable, ajoute un noindex — balise meta robots ou en-tête X-Robots-Tag — et attends que la page soit réexplorée puis retirée. Si l'approche initiale a échoué, c'est par circularité : tant que l'URL est interdite, le robot ne la charge jamais, ne voit donc jamais le noindex que tu y as posé, et le résultat bâti sur les liens entrants persiste indéfiniment. Une fois la page sortie de l'index, tu peux rétablir le Disallow pour économiser du budget d'exploration, même si à ce stade cela ne rapporte généralement pas grand-chose.
Articles qui pourraient t'intéresser
Tous les guides →Outils similaires
Sources
Tu as repéré une erreur dans cet article ?