Développer ses propres fonctions SEO avec WordPress: la description

Après avoir traité le cas de la balise title, nous allons maintenant nous occuper de la balise meta description.
Ce champ donne un bref résumé du contenu de la page. Vis-à-vis des moteurs de recherche, il doit également contenir les principaux mots-clés permettant de mieux classer l’article.

Structure générale

Nous reprenons la structure générale de l’article précédent. Initialement, nous avions:

add_action('wp_head', 'my_seo_title');
 
function my_seo_title() {
   // Fonctions affichant le titre
}

Nous allons ajouter maintenant la fonction gérant les descriptions. Nous en profitons pour regrouper nos fonctions SEO:

add_action('wp_head', 'my_seo_features', 1);
 
function my_seo_title() {
   // Fonctions affichant le titre
}
 
function my_seo_description() {
   // fonctions afffichant le champ description
}
 
function my_seo_features() {
	my_seo_title();
	my_seo_description();
}

A noter le paramètre ‘1’ dans la fonction add_action. Il permet de placer notre fonction en tête de liste dans les actions a exécuter. De cette façon, nos balises seront situées plutôt en haut de l’entête, contrairement aux balises générées par le code de l’article précédent.

Génération du champ description

Avant de commencer, il faut décider du contenu de cette balise, pour chaque cas. Pour les pages ‘Catégories’, la réponse est simple, puisque les catégories disposent d’une description. Mais dans le cas des articles, des archives, des tags, que faire?

Le tableau suivant résume ce que nous allons faire:

Type de page Description
1. Page d’accueil Champ description du blog
2. Article ou page Le résumé de l’article ou les quelques premières lignes
3. Catégorie La description de la catégorie
4. Tags Le résumé du premier article de la liste
5. Recherche
6. Archives La description générale du blog

Pourquoi ces choix?

  • Au niveau des lignes 1 et 3, nous disposons d’une description, il n’y a rien à faire,
  • Pour la ligne 2, nous pouvons estimer que le résumé de l’article ou de la page donne un bon aperçu de l’article,
  • Pour la ligne 4 et 5, nous pouvons également considérer que les articles correspondant à un tag ou une recherche donnée, se ressemblent plus au moins, et donc, que le résumé du premier article peut être significatif,
  • Pour la lignes 6 (archives), il paraît difficile (voir dangereux) de faire une description de plusieurs articles qui peuvent être très différents.

Comment récupérer les informations concernant les articles? En utilisant les variables globales post et posts, qui sont générées par WordPress avant le chargement des pages.

Ce qui donne la fonction suivante:

function my_seo_description() {
  global $post, $posts;
 
  if ( (is_single() || is_page()) ) {
      $page_description = get_description($post);
  }
  elseif (is_category()) {
      $page_description = category_description();
  }
  elseif ( is_tag() ) {
      $page_description = get_description(current($posts[0]));
  }
  elseif (is_date()) {
      $page_description = get_bloginfo('description');
  }
  elseif (is_search()) {
      if (sizeof($posts) > 0) {
          $page_description = get_description(current($posts[0]));
	}
      else {
          $page_description = get_bloginfo('description');
	}
  } else { /* is_home normalement */
      $page_description = get_bloginfo('description');
  }
  if ($page_description != '') {
      $page_description = htmlspecialchars(stripslashes(strip_tags(str_replace("n", '', $page_description))));
      echo ''."n";
  }
}

Quelques explications:

  • En ligne 5, un seul article est affiché, la variable globale $post est disponible,
  • En lignes 11 et 18, nous avons une liste d’articles à traiter. La variable globale $posts est disponible. Avec la fonction current(), nous récupérons le premier élément (article),
  • Dans les autres cas, nous récupérons la description du blog,
  • Pour l’affichage, nous essayons de filtrer autant que possible, le contenu de la description, pour éviter tout incident pendant l’affichage.

La fonction get_description peut prendre la forme suivante:

 function get_description($current_post) {
$max_length = 200;
$string = '';
// If post has an excerpt?
if ($current_post->post_excerpt != '') {
$string = wp_html_excerpt ( $current_post->post_excerpt, $max_length);
}
else {
// No excerpt, try to find the

Autres articles de cette série

  1. Code your own SEO function with WordPress: the keywords (19 février 2009)
  2. Développer vos propres fonctions SEO avec WordPress: les mots-clés (19 février 2009)
  3. Develop your own SEO features with WordPress: the description (12 février 2009)
  4. Développer ses propres fonctions SEO avec WordPress: la description (12 février 2009)
  5. Develop your own SEO functions with WordPress: the title (5 février 2009)
  6. Développez vos propres fonctions SEO avec WordPress: le titre (5 février 2009)
  7. 6 plugins SEO pour WordPress (5 janvier 2009)

12 thoughts on “Développer ses propres fonctions SEO avec WordPress: la description”

  1. Le mieux est de placer ces fonctions dans le fichiers functions.php du theme, et de mettre, a la fin, une ligne du type add_action('wp_head', 'my_seo_features', 1);.

  2. Salut, merci pour ce code; mais cependant iu faut il placer celui-ci:

    Dans header.php ? Bien à toi.

  3. Je sais. J’ai commence par cela, puis ne trouvant pas la bonne regex, je suis passe a la methode « simple ».
    J’ai pourtant pratiquer les regex assez souvent qu’en j’etais admin unix, mais j’avoue avoir beaucoup perdu la main …

  4. Je te remercie vivement pour ta réponse mais le problème c’est qu’en php je n’y connais pas grand chose et du coup je sais pas trop ou coller ce code, j’ai tenté de le copier dans le fichier function.php et d’appeller la fonction dans mon header par la suite mais ça ne fonctionne pas je dois pas taper la bonne syntaxe…

  5. Il suffit de faire une extraction du type:

    $string = ...; 
    
    $first_pos  = strpos( $string, '<h2>');
    $second_pos = strpos( $string, '</h2>', $first_pos);
    echo substr($string, $first_pos+4, $second_pos-$first_pos-4);
    
  6. Si je veux uniquement extraire de mon post ce qui est contenu entre ma balise h2 au lieu d’afficher les 170 premiers mot de mon post comme description, comme dans l’exemple si dessous, sais tu quel devra être alors la syntaxe php ?

    « ?php echo wp_html_excerpt($post->post_content, 170); ? »

  7. Si je veux uniquement extraire de mon post ce qui est contenu entre ma balise au lieu d’afficher les 170 premiers mot de mon post comme description, comme dans l’exemple si dessous, sais tu quel devra être alors la syntaxe php ?

    post_content, 170); ?>

  8. Merci pour les félicitations que j’apprécie d’autant plus que je suis très fan de tes articles, pratiquement depuis que j’ai démarré mes petits travaux.
    Concernant la fonction get_description, $char_count est bien initialisé ligne 10. En ligne 13, je prends soit les 200 caractères de $max_length, soit le texte situé avant la balise .
    J’ai corrigé le fichier my_seo_features_21.txt la ‘(‘ était effectivement en trop. Merci pour la remarque.

    En fait tu as été plutôt soft côté remarques: je viens de relire les articles, et ils étaient bourrés de coquilles: ‘(‘ en trop, lignes manquantes, mauvais numéros de ligne dans les explications … Je les ai sorti trop vite. En les relisant encore une ou deux fois je devrais atteindre un taux d’erreurs plus raisonnables…

  9. Bonjour Emmanuel,

    Félicitations pour ta série d’articles. J’ai utilisé tes fonctions pour mon blog. Je surveille le référencement mais je suis sûr que cela va résoudre mes problèmes de description trop courtes ou dupliquées sur certaines pages, notamment les pages de tag (merci google webmaster tools). Je préfère également utiliser des fonctions ou passer par du templating plutôt que d’utiliser un plugin usine à gaz. Ca laisse plus de contrôle.

    Je te signale juste une erreur dans ton code de la fonction get_description : dans ton code; ligne 13, tu utilises la variable $char_count. Or celle-ci n’existe pas. Il faut reprendre la variable $max_lenght définie en haut de la fonction. Une petite erreur de nommage/ renommage 😉

    Par ailleurs, dnas la fonction my_seo_keywords dans le fichier que tu proposes en téléchargement (http://www.emmanuelgeorjon.com/images/2009/02/my_seo_features_21.txt) il y a nue ‘(‘ de trop ligne 94. Je te le signale, ça évitera à d’autres lecteurs d’avoir à chercher.

Laisser un commentaire

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