Dotclear 2 : optimisation du référencement 1/2

Dotclear est un logiciel libre de création de blogs. Il offre une interface d'administration intuitive, de nombreux plugins, de nombreux thèmes et bénéficie d'une communauté très active. Dans sa vesion 2, actuellement en béta puis en release candidate vraisemblablement jusqu'au mois de juillet, Dotclear pèche cependant sur le référencement. Il ne gère tout simplement pas les balises meta description et meta keywords...

Voici quelques instructions pour patcher Dotclear 2 et générer des balises meta-keywords et meta-description sur vos billets.

De l'intérêt des balises meta

Même si ces balises ne sont plus utilisées pour l'indexation par les principaux moteurs de recherche, elles restent utiles à un bon référencement.
La balise description permet par exemple d'indiquer au moteur de recherche le résumé de la page qu'il pourra présenter à l'internaute dans ses résultats. Elle sert également à éviter le duplicate-content lorsque les balises title et keywords sont identiques.

Exemple de référencement dotclear sans balise description :

exemple_ref_dotclear1.jpg

En l'absence de la balise description, Google génère automatiquement un résumé, bien souvent basé sur les premières phrases ou les premiers mots de la page. Dans ce cas, ce sont les liens d'accessibilité, présents en début de page dans le thème du blog Netapsys, qui sont repris : "Aller au contenu | Aller au menu | Aller à la recherche. font small; font normal; font big. Blog , ..." Aucun intérêt pour l'internaute !

Voici le résultat avec une balise description plus pertinente :

exemple_ref_dotclear2.jpg

La balise keywords est elle aussi de plus en plus ignorée pour l'indexation en elle-même. Elle reste cependant utilisée par certains annuaires et nous profiterons donc du patch lié à la gestion des balises description pour prendre également en charge la balise keywords.

Mise en oeuvre du patch dotclear 2

  • Pour commencer, il est nécessaire d'enrichir dotclear d'une fonction à même de générer la description d'un billet. Nous allons pour cela modifier le fichier inc/core/class.dc.rs.extensions.php en y ajoutant la fonction "getDescription" suivante :
public static function getDescription(&$rs,$absolute_urls=false) {
  $description = $rs->post_excerpt_xhtml;
  $content = $rs->post_content_xhtml;
 
  if ($description == '') {
    $content = substr($content, 0, 1000);
    $content = html_entity_decode($content);
    $content = preg_replace("/<.*?>/", " ", $content);
    $content = htmlentities($content, ENT_COMPAT, "UTF-8");
    $content = preg_replace("/[^\w&',.;:!\? ]/", " ", $content);
    $content = preg_replace("/[ ]+/", " ", $content);
 
    $words = explode(" ", $content);
    $limit = 50 < sizeof($words) ? 50 : sizeof($words);
    for ($i = 0; $i < $limit; $i++) {
      $description = $description . " " . $words[$i];
    }
  } else {
    $description = html_entity_decode($description);
    $description = preg_replace("/<.*?>/", " ", $description);
    $description = htmlentities($description, ENT_COMPAT, "UTF-8");
    $description = preg_replace("/[^\w&',.;:!\? ]/", " ", $description);
    $description = preg_replace("/[ ]+/", " ", $description);
  }
  return $description;
}
  • Il est ensuite nécessaire de rendre cette fonction utilisable depuis les templates Dotclear. Pour cela, il convient d'ajouter le code suivant au fichier "inc/public/class.dc.template.php" :
$this->addValue('EntryDescription',array($this,'EntryDescription'));
 
public function EntryDescription($attr) {
  $urls = '0';
  if (!empty($attr['absolute_urls'])) {
    $urls = '1';
  }
 
  $f = $this->getFilters($attr);
  return '<?php echo '.sprintf($f,'$_ctx->posts->getDescription('.$urls.')').'; ?>';
}
  • La troisième étape consiste simplement à utiliser cette fonction depuis le template de génération des billets : le fichier "post.html", présent dans le répertoire de votre thème. Ajoutez l'instruction suivante dans la partie header :
<meta name="description" content="{{tpl:EntryDescription}}"/>
  • La prise en charge de la balise meta keywords suit exactement le même principe mais, au lieu de créer une nouvelle fonction, nous allons réutiliser celle qui permet de générer la liste des tags d'un billet. Pour cela, ajoutez la ligne suivante dans le fichier "post.html" de votre thème, juste sous l'instruction en charge de la génération de la balise description :
<meta name="keywords" content="<tpl:EntryMetaData type="tag">{{tpl:MetaID}} </tpl:EntryMetaData>"/>

Et les autres types de page ?

Vous l'avez bien sûr remarqué : ce patch ne gère que les pages qui affichent un billet dans son intégralité. Si vous avez un minimum d'activité sur votre blog, ce sont les plus nombreuses, mais il nous reste tout de même à gérer les pages telles que l'accueil, les archives, les catégories, ...

Ce sera l'objet d'un prochain billet !

6 commentaires

  1. D’après votre message d’erreur, il semble que la fonction getDescription ne soit pas utilisable depuis les templates.

    L’avez-vous bien placée dans la partie « entries » du fichier « inc/public/class.dc.template.php » ?
    Celle-ci débute juste après le commentaire « # Entries ».

    Sinon, postez moi directement ce fichier.

  2. Merci pour votre réponse,

    Oui, j’ai bien ajouté dans la zone Entries

    J’ai un doute sur le fichier post.html

    <link rel= »schema.DC » href= »http://purl.org/DC/elements/1.0/ » />
    <meta name= »DC.Title » content= »{{tpl:EntryTitle encode_html= »1″}} » />
    <meta name= »Description » content= »{{tpl:EntryDescription}} » />

    Ne devrait-on pas avoir
    <meta name= »DC.Description » content= »{{tpl:EntryDescription}} » />

  3. Non, l’ajout dans le fchier post.html est bien valide. C’est l’appel en lui même à la nouvelle entrée qui ne semble pas fonctionner.
    Je vous propose de m’envoyer vos fichiers inc/core/class.dc.rs.extensions.php, inc/public/class.dc.template.php et post.html par email : yoann.hebert@netapsys.fr afin que je puisse y jeter un oeil.

    Je posterai le résultat sur le blog si cela se révèle intéressant pour d’autres.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.