[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fMw6S36yL0vHR-vKmlYYg6sbb60S_J6kK0THc5XMpN8w":3,"$fZVR7LBOBOTEwJx4L6z6JZWhm0fmcoaBOVYZmmb3a4lM":25},{"_id":4,"slug":5,"__v":6,"author":7,"body":8,"canonical":9,"category":10,"createdAt":11,"date":12,"description":13,"htmlContent":14,"image":15,"imageAlt":15,"readingTime":16,"tags":17,"title":23,"updatedAt":24},"69ea5ebaaa6b273b0c57cf60","google-may-expand-unsupported-robots-txt-rules-list-via-sejournal-mattgsouthern",0,"Equipe Seogard","Un fichier robots.txt de 12 lignes peut neutraliser le crawl de 40 000 pages sans déclencher la moindre alerte dans Search Console. C'est exactement ce que Google tente d'adresser en élargissant sa liste de directives robots.txt non supportées, en s'appuyant sur les données massives de HTTP Archive pour identifier les erreurs que des millions de sites commettent silencieusement.\n\n## Ce que Google prépare : les données HTTP Archive comme révélateur\n\nL'information, [rapportée par Search Engine Journal](https://www.searchenginejournal.com/google-may-expand-unsupported-robots-txt-rules-list/572866/), part d'une discussion publique sur le dépôt GitHub du protocole robots.txt. L'équipe Google envisage d'utiliser les données crawlées par HTTP Archive — qui scanne régulièrement des millions de sites — pour dresser un inventaire statistique des directives non standard présentes dans les fichiers robots.txt à travers le web.\n\nLe point technique fondamental : le protocole robots.txt, tel que [formalisé dans la RFC 9309](https://www.rfc-editor.org/rfc/rfc9309), ne reconnaît qu'un ensemble très limité de directives. En pratique, seules `User-agent`, `Allow`, `Disallow` et `Sitemap` sont universellement supportées par les crawlers majeurs. Tout le reste — `Crawl-delay`, `Noindex`, `Request-rate`, `Host` — est soit ignoré, soit traité de manière inconsistante selon les moteurs.\n\nCe que Google observe via HTTP Archive, c'est que des centaines de milliers de fichiers robots.txt contiennent des directives qui ne font strictement rien. Et pire : des fautes de frappe sur `Disallow` qui transforment une règle de blocage en ligne ignorée.\n\n### Le problème des fautes de frappe sur Disallow\n\nGoogle envisage spécifiquement d'élargir sa tolérance aux variantes orthographiques de `Disallow`. C'est loin d'être anecdotique. Voici un robots.txt réel qu'on rencontre en production :\n\n```txt\nUser-agent: *\nDissallow: /admin/\nDisalow: /checkout/\nDisallow: /api/\nCrawl-delay: 10\nNoindex: /staging/\n```\n\nDans cet exemple, seule la ligne `Disallow: /api/` est effectivement interprétée par Googlebot. Les répertoires `/admin/` et `/checkout/` sont crawlés librement — la faute de frappe rend la directive invisible. `Crawl-delay` est ignoré par Google (Bing le respecte). `Noindex` dans robots.txt n'a jamais été un standard et Google a officiellement cessé de le supporter depuis le 1er septembre 2019.\n\nLe propriétaire du site pense avoir bloqué trois répertoires. En réalité, il n'en a bloqué qu'un.\n\n### Pourquoi HTTP Archive change la donne\n\nJusqu'ici, Google documentait les directives non supportées de manière réactive. L'approche HTTP Archive est proactive : analyser les robots.txt de millions de sites pour quantifier la prévalence de chaque erreur. Si `Dissallow` apparaît sur 0,3 % des sites analysés (soit potentiellement des dizaines de milliers de domaines), Google peut décider d'interpréter cette variante comme un `Disallow` valide, ou au minimum de l'ajouter à sa documentation comme erreur courante à éviter.\n\nHTTP Archive utilise [BigQuery pour exposer ses datasets](https://httparchive.org/reports). Vous pouvez vous-même requêter les données pour analyser la prévalence de certaines directives :\n\n```sql\nSELECT\n  REGEXP_EXTRACT(body, r'(?mi)^([\\w-]+):') AS directive,\n  COUNT(*) AS occurrences\nFROM\n  `httparchive.response_bodies.2026_04_01_desktop`\nWHERE\n  url LIKE '%/robots.txt'\n  AND status = 200\nGROUP BY directive\nORDER BY occurrences DESC\nLIMIT 50\n```\n\nCette requête extrait le nom de chaque directive présente dans les robots.txt crawlés par HTTP Archive et les classe par fréquence. C'est exactement le type d'analyse que l'équipe Google utilise pour prioriser les directives à documenter ou à tolérer.\n\n## L'inventaire des directives non supportées : ce qui est ignoré et ce qui est dangereux\n\nPour un Lead SEO technique, la question n'est pas \"quelles directives existent\" mais \"quelles directives sont silencieusement ignorées sur mes sites en production\". Voici un inventaire technique avec le comportement réel de Googlebot.\n\n### Directives complètement ignorées par Google\n\n| Directive | Origine | Comportement Googlebot |\n|---|---|---|\n| `Crawl-delay` | Extension Yandex/Bing | Ignorée. Aucun effet sur le crawl rate. |\n| `Noindex` | Convention non standard | Ignorée depuis septembre 2019. |\n| `Request-rate` | Proposition abandonnée | Ignorée. |\n| `Visit-time` | Proposition abandonnée | Ignorée. |\n| `Host` | Extension Yandex | Ignorée. |\n| `Clean-param` | Extension Yandex | Ignorée. |\n\n### Fautes de frappe documentées et candidates à l'expansion\n\nLa liste actuelle des variantes que Google pourrait commencer à tolérer (ou au moins documenter explicitement) :\n\n- `Dissallow` (double 's')\n- `Disalow` (un seul 'l')\n- `Diallow` (absence du 's')\n- `Dissalow` (double 's' + un seul 'l')\n- `Useragent` (sans tiret)\n- `User agent` (espace sans tiret)\n\n### Le cas Noindex : un héritage toxique\n\nLe retrait du support de `Noindex` dans robots.txt en 2019 a laissé un héritage problématique. Des milliers de sites continuent de l'utiliser en pensant empêcher l'indexation de certaines sections. La directive correcte passe par l'en-tête HTTP `X-Robots-Tag` ou la balise meta robots dans le HTML :\n\n```html\n\u003C!-- Dans le \u003Chead> de la page -->\n\u003Cmeta name=\"robots\" content=\"noindex, follow\">\n```\n\nOu via un en-tête HTTP (utile pour les PDF, images, et autres ressources non-HTML) :\n\n```nginx\n# Configuration Nginx pour les fichiers du répertoire /staging/\nlocation /staging/ {\n    add_header X-Robots-Tag \"noindex, nofollow\" always;\n}\n```\n\nSi vous avez hérité d'un robots.txt contenant `Noindex:`, vous avez potentiellement des pages indexées que vous croyez exclues. Vérifiez immédiatement avec `site:votredomaine.com/staging/` dans Google.\n\n## Audit de votre robots.txt : méthodologie complète\n\nUn robots.txt mal formé ne génère aucune erreur visible. Pas d'alerte Search Console, pas de log d'erreur serveur, pas de page blanche. Le site fonctionne parfaitement — mais le crawl est soit trop permissif, soit cassé.\n\n### Étape 1 : Validation syntaxique\n\nGoogle fournit un [testeur de robots.txt dans Search Console](https://support.google.com/webmasters/answer/6062598). Cet outil valide la syntaxe et simule le comportement de Googlebot sur des URLs spécifiques. Mais il ne détecte pas les directives non supportées — il les ignore silencieusement, exactement comme Googlebot.\n\nPour une validation plus stricte, utilisez le parser robots.txt open source de Google :\n\n```bash\n# Installation du parser Google robots.txt\ngit clone https://github.com/google/robotstxt.git\ncd robotstxt\ncmake -B build\ncmake --build build\n\n# Test d'une URL contre votre robots.txt\n./build/robots /chemin/vers/robots.txt \"Googlebot\" \"https://votresite.com/admin/page\"\n```\n\nCe parser est la même logique que Googlebot utilise en production. Si une directive est ignorée par ce parser, elle est ignorée par Google. Point final.\n\n### Étape 2 : Détection des directives non standard\n\nUn script rapide pour auditer votre robots.txt et signaler les directives suspectes :\n\n```python\n#!/usr/bin/env python3\n\"\"\"Audit robots.txt : détecte les directives non standard et les fautes de frappe.\"\"\"\n\nimport re\nimport sys\nfrom difflib import get_close_matches\n\nVALID_DIRECTIVES = {'user-agent', 'disallow', 'allow', 'sitemap'}\nKNOWN_UNSUPPORTED = {'crawl-delay', 'noindex', 'host', 'request-rate', 'visit-time', 'clean-param'}\nDISALLOW_TYPOS = ['dissallow', 'disalow', 'diallow', 'dissalow', 'disallaw', 'disalllow']\n\ndef audit_robots_txt(filepath: str) -> list[dict]:\n    issues = []\n    with open(filepath, 'r') as f:\n        for line_num, line in enumerate(f, 1):\n            line = line.strip()\n            if not line or line.startswith('#'):\n                continue\n\n            match = re.match(r'^([a-zA-Z\\-]+)\\s*:', line)\n            if not match:\n                issues.append({\n                    'line': line_num,\n                    'severity': 'error',\n                    'message': f'Ligne mal formée : \"{line}\"'\n                })\n                continue\n\n            directive = match.group(1).lower()\n\n            if directive in VALID_DIRECTIVES:\n                continue\n\n            if directive in KNOWN_UNSUPPORTED:\n                issues.append({\n                    'line': line_num,\n                    'severity': 'warning',\n                    'message': f'Directive non supportée par Google : \"{match.group(1)}\"'\n                })\n            elif directive in DISALLOW_TYPOS:\n                issues.append({\n                    'line': line_num,\n                    'severity': 'critical',\n                    'message': f'Faute de frappe probable sur Disallow : \"{match.group(1)}\" — cette ligne est IGNORÉE'\n                })\n            else:\n                close = get_close_matches(directive, VALID_DIRECTIVES | KNOWN_UNSUPPORTED, n=1, cutoff=0.6)\n                suggestion = f' (vouliez-vous dire \"{close[0]}\" ?)' if close else ''\n                issues.append({\n                    'line': line_num,\n                    'severity': 'warning',\n                    'message': f'Directive inconnue : \"{match.group(1)}\"{suggestion}'\n                })\n\n    return issues\n\nif __name__ == '__main__':\n    filepath = sys.argv[1] if len(sys.argv) > 1 else 'robots.txt'\n    issues = audit_robots_txt(filepath)\n    for issue in issues:\n        print(f\"[{issue['severity'].upper()}] Ligne {issue['line']}: {issue['message']}\")\n    if not issues:\n        print(\"Aucun problème détecté.\")\n```\n\n### Étape 3 : Validation croisée avec les logs serveur\n\nL'audit statique ne suffit pas. Vous devez croiser avec les logs de crawl réels pour vérifier que Googlebot respecte effectivement vos directives. Un [article sur l'analyse des logs pour les crawlers IA](/blog/why-log-file-analysis-matters-for-ai-crawlers-and-search-visibility) couvre en détail la méthodologie d'analyse des logs. Appliquez la même logique pour isoler les requêtes Googlebot sur les répertoires que vous pensez avoir bloqués.\n\nSi Googlebot crawle `/admin/` alors que votre robots.txt contient `Dissallow: /admin/`, vous avez votre preuve.\n\n## Scénario concret : un e-commerce de 22 000 pages avec un robots.txt corrompu\n\nPrenons un cas réaliste. Un site e-commerce mode sur Magento 2, 22 000 pages produit, 1 800 pages catégorie, 350 pages CMS. Le robots.txt a été édité par trois personnes différentes sur quatre ans.\n\n### Le fichier initial\n\n```txt\nUser-agent: *\nDisallow: /checkout/\nDisallow: /customer/\nDissallow: /catalogsearch/\nDisallow: /wishlist/\nNoindex: /tag/\nCrawl-delay: 5\nDisallow: /review/pending/\n\nUser-agent: Googlebot\nAllow: /media/catalog/\nDisalow: /media/tmp/\n\nSitemap: https://shop-mode.fr/sitemap.xml\n```\n\n### L'impact mesuré\n\nAprès audit, voici ce qui se passe réellement :\n\n1. **`Dissallow: /catalogsearch/`** — Ignorée. Googlebot crawle toutes les pages de recherche interne. Sur ce site, la recherche à facettes génère environ 85 000 URLs paramétrées (`/catalogsearch/result/?q=robe+rouge&color=45&size=M`). Le crawl budget est gaspillé massivement. Dans Search Console, les pages explorées mais non indexées explosent.\n\n2. **`Noindex: /tag/`** — Ignorée. Les 2 400 pages de tags sont indexées, créent du contenu dupliqué thin, et diluent l'autorité des pages catégorie. Ces pages génèrent en moyenne 12 mots de contenu unique.\n\n3. **`Disalow: /media/tmp/`** — Ignorée. Les fichiers temporaires d'upload sont crawlés. Pas critique pour le SEO, mais du crawl budget perdu sur des ressources éphémères.\n\n4. **`Crawl-delay: 5`** — Ignorée par Google. Mais si Bing respecte cette directive, cela signifie un délai de 5 secondes entre chaque requête. Pour 22 000 pages, un crawl complet par Bingbot prendrait théoriquement 22 000 × 5 = 110 000 secondes, soit plus de 30 heures. En pratique, Bing ne recrawlerait jamais l'intégralité du catalogue.\n\n### Le fichier corrigé\n\n```txt\nUser-agent: *\nDisallow: /checkout/\nDisallow: /customer/\nDisallow: /catalogsearch/\nDisallow: /wishlist/\nDisallow: /review/pending/\nDisallow: /media/tmp/\n\nUser-agent: Googlebot\nAllow: /media/catalog/\nDisallow: /catalogsearch/\n\nSitemap: https://shop-mode.fr/sitemap.xml\n```\n\nLes pages de tags (`/tag/`) sont gérées via `\u003Cmeta name=\"robots\" content=\"noindex, follow\">` dans le template Magento, pas dans robots.txt. Le `Crawl-delay` est supprimé — le taux de crawl se gère dans Search Console pour Google, et via le Bing Webmaster Tools pour Bing.\n\n### Résultat après 6 semaines\n\n- Pages explorées non indexées dans Search Console : passées de 94 000 à 18 000 (l'essentiel des URLs de recherche à facettes ne sont plus crawlées)\n- Crawl de Googlebot recentré sur les pages produit et catégorie : le rapport de couverture montre une augmentation de 40 % du crawl sur les pages à valeur SEO\n- 2 400 pages de tags retirées de l'index en 3 semaines via le noindex meta\n\n## Les implications pour les crawlers IA et les agents\n\nL'expansion de la liste des directives non supportées par Google intervient dans un contexte où les robots ne se limitent plus à Googlebot. Les crawlers d'IA (GPTBot, ClaudeBot, Anthropic, etc.) interprètent eux aussi robots.txt, avec des niveaux de conformité variables.\n\nSi votre robots.txt contient des directives non standard, le comportement diverge entre les crawlers. Un `Crawl-delay: 10` sera ignoré par Google, potentiellement respecté par Bing, et le comportement de GPTBot est non documenté.\n\nL'enjeu pour les sites qui veulent contrôler leur visibilité dans les [systèmes de recherche agentique](/blog/google-s-task-based-agentic-search-is-disrupting-seo-today-not-tomorrow-via-sejournal-martinibuster) est de maintenir un robots.txt parfaitement conforme à la RFC 9309. Tout écart introduit de l'ambiguïté, et l'ambiguïté profite au crawler — pas à vous.\n\nPour les sites qui doivent gérer des dizaines de user-agents différents, le modèle à adopter est explicite :\n\n```txt\n# Crawlers de recherche classiques\nUser-agent: Googlebot\nDisallow: /api/\nAllow: /api/products\n\nUser-agent: Bingbot\nDisallow: /api/\nAllow: /api/products\n\n# Crawlers IA\nUser-agent: GPTBot\nDisallow: /\n\nUser-agent: ClaudeBot\nDisallow: /\n\nUser-agent: CCBot\nDisallow: /\n\n# Règle par défaut\nUser-agent: *\nDisallow: /api/\nDisallow: /internal/\n\nSitemap: https://votresite.com/sitemap.xml\n```\n\nLa question de l'[architecture machine-first](/blog/machine-first-architecture-ai-agents-are-here-and-your-website-isn-t-ready-says-no-hacks-podcast-host-via-sejournal-theshelleywalsh) impose une rigueur nouvelle sur ces fichiers de configuration. Un robots.txt n'est plus un simple garde-fou pour Googlebot — c'est le premier point de contact avec une dizaine de systèmes automatisés qui prennent des décisions en fonction de ce qu'ils lisent.\n\n## Monitoring continu : pourquoi l'audit ponctuel ne suffit pas\n\nUn robots.txt validé aujourd'hui peut être cassé demain. Un déploiement qui écrase le fichier, un plugin WordPress qui ajoute des directives non standard, un développeur junior qui corrige une \"faute de frappe\" en en introduisant une autre.\n\n### Les vecteurs de régression les plus courants\n\n**Les plugins CMS.** Yoast SEO, Rank Math et All in One SEO génèrent dynamiquement le robots.txt dans WordPress. Une mise à jour de plugin peut modifier silencieusement le contenu du fichier. Si vous maintenez un fichier robots.txt physique à la racine ET qu'un plugin génère une version dynamique, le comportement dépend de la configuration du serveur — et le résultat est souvent imprévisible.\n\n**Les déploiements CI/CD.** Sur une stack moderne (Vercel, Netlify, Docker), le robots.txt est souvent un fichier statique dans le répertoire `public/`. Un merge accidentel peut écraser le fichier de production avec une version de staging contenant `Disallow: /`.\n\n**Les migrations de serveur.** Le passage d'Apache à Nginx (ou inversement) peut modifier le content-type du fichier robots.txt. La RFC 9309 exige `text/plain`. Un serveur mal configuré qui renvoie `text/html` peut conduire certains parsers à ignorer le fichier.\n\nVérifiez le content-type avec :\n\n```bash\ncurl -sI https://votresite.com/robots.txt | grep -i content-type\n# Attendu : content-type: text/plain\n```\n\n### Screaming Frog comme filet de sécurité\n\nScreaming Frog affiche les directives robots.txt et leur effet sur le crawl dans l'onglet \"Directives\". Mais il ne détecte pas les directives non standard ignorées — il les affiche sans avertissement. C'est une limitation connue.\n\nPour un monitoring en continu, un outil comme Seogard détecte automatiquement les modifications de robots.txt entre deux scans et alerte quand une directive de blocage disparaît ou quand une directive non standard est ajoutée. Sur un site de 22 000 pages, la différence entre \"détection en 15 minutes\" et \"détection au prochain audit trimestriel\" représente potentiellement des semaines de crawl gaspillé.\n\n## Ce que cette évolution révèle sur la direction de Google\n\nL'utilisation de HTTP Archive par Google pour informer ses décisions sur le protocole robots.txt est un signal plus large. Google évolue d'une approche prescriptive (\"voici le standard, conformez-vous\") vers une approche descriptive (\"voici ce que le web fait réellement, adaptons notre interprétation\").\n\nC'est cohérent avec la manière dont Google gère déjà le HTML malformé : le parser de Chromium corrige automatiquement les erreurs courantes. La question est de savoir si cette même tolérance va s'étendre au robots.txt — et si oui, quelles sont les limites.\n\nLe risque : si Google commence à interpréter `Dissallow` comme `Disallow`, les sites qui utilisaient involontairement cette faute de frappe pourraient voir leur crawl modifié du jour au lendemain. Des pages qui étaient crawlées depuis des années seraient soudainement bloquées. C'est un changement rétroactif potentiellement destructeur pour les sites qui dépendent de ce comportement accidentel.\n\nL'approche la plus probable est que Google documente d'abord ces directives non standard dans sa [documentation officielle des spécifications robots.txt](https://developers.google.com/search/docs/crawling-indexing/robots/robots_txt), avant d'éventuellement modifier le comportement du parser. La documentation est le premier pas — le changement de comportement viendrait après, avec un délai d'adaptation.\n\nPour les équipes SEO techniques qui gèrent des patrimoines importants, c'est le moment de lancer un audit complet de tous les fichiers robots.txt en production. Pas dans trois mois — maintenant. Avant que Google ne décide de changer son interprétation et que des directives jusqu'ici ignorées deviennent actives.\n\nLes sites qui ont déjà un monitoring automatisé de leur configuration de crawl sont les mieux positionnés pour absorber ce type de changement. Les autres découvriront le problème quand leur trafic organique aura déjà baissé.","https://seogard.io/blog/google-may-expand-unsupported-robots-txt-rules-list-via-sejournal-mattgsouthern","Actualités SEO","2026-04-23T18:02:34.554Z","2026-04-23","Google exploite les données HTTP Archive pour identifier les erreurs robots.txt les plus courantes. Analyse technique et impact concret sur le crawl.","\u003Cp>Un fichier robots.txt de 12 lignes peut neutraliser le crawl de 40 000 pages sans déclencher la moindre alerte dans Search Console. C'est exactement ce que Google tente d'adresser en élargissant sa liste de directives robots.txt non supportées, en s'appuyant sur les données massives de HTTP Archive pour identifier les erreurs que des millions de sites commettent silencieusement.\u003C/p>\n\u003Ch2>Ce que Google prépare : les données HTTP Archive comme révélateur\u003C/h2>\n\u003Cp>L'information, \u003Ca href=\"https://www.searchenginejournal.com/google-may-expand-unsupported-robots-txt-rules-list/572866/\">rapportée par Search Engine Journal\u003C/a>, part d'une discussion publique sur le dépôt GitHub du protocole robots.txt. L'équipe Google envisage d'utiliser les données crawlées par HTTP Archive — qui scanne régulièrement des millions de sites — pour dresser un inventaire statistique des directives non standard présentes dans les fichiers robots.txt à travers le web.\u003C/p>\n\u003Cp>Le point technique fondamental : le protocole robots.txt, tel que \u003Ca href=\"https://www.rfc-editor.org/rfc/rfc9309\">formalisé dans la RFC 9309\u003C/a>, ne reconnaît qu'un ensemble très limité de directives. En pratique, seules \u003Ccode>User-agent\u003C/code>, \u003Ccode>Allow\u003C/code>, \u003Ccode>Disallow\u003C/code> et \u003Ccode>Sitemap\u003C/code> sont universellement supportées par les crawlers majeurs. Tout le reste — \u003Ccode>Crawl-delay\u003C/code>, \u003Ccode>Noindex\u003C/code>, \u003Ccode>Request-rate\u003C/code>, \u003Ccode>Host\u003C/code> — est soit ignoré, soit traité de manière inconsistante selon les moteurs.\u003C/p>\n\u003Cp>Ce que Google observe via HTTP Archive, c'est que des centaines de milliers de fichiers robots.txt contiennent des directives qui ne font strictement rien. Et pire : des fautes de frappe sur \u003Ccode>Disallow\u003C/code> qui transforment une règle de blocage en ligne ignorée.\u003C/p>\n\u003Ch3>Le problème des fautes de frappe sur Disallow\u003C/h3>\n\u003Cp>Google envisage spécifiquement d'élargir sa tolérance aux variantes orthographiques de \u003Ccode>Disallow\u003C/code>. C'est loin d'être anecdotique. Voici un robots.txt réel qu'on rencontre en production :\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>User-agent: *\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>Dissallow: /admin/\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>Disalow: /checkout/\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>Disallow: /api/\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>Crawl-delay: 10\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>Noindex: /staging/\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>Dans cet exemple, seule la ligne \u003Ccode>Disallow: /api/\u003C/code> est effectivement interprétée par Googlebot. Les répertoires \u003Ccode>/admin/\u003C/code> et \u003Ccode>/checkout/\u003C/code> sont crawlés librement — la faute de frappe rend la directive invisible. \u003Ccode>Crawl-delay\u003C/code> est ignoré par Google (Bing le respecte). \u003Ccode>Noindex\u003C/code> dans robots.txt n'a jamais été un standard et Google a officiellement cessé de le supporter depuis le 1er septembre 2019.\u003C/p>\n\u003Cp>Le propriétaire du site pense avoir bloqué trois répertoires. En réalité, il n'en a bloqué qu'un.\u003C/p>\n\u003Ch3>Pourquoi HTTP Archive change la donne\u003C/h3>\n\u003Cp>Jusqu'ici, Google documentait les directives non supportées de manière réactive. L'approche HTTP Archive est proactive : analyser les robots.txt de millions de sites pour quantifier la prévalence de chaque erreur. Si \u003Ccode>Dissallow\u003C/code> apparaît sur 0,3 % des sites analysés (soit potentiellement des dizaines de milliers de domaines), Google peut décider d'interpréter cette variante comme un \u003Ccode>Disallow\u003C/code> valide, ou au minimum de l'ajouter à sa documentation comme erreur courante à éviter.\u003C/p>\n\u003Cp>HTTP Archive utilise \u003Ca href=\"https://httparchive.org/reports\">BigQuery pour exposer ses datasets\u003C/a>. Vous pouvez vous-même requêter les données pour analyser la prévalence de certaines directives :\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">SELECT\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  REGEXP_EXTRACT(body, r\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'(?mi)^([\\w-]+):'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">) \u003C/span>\u003Cspan style=\"color:#F97583\">AS\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> directive,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">  COUNT\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#F97583\">*\u003C/span>\u003Cspan style=\"color:#E1E4E8\">) \u003C/span>\u003Cspan style=\"color:#F97583\">AS\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> occurrences\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">FROM\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  `httparchive.response_bodies.2026_04_01_desktop`\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">WHERE\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  url\u003C/span>\u003Cspan style=\"color:#F97583\"> LIKE\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> '%/robots.txt'\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  AND\u003C/span>\u003Cspan style=\"color:#F97583\"> status\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#79B8FF\"> 200\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">GROUP BY\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> directive\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">ORDER BY\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> occurrences \u003C/span>\u003Cspan style=\"color:#F97583\">DESC\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">LIMIT\u003C/span>\u003Cspan style=\"color:#79B8FF\"> 50\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>Cette requête extrait le nom de chaque directive présente dans les robots.txt crawlés par HTTP Archive et les classe par fréquence. C'est exactement le type d'analyse que l'équipe Google utilise pour prioriser les directives à documenter ou à tolérer.\u003C/p>\n\u003Ch2>L'inventaire des directives non supportées : ce qui est ignoré et ce qui est dangereux\u003C/h2>\n\u003Cp>Pour un Lead SEO technique, la question n'est pas \"quelles directives existent\" mais \"quelles directives sont silencieusement ignorées sur mes sites en production\". Voici un inventaire technique avec le comportement réel de Googlebot.\u003C/p>\n\u003Ch3>Directives complètement ignorées par Google\u003C/h3>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Directive\u003C/th>\n\u003Cth>Origine\u003C/th>\n\u003Cth>Comportement Googlebot\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>Crawl-delay\u003C/code>\u003C/td>\n\u003Ctd>Extension Yandex/Bing\u003C/td>\n\u003Ctd>Ignorée. Aucun effet sur le crawl rate.\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>Noindex\u003C/code>\u003C/td>\n\u003Ctd>Convention non standard\u003C/td>\n\u003Ctd>Ignorée depuis septembre 2019.\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>Request-rate\u003C/code>\u003C/td>\n\u003Ctd>Proposition abandonnée\u003C/td>\n\u003Ctd>Ignorée.\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>Visit-time\u003C/code>\u003C/td>\n\u003Ctd>Proposition abandonnée\u003C/td>\n\u003Ctd>Ignorée.\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>Host\u003C/code>\u003C/td>\n\u003Ctd>Extension Yandex\u003C/td>\n\u003Ctd>Ignorée.\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>Clean-param\u003C/code>\u003C/td>\n\u003Ctd>Extension Yandex\u003C/td>\n\u003Ctd>Ignorée.\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\n\u003Ch3>Fautes de frappe documentées et candidates à l'expansion\u003C/h3>\n\u003Cp>La liste actuelle des variantes que Google pourrait commencer à tolérer (ou au moins documenter explicitement) :\u003C/p>\n\u003Cul>\n\u003Cli>\u003Ccode>Dissallow\u003C/code> (double 's')\u003C/li>\n\u003Cli>\u003Ccode>Disalow\u003C/code> (un seul 'l')\u003C/li>\n\u003Cli>\u003Ccode>Diallow\u003C/code> (absence du 's')\u003C/li>\n\u003Cli>\u003Ccode>Dissalow\u003C/code> (double 's' + un seul 'l')\u003C/li>\n\u003Cli>\u003Ccode>Useragent\u003C/code> (sans tiret)\u003C/li>\n\u003Cli>\u003Ccode>User agent\u003C/code> (espace sans tiret)\u003C/li>\n\u003C/ul>\n\u003Ch3>Le cas Noindex : un héritage toxique\u003C/h3>\n\u003Cp>Le retrait du support de \u003Ccode>Noindex\u003C/code> dans robots.txt en 2019 a laissé un héritage problématique. Des milliers de sites continuent de l'utiliser en pensant empêcher l'indexation de certaines sections. La directive correcte passe par l'en-tête HTTP \u003Ccode>X-Robots-Tag\u003C/code> ou la balise meta robots dans le HTML :\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">&#x3C;!-- Dans le &#x3C;head> de la page -->\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">&#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">meta\u003C/span>\u003Cspan style=\"color:#B392F0\"> name\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"robots\"\u003C/span>\u003Cspan style=\"color:#B392F0\"> content\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"noindex, follow\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>Ou via un en-tête HTTP (utile pour les PDF, images, et autres ressources non-HTML) :\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Configuration Nginx pour les fichiers du répertoire /staging/\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">location\u003C/span>\u003Cspan style=\"color:#B392F0\"> /staging/ \u003C/span>\u003Cspan style=\"color:#E1E4E8\">{\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    add_header \u003C/span>\u003Cspan style=\"color:#E1E4E8\">X-Robots-Tag \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"noindex, nofollow\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> always;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">}\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>Si vous avez hérité d'un robots.txt contenant \u003Ccode>Noindex:\u003C/code>, vous avez potentiellement des pages indexées que vous croyez exclues. Vérifiez immédiatement avec \u003Ccode>site:votredomaine.com/staging/\u003C/code> dans Google.\u003C/p>\n\u003Ch2>Audit de votre robots.txt : méthodologie complète\u003C/h2>\n\u003Cp>Un robots.txt mal formé ne génère aucune erreur visible. Pas d'alerte Search Console, pas de log d'erreur serveur, pas de page blanche. Le site fonctionne parfaitement — mais le crawl est soit trop permissif, soit cassé.\u003C/p>\n\u003Ch3>Étape 1 : Validation syntaxique\u003C/h3>\n\u003Cp>Google fournit un \u003Ca href=\"https://support.google.com/webmasters/answer/6062598\">testeur de robots.txt dans Search Console\u003C/a>. Cet outil valide la syntaxe et simule le comportement de Googlebot sur des URLs spécifiques. Mais il ne détecte pas les directives non supportées — il les ignore silencieusement, exactement comme Googlebot.\u003C/p>\n\u003Cp>Pour une validation plus stricte, utilisez le parser robots.txt open source de Google :\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Installation du parser Google robots.txt\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">git\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> clone\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> https://github.com/google/robotstxt.git\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">cd\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> robotstxt\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">cmake\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -B\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> build\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">cmake\u003C/span>\u003Cspan style=\"color:#79B8FF\"> --build\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> build\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Test d'une URL contre votre robots.txt\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">./build/robots\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> /chemin/vers/robots.txt\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"Googlebot\"\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"https://votresite.com/admin/page\"\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>Ce parser est la même logique que Googlebot utilise en production. Si une directive est ignorée par ce parser, elle est ignorée par Google. Point final.\u003C/p>\n\u003Ch3>Étape 2 : Détection des directives non standard\u003C/h3>\n\u003Cp>Un script rapide pour auditer votre robots.txt et signaler les directives suspectes :\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">#!/usr/bin/env python3\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">\"\"\"Audit robots.txt : détecte les directives non standard et les fautes de frappe.\"\"\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">import\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> re\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">import\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> sys\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">from\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> difflib \u003C/span>\u003Cspan style=\"color:#F97583\">import\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> get_close_matches\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">VALID_DIRECTIVES\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> {\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'user-agent'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'disallow'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'allow'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'sitemap'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">}\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">KNOWN_UNSUPPORTED\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> {\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'crawl-delay'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'noindex'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'host'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'request-rate'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'visit-time'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'clean-param'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">}\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">DISALLOW_TYPOS\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> [\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'dissallow'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'disalow'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'diallow'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'dissalow'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'disallaw'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'disalllow'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">]\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">def\u003C/span>\u003Cspan style=\"color:#B392F0\"> audit_robots_txt\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(filepath: \u003C/span>\u003Cspan style=\"color:#79B8FF\">str\u003C/span>\u003Cspan style=\"color:#E1E4E8\">) -> list[\u003C/span>\u003Cspan style=\"color:#79B8FF\">dict\u003C/span>\u003Cspan style=\"color:#E1E4E8\">]:\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    issues \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> []\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    with\u003C/span>\u003Cspan style=\"color:#79B8FF\"> open\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(filepath, \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'r'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">) \u003C/span>\u003Cspan style=\"color:#F97583\">as\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> f:\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">        for\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> line_num, line \u003C/span>\u003Cspan style=\"color:#F97583\">in\u003C/span>\u003Cspan style=\"color:#79B8FF\"> enumerate\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(f, \u003C/span>\u003Cspan style=\"color:#79B8FF\">1\u003C/span>\u003Cspan style=\"color:#E1E4E8\">):\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">            line \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> line.strip()\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">            if\u003C/span>\u003Cspan style=\"color:#F97583\"> not\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> line \u003C/span>\u003Cspan style=\"color:#F97583\">or\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> line.startswith(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'#'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">):\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">                continue\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">            match \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> re.match(\u003C/span>\u003Cspan style=\"color:#F97583\">r\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'\u003C/span>\u003Cspan style=\"color:#79B8FF\">^([a-zA-Z\u003C/span>\u003Cspan style=\"color:#85E89D;font-weight:bold\">\\-\u003C/span>\u003Cspan style=\"color:#79B8FF\">]\u003C/span>\u003Cspan style=\"color:#F97583\">+\u003C/span>\u003Cspan style=\"color:#79B8FF\">)\\s\u003C/span>\u003Cspan style=\"color:#F97583\">*\u003C/span>\u003Cspan style=\"color:#DBEDFF\">:\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, line)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">            if\u003C/span>\u003Cspan style=\"color:#F97583\"> not\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> match:\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                issues.append({\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">                    'line'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: line_num,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">                    'severity'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'error'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">                    'message'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#F97583\">f\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'Ligne mal formée : \"\u003C/span>\u003Cspan style=\"color:#79B8FF\">{\u003C/span>\u003Cspan style=\"color:#E1E4E8\">line\u003C/span>\u003Cspan style=\"color:#79B8FF\">}\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"'\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                })\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">                continue\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">            directive \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> match.group(\u003C/span>\u003Cspan style=\"color:#79B8FF\">1\u003C/span>\u003Cspan style=\"color:#E1E4E8\">).lower()\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">            if\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> directive \u003C/span>\u003Cspan style=\"color:#F97583\">in\u003C/span>\u003Cspan style=\"color:#79B8FF\"> VALID_DIRECTIVES\u003C/span>\u003Cspan style=\"color:#E1E4E8\">:\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">                continue\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">            if\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> directive \u003C/span>\u003Cspan style=\"color:#F97583\">in\u003C/span>\u003Cspan style=\"color:#79B8FF\"> KNOWN_UNSUPPORTED\u003C/span>\u003Cspan style=\"color:#E1E4E8\">:\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                issues.append({\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">                    'line'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: line_num,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">                    'severity'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'warning'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">                    'message'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#F97583\">f\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'Directive non supportée par Google : \"\u003C/span>\u003Cspan style=\"color:#79B8FF\">{\u003C/span>\u003Cspan style=\"color:#E1E4E8\">match.group(\u003C/span>\u003Cspan style=\"color:#79B8FF\">1\u003C/span>\u003Cspan style=\"color:#E1E4E8\">)\u003C/span>\u003Cspan style=\"color:#79B8FF\">}\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"'\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                })\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">            elif\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> directive \u003C/span>\u003Cspan style=\"color:#F97583\">in\u003C/span>\u003Cspan style=\"color:#79B8FF\"> DISALLOW_TYPOS\u003C/span>\u003Cspan style=\"color:#E1E4E8\">:\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                issues.append({\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">                    'line'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: line_num,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">                    'severity'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'critical'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">                    'message'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#F97583\">f\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'Faute de frappe probable sur Disallow : \"\u003C/span>\u003Cspan style=\"color:#79B8FF\">{\u003C/span>\u003Cspan style=\"color:#E1E4E8\">match.group(\u003C/span>\u003Cspan style=\"color:#79B8FF\">1\u003C/span>\u003Cspan style=\"color:#E1E4E8\">)\u003C/span>\u003Cspan style=\"color:#79B8FF\">}\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\" — cette ligne est IGNORÉE'\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                })\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">            else\u003C/span>\u003Cspan style=\"color:#E1E4E8\">:\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                close \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> get_close_matches(directive, \u003C/span>\u003Cspan style=\"color:#79B8FF\">VALID_DIRECTIVES\u003C/span>\u003Cspan style=\"color:#F97583\"> |\u003C/span>\u003Cspan style=\"color:#79B8FF\"> KNOWN_UNSUPPORTED\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#FFAB70\">n\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#79B8FF\">1\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#FFAB70\">cutoff\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#79B8FF\">0.6\u003C/span>\u003Cspan style=\"color:#E1E4E8\">)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                suggestion \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#F97583\"> f\u003C/span>\u003Cspan style=\"color:#9ECBFF\">' (vouliez-vous dire \"\u003C/span>\u003Cspan style=\"color:#79B8FF\">{\u003C/span>\u003Cspan style=\"color:#E1E4E8\">close[\u003C/span>\u003Cspan style=\"color:#79B8FF\">0\u003C/span>\u003Cspan style=\"color:#E1E4E8\">]\u003C/span>\u003Cspan style=\"color:#79B8FF\">}\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\" ?)'\u003C/span>\u003Cspan style=\"color:#F97583\"> if\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> close \u003C/span>\u003Cspan style=\"color:#F97583\">else\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> ''\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                issues.append({\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">                    'line'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: line_num,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">                    'severity'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'warning'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">                    'message'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#F97583\">f\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'Directive inconnue : \"\u003C/span>\u003Cspan style=\"color:#79B8FF\">{\u003C/span>\u003Cspan style=\"color:#E1E4E8\">match.group(\u003C/span>\u003Cspan style=\"color:#79B8FF\">1\u003C/span>\u003Cspan style=\"color:#E1E4E8\">)\u003C/span>\u003Cspan style=\"color:#79B8FF\">}\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"\u003C/span>\u003Cspan style=\"color:#79B8FF\">{\u003C/span>\u003Cspan style=\"color:#E1E4E8\">suggestion\u003C/span>\u003Cspan style=\"color:#79B8FF\">}\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                })\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    return\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> issues\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">if\u003C/span>\u003Cspan style=\"color:#79B8FF\"> __name__\u003C/span>\u003Cspan style=\"color:#F97583\"> ==\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> '__main__'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">:\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    filepath \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> sys.argv[\u003C/span>\u003Cspan style=\"color:#79B8FF\">1\u003C/span>\u003Cspan style=\"color:#E1E4E8\">] \u003C/span>\u003Cspan style=\"color:#F97583\">if\u003C/span>\u003Cspan style=\"color:#79B8FF\"> len\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(sys.argv) \u003C/span>\u003Cspan style=\"color:#F97583\">>\u003C/span>\u003Cspan style=\"color:#79B8FF\"> 1\u003C/span>\u003Cspan style=\"color:#F97583\"> else\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> 'robots.txt'\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    issues \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> audit_robots_txt(filepath)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    for\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> issue \u003C/span>\u003Cspan style=\"color:#F97583\">in\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> issues:\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">        print\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#F97583\">f\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"[\u003C/span>\u003Cspan style=\"color:#79B8FF\">{\u003C/span>\u003Cspan style=\"color:#E1E4E8\">issue[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'severity'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">].upper()\u003C/span>\u003Cspan style=\"color:#79B8FF\">}\u003C/span>\u003Cspan style=\"color:#9ECBFF\">] Ligne \u003C/span>\u003Cspan style=\"color:#79B8FF\">{\u003C/span>\u003Cspan style=\"color:#E1E4E8\">issue[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'line'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">]\u003C/span>\u003Cspan style=\"color:#79B8FF\">}\u003C/span>\u003Cspan style=\"color:#9ECBFF\">: \u003C/span>\u003Cspan style=\"color:#79B8FF\">{\u003C/span>\u003Cspan style=\"color:#E1E4E8\">issue[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'message'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">]\u003C/span>\u003Cspan style=\"color:#79B8FF\">}\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    if\u003C/span>\u003Cspan style=\"color:#F97583\"> not\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> issues:\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">        print\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"Aucun problème détecté.\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">)\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Ch3>Étape 3 : Validation croisée avec les logs serveur\u003C/h3>\n\u003Cp>L'audit statique ne suffit pas. Vous devez croiser avec les logs de crawl réels pour vérifier que Googlebot respecte effectivement vos directives. Un \u003Ca href=\"/blog/why-log-file-analysis-matters-for-ai-crawlers-and-search-visibility\">article sur l'analyse des logs pour les crawlers IA\u003C/a> couvre en détail la méthodologie d'analyse des logs. Appliquez la même logique pour isoler les requêtes Googlebot sur les répertoires que vous pensez avoir bloqués.\u003C/p>\n\u003Cp>Si Googlebot crawle \u003Ccode>/admin/\u003C/code> alors que votre robots.txt contient \u003Ccode>Dissallow: /admin/\u003C/code>, vous avez votre preuve.\u003C/p>\n\u003Ch2>Scénario concret : un e-commerce de 22 000 pages avec un robots.txt corrompu\u003C/h2>\n\u003Cp>Prenons un cas réaliste. Un site e-commerce mode sur Magento 2, 22 000 pages produit, 1 800 pages catégorie, 350 pages CMS. Le robots.txt a été édité par trois personnes différentes sur quatre ans.\u003C/p>\n\u003Ch3>Le fichier initial\u003C/h3>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>User-agent: *\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>Disallow: /checkout/\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>Disallow: /customer/\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>Dissallow: /catalogsearch/\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>Disallow: /wishlist/\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>Noindex: /tag/\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>Crawl-delay: 5\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>Disallow: /review/pending/\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>User-agent: Googlebot\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>Allow: /media/catalog/\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>Disalow: /media/tmp/\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>Sitemap: https://shop-mode.fr/sitemap.xml\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Ch3>L'impact mesuré\u003C/h3>\n\u003Cp>Après audit, voici ce qui se passe réellement :\u003C/p>\n\u003Col>\n\u003Cli>\n\u003Cp>\u003Cstrong>\u003Ccode>Dissallow: /catalogsearch/\u003C/code>\u003C/strong> — Ignorée. Googlebot crawle toutes les pages de recherche interne. Sur ce site, la recherche à facettes génère environ 85 000 URLs paramétrées (\u003Ccode>/catalogsearch/result/?q=robe+rouge&#x26;color=45&#x26;size=M\u003C/code>). Le crawl budget est gaspillé massivement. Dans Search Console, les pages explorées mais non indexées explosent.\u003C/p>\n\u003C/li>\n\u003Cli>\n\u003Cp>\u003Cstrong>\u003Ccode>Noindex: /tag/\u003C/code>\u003C/strong> — Ignorée. Les 2 400 pages de tags sont indexées, créent du contenu dupliqué thin, et diluent l'autorité des pages catégorie. Ces pages génèrent en moyenne 12 mots de contenu unique.\u003C/p>\n\u003C/li>\n\u003Cli>\n\u003Cp>\u003Cstrong>\u003Ccode>Disalow: /media/tmp/\u003C/code>\u003C/strong> — Ignorée. Les fichiers temporaires d'upload sont crawlés. Pas critique pour le SEO, mais du crawl budget perdu sur des ressources éphémères.\u003C/p>\n\u003C/li>\n\u003Cli>\n\u003Cp>\u003Cstrong>\u003Ccode>Crawl-delay: 5\u003C/code>\u003C/strong> — Ignorée par Google. Mais si Bing respecte cette directive, cela signifie un délai de 5 secondes entre chaque requête. Pour 22 000 pages, un crawl complet par Bingbot prendrait théoriquement 22 000 × 5 = 110 000 secondes, soit plus de 30 heures. En pratique, Bing ne recrawlerait jamais l'intégralité du catalogue.\u003C/p>\n\u003C/li>\n\u003C/ol>\n\u003Ch3>Le fichier corrigé\u003C/h3>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>User-agent: *\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>Disallow: /checkout/\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>Disallow: /customer/\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>Disallow: /catalogsearch/\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>Disallow: /wishlist/\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>Disallow: /review/pending/\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>Disallow: /media/tmp/\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>User-agent: Googlebot\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>Allow: /media/catalog/\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>Disallow: /catalogsearch/\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>Sitemap: https://shop-mode.fr/sitemap.xml\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>Les pages de tags (\u003Ccode>/tag/\u003C/code>) sont gérées via \u003Ccode>&#x3C;meta name=\"robots\" content=\"noindex, follow\">\u003C/code> dans le template Magento, pas dans robots.txt. Le \u003Ccode>Crawl-delay\u003C/code> est supprimé — le taux de crawl se gère dans Search Console pour Google, et via le Bing Webmaster Tools pour Bing.\u003C/p>\n\u003Ch3>Résultat après 6 semaines\u003C/h3>\n\u003Cul>\n\u003Cli>Pages explorées non indexées dans Search Console : passées de 94 000 à 18 000 (l'essentiel des URLs de recherche à facettes ne sont plus crawlées)\u003C/li>\n\u003Cli>Crawl de Googlebot recentré sur les pages produit et catégorie : le rapport de couverture montre une augmentation de 40 % du crawl sur les pages à valeur SEO\u003C/li>\n\u003Cli>2 400 pages de tags retirées de l'index en 3 semaines via le noindex meta\u003C/li>\n\u003C/ul>\n\u003Ch2>Les implications pour les crawlers IA et les agents\u003C/h2>\n\u003Cp>L'expansion de la liste des directives non supportées par Google intervient dans un contexte où les robots ne se limitent plus à Googlebot. Les crawlers d'IA (GPTBot, ClaudeBot, Anthropic, etc.) interprètent eux aussi robots.txt, avec des niveaux de conformité variables.\u003C/p>\n\u003Cp>Si votre robots.txt contient des directives non standard, le comportement diverge entre les crawlers. Un \u003Ccode>Crawl-delay: 10\u003C/code> sera ignoré par Google, potentiellement respecté par Bing, et le comportement de GPTBot est non documenté.\u003C/p>\n\u003Cp>L'enjeu pour les sites qui veulent contrôler leur visibilité dans les \u003Ca href=\"/blog/google-s-task-based-agentic-search-is-disrupting-seo-today-not-tomorrow-via-sejournal-martinibuster\">systèmes de recherche agentique\u003C/a> est de maintenir un robots.txt parfaitement conforme à la RFC 9309. Tout écart introduit de l'ambiguïté, et l'ambiguïté profite au crawler — pas à vous.\u003C/p>\n\u003Cp>Pour les sites qui doivent gérer des dizaines de user-agents différents, le modèle à adopter est explicite :\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan># Crawlers de recherche classiques\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>User-agent: Googlebot\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>Disallow: /api/\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>Allow: /api/products\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>User-agent: Bingbot\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>Disallow: /api/\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>Allow: /api/products\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan># Crawlers IA\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>User-agent: GPTBot\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>Disallow: /\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>User-agent: ClaudeBot\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>Disallow: /\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>User-agent: CCBot\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>Disallow: /\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan># Règle par défaut\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>User-agent: *\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>Disallow: /api/\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>Disallow: /internal/\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>Sitemap: https://votresite.com/sitemap.xml\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>La question de l'\u003Ca href=\"/blog/machine-first-architecture-ai-agents-are-here-and-your-website-isn-t-ready-says-no-hacks-podcast-host-via-sejournal-theshelleywalsh\">architecture machine-first\u003C/a> impose une rigueur nouvelle sur ces fichiers de configuration. Un robots.txt n'est plus un simple garde-fou pour Googlebot — c'est le premier point de contact avec une dizaine de systèmes automatisés qui prennent des décisions en fonction de ce qu'ils lisent.\u003C/p>\n\u003Ch2>Monitoring continu : pourquoi l'audit ponctuel ne suffit pas\u003C/h2>\n\u003Cp>Un robots.txt validé aujourd'hui peut être cassé demain. Un déploiement qui écrase le fichier, un plugin WordPress qui ajoute des directives non standard, un développeur junior qui corrige une \"faute de frappe\" en en introduisant une autre.\u003C/p>\n\u003Ch3>Les vecteurs de régression les plus courants\u003C/h3>\n\u003Cp>\u003Cstrong>Les plugins CMS.\u003C/strong> Yoast SEO, Rank Math et All in One SEO génèrent dynamiquement le robots.txt dans WordPress. Une mise à jour de plugin peut modifier silencieusement le contenu du fichier. Si vous maintenez un fichier robots.txt physique à la racine ET qu'un plugin génère une version dynamique, le comportement dépend de la configuration du serveur — et le résultat est souvent imprévisible.\u003C/p>\n\u003Cp>\u003Cstrong>Les déploiements CI/CD.\u003C/strong> Sur une stack moderne (Vercel, Netlify, Docker), le robots.txt est souvent un fichier statique dans le répertoire \u003Ccode>public/\u003C/code>. Un merge accidentel peut écraser le fichier de production avec une version de staging contenant \u003Ccode>Disallow: /\u003C/code>.\u003C/p>\n\u003Cp>\u003Cstrong>Les migrations de serveur.\u003C/strong> Le passage d'Apache à Nginx (ou inversement) peut modifier le content-type du fichier robots.txt. La RFC 9309 exige \u003Ccode>text/plain\u003C/code>. Un serveur mal configuré qui renvoie \u003Ccode>text/html\u003C/code> peut conduire certains parsers à ignorer le fichier.\u003C/p>\n\u003Cp>Vérifiez le content-type avec :\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">curl\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -sI\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> https://votresite.com/robots.txt\u003C/span>\u003Cspan style=\"color:#F97583\"> |\u003C/span>\u003Cspan style=\"color:#B392F0\"> grep\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -i\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> content-type\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Attendu : content-type: text/plain\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Ch3>Screaming Frog comme filet de sécurité\u003C/h3>\n\u003Cp>Screaming Frog affiche les directives robots.txt et leur effet sur le crawl dans l'onglet \"Directives\". Mais il ne détecte pas les directives non standard ignorées — il les affiche sans avertissement. C'est une limitation connue.\u003C/p>\n\u003Cp>Pour un monitoring en continu, un outil comme Seogard détecte automatiquement les modifications de robots.txt entre deux scans et alerte quand une directive de blocage disparaît ou quand une directive non standard est ajoutée. Sur un site de 22 000 pages, la différence entre \"détection en 15 minutes\" et \"détection au prochain audit trimestriel\" représente potentiellement des semaines de crawl gaspillé.\u003C/p>\n\u003Ch2>Ce que cette évolution révèle sur la direction de Google\u003C/h2>\n\u003Cp>L'utilisation de HTTP Archive par Google pour informer ses décisions sur le protocole robots.txt est un signal plus large. Google évolue d'une approche prescriptive (\"voici le standard, conformez-vous\") vers une approche descriptive (\"voici ce que le web fait réellement, adaptons notre interprétation\").\u003C/p>\n\u003Cp>C'est cohérent avec la manière dont Google gère déjà le HTML malformé : le parser de Chromium corrige automatiquement les erreurs courantes. La question est de savoir si cette même tolérance va s'étendre au robots.txt — et si oui, quelles sont les limites.\u003C/p>\n\u003Cp>Le risque : si Google commence à interpréter \u003Ccode>Dissallow\u003C/code> comme \u003Ccode>Disallow\u003C/code>, les sites qui utilisaient involontairement cette faute de frappe pourraient voir leur crawl modifié du jour au lendemain. Des pages qui étaient crawlées depuis des années seraient soudainement bloquées. C'est un changement rétroactif potentiellement destructeur pour les sites qui dépendent de ce comportement accidentel.\u003C/p>\n\u003Cp>L'approche la plus probable est que Google documente d'abord ces directives non standard dans sa \u003Ca href=\"https://developers.google.com/search/docs/crawling-indexing/robots/robots_txt\">documentation officielle des spécifications robots.txt\u003C/a>, avant d'éventuellement modifier le comportement du parser. La documentation est le premier pas — le changement de comportement viendrait après, avec un délai d'adaptation.\u003C/p>\n\u003Cp>Pour les équipes SEO techniques qui gèrent des patrimoines importants, c'est le moment de lancer un audit complet de tous les fichiers robots.txt en production. Pas dans trois mois — maintenant. Avant que Google ne décide de changer son interprétation et que des directives jusqu'ici ignorées deviennent actives.\u003C/p>\n\u003Cp>Les sites qui ont déjà un monitoring automatisé de leur configuration de crawl sont les mieux positionnés pour absorber ce type de changement. Les autres découvriront le problème quand leur trafic organique aura déjà baissé.\u003C/p>",null,12,[18,19,20,21,22],"google","robots.txt","crawl budget","directives","technical SEO","Robots.txt : Google élargit sa liste de directives non supportées","Thu Apr 23 2026 18:02:34 GMT+0000 (Coordinated Universal Time)",[26,40,52],{"_id":27,"slug":28,"__v":6,"author":7,"canonical":29,"category":10,"createdAt":30,"date":12,"description":31,"image":15,"imageAlt":15,"readingTime":16,"tags":32,"title":38,"updatedAt":39},"69e9b607aa6b273b0cd0e423","what-s-the-biggest-technical-seo-blind-spot-from-over-relying-on-tools-ask-an-seo-via-sejournal-helenpollitt1","https://seogard.io/blog/what-s-the-biggest-technical-seo-blind-spot-from-over-relying-on-tools-ask-an-seo-via-sejournal-helenpollitt1","2026-04-23T06:02:47.381Z","Les outils SEO créent des angles morts critiques. Voici ce que les données brutes révèlent — logs serveur, rendering réel, signaux que Screaming Frog ignore.",[33,34,35,36,37],"technical-seo","blind-spots","log-analysis","crawl-budget","rendering","Angles morts du SEO technique : ce que vos outils ne voient pas","Thu Apr 23 2026 06:02:47 GMT+0000 (Coordinated Universal Time)",{"_id":41,"slug":42,"__v":6,"author":7,"canonical":43,"category":10,"createdAt":44,"date":12,"description":45,"image":15,"imageAlt":15,"readingTime":16,"tags":46,"title":50,"updatedAt":51},"69e9ee57aa6b273b0cfdef39","google-lists-best-practices-for-read-more-deep-links-via-sejournal-mattgsouthern","https://seogard.io/blog/google-lists-best-practices-for-read-more-deep-links-via-sejournal-mattgsouthern","2026-04-23T10:03:03.355Z","Google détaille ses best practices pour les deep links 'Read more'. Analyse technique, implémentation HTML, et stratégie de structuration pour maximiser leur apparition.",[18,47,48,49,22],"deep links","sitelinks","structured data","Deep links 'Read More' Google : guide technique complet","Thu Apr 23 2026 10:03:03 GMT+0000 (Coordinated Universal Time)",{"_id":53,"slug":54,"__v":6,"author":7,"canonical":55,"category":10,"createdAt":56,"date":12,"description":57,"image":15,"imageAlt":15,"readingTime":16,"tags":58,"title":63,"updatedAt":64},"69ea34b0aa6b273b0c36315e","68-million-ai-crawler-visits-show-what-drives-ai-search-visibility-via-sejournal-martinibuster","https://seogard.io/blog/68-million-ai-crawler-visits-show-what-drives-ai-search-visibility-via-sejournal-martinibuster","2026-04-23T15:03:12.931Z","Analyse technique de 68M de visites d'AI crawlers. Ce qui déclenche leur intérêt, comment optimiser votre architecture, et les signaux qui comptent vraiment.",[59,60,20,61,62],"AI crawlers","AI search visibility","log analysis","LLM optimization","AI Crawlers : ce que 68 millions de visites révèlent","Thu Apr 23 2026 15:03:12 GMT+0000 (Coordinated Universal Time)"]