In questo periodo mi sto occupando sempre più spesso di penalizzazioni (sia algoritmiche che manuali) su siti di diversi settori e ci sarebbero tantissime cose da scrivere, ma oggi voglio parlare di un nostro sito sparito completamente dalle SERP di Google in modo abbastanza strano!
Si tratta di un blog online da circa 2 anni, con argomento di nicchia, realizzato in WordPress con l’utilizzo di un tema gratuito come se ne trovano a migliaia online (di quelli che se poi compri la licenza per pochi $ di permettono di togliere anche il link del footer), che ha articoli con ottimi contenuti (originali sicuramente dato il tema) pubblicati periodicamente, con un profilo link pulitissimo (solo 4 link provenienti da siti a tema del tutto spontanei).
Il sito si naviga perfettamente ed è anche veloce a caricare.
Nel tempo non abbiamo mai monitorato il sito, così a Ottobre 2013, per caso, dopo aver controllato se il sito era presente in SERP noto con stupore che il sito è completamente sparito; anche cercando su Google il nome del sito con estensione nomesito.it non usciva fuori; comando site: restituiva 0 pagine, nessuna pagina con cache, sicché ho cominciato a pensare su come mai Google si fosse così incazzato con il nostro sitarello.
Comincio così a fare i primi controlli standard che si fanno in questi casi:
- 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â€, quindi tutte le pagine del sito sono pulite e senza scripts strani o malware o link verso siti poco raccomandabili;
- Il sito non è presente nel WMT, quindi provvedo a inserirlo, aspettando poi qualche ora per vedere eventuali messaggi d’errore;
- Controllo i Logs del Server e noto molti errori 500, ma il sito si vede bene!
7. Controllo anche con il Chrome Developer Tools, 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.
Bene scoperto l’arcano, quindi il sito è sparito non perchè bannato, ma perchè i bot dei motori di ricerca ricevevano ad ogni chiamata HTTP un bel HTTP STATUS 500!
Comincio a studiarmi il tema wordpress, pensando al fatto che il problema doveva essere in un template comune a tutte le pagine (quindi header.php, footer.php, sidebar.php ect) in quanto l’errore si presentava sempre, e scopro che nella sidebar c’era una query (che richiamava con delle condizioni le categorie) che era scritta male e che quindi andava in errore, pertanto oltre al fatto che non mi mostrava il widget con le specifiche categorie richiamate dalla query mostrava nell’header lo status 500.
Chiedo aiuto ad un amico che nè sa molto piu di me di programmazione (Daniele), che mi indica come causa del probema la funziona WP_die di wordpress che trovando un errore restituisce un status 500, così come ho indicato sotto:
/**
 * 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 ) ) {
                       $error_data = $message->get_error_data();
                       if ( is_array( $error_data ) && isset( $error_data['titl e'] ) )
                               $title = $error_data['title'];               }
               $errors = $message->get_error_messages();
               switch ( count( $errors ) ) :
               case 0 :
                       $message = '';
                       break;
               case 1 :
                       $message = "<p>{$errors[0]}</p>";
                       break;
               default :
                       $message = "<ul>\n\t\t<li>" . join( "</li>\n\t\t<li>", $errors ) . "</li>\n\t</ul>";
                       break;
               endswitch;
       } elseif ( is_string( $message ) ) {
               $message = "<p>$message</p>";       }
if ( isset( $r['back_link'] ) && $r['back_link'] ) {
               $back_text = $have_gettext? __('« Back') :
'« Back';
               $message .= "\n<p><a
href='javascript:history.back()'>$back_text</a></p>";
... etc.
Vi è capitato mai qualcosa di simile??
Risolto il problema, dopo pochi giorni il sito è tornato gradualmente ad essere visibile!