Robots.txt : guide complet de configuration pour le SEO

Comment robots.txt influe sur le crawl, où il ne peut pas contrôler l’indexation, et comment tester les directives sans bloquer les pages que vous voulez faire découvrir.

Robots.txt est un fichier texte brut placé à la racine de votre site. Il indique aux robots des moteurs de recherche les sections qu’ils peuvent visiter et celles qu’ils doivent ignorer. C’est le premier fichier qu’un crawler lit à son arrivée sur un site. Il existe depuis 1994 et reste le standard de fait pour piloter le crawl.

Robots.txt est une recommandation, pas un mécanisme de contrainte. Les robots légitimes (Googlebot, Yandex) respectent les directives. Les robots malveillants et les scrapers ignorent totalement le fichier. Pour protéger des données sensibles, utilisez des contrôles d’accès côté serveur et une authentification, et non robots.txt.

La limite essentielle : une page bloquée par Disallow ne sort pas automatiquement de l’index. Si d’autres sites pointent vers elle, Google peut indexer l’URL sans la visiter, et afficher un snippet vide dans les résultats de recherche. Pour retirer complètement une page de l’index, il faut d’autres outils.

Arbre de décision de Googlebot : robots.txt contrôle le crawl, la balise meta noindex contrôle l’indexation. Combinés, ils donnent quatre résultats distincts.

Qu’est-ce que robots.txt et ses limites

Le fichier robots.txt doit être placé à la racine du domaine : https://example.com/robots.txt. Les sous-domaines ont leurs propres fichiers : robots.txt pour blog.example.com se trouve à l’adresse https://blog.example.com/robots.txt. Le Robots Exclusion Standard (REP) définit les directives de base ; Google et Yandex l’ont enrichi de fonctionnalités supplémentaires.

Contrôle du crawl

Empêche les robots de visiter certaines sections : cela réduit les charges serveur inutiles et préserve le budget de crawl pour les pages à forte valeur.

Pointe vers le sitemap

La directive Sitemap aide les moteurs à trouver immédiatement votre sitemap XML, sans configuration supplémentaire.

Ne protège pas le contenu

Robots.txt est publiquement visible. Il ne chiffre ni ne masque le contenu des pages : il demande seulement aux robots de ne pas les visiter.

Format et syntaxe

Le fichier se compose de blocs appelés enregistrements (records). Chaque enregistrement commence par une ou plusieurs directives User-agent et peut contenir un nombre quelconque de lignes Disallow, Allow, Crawl-delay et Sitemap. Les enregistrements sont séparés par une ligne vide. Les commentaires commencent par #.

DirectivePrise en chargeDescription
User-agentTousIdentifiant du robot. * désigne « tous les robots ». Un même bloc peut contenir plusieurs lignes User-agent.
DisallowTousChemin interdit au crawl. Une valeur vide signifie « rien n’est bloqué » (tout est autorisé).
AllowGoogle, YandexAutorise explicitement un chemin à l’intérieur d’une section bloquée. Il est prioritaire sur Disallow.
Crawl-delayYandex, BingDélai minimal, en secondes, entre deux requêtes du robot. Ignorée par Google.
SitemapGoogle, Yandex, BingURL absolue du sitemap XML. Plusieurs lignes Sitemap sont autorisées.

Jokers : * et $

Google et Yandex prennent en charge deux caractères génériques dans les chemins Disallow et Allow. L’astérisque * correspond à n’importe quelle suite de caractères (y compris une chaîne vide). Le signe dollar $ marque la fin de l’URL : il impose une correspondance exacte jusqu’au dernier caractère.

text
# Block all URLs with the ?sort= parameter
Disallow: /*?sort=

# Block only /page (exact match, not /page/child)
Disallow: /page$

# Block all PDFs across the entire site
Disallow: /*.pdf$
En cas de conflit entre Disallow et Allow, la règle la plus spécifique l’emporte (celle qui compte le plus de caractères). À longueur égale, c’est Allow qui gagne. Ce comportement est propre à Google ; les autres robots peuvent l’appliquer autrement.

La directive Sitemap peut se placer n’importe où dans le fichier : elle n’a pas besoin d’être rattachée à un bloc User-agent précis. Indiquez toujours une URL absolue complète :

text
Sitemap: https://example.com/sitemap.xml
Si vous utilisez un index de sitemaps, une seule ligne Sitemap pointant vers ce fichier d’index suffit : inutile de lister chaque sitemap enfant. Le moteur découvre tous les autres grâce à l’index.

Exemples prêts à l’emploi pour différents scénarios

Scénario 1 : site public simple

Pour un petit site sans section privée, un fichier minimal suffit : tout autoriser, bloquer le panneau d’administration et les chemins techniques, et déclarer le sitemap.

text
# robots.txt for example.com — simple public site
User-agent: *
Disallow: /admin/
Disallow: /login
Disallow: /dashboard/

Sitemap: https://example.com/sitemap.xml

Scénario 2 : grand e-commerce avec pages de catalogue et de paramètres

Une boutique en ligne génère des centaines de milliers d’URL via les filtres, le tri et la pagination. La plupart sont des doublons ou des pages sans valeur propre. Bloquez les URL paramétrées avec Disallow et des jokers, tout en laissant accessibles les pages de catégories et de produits propres.

text
# robots.txt for e-commerce example.com
User-agent: *

# Technical and admin sections
Disallow: /admin/
Disallow: /checkout/
Disallow: /cart
Disallow: /account/
Disallow: /api/

# Parametric catalogue duplicates
Disallow: /*?sort=
Disallow: /*?filter=
Disallow: /*?page=
Disallow: /*?ref=
Disallow: /search

# Explicitly allow a useful parameter in one section
Allow: /catalog/shoes?size=

Crawl-delay: 1

Sitemap: https://example.com/sitemap.xml
Pour les pages paramétrées au contenu unique (par exemple, un produit dans une taille ou une couleur précise), privilégiez la balise canonical plutôt que Disallow : elle préserve le budget de crawl sans couper totalement la page.

Scénario 3 : site avec pages de préproduction et pages temporaires

Les pages de landing de webinaires, les brouillons, les pages de modèles et les sections de préproduction (staging) doivent être bloqués au crawl. Utilisez Disallow avec un préfixe de chemin et, si besoin, un bloc séparé pour des robots spécifiques.

text
# robots.txt for example.com — main site with staging sections
User-agent: *
Disallow: /webinar-drafts/
Disallow: /templates/
Disallow: /staging/
Disallow: /_preview/
Disallow: /thank-you-test

# Block the entire site for a specific bot (e.g. an aggressive crawler)
User-agent: AhrefsBot
Disallow: /

User-agent: SemrushBot
Disallow: /

Sitemap: https://example.com/sitemap.xml
Bloquer une section via robots.txt ne signifie pas que son contenu est confidentiel. Les URL des pages de préproduction peuvent quand même être indexées si des sites externes pointent vers elles. Pour une isolation réelle, utilisez une authentification HTTP Basic ou une liste blanche d’IP au niveau du serveur.

Disallow, balise meta robots noindex et X-Robots-Tag

Ce sont trois outils distincts, aux rôles différents. Les confondre conduit à une erreur classique : une page est bloquée dans robots.txt et porte aussi une balise meta noindex. Google ne peut pas lire cette balise, car la page est fermée au crawl : la directive noindex n’est donc jamais exécutée.

OutilOù il se trouveCe qu’il faitQuand l’utiliser
Disallow dans robots.txtrobots.txtEmpêche le robot de visiter l’URL. Ne retire pas l’URL de l’index si elle y est déjà.Bloquer les sections techniques et réduire la consommation inutile du budget de crawl.
meta robots noindex<head> HTMLAutorise le robot à visiter la page, mais interdit de l’ajouter à l’index. Le robot lit la balise et applique la directive.Retirer une page précise de l’index (pages de remerciement, pagination, pages de filtres).
X-Robots-TagEn-tête de réponse HTTPÉquivalent de meta robots, mais fonctionne pour tous les types de fichiers : PDF, images, documents.Contrôler l’indexation des ressources non HTML (PDF, DOCX, images).
Ne combinez jamais Disallow et noindex sur une même page. Si une page est bloquée dans robots.txt, Google ne peut pas lire son noindex et peut conserver l’URL dans l’index avec un snippet vide. Utilisez noindex uniquement sur les pages que le crawler a le droit de visiter.

Exemple d’X-Robots-Tag dans un en-tête de réponse HTTP (configuré dans Nginx ou dans le code de l’application) :

text
# Nginx: prevent indexation of all PDFs
location ~* \.pdf$ {
    add_header X-Robots-Tag "noindex, nofollow";
}

Comment tester robots.txt

Validez toujours les modifications avant de les déployer. Une seule faute de frappe peut bloquer tout votre site pour les crawlers.

  • Google Search Console → outil de test robots.txt : intégré directement à GSC. Saisissez une URL pour vérifier si Googlebot et les autres robots de Google sont autorisés ou bloqués.
  • Yandex Webmaster → analyse robots.txt : l’équivalent pour Yandex. Il montre comment Yandex Bot interprète votre fichier.
  • Screaming Frog SEO Spider → Configuration → Robots.txt : analyse le site en respectant robots.txt et liste les URL bloquées dans le rapport.
  • curl : vérification rapide en ligne de commande pour lire le fichier et contrôler le statut HTTP.
Exemple de robots.txt appliquant les recommandations ci-dessus :
bash
# Fetch robots.txt and inspect its contents
curl -s https://example.com/robots.txt

# Check HTTP status (must be 200)
curl -I https://example.com/robots.txt

Erreurs courantes et comment les corriger

ErreurSymptômeCorrection
Disallow: / pour tout le siteGooglebot cesse de crawler l’ensemble du site. GSC affiche les pages comme « bloquées par robots.txt ».Supprimez la ligne ou remplacez-la par un chemin précis. Cette erreur s’introduit souvent lors des déploiements.
Espace accidentel dans le cheminDisallow: /admin / (avec un espace) : le robot lit le chemin tel quel, et rien n’est bloqué.Supprimez les espaces. Les chemins sont sensibles à la casse et aux espaces.
noindex + Disallow sur une même pageLa page reste dans l’index ; la directive noindex n’est jamais appliquée.Supprimez Disallow et ne gardez que noindex. Le robot doit pouvoir visiter la page pour lire la balise.
User-agent absent avant les règlesErreur de syntaxe : les règles ne s’appliquent à aucun robot.Ajoutez User-agent: * avant le bloc Disallow/Allow.
robots.txt renvoie 404 ou 500Un 404 est traité comme « aucune restriction » ; un 500 interrompt le crawl temporairement.Vérifiez que le fichier répond en HTTP 200 ; un fichier vide équivaut à « tout autoriser ».

Recommandations de sécurité

Robots.txt est public et indexé par les moteurs de recherche : n’importe qui peut le lire. Publier dans robots.txt des chemins vers le panneau d’administration, les sauvegardes, les API internes ou les fichiers de configuration revient à remettre aux attaquants une carte de votre site.

Ne comptez pas sur robots.txt comme seule protection des sections sensibles. Un chemin tel que Disallow: /internal-api/v2/keys/ indique à un attaquant l’endroit précis où regarder.
  • Ne publiez pas les chemins sensibles : sauvegardes (.zip, .sql), fichiers de configuration (.env, config.php), API internes.
  • Protégez les sections confidentielles au niveau du serveur : authentification HTTP Basic, liste blanche d’IP, OAuth, et non via robots.txt.
  • Limitez la liste Disallow aux seuls chemins qu’il faut réellement exclure du crawl pour des raisons SEO.
  • Contrôlez régulièrement robots.txt dans GSC : assurez-vous qu’un déploiement n’a pas introduit par erreur un Disallow: /.

Liste de contrôle et exemple final

  • Le fichier est accessible à https://example.com/robots.txt et renvoie HTTP 200
  • Encodage UTF-8, sans BOM (Byte Order Mark)
  • Chaque bloc commence par User-agent
  • Une ligne vide sépare les blocs de différents User-agent
  • Aucune combinaison Disallow + noindex sur une même page
  • Aucun chemin sensible exposé publiquement
  • Crawl-delay défini pour Yandex si la charge serveur est élevée
  • La directive Sitemap pointe vers le fichier d’index racine
  • Fichier validé dans GSC et dans Yandex Webmaster
  • Screaming Frog affiche le nombre attendu d’URL bloquées

Exemple final de robots.txt pour example.com, avec commentaires : un modèle universel qui couvre la plupart des scénarios :

text
# robots.txt for example.com
# Updated: 2026-05-15

# Rules for all crawlers
User-agent: *

# Admin and auth sections
Disallow: /admin/
Disallow: /login
Disallow: /dashboard/
Disallow: /account/

# Technical paths
Disallow: /api/
Disallow: /_next/
Disallow: /cdn-cgi/

# Parametric duplicates (e-commerce)
Disallow: /*?sort=
Disallow: /*?filter=
Disallow: /*?ref=
Disallow: /search

# Staging and temporary pages
Disallow: /staging/
Disallow: /webinar-drafts/
Disallow: /templates/

# Explicit allow for a useful API path
Allow: /api/og-image/

# Crawl rate for Yandex
User-agent: Yandex
Crawl-delay: 1

# Aggressive SEO bots (optional)
User-agent: AhrefsBot
Disallow: /

User-agent: SemrushBot
Disallow: /

# Sitemap
Sitemap: https://example.com/sitemap.xml

FAQ

Robots.txt influence-t-il le classement ?
Indirectement. Le fichier n’est pas un signal de classement en soi, mais bloquer des pages avec Disallow réduit leur crawl. Si vous bloquez des pages importantes, elles perdront en visibilité. Si vous bloquez des URL paramétrées en double, vous libérez du budget de crawl pour les pages utiles.
Que se passe-t-il si robots.txt renvoie un 404 ?
Google traite un robots.txt absent (404) comme « aucune restriction » et crawle l’ensemble du site. Une erreur 500 ou un timeout est considéré comme un blocage temporaire : Google suspend le crawl jusqu’au rétablissement du fichier.
Peut-on définir des règles différentes pour Googlebot et Yandex dans un même fichier ?
Oui. Créez deux blocs User-agent distincts : Googlebot lit uniquement le sien, Yandex lit le sien. Le bloc User-agent: * s’applique à tous les robots qui n’ont pas de bloc dédié.
Disallow: / bloque tout le site : comment corriger vite ?
Remplacez ou supprimez la ligne Disallow: / dans le bloc User-agent: *. Après le déploiement, vérifiez dans l’inspection d’URL de GSC. Le crawl normal reprend dans les jours qui suivent la correction.
Comment bloquer un seul fichier sans bloquer tout son répertoire ?
Utilisez un chemin exact, sans slash final : Disallow: /private-doc.pdf. Pour bloquer une extension de fichier sur tout le site, utilisez un joker : Disallow: /*.pdf$

Check it with SpiderHead

Free and local: run the audit on your own machine.

Try it