Alors, que faire? Déjà, il faut se mettre d'accord sur une seule url qui sera l'url officielle de votre site/blog. Si vous êtes tout seul à maintenir votre site, pas de soucis, c'est vous qui décidez. Si vous êtes plusieurs, le choix peut revêtir une certaine importance.

Par exemple, sur la présence du "www" au début de l'url, plusieurs points peuvent motiver votre choix:

  • Les internautes sont habitués à la présence de ce "www" et ne concoivent pas forcément un site sans "www"
  • L'url est plus courte et permet d'économiser un nombre de caractères non négligeable lors de la promotion du site sur des médias limités en caractères, tels que twitter ou des campagnes SMS. Il est important de noter qu'il ne faut pas utiliser des services de compressions d'urls tels que bit.ly parce que vous ne bénéficierez pas du page-rank du à ces liens entrants.
  • L'utilisation du "www" peut être pratique pour différencier le site "principal" de sous-sites. Par exemple, dans mon cas, j'ai mon blog sur http://blog.mathieumuller.fr/ sachant que http://www.mathieumuller.fr/ n'est pas encore utilisé pour le moment, mais que j'y compterai certainement mettre des liens vers tous mes sous-sites.

Bref, quelque soit la raison, le choix du nom de domaine reste important. Mais que faut il faire une fois que le nom de domaine est choisi? Eh bien c'est simple, il faut expliquer aux moteurs de recherches (et aux internautes) quelle est l'url correcte.

Pour se faire, plusieurs méthodes peuvent être utilisées: primo, on peut indiquer aux navigateur, et aux internautes, que l'url sur laquelle ils se trouvent n'est pas la forme canonique. Cela passe par effectuer une redirection HTTP de type 301 (Moved permanently) dès qu'un utilisateur arrive sur un des faux domaines.

Si vous disposez d'un serveur Apache, avec le module Rewrite activé, vous pouvez très bien écrire ce genre de chose dans un fichier .htaccess à la racine de votre dossier web:

# Redirection sur le bon domaine
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteRule ^(.*) http://www.example.com/$1 [L,R=301]

Il y a quelques différences par rapport à l'implémentation fournie par Apache dans sa documentation de mod_rewrite.

J'ai par exemple supprimé la seconde condition sur le HTTP_HOST (inutile à mes yeux), mais surtout, j'ai changé la règle de rewrite pour que toutes les urls soient redirigés vers le domaine correct en redirection permanente (R=301). Auparavant, seules les urls internes étaient redirigées vers le bon domaine, ce qui était dommageant pour les internautes qui arrivaient à la racine de votre site.

Une autre manière de procéder est d'interdire le crawl en plaçant un fichier robots.txt qui laissera les moteurs de recherche seulement crawler le site officiel. Cela règle le problème de contenu dupliqué, et cela permet aussi aux internautes de toujours pouvoir accéder à votre site par l'url qu'ils préfèrent, et de bookmarker ces urls, sans avoir à subir de redirection. Pour cela, il faudra créer un fichier dynamique nommé robots.txt à la racine de votre site. Pour tous les domaines qui ne devront pas être indexés (donc tous sauf le domaine principal) un appel sur le fichier /robots.txt devra renvoyer le contenu suivant:

User-agent: *
Disallow: /

Alors que pour le domaine principal le fichier devra contenir ceci:

User-agent: *
Disallow:

La dernière méthode consiste à rajouter une balise de type canonical dans le code HTML de votre site, qui va indiquer l'url officielle du document que l'internaute consulte:

<link rel="canonical" href="http://www.example.com/mon-url" />

Naturellement ces trois éléments peuvent être combinés entre eux pour les plus paranoïaques d'entre vous; en effet ils sont complémentaires et ne devraient pas avoir d'effets néfastes les uns sur les autres.

Un dernier point reste à régler: la possibilité d'atteindre une page interne par plusieurs urls. Apache permet d'avoir un document par défaut lors des listings de répertoires. Par exemple, http://www.example.com/mon-url/index.php peut avoir le même contenu que http://www.example.com/mon-url/. Ce genre de choses est aussi analysé comme étant du duplicate content par les moteurs de recherche. Bien que ce point soit traité par l'ajout de la balise HTML canonical, on ne peut pas être sur que tous les moteurs de recherche l'interprètent.

Si vous disposez du module de rewrite dans Apache, vous pouvez rajouter les lignes suivantes dans votre fichier .htaccess, à la suite des autres règles de redirections (n'oubliez pas de remplacer "index.(php|html)" par votre fichier par défaut pour le répertoire):

# Elimation du nom de dossier
RewriteRule ^(.*)index.(php|html)$ $1 [L,R=301]

D'autres méthodes existent naturellement (notamment faire des redirections au niveau PHP via la méthode header(), mais elles sont beaucoup moins génériques et sortent donc du cadre de ce billet.