Drupal et les balises title et meta sans modules SEO
24 Oct 2011
écrit parLe CMS Drupal et ses thèmes par défaut entre autres demandent un certain nombre de modifications afin d'être optimisés pour les moteurs de recherche. Pour la partie metatags (descripton, robots...), il existe le module Nodewords qui est assez complet (il faut bien le paramétrer dès le début) mais ça fait toujours un module de plus à charger ce qui ralentit toujours un petit peu le CMS. Pour la balise title, il existe le module Page Title qui est bien mais pas forcément souple selon ce qu'on veut faire. Dans le cas d'un site ou ces deux modules ne conviendraient pas ou en cas de bugs, voici quelques astuces pour mettre en place les balises <meta> et <title> à l'aide du module CCK entre autre et quelques lignes de code.
CCK (Content Construction Kit) est souvent activé pour d'autres raisons (dépendance modules) et permet de créer des champs personnalisés pour différents types de contenu. Voilà comment nous allons l'utiliser sous Drupal 6:
Balises meta pour les différents types de contenu
Dans admin/content/node-type/story/fields (Gestion du contenu › Actualité > Gérer les champs) pour le type de contenu "Actualité/story":
On va créer un nouveau champ pour la balise meta robots par exemple:
- Etiquette: metarobot
- Nom du champ: field_metarobot
- Type de champ: texte
- Elément du formulaire pour l'édition de données : champ texte
On peut aussi paramétrer une valeur par défaut dans l'édition du champ type par exemple: noindex,nofollow
Ensuite dans admin/content/node-type/story/display (Gestion du contenu › Actualité > Afficher les champs), on va passer en hidden l'etiquette, le résumé et le noeud complet pour pas que ces valeurs s'affichent dans la page lors de l'affichage d'un noeud el les contrôler directement dans les templates du thème.
Balises meta dans les templates de Drupal
On va dans la template page.tpl.php utiliser la variable $head déjà existante (elle contient le <meta http-equiv='Content-Type' content='text/html; charset=utf-8'/> )pour afficher nos <meta>.
En haut de page.tpl.php on va placer le code suivant:
switch($node->type) { case "story" : if ($node->field_metarobot[0]['value']=='') $meta_full .= '<meta name="robots" content="noindex, nofollow">'; else $meta_full .= '<meta name="robots" content="'.$node->field_metarobot[0]['value'].'">'; $meta_full .= '<meta name="description" content="'.$node->field_metadesc[0]['value'].'">'; $titre=$node->title; break; case "page" : if ($node->field_metarobot[0]['value']=='') $meta_full .= '<meta name="robots" content="noindex, nofollow">'; else $meta_full .= '<meta name="robots" content="'.$node->field_metarobot[0]['value'].'">'; $meta_full .= '<meta name="description" content="'.$node->field_metadesc[0]['value'].'">'; $titre=$node->title; break; } $head=$head.$meta_full;
Si le nom de l'utilisateur Drupal qui écrit l'article est sous la forme Prénom+Nom, on pourra aussi ajouter la balise <meta name='author' content='Anne Onim'> qui doit être prise en compte par Google:
$meta_full .= '<meta name="author" content="'.$node->name.'">';
Plus bas dans la template page.tpl.php, on appelle la variable $meta_full remplie précédemment pour insérer les meta tags dans la page:
<html lang="fr"> <head> <title><?php print $titre ?></title> <link rel="apple-touch-icon" href="/iphone.png" /> <? php if ($meta_full!=null && $meta_full!='') print $head.$meta_full; print $styles; ?>
Balises Title dans les templates de Drupal
Ici on va utiliser la variable $titre pour le <title>. On a une fonction qui affiche les termes taxonomy, les numéros des pages selon où on se trouve, exemple:
Pour les vues (module views), pages de recherche, galerie image, on pourra utiliser arg(0), arg(1) et arg(2) selon le schéma d'URL mis en place sur le site:
default : //on vérifie qu'on est pas sur la homepage if (!$is_front) { //on affiche le numéro des pages $p = $_GET['page']; if ($p != null && $p != '' && $p!=0) $numeropage=" | Page ".($p+1); else $numeropage=""; switch(arg(0)) { //galerie images case 'image' : $tax = taxonomy_get_term(arg(2)); $titre= 'Photos '.$tax->name; break; //résultats de recherche case 'search' : $titre= 'Recherche sur: '.search_get_keys(); break; //pour une vue (views) spécifique avec le path /actus case 'actus' : $titre= 'News Économie | Actualités et informations'; break; //pour des termes taxonomy case 'taxonomy': if (arg(2) == 24) { //liste actus Banque et assurances (url : taxonomy/term/24/all) $titre= 'Actualités Banque et Assurances | '.$numeropage; } elseif (arg(2) == 25) { //liste actus Finances Publiques (url : taxonomy/term/25/all) $titre= 'Actualités Finances Publiques | '.$numeropage; } } } //pour la homepage else{ $titre = $site_name; }
Bref
J'utilise CCK pour les balises <h1> également, je fais ainsi des variations de mots-clé entre la balise <title> et <h1>. Exemple de code dans ma template apr_s avoir créer un champ field_h1 pour le type de contenu page:
switch($node->type) { case 'page' : if ($node->field_h1[0]['value']=='') print('<h1>'.$title.'</h1>'); else print('<h1>'.$node->field_h1[0]['value'].'</h1>'); print('<div class="contenupage">'.$content.'</div>'); break; .................. }
Tous ces éléments sont présentés de manière assez succincte afin de vous donner des pistes et idées pour que ces balises meta et title soient gérées directement dans vos templates plutôt que via un module qui risquerait d'alourdir le CMS et qui ne vous permettrait pas forcément de faire tout ce que vous souhaiteriez.
écrit dans Drupal, Wordpress et SEO par |