Mon postulat de base pour arriver à cette conclusion était le suivant : l'élément de base d'information de ce blog est un article dans son entierté. Par conséquent, tout le reste de ce monologue n'a aucun sens pour des blogs de type feuilleton ou des blogs ayant l'habitude de parler de beaucoup de choses différentes dans un seul et même article.

Le but est donc d'empêcher aux robots des moteurs de recherche d'indexer le contenu des pages d'archives, tout en les laissant sotcker tout ce qu'ils souhaitent sur les pages contenant un billet seul. Bien entendu, il faut malgré tout laisser l'autorisation à ces robots de parcourir les pages d'archives, afin qu'ils puissent trouver les pages des billets... La solution à cette problématique porte le doux nom de « balise meta robots. » C'est une balise HTML qui vient se mettre dans l'entête de la page web (section <head>) et elle doit contenir une combinaison des mots clefs INDEX, NOINDEX, FOLLOW et NOFOLLOW. Voici la signification de chacun de ces mots clefs :

INDEX
indique que le moteur de recherche peut indexer la page courante ;
NOINDEX
demande au moteur de recherche de ne pas indexer la page courante ;
FOLLOW
indique que le moteur de recherche peut suivre tous les liens de la page courante ;
NOFOLLOW
demande au moteur de recherche de ne suivre aucun lien de la page courante.

Pour atteindre le but que je souhaite, il faut donc mettre la balise suivante sur les pages contenant un seul article :

<meta name="robots" content="index,follow" />

et cette balise-ci sur toutes les autres pages :

<meta name="robots" content="noindex,follow" />

Dans DotClear, cela se fait très facilement en mettant la ligne suivante dans la partie <head> du fichier template.php du thème :

<meta name="robots" content="<?php 
 	if ($mode != 'related' && $mode != 'post') { 
 		echo 'noindex,follow';
 	} else { 
 		echo 'index,follow'; 
 	} ?>" />

Et voilà, c'est tout ce qu'il y a à faire. Et est-ce que ça marche ? Je crois : depuis que j'ai mis cela en place sur mes blogs, je ne tombe plus sur mes pages d'archives lors de recherche et les billets sont, eux, toujours trouvables facilement.

Lorsque j'ai proposé cette solution sur le forum de DotClear (en réponse à cette question), on s'est interrogé sur la faisabilité de ces mêmes restrictions au moyen d'un fichier robots.txt, le standard d'exclusion des robots sur le web. Mon sentiment est que cela n'est pas faisable. Il y a en effet deux limitations dans ce standard qui rendent cela fort difficile :

  • on ne peut pas autoriser explicitement le parcours de certaines pages ;
  • les préfixes utilisés sont inclusifs.[1]

Du coup, il devient impossible d'interdire aux robots de parcourir les pages d'archives mensuelles, mais d'autoriser l'accès aux pages des billets. Il suffit de comparer ces deux URLs pour s'en rendre compte :

  • http://www.example.com/index.php/2005/04/01/1-premier-billet (adresse d'un billet) ;
  • http://www.example.com/index.php/2005/04 (page d'archive de tous les billets du mois d'avril 2005).

Si on pouvait explicitement autoriser certaines pages avec des règles Allow (en indiquant que l'on souhaite une priorité plus importante pour ces règles Allow), on pourrait imaginer générer automatiquement le fichier robots.txt lors de la mise en ligne d'un nouveau billet. Le fichier contiendrait alors la liste de tous les billets publiés sur des lignes de type Allow et la liste de toutes les pages d'archives sur des lignes de type Disallow. Il ne semble donc pas y avoir de solution dans ce cas-là...

De plus, il y a encore un effet de bord qui peut se produire : le standard robots.txt ne permet que d'interdire totalement l'accès d'une page aux gentils robots.[2] Ainsi, en interdisant les pages d'archives, les robots auraient alors certainement beaucoup de peine pour trouver l'intégralité du contenu sur le site... Bin oui, la navigation sur un blog se fait quand même massivement à travers des pages d'archive (en considérant qu'une page d'archive est toute page contenant plus d'un billet, donc y compris la page d'accueil).

Conclusion : la mise en place d'une balise meta robots est très facile et remplit son rôle à merveille... J'ai toutefois un regret : il n'y a pas de moyen d'interdire aux robots d'indexer certains blocs de la page. Chez moi, il est par exemple inutile que les robots indexent la citation aléatoire affichée sur chaque page, puisque cette citation n'apporte aucune information utile.[3]

Notes

[1] Ce qui signifie qu'une règle Disallow: /bob interdira l'accès au dossier /bob/, mais également à l'image nommée bobetlachoseverte.jpg.

[2] Je précise « gentils, » car les robots n'ont absolument aucune obligation de respecter ce standard. Les robots à spam, qui sont continuellement à la recherche de nouvelles adresses email, n'essaient même pas de récupérer ce fichier par exemple.

[3] Oui, je sais, vouloir trouver de l'information utile ici est un paradoxe...