Sauvez un panda roux, mettez un If Modified since dans vos headers WordPress

Un If modified since dans WordPress

Il était une fois une rédactrice qui s’est retrouvée à faire un site web pour quelqu’un d’autre qu’elle. Alors forcément, il était hors de question de la prendre trop tranquille sur le SEO “technique”. J’en ai souffert pour arriver à le faire fonctionner correctement ce satané If modified since. Pourtant j’y suis arrivée. Et si je pouvais éviter quelques heures des affres de l’incompréhension à quelqu’un, ce serait vraiment la cerise sur le gâteau. (Oui le code est inclus, tout bien comme il faut, ne vous en faites pas !)

EDIT : n’oubliez pas de consulter la note en fin de tuto sur les prérequis supplémentaires au champ Last-Modified dans le header.

Si vous souhaitez aller directement au code, c’est là. Si vous voulez un peu d’explications sur les pourquoi et les comment, ça commence ici :

Le If modified since pour les noobs

C’est une demande des moteurs de recherche. Ils souhaitent que les sites web communiquent la date de dernière mise à jour des contenus. Si le crawler du moteur qui est en train de ré-indexer votre site détecte que la copie qu’il a déjà dans le ventre n’a pas bougé, il s’abstient. C’est autant de bande passante et de temps machine d’économisés.

Les moteurs de recherche sur internet possèdent des data centers monstrueux. Tout ceci génère des consommations d’énergie et de bande passante phénoménales. Or, les gros consommateurs de bande passante paient au volume, imaginez donc ce que cela représente pour Google ou Bing si la pratique du If modified since se généralise sur le net…

Pourquoi moi je passerais au If modified since

Il y a deux raisons principales.

Pour le SEO

Aucun moteur ne publie sa “recette” de classement des pages dans les résultats de recherche. Il n’y a rien de garanti. Toutefois considérez que Google indique le If modified since en 3e position dans ses conseils aux webmasters, juste après la question des sitemaps. Et ce que Google veut… La présence du If modified since dans les en-têtes (headers) de vos pages influe très probablement sur leurs positions dans les résultats de recherche des internautes.

Si “SEO” ne vous évoque rien, voyez ce billet d’intro. Il va sans doute vous éclairer.

Pour la planète

Et bien oui. Les consommations d’énergie liées aux données échangées sur le net explosent. À chaque fois que nous évitons d’utiliser les tuyaux du web pour échanger de l’info, nous sauvons la vie d’un bébé panda roux. La consommation d’énergie des internets est hallucinante, voyez plutôt ce dossier d’Arte Future sur le sujet : Internet peut-il devenir durable, de la toile énergivore à l’éco-web.

Comment insérer le If modified since dans le header de ses pages WordPress

Solution la plus “simple” : le plugin nommé If modified since header. Seul souci, il ne fonctionne pas. En effet, l’auteur a repris un bout de code qui lui a été donné par quelqu’un d’autre sur un forum mais visiblement n’a pas compris comment ça marche. Le plugin semble fonctionner, mais lorsqu’on teste sérieusement, on s’aperçoit que le format envoyé n’est pas correct. Les moteurs de recherche veulent un format très précis qui est celui-là :

Last-Modified: Sat, 27 Feb 2016 16:15:51 GMT

Plusieurs outils de test de la fonctionnalité If modified since ne donnent que la réponse au test ( 200 ok ou 304 not modified). Pour être bien sûr que vous êtes dans les clous, préférez donc un outil qui vous affiche le contenu de votre HTTP header (exemple : celui de Crosoft)

C’est pour cette raison que je vous propose de mettre un peu les doigts dans le cambouis. Rassurez-vous, rien de compliqué,  je vous mâche le travail. Voilà le tuto :

Étape n°1 : vous créez un thème enfant. Si si, j’insiste. Si vous ne le faites pas, la fonctionnalité sautera à la prochaine mise à jour. Ce serait ballot. Il y a des plugins très bien faits pour ça. Si vous avez réussi à installer un WordPress, vous saurez créer un thème enfant.

Étape n°2 : vous créez un fichier functions.php dans votre thème enfant. Attention à cette étape. Lorsque vous manipulez des fichiers .php, vous devez le faire avec un éditeur de code qui autorise le fait de travailler sans BOM (c’est un format qui peut s’appliquer à différents langages de code). Il y a Notepad++ sous Windows et Geany sous Ubuntu, les deux font très bien l’affaire, ils sont libres et gratuits.

Étape n°3 : vous savez naturellement que vous devez commencer dans votre fichier functions.php par faire charger le fichier style.css de votre thème parent. Si vous ne le savez pas, je vous le dis. Voilà un bout de code à coller tel quel et qui fait très bien l’affaire (note pour les débutants, il ne doit JAMAIS y avoir d’espace avant la mention <?php , ça casse les fonctions).

<?php
// Charger le style.css du thème parent puis charger le style.css du thème enfant
function theme_enqueue_styles() {

    $parent_style = 'parent-style';

    wp_enqueue_style( $parent_style, get_template_directory_uri() . '/style.css' );
    wp_enqueue_style( 'child-style',
        get_stylesheet_directory_uri() . '/style.css',
        array( $parent_style )
    );
}
add_action( 'wp_enqueue_scripts', 'theme_enqueue_styles' );
?>

Étape n°4 : faites la même chose pour le If modified since avec le bout de code suivant. Il est issu d’un mélange entre une réponse apportée par un forumeur de wordpress.org nommé Cybmeta et d’une indication que m’a donnée Lumière de lune sur les forums francophones.

<?php
/**
 * Made with the code produced by Cybmeta with the help of Lumière de lune. Put If-modified-since in articles header in GMT format.
*/

add_action('template_redirect', 'add_last_modified_header');

function add_last_modified_header($headers) {

    //Check if we are in a single post of any type (archive pages has not modified date)
    if( is_singular() ) {
        $post_id = get_queried_object_id();
        if( $post_id ) {
            header("Last-Modified: ".gmdate("D, d M Y H:i:s T", get_the_modified_time( $d = "U" )));
        }
    }

}
?>

Un peu d’explications. La première partie de la fonction consiste à flécher l’action vers les pages et les articles du site. Elle s’intégrera uniquement dans les contenus du site, pas sur les pages automatiquement générées par WordPress (exemple : la page du blog). La deuxième partie consiste à récupérer la date de dernière modification du contenu en format “timestamp” puis à la transformer en format GMT en imposant l’ordre dans lequel les mentions doivent apparaître. Voilà.

Collez votre fichier dans votre thème enfant, c’est fait, vous n’avez plus qu’à vérifier que tout marche bien. Pour info, cela fonctionne avec les thèmes Twenty fourteen et Twenty fifteen. Je ne vois aucune raison que cela ne fonctionne pas avec d’autres thèmes. Mais peut-être fais-je erreur, je ne peux pas vous le garantir.

Note : je ne suis pas développeuse, je ne sais pas coder. Ceci est le résultat de très longues cogitations et d’expérimentations un peu hasardeuses. Si cela ne fonctionne pas chez vous, je suis au regret de vous dire que je suis très probablement incapable de vous aider.

Étape n°5 : likez ou partagez ce post, ça me ferait plaisir (c’est là-haut)! Cela aura aussi pour mérite de définitivement asseoir l’absence de strat SEO pour ce site. À moins qu’il se mette à sortir pour des mots clés style “givrée qui s’intéresse à tout et n’importe quoi” ! Ce serait plutôt classe, vous ne trouvez pas ?

EDIT du 18/03/2016 : le fonctionnement du If modified since header a d’autres prérequis que l’insertion du champ Last-Modified expliquée ci-dessus. Votre serveur doit être capable de fonctionner en mode HTTP 1.1 (c’est très courant, voyez auprès de votre hébergeur) et le cache WordPress doit être activé (cela rend le champ Expires du header fonctionnel, par défaut sa valeur est fixée à Thu, 19 Nov 1981 08:52:00 GMT). Si je trouve plus d’astuces et d’infos pour vous aider à remplir ces conditions, je complèterai le papier.

 

Image à la Une : Photo par Mathias Appel (Red Panda) [CC0], via Wikimedia Commons

 

Licence Creative Commons
Ce(tte) œuvre est mise à disposition selon les termes de la Licence Creative Commons Attribution 3.0 France.

 

Note : cette licence ne peut s’appliquer aux bouts de code dans l’article. Techniquement le CC est plutôt pour les contenus culturels, mais on a déjà vu des exceptions. Le truc, c’est que ces fameux fifrelins ne sont pas que de moi, aussi je ne peux décider pour les gens qui ont participé. Et puis il faut le dire, pour un si petit truc, allons… copiez collez si vous les voulez et basta.

Publié par

Geneviève Canivenc

1976 : naissance 1995 : un grand malade accepte qu'elle ait accès légalement à une voiture. 2005 : un groupe de grands malades lui confèrent le titre de docteur. 2012 : elle se lance en rédaction et plein de grands malades acceptent de lui faire confiance. Encore à venir : le meilleur.