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 !