Optimiser la structure Dotclear pour le référencement


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 https://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/(.*) https://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/(.*) https://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: https://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…


29 réponses à “Optimiser la structure Dotclear pour le référencement”

  1. Voilà un article qui devrait faire des heureux sur le forum :)

    Une rectif et de petites question en attendant une lecture plus approfondie. L’auteur du tuto pour le blog à la racine c’est Xave et non Pep. Tu auras confondu un muppet avec l’autre ;)

    L’autre question c’est ce dont tu parles au sujet du répertoire à ne pas nommer dotclear. Ça m’épate parce qu’on est nombreux à le faire sans avoir jusque là essuyé de problèmes. Je pense que c’est dû l’utilisation conjointe du plugin de personnalisation d’URL ? (Et moi qui n’y connais rien non plus en rewrite rule, je ne comprends pas pourquoi si ‘dotclear’ dans une url pose un souci ça n’est pas le cas pour ‘blog’ ?)

    Ah et puis c’est quoi la fonction dcCatListhor ? Une autre fonction personnalisée ?

    Une remarque aussi : éviter le duplicate content est une question qui a été posée à plusieurs reprises sur le forum mais j’ai souvent entendu dire par des gens en lesquels j’ai plutôt confiance que les robots ne sont pas si cons et savent reconnaître les duplicate content qui n’en sont pas – dont les urls communes à un blog. Apparemment deux écoles s’affrontent à ce sujet. Quoi qu’il en soit, ton robots.txt reste utile au référencement sur une même url de chaque article, cela dit.

  2. Oops, c’est réparé pour Xave, ça m’étonnait aussi que PEP ponde un truc aussi technique. ;)

    Pour le problème avec le terme dotclear, franchement je ne sais pas trop, comme tu dis, peut être un problème de conflit avec un autre truc, mais chez moi ça plantait totalement.

    dcCatListhor Je ne sais plus trop, c’etait un truc qui trainait dans mon prepend.php, surement un reste d’un ancien template.

    Pour le duplicate content, je me suis juste basé sur diverses réflexions que j’ai lu à droite et à gauche et que je pourrais résumer de la façon suivante : si vous avez un doute sur le faite que ça pose problème, faites comme si.

    J’ai fait des tests pour voir certains résultats google sur des requètes basées sur des contenus dans le corps des billets et non pas dans les titres, et en regardant les « résultats ignorés non affichés par google » je trouvais 5 voir 6 versions du même contenu proposé avec 5 ou 6 URLs différentes, donc dans le doute. ;)

    Au fait, tu as testé VisoHotlinks ?

  3. Pour les années tu t’es prit la tête en effet ^^

    Je pense que qqchose comme :
    Disallow: /2006/
    Disallow: /2007/
    est pas mal pour l’année complète. Tu peux aussi ajouter $ à la fin (Le symbole $ permet de préciser la fin d’une URL) mais ça ne sert pas trop il me semble (je crois avoir lu ça mais je sais plus très bien où ;))

    N’ayant jamais vraiment regardé l’arborescence d’un DC, est-ce que tu désactive tout ce qui derrière rahhh ? Si oui un Disallow: /rahhh ne suffirati pas ?

  4. Arkan : je pense aussi pour le robot.txt, mais dans le doute hein…

    Pour le disallow : /rahhh, franchement, je ne sais pas.

    Olivier : Ca va, je ne dis pas trop de bêtises ?

    Merci pour la coquille, je viens de la corriger, d’ailleurs je me lance dans la correction de l’article que j’ai un peu publié à la va vite.

    Au passage je t’ai rendu la paternité de l’article. ;)

  5. Wynfo.Net : c’est parce que tu utilises les URLs en Query String et non pas en Path Info, c’est une potion qui se trouve dans Outils > Configuration de Dotclear >Type des URL. Attention toutefois de bien penser que cela va avoir un impact sur toutes les Urls du blog.

  6. Les Webmasters sont ils comme nous ?

    Je viens de lire un article de AYMERIC sur son fameux blog: AJBLOG…. En lisant son post (Optimiser la structure Dotclear pour le référencement) j’ai eu comme une envie irrépressible de commenter quelquefois ligne par ligne ses propos.

    Pour

  7. Merci pour cet excellent article !

    Je ne suis pas convaincu à 100% de l’effet de tous ces changements, mais je me dis que ça ne peut pas faire de mal :) On verra l’évolution des statistiques.

    Ah, et une petite chose, Disallow: /2007/$ ne fonctionne pas chez moi, j’ai du enlever le $.

  8. Merci pour ton tutorial, j m’y connaissais pas trop en php etc et j’ai tout de même bien pu suivre.

    Le dernier lien vers le fichier texte pour mettre un / ala fin de la catégorie marche plus :( est ce que ca serait possible que tu le mette a jour j’ai pas retrouvé cette explication ailleur.

    Merci beaucoup en tout cas !

  9. Djoh : en effet, je ne suis pas moi même convaincu a 100% de l’utilité réelle de certains changements, mais dans l’absolu, ils suivent plutôt des « bonnes pratiques » donc ça ne devrait pas pouvoir faire de mal.

    Je crois que j’ai le même souci avec le $, faut vraiment que je prenne le temps de m’intéresser aux subtilités du robots.txt.

    luch : désolé, je viens de remettre le fichier, il y avait une erreur dans le nom du fichier dans le lien.

  10. Tiens, puisque tu repasses dans le coin (et t’as vu, moi aussi !)

    Tu utilises le plugin Pagination, que t’as modifié à ta sauce dans l’affichage mais pas dans le fonctionnement.
    Je pense qu’il y a un intérêt à ne pas indexer les pages en p2, p3 etc. D’ailleurs, je trouve ce format d’URL très mal choisi ! djoh.net/blog/?billets-plus-anciens serait mieux que djoh.net/blog/?p2 …

    A ce propos, as-tu une idée de comment empêcher l’indexation de ces pages ? J’avais tenté une génération dynamique des balises méta (celle proposée sur WRI), mais avec le plugin même la page d’accueil se retrouve en mode « pagination ».
    Avec le robots.txt, faire un disallow:/blog/?p$ bloque aussi tous les articles dont le titre commence par la lettre p …

    Une idée ?

  11. Je dois avoué que c’est une grosse source d’infos, j’avais déjà lu les pages d’Olivier sur WRI. Yen a marre d’avoir un page rank de N/A alors je me décide à agir.

    Merci pour toutes ces informations!

    Bacchus

  12. Djoh : et oui, c’est bien un des problèmes du robots.txt et je suis confronté au même problème.

    Une solution serait d’éditer le fichier fonctions du plugin pagination pour ajouter un rel= »nofollow » dans les liens de la navigation.

    Bacchus : bon courage, j’ai l’impression que vous êtes un peu confronté au problème du !dotclear dans le .htaccess vu les problèmes de votre dernier billet. ;)

  13. En effet, je viens de m’en rendre compte, d’ailleurs que ce soit !blog ou !dotclear ça foire. Mais bon, bousiller mon blog est ma spécialité alors ^^

    Je suis déjà en train de tout corrigé

    Merci

  14. Merci beaucoup d’avoir mise a jour :)

    J’ai une petite question : est ce quelqu’un saurait mettre une description différente que le titre pour l’index et les pages rubriques ?

  15. Bonsoir

    Très bon complément à l’article de WRI (dont je suis l’auteur :-D )

    Je patauge toujours de mon côté à l’optimisation des pages « chronologiques » (ou à leur éradication de l’index Google) du fait que mes URL sont du type /?123-mon-titre

    Ce p… de point d’interrogation que je n’ai pas géré aux débuts de mon blog me pourrit la vie ! En phase de relooking total actuellement (c’est pour cela que la mise en page est disons… en laisser allé !)

  16. Bonjour et merci pour cet excellent article !
    Comme une daube j’ai choisi le query string donc c’est mort je ne peux pas me permettre de changer toutes les URLs du blog…

    Je rencontre un problème ! Concernant le plugin pagination, il ne va pas à la ligne au bout et continue à l’horizontale de manière infinie ! Auriez-vous une solution svp ?

    http://www.videosdepolice.com/

    Merci par avance,
    bernard

  17. Hum!

    Une chose que je viens de voir, supposons qu’on a installer le plugin related (pages connexes), du coup le:

    <?php dcCatList();>

    n’existe plus et est changer selon notre désire en:

    <?php dcFilteredCatList($filter=array('categorie'),$block='<ul>%s</ul>',$item='<li>%s</li>'); ?>

    ou categorie est une catego que l’on ne veut pas afficher sur la page index.

    Donc, comment dccatlinks2 bousillera agira si je l’ajoute et quel impacte cela aura sur le plugin.

  18. Bacchus : il suffit de récupérer le code php correspondant à la fonction dcFilteredCatList, probablement dans le répertoire du plugin dans le dossier « ecrire », en fait une copie dans le prepend.php de ton thème ou tu appliquera les modifications de dccatlinks2 (ajout du /), tu peux l’appeler du coup dcFilteredCatList2. Puis faire l’appel à cette fonction dans ton thème à la place de la première.

  19. Optimiser Dotclear pour le référencement

    J’ai glaner entre autre ceci: Optimiser la structure Dotclear pour le référencement par Aymeric Jacquet. Également, j’ai lu les deux articles de Olivier Duffez soit Optimiser le référencement d’un blog Dotclear : balises TITLE et META et Guide…

  20. Arf!

    La honte, j’viens de vois à quel point c’étais simple!

    Riez pas hein! J’viens d’apprend comment faire des trackbacks proprement, ça fait juste depuis 2004 que j’utilise Dotclear mais bon :p