Développer vos propres fonctions SEO avec WordPress: les mots-clés

Voici le troisième volet de notre série. Après nous être occupé des balises title, meta robots, et description, nous allons étudier la balise meta keywords.

Objectifs

Il s’agit donc de remplir automatiquement, le champ meta keywords. J’insiste sur le terme automatiquement, parce que, pour moi, la vrai valeur ajoutée des fonctions de SEO est bien là. La génération automatique permet en effet, un gain de temps non négligeable.

Les approches possibles

Pour remplir cette balise meta keyword, j’ai identifié trois possibilités:

  • Utiliser un plugin existant, comme Simple Tags,
  • Permettre la saisie des mots-clés pendant l’édition d’un article,
  • Générer les mots-clés à partir des éléments existants (contenu du ou des articles, tags, catégories …).

La première solution est pratique, parce qu’elle nous évite de développer 🙂 .
Mais nous sommes dans un article qui parle de développement, alors nous allons nous occuper la troisième solution. La seconde ne nous intéresse pas, parce ce qu’elle n’est pas automatique.

Structure générale

Nous reprenons notre structure précédente, en y ajoutant juste une nouvelle fonction:

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

Génération du champ Keywords

L’exercice est un peu identique à celui de l’article précédent. Nous devons:

  • Définir ce que nous voulons afficher,
  • Regarder quelles informations sont disponibles.

L’étude donne le tableau suivant:

Type de page Informations
disponibles (*)
Keywords
1. Page d’accueil Liste des articles Tags liés aux articles
2. Article ou page Titre, contenu de l’article ou de la page Tags liés à l’article
3. Catégorie Nom et description de la catégorie, liste des articles Nom de la catégorie, tags liés aux articles
4. Tags Tag lui-même, liste des articles Nom du tag, tags liés aux articles
5. Recherche Requête de recherche, liste des articles Tags liés aux articles
6. Archives Date recherchée, liste des articles Tags liés aux articles

(*) informations accessibles directement uniquement.

Le constat est immédiat: contrairement au champ description, nous ne savons pas construire le champ meta keywords avec les informations directement accessibles. Nous allons devoir requêter la base de données.

Globalement, si nous sommes dans un article ou une page, nous récupérons les tags associés à cet article ou cette page.
Dans le cas d’une liste d’articles, nous devrons récupérer les tags de tous les articles de cette liste.

function MOT_seo_keywords () {
 
  global $posts, $wpdb;
 
  if ( is_single() ) {
      $page_keywords = get_the_tag_list('', ' ', '');
  }
  elseif (is_home() || is_category() || is_tag() || is_date() || is_search() ) {
	foreach ($posts as $post_values) {
		$array_id[] = $post_values->ID;
	}
	$list_id = implode('","', $array_id);
	$sql_query = 'SELECT DISTINCT name	'.
                    'FROM '.$wpdb->term_relationships.' AS rel,'.
                            $wpdb->term_taxonomy.' AS tax,'.
                            $wpdb->terms.' AS ter '.
                    'WHERE tax. taxonomy = "post_tag" '.
                    'AND rel.object_id IN ("'. $list_id.'") '.
                    'AND rel.term_taxonomy_id = tax.term_taxonomy_id '.
                    'AND tax.term_id = ter.term_id ORDER BY tax.count';
	$results = $wpdb->get_results($sql_query);
	$page_keywords = implode(' ', $results);
  }
  if ($page_keywords != '') {
      $page_keywords = htmlspecialchars(stripslashes(strip_tags(str_replace("n", '', $page_keywords))));
      echo ''."n";
  }
}

Quelques explications:

  • En ligne 5, nous sommes dans le cas d’un article seul: nous pouvons utiliser la fonction WordPress get_the_tag_list qui va nous donner tout ce qu’il faut,
  • A partir de la ligne 7, nous traitons tous les autres cas,
  • En ligne 9, nous récupérons les ID (identifiants) des articles affichés,
  • En ligne 12, nous construisons la requête qui va récupérer l’ensemble des tags associés aux articles affichés,
  • En ligne 20, nous exécutons la requête,
  • En ligne 21, nous transformons le tableau obtenu en chaîne de caractères.

Deux remarques sur cette fonction:

  • Utiliser directement à la variable globale $posts n’est certainement pas ce qu’il se fait de plus propre,
  • La requête n’est certainement la plus optimisée. La clause IN notamment est très consommatrice en ressources pour la base de données,

Dans les deux cas, je vous laisse consulter la documentation WordPress ou les sources des plugins comme Simple Tags.

Vous trouverez le code source complet ici:


SEO: title, description and keywords
Titre: SEO: title, description and keywords (227 clics)
Légende: SEO: title, description and keywords
Nom du fichier: my_seo_features_21.txt
Taille: 4 KB

Quelques améliorations

Cette fonction nous fourni un résultat tout à fait satisfaisant, sauf dans le cas de l’article seul: si nous n’avons qu’un ou deux tags par article, le champ meta keywords ne contiendra que très peu d’éléments.

Deux solutions possibles:

  • Utiliser des champs saisis par l’utilisateurs (champ personnalisé),
  • Générer les mots-clés à partir du contenu (expérimental)

Dans le premier cas, la solution est simple: nous remplaçons complétons le résultat de la fonction get_the_tag_list par le contenu du champ personnalisé keywords

if ( is_single() ) {
    global $post;
    $page_keywords = get_the_tag_list('', ' ', '');
    $user_keywords = get_post_meta($post->ID, 'keywords', TRUE);
    if ($user_keywords != '') $page_keywords .= $user_keywords;
}

L’auteur des articles devra donc remplir le champ personnalisé keywords s’il souhaite compléter la liste construite automatiquement.

Le second cas est un peu plus complexe, mais il reste simple, grâce aux fonctions de traitement des tableaux de PHP:

if ( is_single() ) {
  // Get tags of the current post
  $page_keywords = get_the_tag_list('', ' ', '');
 
  // Split Excerpt or content into words and store them in an array
  if ($post->post_excerpt != '') $words = split(' ',strip_tags($post->post_excerpt));
  else $words = split(' ',strip_tags($post->post_content));
 
  // Suppress all words < 5 chars
  $words_size = sizeof($words);
  for ($i=0; $i<$words_size; $i++) {
      if (strlen($words[$i])<5) unset ($words[$i]);
  }
  // Count number of occurrence of each word
  $words_count = array_count_values($words);
 
  // Sort the resulting array (most used words will be at the beginning of the array
  arsort($words_count, SORT_NUMERIC  );
 
  // Take only the first ten keywords, and put them in a string
  $page_keywords .= implode(' ', array_keys(array_slice($words_count, 0, 10)));
}

Quelques explications:

  • D’abord nous récupérons le texte de l’article (lignes 6 et 7),
  • Nous récupérons ce texte sous la forme d’un tableau de mots,
  • En ligne 10, nous éliminons les mots ayant moins de 5 lettres,
  • La fonction array_count_values de PHP nous permet de calculer le nombre d’occurrences de chaque mot. Le résultat est un tableau avec les mots d’un côté, et le nombre d’apparition de l’autre.
  • Il ne nous reste plus qu’à trier ce tableau (ligne 18) pour obtenir les mots les plus utilisés en haut de tableau
  • Nous ne prenons que les dix premiers mots en ligne 21

Cette méthode est assez approximative. Le fait d’éliminer les petits mots, nous fait éliminer des mots comme … SEO par exemple. Mais les résultats sont parfois assez surprenants. Cette méthode est utilisé par certains plugins de SEO.

Conclusion

Cet article termine notre petite série sur le développement de fonctions de SEO. Celui-ci est finalement plus compliqué que ce que j’avais prévu initialement.
Malgré tout, vous pouvez constater qu’il est relativement simple de se développer son propre système de SEO, et cela évite d’installer les « monstres » que constituent certains plugins dans ce domaine. Si votre blog est très actif, avec plusieurs auteurs … la méthode la plus efficace sera certainement d’utiliser un plugin existant.

Personnellement, j’utilise mes propres fonctions pour générer les champs title et description. Pour les mots-clés, je fais confiance au plugin Simple Tags, qui rempli très bien ce rôle.

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)

1 thought on “Développer vos propres fonctions SEO avec WordPress: les mots-clés”

Laisser un commentaire

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