Le fichier robots.txt utile dans bien des cas, pour éviter des fuites de crawl (et contrôler au mieux la façon dont le fougueux Googlebot visites vos URL) a des subtilités.
Après avoir corrigé plusieurs erreurs sur le fichier d’un client, je me suis dit qu’un petit article sur le sujet serait pertinent.
On va faire bref et concis.
La directive User-agent
La directive User-agent permet de définir de façon spécifique des règles d’accès (ex: Allow, Disallow) en fonction des crawlers. Google est le moteur qui respecte le mieux le standard vis a vis de cette directive, à la différence de Bing. Si vous souhaitez bloquer pour tous les crawlers une URL spécifique, on écrira:
User-agent:* Disallow: /private/
Si dans un deuxième temps, vous souhaitez bloquer le crawl des résultats de recherche de votre moteur interne, et uniquement pour Googlebot, cela donnera:
User-agent:* Disallow: /private/ User-agent:Googlebot Disallow: /search/
Le problème avec les règles ci-dessus, c’est qu’en l’état Google pourra crawler le répertoire /private/. En effet, dès qu’un User-agent spécifique est déclaré, le crawler mentionné ne respectera QUE les règles qui lui sont associées, et ne tiendra pas compte des règles associées à tous les crawlers (User-agent:*), ni aux autres groupes d’enregistrement. L’ordre des règles n’a pas d’importance, c’est vraiment l’association des règles au crawler qui en a une. Il aurait donc fallu écrire:
User-agent:* Disallow: /private/ User-agent:Googlebot Disallow: /search/ Disallow: /private/
Si vous avez des règles spécifiques à Googlebot, et d’autres à tous les crawlers dont Googlebot, il vous faudra donc recopier l’ensemble des règles relatives à tous les crawlers sous la directive ciblant Googlebot, pour qu’il les respecte.
Bingbot lui tiendra compte des directives spécifiques à lui, mais aussi de celles qui sont indiquées dans la portion relative à tous les crawlers (User-agent:*).
Regroupement des directives
On peut également regrouper les règles dans des groupes d’enregistrement. Si on veut bloquer des répertoires, spécifiquement pour deux crawlers (ex: Bingbot et Googlebot), il suffira d’empiler les déclarations « User-agent », suivies des directives de restriction ou d’autorisation:
User-agent: Googlebot User-agent: Bingbot Disallow: /search/ Disallow: /private/
Ainsi, ni Bingbot, ni Googlebot ne pourront accéder à ces deux répertoires.
Le slash en début de règle
Il est indispensable de placer un slash en début de règle si vous utilisez des wildcards (*) pour cibler n’importe quel caractère. Par exemple la règle ci-dessous pourrait provoquer l’indexation de vos pages de commentaires:
Disallow: */comments
La règle adéquate afin d’empêcher les crawlers de visiter vos URL content « …quelquechose/comments » doit être:
Disallow: /*/comments
Petite subtilité bonne à savoir pour éviter que Googlebot s’enfonce dans les méandres de vos sites.
Google précise malgré tout dans ses spécifications sur le robots.txt: « Si nous trouvons un chemin d’accès sans barre oblique initiale, nous pouvons faire comme si elle y figurait. » Après un test, il semblerait effectivemment que cette règle ne soit plus d’actualité.
Fin de chaîne
Par défaut, si vous ciblez un répertoire spécifique, il est inutile de placer des wildcards (*) en fin de règle, pour cibler tous les contenus de votre répertoire comme ceci:
Disallow: /login/*
En supprimant l’étoile, la règle fonctionnera pour la page /login/, mais aussi pour toutes les URL commençant par /login/, et peu importe ce qu’il y aura derrière. On pourra donc écrire:
Disallow: /login/
Ainsi les URL suivantes seront bloquées:
/login/
/login/user
/login/myaccount
etc.
Si vous souhaitez autoriser le crawl de la page /login/ mais bloquer toutes les URL contenues dans ce répertoire, il vous faudra alors utiliser le signe « $ » pour spécifier la fin de chaîne, et utiliser la directive Allow:
Disallow: /login/ Allow: /login/$
L’ordre de cette directive Allow vs Disallow n’a pas d’importance d’après mes tests. Google place aussi bien le Allow avant ou après le Disallow dans ses fichiers robots.txt. Google indique simplement pour ces instructions allow et disallow: la règle la plus spécifique basée sur la longueur de l’entrée du chemin d’accès [path] l’emporte sur la règle la moins spécifique (la plus courte).
La casse
Le fichier robots.txt est sensible à la casse dans les directives contenant les chemins d’accès. Si vous avez des URL en majuscules (malheureux!), prenez le soin de vérifier qu’elles le sont aussi dans votre fichier robots.txt. Pour ce qui est des User-agent, pas de soucis: Que vous écriviez « User-agent: Googlebot » ou « User-agent: googlebot », vos règles fonctionneront.
Je tiens à vous rassurer: l’absence d’espace entre le disallow et le /, ou entre User-agent et le crawler ciblé n’est pas un soucis:
User-agent:googlebot
Disallow:/seoisnotdead.html
Ma page ne sera pas crawlée par Google.
Ne donnez pas d’indices aux utilisateurs
On veut parfois bloquer aux crawlers des répertoires privés dans le fichier robots.txt. Les petits curieux iront donc chercher dans vos fichiers robots.txt l’existence de ces répertoires (/private/, /perso/, et autres patterns…) Je ne vous donnerai pas les Google Dorks en question, non. Soyez juste prudent: faites du cloaking pour les utilisateurs, ou plus simplement bloquez vos répertoires privés avec une authentification.
À vos fichiers robots.txt! Le mien est nickel 🙂 http://ww.yapasdequoi.com/robots.txt
Le robots.txt de Nike est sympa aussi : http://www.nike.com/robots.txt
Bonjour et merci pour cet article,
ça fait du bien de remettre les choses au clair, car les articles sur le sujet commence à dater et il y a eu des changements récemment.
Quid de la commande noindex dans le robots.txt ? Est ce que tu las testé ou juste une vaste utopie ?
Merci d’avance
Excellente question, j’ai failli parler du noindex aussi. Oui, je l’ai déjà testé il y a un an et elle fonctionnait, mais n’était prise en compte qu’ou bout de plusieurs semaines. Il faudrait regarder si c’est toujours le cas aujourd’hui!
D’après mes derniers test, l’instruction Noindex dans un fichier robots.txt est interprété comme une instruction Disallow.
C’est à dire que cela ne desindexe pas des url déjà indexé. Ca empêche juste le crawl.
Oui le noindex ça fonctionnet et uniquement pour Google, comme depuis le début.
Pour rappel noindex en robots.txt = disallow + ne pas montrer le résultat dans les SERP
Bonjour
Juste une petite précision concernant les curieux (dont je fais partie) : il est bon de mettre plutôt un .htaccess dans le dossier à interdire plutôt que de le mentionner dans robots.txt. Voir mon article sur Joomla Magazine (https://magazine.joomla.org/international-stories-all/articles-in-french-all/robots-optimisation-securite)
Il m’est souvent arrivé de voir Disallow: /stats/ pour, alors m’y rendre manuellement (URL/stats) et paf!, j’ai accès à toutes les statistiques du site; zéro protection du dossier. Si je n’avais pas vu cette ligne dans robots.txt, je n’aurais jamais su l’existence du dossier.
Super post, merci et j’ai particulièrement apprécié le final (le http://ww.yapasdequoi.com/robots.txt) ainsi que l’exemple donné par Dimitri sur Nike.com 🙂
Finalement, le fichier robots.txt m’apparaît beaucoup moins compliqué que ce que je pensais.
Merci d’avoir pris le temps de rédiger un article mettant à jour le sujet.