Caso di Studio di una penalizzazione subdola di un sito Wordpress sparito dalle SERP di Google a causa della funzione WP_Die, che faceva restituire uno status code 500 al sito nonostante le pagine venissero caricate tranquillamente.
1. Non c'è solo Penguin o Panda...
Marco Bove
Imevolution srl
marco@imevolution.it
www.imevolution.it
@MarcoBove
2. Sono specializzato in Penalizzazioni e in Analisi Search Engine
Friendly per progetti web di medie/grandi dimensioni.
Lavoro da oltre 14 anni come SEO, prima come freelance poi
come CEO di Imevolution Srl, web agency che gestisce progetti
di promozione online in settori altamente competitivi quali E-
Commerce, Turismo e servizi online vari lavorando sia sul
mercato italiano sia su quello estero."
Chi Sono
facebook.com/marco.bove
plus.google.com/+MarcoBove
twitter.com/MarcoBove
3. Di Fronte a dati simili cosa pensereste del vostro sito??
6. Potrebbero esserci molte altre cause, vediamone alcune:
Il codice di tracciamento è stato rimosso o modificato e non traccia più a
dovere (capita molte più volte di quanto pensiate);
Un uso errato del file Robots.txt
User-agent: *
Disallow: /
Un uso errato dei metatag robots
meta name="robots" content="noindex,follow"
Un uso errato del rel=Canonical;
Problemi DNS, che per qualche impostazione sbagliata bloccano i bot di
Google;
Sito Hackerato e riempito di contenuti spammosi;
7. Ecco il nostro caso di studio.
Blog Wordpress online da circa 2 anni;
Settore di nicchia senza grossissima concorrenza;
Dominio nuovo, senza storico rischioso;
Tema Freemium, pochi plugin;
Contenuti validi e originali;
Profilo Link pulitissimo, pochissimi backlink tutti spontanei;
Sito estremamente veloce e senza problemi di caricamento;
Codici di tracciamento (non Google Analytics) installati correttamente;
8. Come ci siamo accorti del problema
Cercando per la chiave topica (con cui era nelle primissime posizioni) a file
Luglio 2013 il sito non è più visibile, nemmeno nelle prime 100 pagine.
Provo a cercare il dominio con “nomedominio.it” 0 risultati;
Provo su Google site:nomeadominio.it nessun risultato trovato;
Provo nei risultati cache, nessuna pagina presente nella cache di Google
Sito Bannato???
Cosa Avrò fatto di cosi grave?
9. Prime analisi per capire il problema
Controllo le statistiche per capire da quanto il sito è in questo stato (dal 13
Luglio c’è un calo consistente di traffico;
Il sito non ha un Robots.txt con un “Disallow /” messo lì per errore;
Il sito non ha un meta robots “Noindex” inserito per errore manualmente
o tramite qualche plugin;
Il sito non è stato “bucato”, tutte le pagine del sito sono pulite e senza
scripts strani o malware o link verso siti poco raccomandabili;
Controllo il Webmaster Tools di Google che mi porta un generico errore
500 su alcune pagine, che controllo e che in quel momento si vedono
benissimo.
10. Prime analisi per capire il problema
Comincio ad Analizzare i log del server e qui ho la prima sorpresina:
Tutte le pagine del sito rispondono STATUS HTTP CODE 500*
* 5xx (Errore del server)
Questi codici di stato indicano che si è verificato un errore interno del server durante il tentativo di elaborazione della richiesta. Questi errori
sono tendenzialmente nel server stesso, non nella richiesta.
500 (Errore interno del server): Si è verificato un errore nel server, il quale non riesce a soddisfare la richiesta.
https://support.google.com/webmasters/answer/40132?hl=it
11. Prime analisi per capire il problema
Controllo anche con il Chrome Developer Tools (F12 → Network) , che mi dà errore 500 nel
caricamento delle pagina, mentre tutti i singoli file vengono caricati, ecco perché le pagine
vengono comunque caricate dal browser.
Ecco la causa della sparizione del sito dalle SERP, non è stato bannato,
semplicemente i bot dei motori di ricerca ricevevano ad ogni richiesta di pagina
un bel HTTP STATUS 500!
12. Risoluzione Problema
Controllo di tutti i singoli file del Tema, con la certezza che il problema dovesse essere
in un template che veniva richiamato in tutte le pagine del sito quindi particolare
attenzione viene posta a header.php, footer.php e sidebar.php;
Nella sidebar troviamo una query scritta male e che andava in errore, ma invece di limitarsi
a non mostrare i contenuti richiamati dalla query, a causa della funzione Wp_Die*
faceva rispondere tutte le pagine con lo status 500.
La funzione Wp_Die non è sempre attiva, dipende dalla configurazione del server Apache
e dalla versione PHP, per sicurezza fate sempre un controllo sulla vostra installazione
Wordpress.
Wordpress stesso dice:
This function complements the die() PHP function. The difference is that HTML will be displayed to the user. It is recommended to use this function only,
when the execution should not continue any further. It is not recommended to call this function very often and try to handle as many errors as possible silently.
13. Ecco la Causa del Problema
/**
* Kill WordPress execution and display HTML message with error message.
*This is the default handler for wp_die if you want a custom one for your
* site then you can overload using the wp_die_handler filter in wp_die
* @since 3.0.0
* @access private
* @param string $message Error message.
* @param string $title Error title.
* @param string|array $args Optional arguments to control behavior.
*/
function _default_wp_die_handler( $message, $title = '', $args = array() ) {
$defaults = array( 'response' => 500 );
$r = wp_parse_args($args, $defaults);
$have_gettext = function_exists('__');
if ( function_exists( 'is_wp_error' ) && is_wp_error( $message ) ) {
if ( empty( $title ) ) {
14. Risoluzione Problema
1) Correggo la query errata e magicamente le pagine ritornano a rispondere con codice di
Stato 200;
2) Per evitare che in futuro un qualsiasi altro errore di query mi faccia riuscire il 500
modifico la funzione Wp_Die e di default faccio rispondere con il codice 200.
Il problema è comune:
http://wordpress.org/support/topic/500-internal-server-error-when-having-the-pluging-activated
http://wordpress.org/support/topic/wp-38-conflict-something-else-500-error
http://wordpress.org/support/topic/plugin-secure-invites-plugin-generates-false-500-errors
http://mc-computing.com/ISPs/WordPress/500_server_error.html
http://wordpress.stackexchange.com/questions/101533/wp-die-causing-500-internal-server-error