Indice dei contenuti dell'articolo:
WP Rocket è uno dei plugin WordPress più utilizzati per migliorare le performance di un sito web. Stando alle dichiarazioni commerciali riportate nel loro sito Web, il plugin viene attualmente utilizzato da oltre 3 milioni di installazioni WordPress.
Tuttavia, considerando la diffusione enorme, piani di licenza multiple ed il fatto che WP Rocket è uno dei plugin WordPress più ambiti e più piratati di sempre, è pacifico affermare che WP Rocket stia funzionando attualmente su almeno 12 milioni di siti WordPress nel mondo.
Questo plugin offre molte funzionalità utili per ottimizzare la cache del sito e migliorare i tempi di caricamento delle pagine. WP Rocket salva la cache come files sul disco e offre molte opzioni di configurazione per ottimizzare le prestazioni del sito.
Nonostante WP Rocket sia una soluzione di caching molto apprezzata rispetto ad altri competitor, presenta un grave bug che potrebbe compromettere il posizionamento e l’indicizzazione del tuo sito. Questo bug riguarda il campo “last-modified” che viene utilizzato dai motori di ricerca per capire se una pagina è stata modificata di recente. Se questo campo non viene aggiornato correttamente, i motori di ricerca potrebbero non indicizzare correttamente il tuo sito e ciò potrebbe comportare una diminuzione del traffico organico.
Pertanto, è importante tenere in considerazione questo bug di WP Rocket quando si valuta l’utilizzo di questo plugin per la tua attività online. In questo testo, esamineremo in dettaglio questo bug e le conseguenze che potrebbe avere sul tuo sito web. Se vuoi ottenere il massimo dalla tua attività online e assicurarti che il tuo sito sia ben posizionato sui motori di ricerca, dovresti evitare l’uso di WP Rocket fino a quando questo bug non verrà risolto definitivamente.
Una panoramica sull’Header HTTP Last Modified.
L’header HTTP “Last-Modified” è un campo di intestazione utilizzato nella comunicazione client-server per fornire informazioni sulla data e l’ora dell’ultima modifica di una risorsa web. Questo campo viene inviato dal server al client come parte della risposta HTTP e contiene la data e l’ora in cui la risorsa è stata modificata per l’ultima volta.
Il suo scopo principale è quello di aiutare i client a determinare se una risorsa web è stata modificata dall’ultima volta che è stata acceduta, in modo da poter evitare di scaricare nuovamente la stessa risorsa se non è stata modificata.
In questo modo, il campo “Last-Modified” aiuta a ridurre il traffico di rete e a migliorare le prestazioni del sito web. Quando un client richiede una risorsa, può includere un campo di intestazione “If-Modified-Since” nella sua richiesta, contenente la data e l’ora dell’ultima modifica della risorsa che ha salvato. Se la risorsa non è stata modificata dall’ultima volta che è stata acceduta, il server risponde con uno stato “304 Not Modified”, evitando così di trasferire nuovamente la risorsa.
Last Modified ed i crawler di Google.
Il campo di intestazione HTTP “Last-Modified” fornisce informazioni sulla data e l’ora dell’ultima modifica di una risorsa web. Tuttavia, se questo campo viene configurato in modo errato e viene sempre restituita la data attuale, senza tenere conto della data effettiva dell’ultima modifica della risorsa, potrebbero verificarsi alcune conseguenze indesiderate per i crawler di Google.
In particolare, se l’header “Last-Modified” restituisce sempre la data e l’ora attuali, i crawler di Google potrebbero interpretare erroneamente la risorsa come una nuova pagina, anche se in realtà non è stata modificata. Questo potrebbe comportare una diminuzione delle prestazioni del sito web in termini di indicizzazione e posizionamento nei risultati di ricerca.
Inoltre, se il campo “Last-Modified” è impostato in modo errato, il server potrebbe inviare una risposta “200 OK” anche se la risorsa non è stata modificata dall’ultima volta che è stata acceduta. Ciò potrebbe comportare un aumento del traffico di rete e una diminuzione delle prestazioni del sito web, poiché i crawler di Google potrebbero scaricare nuovamente la stessa risorsa, nonostante essa non sia stata effettivamente modificata.
Last-Modified errato ed il Crawl Budget dei Google Bot.
Il crawl budget di Google rappresenta la quantità di risorse di un sito web che il motore di ricerca è disposto a dedicare alla scansione e all’indicizzazione del sito web. Questo budget dipende da molti fattori, tra cui la qualità del sito web, la frequenza di aggiornamento del contenuto e la velocità del sito web.
Un header HTTP Last-Modified sempre aggiornato può essere dannoso per il crawl budget di Google in quanto potrebbe indurre il motore di ricerca a dedicare risorse inutili alla scansione di risorse che in realtà non sono state modificate. In particolare, se l’header Last-Modified viene aggiornato ogni volta che la cache viene rigenerata, anche se il contenuto non è stato modificato, Google potrebbe interpretare la risorsa come una nuova pagina e dedicare risorse inutili alla scansione di quella pagina.
Questo comporterebbe un uso inefficace del crawling budget di Google, che potrebbe essere meglio utilizzato per la scansione di altre risorse più rilevanti e aggiornate. Inoltre, un uso inefficace del crawl budget di Google potrebbe rallentare l’indicizzazione delle risorse più importanti del sito web.
Per evitare questo problema, è importante garantire che l’header HTTP Last-Modified venga aggiornato solo quando la risorsa è stata effettivamente modificata. In questo modo, si può garantire una corretta gestione del crawl budget di Google e migliorare l’indicizzazione complessiva del sito web.
WP Rocket ed il bug Last-Modified nel dettaglio.
Nel momento in cui WP Rocket genera la cache sul disco di post e pagine WordPress, sostituisce la data di Last-Modified dell’articolo con quella della generazione o rigenerazione della cache. Questo comporta che ogni volta che la cache viene rigenerata, WP Rocket aggiorna il campo Last-Modified, anche se l’articolo o la pagina potrebbe non essere stato modificato o aggiornato da anni.
Nello specifico WP Rocket determina la data del file Cache prodotto sul disco e propone quella data come header HTTP Last modified. Il codice incriminato è quello seguente:
Come possiamo vedere dal codice sopra, WP Rocket restituisce l’header Last-Modified, formattando la data recuperata dalla data della cache sul disco tramite la funziona PHP filemtime().
La funzione filemtime() di PHP è una funzione nativa che restituisce la data di ultima modifica di un file. Questa funzione è molto utile per verificare se un file è stato modificato rispetto a una versione precedente e per aggiornare la cache dei file.
Questo bug potrebbe causare alcuni problemi per i motori di ricerca e altri crawler che utilizzano il campo Last-Modified per determinare se una risorsa è stata modificata dall’ultima volta che è stata acceduta. Se il campo Last-Modified viene aggiornato ogni volta che la cache viene rigenerata, anche se l’articolo o la pagina non è stato modificato, i crawler potrebbero interpretare erroneamente la risorsa come una nuova pagina, anche se in realtà non è stata modificata.
Per evitare il bug Last-Modified, WP Rocket avrebbe dovuto aggiornare l’header HTTP nei file cache prodotti recuperando la data dell’ultima modifica del post o della pagina direttamente dal database di WordPress. In questo modo, il campo Last-Modified sarebbe stato sempre aggiornato solo quando la risorsa è stata effettivamente modificata, garantendo una corretta indicizzazione da parte dei motori di ricerca.
Per implementare questa soluzione, WP Rocket avrebbe dovuto utilizzare la funzione “get_post_modified_time()” di WordPress per recuperare la data di ultima modifica del post o della pagina. Questa funzione restituisce la data e l’ora dell’ultima modifica del post o della pagina, che possono essere utilizzati per aggiornare correttamente il campo Last-Modified nell’header HTTP.
Abbiamo ufficialmente segnalato il bug a WP Rocket.
L’errore che abbiamo scoperto è molto grave soprattutto considerando che non sia una svista degli sviluppatori, ma proprio la mancanza dei fondamentali e dei capisaldi su cosa sia e cosa serva l’header HTTP Last-Modified. Sviluppare dunque un plugin destinato a milioni, decine di milioni di siti web senza avere ben presente le logiche basilari di come dovrebbe funzionare la gestione degli header è un fatto non grave ma gravissimo.
Abbiamo pertanto voluto segnalare la cosa direttamente a WP Rocket, includendo nella richiesta di segnalazione un ipotetico esempio, in cui un ipotetico post pubblicato il 24 Dicembre per fare gli auguri di Natale ai lettori, risulterebbe con un Last-Modified header successivo, e posteriore al 24 Dicembre stesso, nonostante in alcun modo il post sia stato modificato.
Ci hanno per ora ignorati ed invece di ringraziarci …
Può sembrare assurdo che a fronte di una problematica così grave segnalata al supporto tecnico, si siano limitati a comunicarci che non possono dar esito alla nostra richiesta in quanto la nostra licenza di Wp Rocket risulti scaduta.
Non è uno scherzo, ma è davvero quello che ci hanno risposto nella mail che riportiamo seguentemente.
Viene da domandarsi se è giusto che un’azienda simile con un tale pressapochismo debba continuare a meritare la piena fiducia dei loro clienti, che ignari della gravità del loro comportamento vanno a creare dei veri danni ai siti dei loro clienti senza nemmeno saperlo o quanto meno volerlo sapere.
Per ora abbiamo sollecitato la richiesta utilizzando i giusti appellativi e specificando che non siano noi a chiedere supporto a loro, ma siamo noi ad offrirlo gratuitamente a loro visto la loro becera ignoranza in materia.
Siamo fiduciosi in un FIX quanto prima e nel frattempo vi consigliamo di monitorare la situazione sulle statistiche di scansione di Google e misurare eventuali effetti negativi qualora lo stiate già utilizzando.