Vous êtes ici : Dossiers référencement > Actualité

Membre WebRankInfo ?

S'inscrire Aide

Optimiser le référencement d’un blog Dotclear : balises TITLE et META

Fort utilisés, les blogs DotClear, dans leurs versions 1.2.x, possèdent bien des qualités en terme de référencement (titres des billets, écriture des URL, propreté et organisation du code…) ; néanmoins ils s'avèrent relativement pauvres au niveau de l'optimisation des balises descriptives que l'on trouve dans l'entête de la page HTML générée. Ainsi, par défaut la balise TITLE contient systématiquement (s'il existe) le nom du billet ou le nom de la catégorie, suivi du nom du blog. En clair, cela signifie qu'hormis les pages affichant le contenu des billets et le contenu des catégories, toutes les pages se « contentent » d'une balise TITLE identique !

Cet article a été rédigé par Cédric Girard, membre de WebRankInfo.

Voici à quoi ressemble la balise HEAD de votre fichier template.php par défaut dans Dotclear :

<head>
<meta http-equiv="Content-Type"
content="text/html; charset=<?php dcInfo('encoding'); ?>" />
<meta name="MSSmartTagsPreventParsing" content="TRUE" />
<?php dcHeadLinks(); ?>
<link rel="alternate" type="application/rss+xml" title="RSS" href="<?php dcInfo('rss'); ?>" />
<link rel="alternate" type="application/xml" title="Atom" href="<?php dcInfo('atom'); ?>" />
<meta name="DC.title" content="<?php dcInfo(); ?>" />
<title><?php dcSinglePostTitle('%s - '); dcSingleCatTitle('%s - ');
dcSingleMonthTitle('%s - '); dcCustomTitle('%s - '); dcInfo(); ?></title>

<link rel="stylesheet" type="text/css" href="<?php dcInfo('theme'); ?>/style.css" media="screen" />
<?php dcPostTrackbackAutoDiscovery(); ?>
</head>

Ajoutons à cela l'absence de balise meta Description et de balise meta Keyword (qui peut être utile pour éviter le Duplicate Content si les deux autres sont identiques) et on comprend assez vite l'intérêt d'une petite optimisation à ce niveau !

Procéder avec méthodologie

Il convient maintenant de définir quels sont nos besoins, et ce que nous allons faire pour y arriver. Le premier élément de réflexion est celui de la balise META Description : l'idéal serait de pouvoir disposer du titre du billet, suivi d'un petit résumé de ce dernier… Une solution assez élégante consiste à récupérer par exemple les 25 premiers mots du billet (en réalité de son chapo s'il existe, ou du contenu du billet si le chapo est vide) et de le concaténer à son titre, suivi de trois petits points.

Nous obtiendrions par exemple :

[Référencement] Optimiser un blog Dotclear – Fort utilisés, les blogs DotClear, dans leurs versions 1.2.x, possèdent bien des qualités en terme de référencement (titres des billets, écriture des URL, propreté et organisation…

C'est "tout simplement" ce qui ressortira en résumé dans Google sous l'URL du billet ! La présence des trois petits points viendra apporter la petite touche de confort pour l'internaute et provoquera en lui l'irrésistible envie de découvrir la suite de votre contenu ;-)

Le second élément concerne simplement la balise HTML Title, qui par défaut ne prend en charge que les billets et les catégories, et pas de la manière la plus élégante puisque l'on peut rapidement arriver à une balise comportant un certain nombre pour ne pas dire un nombre certain de mots ! Une solution consistera à détecter l'affichage d'un billet ou non, et en conséquence, d'affiche uniquement le titre du billet (sans le titre du blog derrière). Ceci pour améliorer la densité des mots-clés contenus dans le titre du billet sans interférence de ceux contenus dans le titre du blog.

Ainsi, pour l'affichage de ce billet, au lieu de :

[Référencement] Optimiser un blog Dotclear – Actualités Google – Actualités Référencement

Où les termes "Actualités" et "Google" sont superflus dans le contexte du billet, et où le mot "référencement" est répété de manière inutile , nous aurions plus simplement :

[Référencement] Optimiser un blog Dotclear

Le troisième élément concerne la balise META Keywords.Obsolète dans l'absolu pour le référencement dans les moteurs "modernes", elle a son utilité pour tout autre chose : la gestion du Duplicate Content. En effet, il est possible que, dans le cadre d'un blog on arrive à plusieurs pages ayant un titre et une description identiques, mais ne reflétant pas le même contenu. L'exemple que je citerai concerne l'utilisation de certains plugins, comme le très connu Tags pour Dotclear (gestion de la folksonomie par nuage de mots) : il est tout-à-fait possible (et c'est le cas sur mon blog !) qu'un tag corresponde à une catégorie de billets ! Et dans ce cas, on a bien un "duplicate content" pour deux pages potentiellement différentes. La solution consiste donc à reprendre la description et à afficher les mots qu'elle contient, filtrés et séparés par des virgules, dans la balise META Keywords.

Nous obtiendrions par exemple pour ce billet (j'insiste sur le fait que le contenu de cette balise a peu d'importance en soit) :

Référencement, Optimiser, un, blog, Dotclear, Fort, utilisés, les, blogs, DotClear, dans, leurs, versions, 1, 2, x, possèdent, bien, des, qualités, en, terme, de, référencement, titres, des, billets, écriture, des, URL, propreté, et, organisation

Dans le cas concrêt de la catégorie "Référencement" du blog, nous aurions :

Référencement,Actualités,Google,Actualités,Référencement

Et dans le cas d'un tag "Référencement" indépendant de la catégorie mais générant par défaut un Duplicate content :

tag,Référencement,Actualités,Google,Actualités,Référencement

Donc deux balises META Keywords différentes pour deux pages différentes !

Dernière chose, on apportera un soin tout particulier à la prise en charge de deux plugins couramment utilisés sur les blogs Dotclear : le plugin Tags dont on a fait objet ci-dessus, et le plugin Table des matières, qui est lui aussi un cas particulier.

Une petite difficulté

Une chose à laquelle je n'avais pas pensé lorsque je me suis attelé à optimiser mon blog, était le fait que les méthodes d'affichage de Dotclear produisent non pas des chaînes de caractères à "inclure" dans le code HTML, mais directement des flux HTML : impossible d'en récupérer le contenu dans des variables !

Il a fallu donc "feinter" et utiliser les fonctions de bufferisation de sortie de PHP, avec les méthodes ob_start, ob_getcontents et ob_end_clean, de manière à récupérer le flux HTML généré : méthode peu élégante mais très efficace.

Je passe sur l'aspect technique lié aux manipulations de chaînes de caractères qui ne sont que de l'algorithmique classique (et parfois peu orthodoxe chez moi je l'admets !)

Le nouveau code d'entête

Je ne vais pas repasser en revue tous les aspects décrits ci-dessus, le code est commenté et parle (je pense) de lui-même. J'ai dans un soucis de lisibilité, créé deux fonctions qui figurent au début du code PHP. La première permet de retourner les n premiers mots d'un texte (chaque mot étant séparé par un espace), la seconde de "filtrer" le texte pour le retourner "optimisé" pour la balise META Keywords.

Concernant la prise en charge des plugins Table des matières et Tags, vous noterez que le code ci-dessous fonctionne bien évidemment en leur présence, mais ne nécessite pas de modifications si vous ne les utilisez pas !

Le code "optimisé" est donc le suivant :

<head>
<meta http-equiv="Content-Type"
content="text/html; charset=<?php dcInfo('encoding'); ?>" />
<meta name="MSSmartTagsPreventParsing" content="TRUE" />
<?php dcHeadLinks(); ?>
<link rel="alternate" type="application/rss+xml" title="RSS" href="<?php dcInfo('rss'); ?>" />
<link rel="alternate" type="application/xml" title="Atom" href="<?php dcInfo('atom'); ?>" />
<meta name="DC.title" content="<?php dcInfo(); ?>" />


<?php

  // Fonction permettant de retourner les x premiers mots d'un texte
  function s_premiersmots($MyString,$nbmots,$separ)
  {
    $StringTab=explode(" ",$MyString);
    for($i=0;$i<$nbmots;$i++)
    {
      $NewString.=$separ."$StringTab[$i]";
    }
    return $NewString;
  }

  // Fonction de nettoyage de chaîne de caractère (code pas nickel mais ça fonctionne !)
  function s_nettoyerpourkeywords($MyString)
  {
    $NewString=trim($MyString);
    // Suppression des caractères et codes inutiles
    $NewString=str_replace(array('(', ')', '!', '?', '+', '...', '"', '[',']', ':', '&quot;', ','), array('', '', '', '', '', '', '', '', '', '', '', ''), $NewString);
    // Remplacement des séparateurs "utiles" par des espaces"
    $NewString=str_replace(array('/','.','-'),array(' ',' ',' '),$NewString);
    // Compression des espaces en trop éventuels générés par l'étape précédente
    $NewString=str_replace(array(' ',' '),array(' ',' '),$NewString);
    //Remplacement des espaces par des virgules
    $NewString=str_replace(' ',',',$NewString);
    return $NewString;
  }

  // On utilise le cache HTML pour récupérer les valeurs retournées par Dotclear (qui renvoie un flux HTML et non des valeurs en retour de fonctions... à mon grand désespoir !)

  // Récupération du titre complet normal affiché par défaut par Dotclear
  ob_start();
  dcSinglePostTitle('%s - ');dcSingleCatTitle('%s - ');dcSingleMonthTitle('%s - ');dcCustomTitle('%s - ');dcInfo();
  $TitreComplet = strip_tags(ob_get_contents());
  ob_end_clean();

  // Récupération du titre du billet seulement (sera vide si l'on n'affiche pas un billet seul)
  ob_start();
  dcSinglePostTitle('%s');
  $TitreDuBillet = trim(strip_tags(ob_get_contents()));
  ob_end_clean();

  ########## Gestion du cas particulier du plugin "Table des matières" (ne pas supprimer cette section même si vous ne l'utilisez pas !)
  if ($mode == 'tocHome')
  {
    // Si l'on arrive ici, TitreDuBillet sera de toute façon vide donc on ne s'occupe que du titre complet, auquel on ajoute "table des matieres"
    $TitreComplet = 'Table des matieres - '.$TitreComplet;
  }
  else
  {
    // Récupération des 25 premiers mots du chapo
    ob_start();
    dcPostChapo();
    $DebutDuBillet = trim(s_premiersmots(trim(str_replace('"', '', strip_tags(ob_get_contents()))), 25, ' '));
    ob_end_clean();

    if(strlen($DebutDuBillet)==0)
    {
      // Le chapo est vide, donc récupération du début du contenu du billet (le cas échéant), soit les 25 premiers mots
      ob_start();
      dcPostContent(25); // Une surcharge de la méthode dcPostContent permet de récupérer le nombre de mots spécifié : bien pratique !
      $DebutDuBillet = trim(str_replace('"','',strip_tags(ob_get_contents())));
      ob_end_clean();
    }
  };

  ########## Gestion du plugin Tags : récupération du tag en cours, le cas échéant
if(class_exists(twTags))
{
  ob_start();
  twTags::title();
  $TagEnCours = trim(strip_tags(ob_get_contents()));
  ob_end_clean();
}
  ########## Définition des différentes balises dédiées SEO
  if(strlen($TitreDuBillet)>0)
  {
    // On définit la balise Titre par le titre du billet en cours (si billet en cours il y a !)
    $BaliseTitre=$TitreDuBillet;
    if(strlen($DebutDuBillet)>0)
    {
      // Définition de la balise Description par le contenu du billet (25 premiers mots du chapo, ou du billet, selon cas)
      $BaliseDescription=$TitreDuBillet." - ".$DebutDuBillet."...";
    }
    else
    {
      // Gestion des billets "vides" de texte
      $BaliseDescription=$TitreDuBillet;
    };
  }
  else
  {
    // On n'est pas dans un billet, donc gestion de l'unicité du titre et de la description (qui seront identiques) avec prise en charge des tags
    $BaliseTitre=(strlen($TagEnCours)>0?"$TagEnCours - ":"").$TitreComplet;
    $BaliseDescription=$BaliseTitre;
  };

  // Génération de la balise keywords pour éviter le duplicate content
  // si on est sur un tag, ajout du keyword "tag" pour éviter le Duplicate content éventuel avec un nom de catégorie de billets
  $BaliseKeywords=(strlen($TagEnCours)>0?"tag,":"") . s_nettoyerpourkeywords($BaliseDescription);

  ########## Écriture des balises ##########

  // Écriture de la balise TITLE
  echo "<title>$BaliseTitre</title>";

  // Écriture de la balise Description
  echo "<meta name=\"description\" lang=\"fr\" content=\"$BaliseDescription\">";
  echo "\n"; // On saute une ligne

  // Écriture de la balise Keywords (permet d'éviter le duplicate content)
  echo "<meta name=\"keywords\" lang=\"fr\" content=\"$BaliseKeywords\">";
 ?>

<meta name="Robots" content="follow,index">

<link rel="stylesheet" type="text/css" href="<?php dcInfo('theme'); ?>/style.css" media="screen" />
<?php dcPostTrackbackAutoDiscovery(); ?>
</head>

On notera que j'ai rajouté une balise META Robots au passage… Le résultat de cette optimisation un peu brutale mais efficace est visible sur mon blog : http://blog.aube-nature.com

Améliorations possibles et à venir

Manquent à ce petit bout de code la prise en charge des affichages par dates et par périodes (par exemple sur un mois donné), dont je n'ai pas encore trouvé de moyen élégant de récupérer le contenu ni de générer une description significative. J'étudie la possibilité de générer en texte la date pour l'inclure dans les keywords pour éviter le Duplicate content… À suivre !

Note d'Olivier Duffez : Merci à Cédric Girard, membre de WebRankInfo, qui a été rédigé cet article. Pour compléter, vous pouvez lire les articles suivants :

Olivier Duffez, Vendredi 11 mai 2007


Formation référencement et webmarketing

Vous souhaitez sans doute améliorer votre référencement, avez-vous pensé à suivre une formation spécialisée sur le référencement naturel ? En 2008, plus de 700 entreprises ont assisté à nos différentes sessions, la plupart faisant financer ces journées par la formation professionnelle (OPCA). Orange Labs nous a décerné un taux de satisfaction des participants de 90% (octobre 2008).

Préparés et animés par Olivier Duffez (WebRankInfo) et Fabien Faceries (AgentWebRanking), 2 professionnels reconnus dans la profession, nos modules sur le référencement naturel sont très complets tout en laissant une grande place à l'interactivité pour répondre à toutes les questions des participants.

Pour connaître le plan détaillé de chaque module, le prix, les dates et les lieux, cliquez ici pour consulter le site de Ranking Metrics (organisme de formation agréé).


Lectures recommandées sur ce thème :

  • Indice de densité
    Cet outil vous permet de calculer l'indice de densité d'un mot-clé d'une page web. Il est calculé à la fois pour la balise TITLE, la balise META description et l'ensemble du texte de la page.


10 commentaires sur “Optimiser le référencement d’un blog Dotclear : balises TITLE et META”

  1. Moira dit :

    Superbe article de qualité ! Il est prévu un jour le même type d’article pour la plateforme de blog de Google ?

  2. liliAn dit :

    Enfin quelqu’un qui pense au référencement facile des articles d’un blog dotclear ! C’est plûtot rare, d’après ce que j’ai pu voir sur le forum. Je vais tester et voir si effectivement j’aurais des résultats.

    Merci à toi Cédrix

  3. cs76 dit :

    Merci pour cet article clair et intéressant.
    J’ai repris l’idée des 25 premiers mots pour la META description ; avant, je mettais la même chose que pour le titre.

  4. Coolman dit :

    Merci pour cet astuce tres utile, j’ai une petite question..

    Le contenu de la balise "Meta Description" affiche trop de mots et notamment lorsque qu’il y a du code html dans le texte, cela s’affiche aussi…pas genial ce petit bug.

    Comment restreindre le nombre de mots sur cette balise ?

  5. jef dit :

    Superbe pour le référencement. A quand le plugin pour faciliter l’accès à l’optimisation du référencement des blogs dotclear ?

  6. marina dit :

    1000 merci pour cette aide précieuse !

  7. Clair de Lune dit :

    Je suis assez mitigé sur ce tuto, j’ai l’impression que l’auteur réinvente la roue. Le remplissage de la meta description était déjà documenté, avec un code utilisant les fonctions utilitaires de dotclear, et d’ailleurs posté dans ce forum. Il aurait été plus simple de l’adapter.

    Pour la balise keywords, l’approche est intéressante, mais n’exploite pas le plugin tags comme d’autres, jlauriol en particulier, l’avaient déjà fait depuis longtemps, c’est bien dommage.

  8. Merci pour cette aide au référencement.

    Petite remarque: ne pas oublier de fermer les balises META pour avoir un code valide XHTML strict.
    Ex:
    <meta name=\"description\" lang=\"fr\" content=\"$BaliseDescription\">
    doit devenir:
    <meta name=\"description\" lang=\"fr\" content=\"$BaliseDescription\" />

  9. nina dit :

    Bonjour,

    Je viens de créer mon blog http://www.ninaworks.org, mais je souhaite améliorer le référencement. Les sites de référencement me soumettent pls codes à introduire sur mon blog. Je ne sais où les insérer, pourriez vous m’aider? en outre, comment faire pour que les internautes puissent voter pour le blog, cela suppose-t-il un référencement préalable ou cela implique-t-il une autre démarche?

    Merci d’avance

  10. Chris dit :

    Franchement, un grand merci! Il est super ce code!!! J’espère que tu vas continuer dans cette voie, c’est la bonne!

Laisser une réponse

Hébergement web

Sivit

Pour un bon référencement, il faut un bon hébergeur. Testez Sivit, l'hébergeur choisi par Olivier Duffez pour son site WebRankInfo (+ de 3 millions de visites/mois). Vous bénéficiez d'une garantie 30 jours satisfait ou remboursé.

A partir de 1,90 EUR HT/mois.

A la une sur WebRankInfo

Formation au référencement

Découvrez le programme de formation au référencement le plus complet : méthodologie d'optimisation du référencement Google, sites dynamiques, stratégies de liens, blogs, formation juridique Internet, Google Analytics, taux de transformation, ROI, etc.

Ce cycle de formation peut être pris en compte par votre budget formation... profitez-en !

Cette formation est assurée notamment par Olivier Duffez, créateur du site WebRankInfo et consultant indépendant en référencement.

Détails et inscription

Logiciel de pro

Vous cherchez un bon logiciel pour effectuer le suivi du référencement ? Je vous conseille AgentWebRanking, le logiciel leader sur le marché, développé par une entreprise française et vendu dans le monde entier depuis 1998.
En tant que consultant en référencement, je l'utilise pour mes prestations de conseil en référencement professionnel.

Téléchargement télécharger le logiciel de référencement AgentWebRanking