Table des matières de l'article :
WP Rocket est l'un des plugins WordPress les plus utilisés pour améliorer les performances du site Web. D'après les déclarations commerciales rapportées sur leur site internet, le plugin est actuellement utilisé par plus de 3 millions d'installations WordPress.
Cependant, compte tenu de l'énorme circulation, des multiples plans de licence et du fait que WP Rocket est l'un des plugins WordPress les plus convoités et les plus piratés de tous les temps, il est prudent de dire que WP Rocket fonctionne actuellement sur au moins 12 millions de sites WordPress dans le monde.
Ce plugin offre de nombreuses fonctionnalités utiles pour optimiser la mise en cache du site et améliorer les temps de chargement des pages. WP Rocket enregistre le cache sous forme de fichiers sur disque et propose de nombreuses options de configuration pour optimiser les performances du site.
Bien que WP Rocket soit une solution de mise en cache très populaire par rapport à d'autres concurrents, a un bogue sérieux qui pourrait affecter le classement et l'indexation de votre site. Ce bogue affecte le champ "dernière modification" qui est utilisé par les moteurs de recherche pour comprendre si une page a été modifiée récemment. Si ce champ n'est pas mis à jour correctement, les moteurs de recherche risquent de ne pas indexer correctement votre site et cela pourrait entraîner une diminution du trafic organique.
Par conséquent, il est important de prendre en compte ce bogue WP Rocket lorsque vous envisagez d'utiliser ce plugin pour votre activité en ligne. Dans ce texte, nous allons détailler ce bug et les conséquences qu'il pourrait avoir sur votre site. Si vous souhaitez tirer le meilleur parti de votre activité en ligne et vous assurer que votre site est bien classé dans les moteurs de recherche, vous devez éviter d'utiliser WP Rocket jusqu'à ce que ce bogue soit définitivement corrigé.
Un aperçu de l'en-tête HTTP de dernière modification.
L'en-tête HTTP "Last-Modified" est un champ d'en-tête utilisé dans la communication client-serveur pour fournir des informations sur la date et l'heure de la dernière modification d'une ressource Web. Ce champ est envoyé par le serveur au client dans le cadre de la réponse HTTP e contient la date et l'heure de la dernière modification de la ressource.
Son objectif principal est d'aider les clients à déterminer si une ressource Web a changé depuis le dernier accès, afin qu'ils puissent éviter de télécharger à nouveau la même ressource si elle n'a pas changé.
De cette manière, le champ "Dernière modification" permet de réduire le trafic réseau et d'améliorer les performances du site Web. Lorsqu'un client demande une ressource, il peut inclure un champ d'en-tête "If-Modified-Since" dans sa demande, contenant la date et l'heure de la dernière modification de la ressource qu'il a enregistrée. Si la ressource n'a pas été modifiée depuis le dernier accès, le serveur répond par un statut « 304 Not Modified », évitant ainsi de retransférer la ressource.
Dernière modification et robots d'exploration Google.
Le champ d'en-tête HTTP "Last-Modified" fournit des informations sur la date et l'heure de la dernière modification d'une ressource Web. Cependant, si ce champ n'est pas correctement configuré et renvoie toujours la date du jour, sans tenir compte de la date d'effet de la dernière modification de la ressource, certaines conséquences imprévues peuvent se produire pour les robots d'exploration de Google.
En particulier, si l'en-tête "Last-Modified" renvoie toujours la date et l'heure actuelles, les robots d'exploration de Google pourraient interpréter à tort la ressource comme une nouvelle page, même si elle n'a pas été modifiée. Cela pourrait entraîner une diminution des performances du site Web en termes d'indexation et de positionnement dans les résultats de recherche.
De plus, si le champ "Last-Modified" n'est pas défini correctement, le serveur peut envoyer une réponse "200 OK" même si la ressource n'a pas été modifiée depuis son dernier accès. Cela pourrait entraîner une augmentation du trafic réseau et une diminution des performances du site Web, car les robots d'exploration de Google pourraient télécharger à nouveau la même ressource, même si elle n'a pas été modifiée.
Budget de dernière modification et de crawl Google Bot incorrect.
Le budget d'exploration de Google représente la quantité de ressources d'un site Web que le moteur de recherche est prêt à consacrer à l'exploration et à l'indexation du site Web. Ce budget dépend de nombreux facteurs, notamment la qualité du site Web, la fréquence de mise à jour du contenu et la vitesse du site Web.
Un en-tête HTTP Last-Modified toujours à jour peut être préjudiciable au budget d'exploration de Google, car il pourrait amener le moteur de recherche à consacrer des ressources inutiles à l'exploration de ressources qui n'ont pas été modifiées. En particulier, si l'en-tête Last-Modified est mis à jour chaque fois que le cache est régénéré, même si le contenu n'a pas changé, Google pourrait interpréter la ressource comme une nouvelle page et dépenser des ressources inutiles pour explorer cette page.
Cela conduirait à une utilisation inefficace du budget d'exploration de Google, qui pourrait être mieux utilisé pour explorer d'autres ressources plus pertinentes et à jour. De plus, une utilisation inefficace du budget de crawl de Google pourrait ralentir l'indexation des ressources les plus importantes du site Web.
Pour éviter ce problème, il est important de s'assurer que l'en-tête HTTP Last-Modified n'est mis à jour que lorsque la ressource a réellement changé. De cette façon, il est possible de garantir une bonne gestion du budget de crawl de Google et d'améliorer l'indexation globale du site.
WP Rocket et le bug de la dernière modification en détail.
Lorsque WP Rocket met en cache les publications et les pages WordPress sur le disque, remplace la date de dernière modification de l'article par celle de la génération ou de la régénération du cache. Cela signifie qu'à chaque fois que le cache est régénéré, WP Rocket met à jour le champ Last-Modified, même si la publication ou la page n'a pas été modifiée ou mise à jour depuis des années.
Plus précisément, WP Rocket détermine la date du fichier Cache produit sur le disque et propose cette date comme en-tête HTTP Dernière modification. Le code incriminé est le suivant :
Comme nous pouvons le voir dans le code ci-dessus, WP Rocket renvoie l'en-tête Last-Modified, formatant la date récupérée à partir de la date du cache sur le disque via la fonction PHP filemtime().
La fonction filemtime() de PHP est une fonction native qui renvoie la date de la dernière modification d'un fichier. Cette fonctionnalité est très utile pour vérifier si un fichier a changé depuis une version précédente et pour mettre à jour le cache de fichiers.
Ce bogue peut causer des problèmes aux moteurs de recherche et autres crawlers qui utilisent le champ Last-Modified pour déterminer si une ressource a été modifiée depuis le dernier accès. Si le champ Last-Modified est mis à jour chaque fois que le cache est régénéré, même si la publication ou la page n'a pas été modifiée, les robots d'exploration pourraient alors interpréter à tort la ressource comme une nouvelle page, même si elle n'a pas été réellement modifiée.
Pour éviter le bogue Last-Modified, WP Rocket aurait dû mettre à jour l'en-tête HTTP dans les fichiers de cache produits en récupérant la date de dernière modification de la publication ou de la page directement à partir de la base de données WordPress. De cette façon, le champ Last-Modified serait toujours mis à jour uniquement lorsque la ressource a été réellement modifiée, garantissant une indexation correcte par les moteurs de recherche.
Pour mettre en place cette solution, WP Rocket aurait dû utiliser la fonction « get_post_modified_time() » de WordPress pour récupérer la date de dernière modification de la publication ou de la page. Cette fonction renvoie la date et l'heure auxquelles la publication ou la page a été modifiée pour la dernière fois, ce qui peut être utilisé pour mettre à jour correctement le champ Last-Modified dans l'en-tête HTTP.
Nous avons officiellement signalé le bogue à WP Rocket.
L'erreur que nous avons découverte est très grave, d'autant plus qu'il ne s'agit pas d'un oubli des développeurs, mais précisément du manque de principes fondamentaux et de pierres angulaires sur ce qu'est l'en-tête HTTP Last-Modified et à quoi il sert. Par conséquent, développer un plugin destiné à des millions, des dizaines de millions de sites Web sans avoir à l'esprit la logique de base du fonctionnement de la gestion des en-têtes n'est pas un fait sérieux mais très sérieux.
Nous voulions donc signaler le problème directement à WP Rocket, en incluant dans la demande de rapport un exemple hypothétique, dans lequel un article hypothétique publié le 24 décembre pour souhaiter aux lecteurs des vœux de Noël, entraînerait un en-tête Last-Modified ultérieur, et après le Le 24 décembre lui-même, bien que le message n'ait en aucun cas été modifié.
Ils nous ont ignorés pour le moment et au lieu de nous remercier…
Il peut sembler absurde que face à un problème aussi grave signalé au support technique, ils se soient limités à nous informer qu'ils ne peuvent pas répondre à notre demande car notre licence Wp Rocket a expiré.
Ce n'est pas une blague, mais c'est vraiment ce qu'ils nous ont répondu dans le mail que nous rapportons ci-dessous.
On peut se demander s'il est juste qu'une entreprise similaire avec une telle négligence continue à mériter l'entière confiance de ses clients, qui, ignorant la gravité de leur comportement, vont créer de réels dommages sur les sites de leurs clients sans même le savoir ou du moins vouloir savoir.
Pour l'instant nous avons sollicité la demande en utilisant les bons noms et en précisant que ce n'est pas nous qui leur demandons du soutien, mais c'est nous qui le leur offrons gratuitement compte tenu de leur ignorance sur le sujet.
Nous espérons un FIX dès que possible et en attendant nous vous conseillons de surveiller la situation sur les statistiques de crawl de Google et de mesurer les éventuels effets négatifs si vous l'utilisez déjà.