Optimiser la structure Dotclear pour le référencement

Un titre bien prétentieux, étant donné que je ne suis pas un expert en la matière.

Cet article a pour seule finalité de vous faire partager mes découvertes à droite et à gauche pour optimiser le code de Dotclear de façon à éviter certains freins à leur indexation, on ne va pas parler ici de contenu, de backlinks ou autres, mais uniquement de code.

Au passage je suis preneur de retours de mes quelques lecteurs référenceurs (Sébastien, Aurélien…) pour me dire ce qu’ils en pensent.

Attention : toutes les manipulations concernent un blog tournant sous Dotclear 1.2.x, pas pour Dotclear 2, même si il est possible que certaines choses soient également applicables à Dotclear 2, principalement pour la structuration des URLs.

Vous êtes prêts ? C’est parti.

1 – Simplifions les URLs de nos billets

Par défaut, Dotclear propose des urls du type http://monsite.net/dotclear/index.php/2005/05/05/42-post-titre, c’est sympa, mais on veut quelque chose de plus simple et de plus lisible.

C’est la partie la plus simple, pour cela il suffit d’utiliser le fameux Plugin Personnalisation d’URLs de Steve Frecinaux dont vous trouverez la source auto installable sur le wiki de Dotclear dans la page de plugins.

Choisissez le format qui vous convient, pour ma part j’ai choisi « Sans date ni numéro de billet (titre) » en n’oubliant pas de cocher la compatiblité avec tous les autres modes.

2 – Un Dotclear proprement à la racine

Ce titre fait référence à l’excellent article de Xave dans le Petit Dotclear illustré : Un DotClear proprement à la racine.

Lisez bien l’article pour bien comprendre les histoires d’URL rewriting et revenez ici, car certaines parties de sa solution m’ont posé problème.

J’ai, pour ma part, profité de ma migration vers Dotclear 1.2.7 pour enfin me débarrasser de cet /index.php/ disgracieux dans mes précédentes URLs.

Premier problème : certaines de mes pages devenaient inaccessibles.

J’avais pourtant tout bien fait et je me retrouvais avec un .htaccess ressemblant à ça :

Options +MultiViews

RewriteEngine On 
RewriteCond %{REQUEST_URI} !dotclear
RewriteCond %{REQUEST_URI} !blog
RewriteRule (.*)$ /blog.php/$1

Après avoir un peu cherché, il se trouve que tous mes billets dont les urls contenaient le mot « dotclear » étaient devenues innaccessibles, je ne suis pas un pro de l’URL rewriting, mais j’ai supposé un effet de bord du : RewriteCond %{REQUEST_URI} !dotclear

Je pouvais au choix refaire toutes les adresses des billets contenant le mot Dotclear, ou trouver une autre solution, vu que certains de ces billets sont les premières sources de trafic du blog et que je ne me sentais pas de faire des redirections pour chacun de ces billets et surtout ça me gênait de supprimer le terme Dotclear des URLs.

La solution ? Changer le nom du répertoire dotclear en autre chose, de préférence un mot/nom que je ne risque pas d’utiliser à l’avenir dans un titre de billet.

J’ai choisi le nom rahhh comme nom de répertoire, ne cherchez pas, je suppose que ça avait à voir avec mon état d’esprit du moment.

Ce qui nous donne maintenant le .htaccess suivant :

Options +MultiViews

RewriteEngine On
RewriteCond %{REQUEST_URI} !rahhh
RewriteCond %{REQUEST_URI} !blog
RewriteRule (.*)$ /blog.php/$1

Ohhh surprise, mes jolis billets parlant de Dotclear sont de nouveau accessibles.

Bref, passons au deuxième problème : mes anciennes pages sont référencées avec l’adresse http://www.ajblog.fr/index.php/… et sont donc inaccessibles directement à partir des moteurs de recherche.

Pas grave, on va rediriger tout ça avec l’ajout d’une petite ligne dans le .htaccess, RedirectMatch 301 index.php/(.*) http://www.ajblog.fr/$1, et ça devrait marcher… Ah ben non, forcément.

La faute à la réécriture d’urls, donc on va devoir y ajouter une exception pour qu’elle ne force pas le index.php. On se retrouve alors avec le .htaccess suivant :

Options +MultiViews

RedirectMatch 301 index.php/(.*) http://www.ajblog.fr/$1

RewriteEngine On
RewriteCond %{REQUEST_URI} !rahhh
RewriteCond %{REQUEST_URI} !blog
RewriteCond %{REQUEST_URI} !index.php
RewriteRule (.*)$ /blog.php/$1

C’est beau, tout fonctionne, mes anciennes urls redirigent bien vers les nouvelles et je me suis ENFIN débarrassé du /index.php/, je suis assez content de moi au final, car je l’avoue, la réécriture d’URLs reste encore une science un peu floue pour moi.

Maintenant que j’ai les URLs que je désire, enfin, à peu près, je vais m’attaquer à un autre point qui semble important : le duplicate content.

3 – Eviter le duplicate content

Un des problèmes (parfois vu comme un avantage) d’un moteur de blog, c’est que les billets ou articles sont accessibles via une multitude d’Urls :

  • http://www.monsite.com/categorie/mon-billet
  • http://www.monsite.com/annee/mois/jour/mon-billet
  • http://www.monsite.com/categorie/annee/mon-billet
  • http://www.monsite.com/categorie/annee/mois/mon-billet
  • http://www.monsite.com/categorie/annee/mois/jour/mon-billet

Ce qui fait parfois que certains contenus sont référencés par les moteurs de recherche sous de nombreuses adresses avec le même contenu, c’est ce que l’on appelle le duplicate content.

Là, on va faire appel à différentes techniques qui toucheront principalement au template :

  • Modifier le code d’entête du template Dotclear
  • Travailler au niveau du robot.txt (principalement des exceptions)
  • Intégrer des modifications sur des fonctions Dotclear via le fichier prepend.php du thème.

3 – 1 : Une description et des mots clés personnalisés pour chaque billet

Par défaut, Dotclear utilise les même contenus pour les balises title, description pour chaque page du site, seule la balise title change un peu, en ajoutant au titre du blog le titre de la page vue et il n’y a pas de balise keywords.

Bien que beaucoup de référenceurs s’accordent pour dire que ces balises ont perdu leur importance, j’ai cru comprendre qu’il faut quand même les prendre en compte, ne serait-ce que pour éviter ces problèmes de duplicate content.

J’ai donc fait une petite recherche et suis tombé sur cet article d’Olivier Duffez du site Webrankinfo : Optimiser le référencement d’un blog Dotclear : balises TITLE et META.

J’ai ensuite essayé de voir si cette modification avait été effectuée par d’autres, et vu que différents référenceurs semblent l’utiliser, je me suis dit que ça ne devait pas être mauvais.

En gros, le script proposé vous génère une description et des mots clés en fonction du contenu de la page active, chaque page est donc unique.

3 – 2 : Mais que faire avec le robot.txt ?

On va y coller des exceptions, en clair, on va essayer d’indiquer aux robots ce que l’on ne veut pas qu’ils crawlent et donc référencent.

Voici ce que j’utilise pour l’instant : contenu du robots.txt

Sitemap: http://www.ajblog.fr/gsitemap

User-agent: *
Disallow: /rahhh/ecrire/
Disallow: /rahhh/themes/
Disallow: /rahhh/conf/
Disallow: /rahhh/inc/
Disallow: /rahhh/layout/
Disallow: /rahhh/share/
Disallow: /rahhh/l10n/
Disallow: /rahhh/rss.php
Disallow: /rahhh/rss-bis.php
Disallow: /rahhh/atom.php
Disallow: /rss.php
Disallow: /atom.php
Disallow: /rss-bis.php
Disallow: /2007/$
Disallow: /2006/$

User-agent: Googlebot-Image
Allow: /*

Bon, encore une fois, je ne suis pas un pro du robots.txt, j’en suis encore à essayer de comprendre toutes les subtilités, j’y suis allé un peu à la hache.

En gros, je ne veux pas que les robots indexent certains répertoires « systèmes » de dotclear, qu’ils ne référencent pas les urls avec les dates (bon je suppose qu’un simple Disallow: /2006/ et /2007/ auraient suffit) et qu’ils ne référencent pas mes flux de syndication, car il semble d’après certaines de mes lectures qu’il vaut mieux éviter cette autre source de duplicate content.

Le reste, c’est pour déclarer ma sitemap pour Google (j’y reviens plus tard) ou autoriser le robot Google-Image à aller fouiner partout (là je ne suis pas persuadé du truc, j’ai juste vu ça sur de nombreux robots.txt).

Maintenant que l’on a créé son robots.txt, on va s’attaquer au thème pour éviter de donner une indigestion au robot avec un trop plein d’URLs.

3 – 3 Personnaliser son thème pour présenter les bonnes adresses aux robots

3 – 3 – 1 Travaillons de la tête

Si vous regardez la source d’une page Dotclear au niveau du head vous allez trouver une série de liens sous cette forme : <link rel="section" href="/index.php/Architecture-dinformation" title="Architecture d’information" /> (piquée sur http://blog.60questions.net/) et <link rel="archive" href="/index.php/2007/10" title="octobre 2007" />, le premier « lien » est celui d’une catégorie, le deuxième est un lien vers un affichage par mois.

Deux choses pour y remédier :

  • On va supprimer les liens vers les archives temporelles
  • On va ajouter un / à la fin du lien vers la catégorie pour bien signifier qu’il s’agit d’une « rubrique », d’un « dossier », et non pas d’une page.

Cet affichage dans le head est généré par une fonction appelée <?php dcHeadLinks(); ?>, on va en créer une version personnalisée que l’on intègrera au fichier prepend.php de son thème qui est fait, je le rappelle, pour ça. ON NE TOUCHE PAS AU MOTEUR DOTCLEAR.

Voici le code à insérer dans votre fichier prepend.php :dcheadlinks2.txt

Vous allez donc maintenant ouvrir le fichier template de votre thème et remplacer la ligne <?php dcHeadLinks(); ?> par <?php dcHeadLinks2(); ?>, c’est ainsi que nous allons appeler la fonction dans notre fichier template, fonction qui n’est qu’une simple modification/adaptation de la fonction de base Dotclear (je ne suis pas un pro de php).

Enregistrez le tout, publiez sur votre serveur et vérifiez votre code source, normalement les liens vers les rubriques sont terminés par un / et les liens vers les archives temporelles ont disparu.

Passons à la suite

3 – 3 – 2 Travaillons-le au corps

C’est bien beau de nettoyer le head de ma page, mais ça risque d’être un peu inutile et redondant si je n’effectue pas des coupes franches dans ce qui est effectivement affiché dans mes pages.

Là on va donc s’attaquer à la partie « sidebar » de notre page, et la première manipulation sera simple : on retire tout ce qui lie nos archives temporelles, allez, hop hop, soyons fous, le calendrier, les archives, tout, le code des templates Dotclear est suffisamment explicite pour trouver tout de suite quoi retirer.

Voila, ça c’est fait, il ne reste plus que ces satanés liens vers les rubriques qui ne veulent toujours pas se terminer par un / salvateur.

Comme pour le dcHeadlinks, on va modifier une fonction de Dotclear via le prepend.php, le dcCatList.

Vous copiez le code contenu dans le fichier texte suivant : dccatlinks2.txt

Et vous le collez dans votre prepend.php.

Ensuite vous éditez votre template.php et vous changez <?php dcCatList(); ?> en <?php dcCatList2(); ?>, vous enregistrez, vous publiez, et maintenant les urls AFFICHEES vers les catégories se finissent bien par un /.

Ici je parlais de la fonction DcCatlisthor qui, en fait, était une fonction personnalisée que j’avais pondue il y a longtemps et qui donc n’a aucun intérêt pour cet article…

Et normalement les URLs AFFICHEES seront modifiées.

Bon, c’est tout pour aujourd’hui, je vais modifier ce billet à l’avenir à chaque nouvelle découverte ou chaque apport trouvé à droite et à gauche.

Bon dimanche et j’étrenne au passage la création de la rubrique référencement étant donné que c’est un nouveau secteur que j’explore, je pense que je vais avoir pas mal de choses à dire…

Cordialement,
Aymeric Jacquet

Tags : ,