8

Les petites subtilités du fichier robots.txt qui peuvent faire mal

GoogleBotLe 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.

Source: http://www.abondance.com/actualites/20160225-16197-google-a-modifie-son-mode-de-lecture-des-fichiers-robots-txt.html

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

8 commentaires

  1. 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.

  2. 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

  3. 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.

  4. 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.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *