Indice dei contenuti dell'articolo:
Fornendo aiuto ad un nostro cliente www.viktec.net (un sito di recensioni tecnologiche) che lamentava un’estrema lentezza di navigazione e constatando che lato server era tutto configurato adeguatamente con uno stack software di eccellenza con Varnish Cache che rispondeva correttamente, e addirittura uno stato aggiuntivo di Cache con CloudFlare, ci siamo chiesti cosa non potesse andare nel sito e abbiamo approfondito la ricerca analizzando l’applicativo e il database.
Può capitare in maniera nemmeno troppo infrequente che un sito che stava dando buoni risultati e ottime soddisfazioni in termini di posizionamento sui motori di ricerca che possa perdere il posizionamento di molte parole indicizzare e da li a poco vederlo letteralmente scomparire dai motori di ricerca.
I motivi possono essere molteplici, una sitemap non ben configurata, una cache che non si aggiorna, un robots.txt con un disallow errato, ma in questo articolo voglio parlarti di quanto è importante avere un sito veloce e di quanto sia dannoso un sito lento per i motori di ricerca.
Lentezza questa volta dovuto ad un plugin WordPress ufficiale di Amazon : Amazon Associates Link Builder.
Il plugin WordPress Amazon Associates Link Builder ti permette di integrare i prodotti Amazon nel tuo sito in modo semplice e accattivante, con pochi clic.
Amazon Associates Link Builder è il plugin ufficiale per WordPress, gratuito e progettato per rendere semplice ai membri del Programma di affiliazione Amazon la ricerca dei prodotti Amazon da inserire nel proprio sito. Dà la possibilità di creare link diretti, con pochi clic e senza dover uscire dall’editor di WordPress.
L’uso dell’Amazon Associates Link Builder consente di non dover integrare manualmente informazioni importanti sul prodotto, come i nomi, le descrizioni e le anteprime dei prodotti.
Il plugin Link Builder, infatti, genera dei codici brevi che puoi utilizzare per selezionare i dati dei prodotti Amazon in diversi formati di visualizzazione, quindi mostrarli sul tuo sito web. Di seguito vedremo le funzionalità del Link Builder e alcuni esempi di come gli affiliati lo utilizzano per migliorare i propri siti.
Fortunatamente questo plugin è stato dismesso il 9 marzo 2020, ma qualora lo abbiate installato statene veramente MOLTO attenti.
Il problema
Il problema principale deriva dal fatto che questo plugin va ad aggiungere delle entry nel database di WordPress nella tabella wp_options, entry per diverse milioni di righe.
Già il fatto di non usare una tabella separata la dice lunga quanto possa essere improvvisato questo plugin e il pessimo lavoro che hanno fatto gli ingegneri di Amazon (eh si, è proprio un loro plugin ufficiale) ma il fatto che possa riempire la tabella andando ad aumentare a dismisura il tempo di interrogazione del DB è davvero più che gravissimo.
Query lente sul database equivale a pagine lente che sono dannose sia per il visitatore che si spazientisce, sia per i crawler di Google che avendo miliardi di siti da scansionare si spazientiscono anche loro e passano al prossimo.
Crawling budget cos’è ?
La definizione che viene data comunemente del crawl budget è il numero di pagine che Google sottopone a scansione in un determinato periodo di tempo.
In parole semplici, il crawler bot di Google si occupa di scansionare le pagine web, aggiungendole successivamente all’indice. Durante l’operazione, il software cerca altri links da seguire in autonomia oppure seguendo gli URL di una sitemap.xml per analizzare sempre nuovi contenuti.
Per essere identificato durante l’accesso, in genere i bot usano uno user agent, ossia una stringa di riconoscimento. Consultando il file di log di Apache sul nostro server, possiamo notare visite da Googlebot, ma esistono anche BingBot di Microsoft, Baiduspider per il mercato cinese e YandexBot per la Russia.
Svolgere il compito di scansione di siti da 100, 1000 o 10000 pagine può essere particolarmente oneroso e soprattutto dispendioso in termini di risorse hardware, ma anche di tempo impiegato, visto che esistono miliardi di siti che vanno periodicamente controllati per monitorare eventuali nuovi aggiornamenti o modifiche ai contenuti.
Da qui nasce l’esigenza di limitare il tempo e le risorse dedicate ad ogni sito in base ad una serie di fattori che vanno a premiare alcuni siti con una scansione più frequente, mentre altri saranno controllati solo di rado.
Per farsi un’idea concreta della situazione del proprio sito ci si deve necessariamente affidare ad un sistema di monitoraggio degli accessi di Googlebot ed esistono varie soluzioni.
Il modo più semplice e gratuito è l’uso del proprio account Search Console nell’area Crawl > Crawl Stats, dove è riportato un grafico con l’attività di Google negli ultimi 90 giorni, mostrando la media, i massimi e i minimi relativamente al numero di pagine scansionate ogni giorno.
E’ ovvio che se le pagine sono molte da scansionare ed il sito è lento i Crawler di Google non staranno li delle ore per recuperare la pagina ed indicizzare i contenuti, ma andrà oltre al prossimo sito non recuperando i vostri contenuti e non indicizzandoli lasciandovi letteralmente scomparire da Google.
Il discorso vuole prendere in esame Google, ma è valido praticamente per tutti i motori di ricerca.
Analisi del problema
Il primo passo da fare quando un sito diventa estremamente lento fino a morire è quello di profilare l’applicativo per capire i colli di bottiglia.
Questo può essere fatto in diversi modi, usando applicazioni di terze parti come New Relic, utilizzando plugin per la profilazione come Query Monitor, o andare a manina sulla shell del DB MySQL e fare uno SHOW FULL PROCESSLIST; per vedere quali query passano più frequentemente ed il timing impiegato da ognuna di esse.
Un modo sano se avete accesso root al sistema o avete dei sistemisti in gamba che si occupano come noi anche di seguirvi sulle performance e non solo di vendervi il pacchettino di hosting a 50 euro l’anno è quello di utilizzare Percona Toolkit come abbiamo scritto in questo articolo.
Comunque sia in questo caso è stato addirittura molto più facile, in quanto accedendo al database con l’utility phpMyAdmin era impossibile non accorgersi che qualcosa non stesse andando per il verso giusto : la tabella wp_options pesava 20GB.
Un valore inumano, insensato che al superare di qualche decina di megabyte (un centinaio al massimo) dimostra e prova oltre ogni ragionevole dubbio che qualche plugin sta scrivendo nefandezze sulla tabella.
Infatti era piena di entry con un identificatore aalb_update_table_batch
Già qualcuno si era accorto del problema come possiamo leggere in questo thread di supporto al plugin : https://wordpress.org/support/topic/the-wordpress-db-has-increased-by-600mb-2/
La soluzione come consigliata anche nel thread sopra elencato è stata quella di cancellare tutte quelle entry utilizzando la seguente query SQL :
DELETE FROM wp_options
WHERE option_name
LIKE (‘%aalb_update_table_batch%’)
La tabella ha iniziato a vuotarsi fino a qualche decina di megabyte ed il sito ha iniziato ad aprire pagine in meno di due secondi contro gli oltre 10 secondi prima di effettuare la pulizia.
Sostituzione del plugin Amazon Associates Link Builder con WP Money Click
Il cliente una volta compresa la problematica che il plugin ufficiale di Amazon stava letteralmente uccidendo il suo sito ha provveduto a sostituirlo col meno famoso ma molto migliore e più performance WP Money Click che consigliamo vivamente a tutti coloro che lavorano nel campo affiliazioni e comparazione prodotti.
Oltretutto la sostituzione del plugin ha permesso di convertire tutti gli shortcode presenti nel sito (parliamo di centinaia di articoli) al formato WP Money Click, non dovendo dunque impiegare molto lavoro o tempo per effettuare la migrazione al nuovo plugin.
Risultati e benefici ottenuti
I risultati ottenuti sono quelli di esser ritornati ad un sito veloce e scattante con molte keywork e contenuti finalmente indicizzati da Google come possiamo vedere dallo screenshot seguente ottenuto tramite SeoZoom.
Come potete vedere dalla fine del mese di marzo ad oggi (inizio aprile) da circa 1000 pagine indicizzate siamo arrivati ad oltre 20000.
Conclusioni
Sebbene in questo caso specifico abbiamo voluto trattare di questo plugin che stava dando grossi problemi, ciò non significa che sia l’unico plugin a generare situazioni e conseguenze dannose come sopra descritte.
Semplicemente esistono plugin scritti più o meno male che tendono a rallentare il sito in maniera imbarazzante, ottenendo gli stessi effetti nocivi che avete letto qui sopra.
Attenzione dunque ogni volta che installate un plugin, e fate attenzione alla crescita del Database qualora notiate un eccessivo rallentamento.
In merito a cosa scegliere e con quale criterio scegliere un plugin vi rimandiamo a questo articolo Best Practice per scegliere i plugin certi che vi aiuterà a ponderare scrupolosamente la migliore soluzione.
Come sempre, se avete problemi di performance, contattateci pure. Siete sempre i benvenuti.