Date de publication du RFC : Avril 2012
Auteur(s) du RFC : M. Ohye, J. Kupke
Pour information
Première rédaction de cet article le 9 avril 2012
Depuis le RFC 5988, il existe un mécanisme
standard pour exprimer les types des liens entre deux ressources sur le
Web. Ce très court RFC
spécifie un nouveau type de lien, canonical
, qui
permet d'indiquer quel est l'URI
canonique
d'une ressource Web.
Le but de ces liens est de permettre d'exprimer l'idée « Quel que soit l'URI que vous avez utilisé pour arriver sur cette ressource, sachez que l'URI canonique, la référence, est celui indiqué par ce lien. » Cela permet notamment à un moteur de recherche de n'indexer les ressources que sous l'URI canonique (au cas où du contenu soit dupliqué sous plusieurs URI). Cela permet également à un navigateur de ne mémoriser que l'URI canonique, sans d'éventuels paramètres (options d'affichage, identificateurs de session et autres trucs qui viennent souvent polluer les URI).
L'auteur qui place un lien canonical
doit donc
veiller à ce que l'URI canonique désigne bien une ressource qui mérite
ce titre (identique à la ressource de départ, ou un sur-ensemble de
celle-ci, ce dernier cas est explicitement autorisé par le RFC). Voir
la section 5 qui donne de bons conseils aux auteurs.
Par contre, l'URI canonique ne doit notamment pas :
La section 4 donne des exemples concrets. Si la version canonique
d'une ressource est désignée par l'URI
http://www.example.com/page.php?item=purse
, alors
les URI
http://www.example.com/page.php?item=purse&category=bags
ou
http://www.example.com/page.php?item=purse&category=bags&sid=1234
qui sont des URI possibles de la même ressource peuvent indiquer
http://www.example.com/page.php?item=purse
comme
canonique.
Pour cela, deux techniques, le classique lien
HTML avec l'attribut rel
:
<link rel="canonical" href="http://www.example.com/page.php?item=purse">
Il est également utilisable en version relative :
<link rel="canonical" href="page.php?item=purse">
Et la deuxième technique (pratique notamment pour les ressources qui ne sont pas en HTML, une image, par exemple), l'en-tête HTTP (section 3 du RFC 8288) :
Link: <http://www.example.com/page.php?item=purse>; rel="canonical"
Pour prendre un exemple réel, si on demande à
Wikipédia (qui fait face à des homonymies
nombreuses) l'URL http://fr.wikipedia.org/wiki/M%C3%A9lenchon
, on est redirigé
vers la page sur Jean-Luc Mélenchon qui
contient :
<link rel="canonical" href="/wiki/Jean-Luc_M%C3%A9lenchon" />
qui indique que la page canonique est celle avec le nom complet.
Le nouveau type canonical
est désormais enregistré à l'IANA.
Petit avertissement de sécurité (section 7). Si une ressource est modifiée par un attaquant, il peut mettre un lien vers un URI canonique de son choix. Bien sûr, il pourrait aussi massacrer complètement la ressource. Mais le changement d'URI canonique est discret et risquerait de ne pas être noté par un humain, alors même que certaines implémentations en tiendraient compte, par exemple pour apport du trafic à l'URI de l'attaquant.
Qui gère aujourd'hui ce type de liens ? Chez les moteurs de recherche, Google le fait (voir leurs articles « Specify your canonical », « Supporting rel="canonical" HTTP Headers », l'article de conseils pratiques « About rel="canonical" » et enfin « Handling legitimate cross-domain content duplication »). Pareil chez Yahoo (« Fighting Duplication: Adding more arrows to your quiver ») et Bing (« Partnering to help solve duplicate content issues »). Par contre, je ne sais pas si les sites de bookmarking comme del.icio.us ou SeenThis font ce travail de canonicalisation.
Version PDF de cette page (mais vous pouvez aussi imprimer depuis votre navigateur, il y a une feuille de style prévue pour cela)
Source XML de cette page (cette page est distribuée sous les termes de la licence GFDL)