immagine di sfondo articolo
Black Hat Seo tempo di lettura: 14 min

Negative SEO: pulire un sito WordPress infetto e recuperare il posizionamento

Negative SEO: pulire un sito WordPress infetto e recuperare il posizionamento

Articolo datato

Questo articolo non è più aggiornato da almeno 3 mesi perciò verifica le informazioni che vi sono contenute in quanto potrebbero essere obsolete.

Sommario

Partiamo dall'inizio. Qualche mese fa (giovedì 31 maggio) mi becco la febbre. Vabbè mi butterò a letto.

Prima di farlo do uno sguardo ai diversi siti monitorati, e uno in particolare, a seguito di aggiornamento della scansione di SEOZoom mi mostra un brutto drop sia nelle query monitorate che in alcune generali.

Prima riflessione: chi fa SEO non può stare male.

Al volo, tra i fumi della febbre, reputo che il drop sia dovuto al fatto che è da troppo tempo che il sito non viene aggiornato nei contenuti e che non riceve abbastanza link in ingresso.

Potrebbe essere, il sito in questione di una associazione di professionisti locali è stabile da mesi per le query relative alla sua attività (in prima pagina), ma purtroppo è uno di quelli dove il consulente SEO (ossia io) non ha completa autonomia nella realizzazione dei contenuti (ovvero a seguito di pianificazione farli poi realizzare da un copy) ma i clienti hanno emesso un dictat del tipo: te ci fornisci piano redazionale e scaletta per ogni articolo e noi scriviamo. Cosa che ad inizio anno preparo per i mesi a venire, ma in questo caso è da parecchio tempo che si è bloccata e da novembre 2017 non mandano più nulla. Per cui di mio posso solo fare attività di fine tuning e monitoraggio passivo dell'andamento.

Al cliente però va bene così e quindi di mio non martello (anche perché l'ho già fatto più volte fino a sentirmi dire: "Ok abbiamo capito ma abbiamo altro da fare, siamo consapevoli, il tuo dovere l'hai fatto"). Del resto paga lo stesso e da quel che dice è contento di quello che il sito produce (lead acquisition).

A livello di link ho esaurito il budget stanziato per procuramene di nuovi (budget tra l'altro decisamente infimo rispetto al minimo che si dovrebbe fare) e per questo motivo ecco lasciato un ottimo dominio in balia dei venti della SEO, pregando che nessun competitor faccia qualcosa di meglio per scalzarlo dalle posizioni acquisite con il tempo.

Ma ritorniamo al problema. Il sito è pesantemente sceso ed io non posso però fare ulteriori analisi, non ne ho le facoltà causa febbre ed allora mi butto a letto tra le braccia di Morfeo, che mi fa passare una calda e umida notte, bagnato di febbricitanti sudori.

Negative #SEO: pulire un #wordpress infetto da url spam e recuperare il posizionamento perso Share on X

Al mattino mi sveglio che sto lievemente meglio, e pur febbricitante provo a ragionare su questo drop.

Analisi_della_perdita_di_posizionamento_dovuta_a_Negative_SEO">sito infetto Google analyticsAnalisi della perdita di posizionamento dovuta a Negative SEO

Davanti ad un monitor qualquadra non cosa, il drop di posizionamento è troppo elevato per essere imputabile ad una naturale flessione della SERP per le query posizionate e memore di precedenti esperienze ricerco le cause in uno dei tre ambiti:

  • il sito ha dei problemi tecnici
  • Google ha lanciato un nuovo algoritmo
  • il dominio si è beccato una azione manuale

Ed allora raccolgo i dati.

seozoom query monitorateOk sono scese alcune query posizionate (pesantemente e solo per alcuni url) ma il traffico in realtà? Guardo Analytics e fino a giovedì mattina, prima del drop evidenziato da SEOZoom, tutto a posto (poi dal venerdì mi renderò conto che alla sera è lievemente sceso rispetto alla settimana precedente). Tutto è complicato dal fatto che il sito effettua pochi accessi da organico, per cui le flessioni di visite non spiccano.

Analizzando nel dettaglio mi rendo conto che ad essere scesa di posizionamento è la home e alcuni URL.

Seconda riflessione: Ma che davvero il dominio si è preso una botta per scendere in maniera così pesante a causa dello scarso aggiornamento e solo per alcuni URL?

Aggiornamenti algoritmici non ve ne sono, Search Console non ha azioni manuali, i contenuti non vengono modificati da tempo (no Panda granulare), non ho acquistato link e non ve ne sono di nuovi in ingresso (no Penguin granulare), quindi vi sono problemi tecnici.

Incominciamo a guardare sul sito.

Memore del fatto che alcuni siti WP della mia PBN (scherzo non ho PBN, sono il male eh! Non fatelo!) la scorsa settimana sono stati bucati provo al volo un comando site:https//nomedominio.tld

negative seo

I risultati restituiti per il sito bucato dopo un mese dalla pulizia del Wordpress

AH!

Ok non è lo scarso aggiornamento dei contenuti, mi hanno bucato il WP, ma come diavolo hanno fatto dato che questo l'ho aggiornato (tema e plugin) completamente meno di un mese fa e che non vi sono nuovi aggiornamenti?

Mannaggia è su un server condiviso con un altro WP fantasma, progetto mai partito e a quanto pare abbandonato da tempo, con un WP decisamente obsoleto che risponde ad un dominio non utilizzato!

Quindi hanno bucato il WP fantasma e da li sono saliti di radice, hanno visto cosa c'era e sono scesi a bucare questo dominio. Mannaggia al sistemista.

rm -rf /dominiomaiusato.it

Ok ora in teoria non possono più entrare, ma ora tocca analizzare il sito bucato e comprendere cosa è successo.

Tramite il comando site scopro due cose:

  • i title/description di alcuni url esistenti sono tutti modificati in giappocinese e con testo spammoso
  • google ha indicizzato un macello di risultati spam, con url, title e description giappocinemmosi (giapponesi/cinesi e spammosi)

Controllo quindi subito il database, che è pulito. Buona notizia.

Quindi?

La sitemap com'è?

Quella generata da yoast è a posto, ma... com'è sta storia che anche nel file robots.txt si punta ad un'altra sitemap rispetto a quella che viene generata da yoast?

Perchè da search console mi dice che vi sono errori nella sitemap? (sitemap in html e per questo non processabile)

Ok quindi l'attacco è stato portato in questa maniera: semplice generazione di un macello di pagine spamsostituzione di sitemap e notifica a Google mediante redirect da quella originale.

sito bucato search console

In evidenza il picco di attività grazie agli url generati dinamicamente

Ma come è stato portato in pratica questo attacco?

Analizzo i file dentro l'host e scopro che l'.htaccess è stato infettato, aggiungendo una regola per far effettuare un redirect alla sitemap spammosa del sito (generate dinamicamente secondo un algoritmo criptato) e in più il file robots.txt è stato modificato ed ora linka la nuova sitemap spam e...

Ta da! Anche in questo dominio ci sono due maledette backdoor! Di quelle che possono essere usate come file manager, per cancellare, caricare e modificare permessi sui file, chiaramente a tutto l'host, che se frazionato su più domini li rende tutti vulnerabili a questa tipologia di azione. Si insomma delle webshell in php, ci siamo capiti, quelle che si possono anche realizzare in autonomia utilizzando la funzione exec().

Analizzo quindi i log del webserver, ora che so i nomi dei file .php utilizzati come backdoor, e vado a scoprire che esattamente giovedì 31, nelle prime ore del mattino, qualcuno tramite un proxy cinese ha fatto accesso a quei file e chiaramente avrà caricato questi script.

Quindi è necessario pulire il sito e per farlo non scelgo di usare un plugin (perché spesso non riescono a pulire e alcune volte nemmeno a rilevare le falle di sicurezza) ma procedo con un metodo ben più drastico e sicuro.

Come pulire un Wordpress infetto

Attenzione, la procedura a seguire è decisamente completa e veloce, ma solo se si sa dove mettere le mani.

Chiaramente prevede che abbiate una versione di backup del vostro sito, ma del resto tutti voi l'avete no?

  • backup del db del sito online che non si sa mai
  • backup dei file del sito online che non si sa mai
  • analisi della cartella media in cerca di file sospetti e/o caricati nel momento dell'attacco
  • cancellare tutto, tranne i media di Wordpress
  • modificare i parametri di accesso al db (quelli scritti in wp-config.php giusto per intenderci)
  • modificare il file wp-config.php con i nuovi accessi al db
  • caricare una versione pulita e aggiornata di wordpress
  • caricare il tema aggiornato all'ultima versione (preso da un backup locale del sito)
  • caricare nuovamente i plugin
  • modificare le password di accesso degli utenti WP
  • rigenerare i permalink
  • rigenerare la sitemap
  • controllare che tutto sia a posto (veloce navigata nel sito e passaggio di Screaming Frog/Visual SEO Studio in cerca di errori)
  • controllare che tutti i risultati spam caschino in una corretta pagina 404 (con http status 404). Questo in realtà basta ma se proprio volete fare le cose bene in realtà l'http status code dovrà essere 410 ossia risorsa non più esistente e che NON lo sarà in futuro.

Come avrete capito tutto ciò presuppone che il dominio vada offline per un tempo variabile, in base alla vostra connessione (tempo di caricamento dei file via ftp).

Si può evitare tutto ciò, o meglio diminuire i tempi di offline, con qualche accortezza:

  • precaricare i file in una directory temporanea e poi spostare tutto via terminale (comando mv da shell linux)
  • cancellare i file da terminale (comando rm)
  • mettere una splash screen di lavori in corso

Con una connessione a Fibra comunque ricaricare un Wordpress è questione di meno di mezz'ora a patto di non cancellare i media, che il tema in uso non sia una roba immonda con millemila file (e che quindi avete altri problemi SEO a prescindere) e che non abbiate in uso una valangata di plugin (e che forse andrebbero potati).

Dopo la pulizia del sito in Wordpress, lato SEO

Dopo aver effettuato la pulizia del Wordpress bisogna effettuare due operazioni:

  • comunicare a Google che i contenuti del sito sono stati aggiornati
  • (in teoria) pulire tutti i risultati spam indicizzati

Comunicare che gli URL del sito non sono più spam a Google

Facilissimo, basta reinviare la sitemap a Search Console, per segnalare al motore di ricerca di effettuare una nuova scansione del dominio (dalla vecchia GSC: selezione della proprietà desiderata > Scansione > Sitemap > Aggiungi/testa sitemap).

Poi analizzate i log del server per vedere il passaggio del crawler. Se non ne siete capaci cercate di diventarlo! A parte gli scherzi, sappiate che seolyzer.io aiuta parecchio per incominciare.

Pulire il motore di ricerca dai risultati infetti/spam relativi al nostro dominio

In teoria ora è necessario pulire i risultati spam in SERP e a seguire vi spiego alcuni metodi.

Attenzione! Dato che sono risultati SPAM, con roba tipo Cialis, Viagra et Louis Vuitton gli URL spam non più esistenti non devono venire rediretti a pagine del sito o alla home, ma alla 404.

Vi anticipo subito che però questa azione ad ora è molto meno utile rispetto al passato. Google è diventato decisamente più intelligente.

Se siete quindi curiosi di scoprire i miei esperimenti su questo aspetto continuate a leggere, altrimenti saltate pure questo paragrafo e andate a seguire dove vi racconto le mie considerazioni su questo aspetto.

Estrarre gli URL da eliminare

Prima di segnalare a Google quali URL eliminare è necessario averne una lista.

Per farlo il modo migliore e più veloce è crawlare il sito compromesso, con uno strumento come Screaming Frog/Visual SEO studio, escludendo poi gli URL utili o nel mio caso direttamente la sitemap spam.

Purtroppo però di mio, causa annebbiamento da febbre, non ho fatto questa operazione prima di procedere alla pulizia e per questo ho dovuto ricostruire la lista di URL spam mediante scraping della SERP di Google restituita dal comando site.

C'è un però: il comando site non restituisce tutti i risultati e nel mio caso di oltre 5000 spamsnippet (perchè ho fermato in tempo l'infezione, in altri casi mi sono trovato con 70000 url spam) me ne tira fuori un massimo di 10 per circa 40 pagine, ovvero 400.

Scrapare la SERP di Google per una data query o operatore di ricerca

Questa operazione va chiaramente automatizzata, già solo copiaincollare a manina 400 risultati porta via troppo tempo e se va ripetuta nel tempo...

Per procedere i metodi sono differenti e ad esempio si potrebbe:

Vi dico sin da subito che:

  • realizzare lo script porta più tempo che usare una estensione per Chrome
  • utilizzare un software di automazione, se non si conosce lo strumento, porta via una valanga di tempo per impadronirsi del linguaggio di codice proprietario (ma che è un ottimo investimento per riutilizzarlo per automatizzare funzioni ricursive se si effettuano periodicamente)

Quindi di mio ho utilizzato l'estensione per Chrome Data Miner.

Dopo averla installata ho quindi aperto una nuova finestra del browser ed ho effettuato il comando site://nomedominio.

Facendo attenzione a rimanere sulla prima pagina della paginazione ho quindi configurato il tool affinché scrapasse tutti i risultati delle "pagine paginate".

Per farlo ho premuto sul bottone Next Page e ho impostato a 100 il valore in Scrape X pages before stopping, per poi premere il bottone Start Pagination.

Il tool ha poi estratto tutti i risultati (vedrete che funziona perché pian piano naviga tutte le pagine della paginazione) e a seguire ho tirato giù un csv, trasformato poi in un file txt.

Ho quindi usato la funzione della Search Console Indice di Google > Rimozione URL che però nativamente accetta in pasto un solo URL per volta.

Per questo ho investito una enorme cifra (tipo un euro e qualcosa) per acquistare una estensione per Chrome, Webmaster Tools - Bulk URL Remover che aggiunge la possibilità di dare in pasto al tool una lista di url all'interno di un file.

rimozione url search console

Il file va generato come file testuale semplice e a capo ogni url che si vuole rimuovere.

Ho così dato in pasto un txt con tutti gli url da eliminare, facendo prima una prova.

Purtroppo però la search console in alcuni casi e dopo circa 50 url dati in pasto con questo metodo si pianta e fornisce un bel messaggio di errore (You have exceeded your quota limit!). In quel caso è necessario quindi effettuare un reload della pagina riaprendo la search console, la proprietà su cui si vuole lavorare e spostarsi nuovamente in Indice di Google > Rimozione URL. IL software poi ricomincia il lavoro da dove è si è interrotto.

E qui ho scoperto una cosina. Ossia che lo strumento rimozione URL accetta massimo 1000 url/giorno e poi si blocca.

Il tempo per eseguire questa operazione si allunga di conseguenza un sacco, e per questo non bene, in particolare quando (come in questo caso) non vi è budget.

Quindi dopo aver analizzato il posizionamento ed essermi reso conto che le precedenti posizioni erano state recuperate ho lasciato perdere tutto il lavoro di pulizia ed ho scoperto una nuova cosa.

Perchè non serve pulire i contenuti indicizzati di un sito Bucato

Google è decisamente diventato più intelligente e un eventuale lavoro di pulizia di risultati Spam può essere evitato!

Dico questo perchè:

  • Il dominio dopo circa 20 giorni ha ripreso le precedenti posizioni perse
  • I risultati spam non hanno portato traffico, dato che non si sono posizionati (per gli stessi motivi per cui un contenuto off-topic e in un layout totalmente differente dal resto del sito non si posizionano)
  • Google ha comunque tenuto in indice i risultati e li ha riscansionati, capendo (grazie alla risposta 404) che erano contenuto non più esistente e pian piano li ha segnalati su Search Console, dove con due click si possono contrassegnare come corretti
  • Tutti i competitor che effettueranno una analisi del dominio si ritroveranno spiazzati

Errore 404 VS 410

L'errore 404 è il più comune e quando viene rilasciato questo status code andiamo a spiegare allo spider o all'utente che PER ORA la risorsa non è disponibile ma che potrebbe esserlo in futuro.

In questo caso quindi sarebbe meglio per gli url spam non più esistenti, andare a rilasciare come status di errore il 410 (contenuto non più esistente e che NON lo sarà mai più).

Per farlo però avrei dovuto realizzare una regex e intervenire sull'htaccess che in questo caso mi sembrava un deciso spreco di energie non pagate, ma voi ricordatelo per il futuro!

Analisi del recupero del posizionamento perso

Dopo aver effettuato la pulizia di Wordpress dai risultati infetti nei giorni a seguire ho monitorato l'andamento del sito grazie a:

  • SEOZoom: che mi ha segnalato come le posizioni per le query monitorate erano state recuperate (lo strumento permette di comprendere prima di tutti l'andamento del dominio, perché se un risultato è posizionato o meno per una data query porterà più o meno traffico in futuro)
  • Google Analytics: che mi ha segnalato un lieve drop (che poteva diventare decisamente più elevato se non risolto il problema per tempo)
  • Search Console: che dopo i classici tre giorni di differita mi ha incominciato a mostrare impression sui nuovi url spam
  • Search Console: che (sempre dopo i tre giorni) mi ha mostrato un deciso drop di impression/click su uno degli url per cui avevo perso il posizionamento

sito infetto search consoleGlobalmente però, per questo caso, rimane uno strumento come SEOZoom il più veloce per accorgersi di un problema di tipo, dato che il drop è stato così breve che un tool come Search Console (che mostra dati a tre giorni prima) non può monitorare e Analytics nel mare di URL che monitora potrebbe non mostrare un drop di accessi al sito così significativo per essere scoperto se non dopo qualche giorno.

Anzi vi dico di più, data la velocità con cui ho risolto la cosa non ho ricevuto nessuna notifica per sito compromesso in Google Search Console ma solo di aumento delle pagine 404 del sito dopo il lavoro di pulizia.


E qui concludo, chiaramente nei commenti a seguire se avete dubbi, perplessità e curiosità non esitate a chiedere.

Di mio il mio consiglio principale per risolvere un problema simile è... di non ammalarvi! Se riguardo indietro i miei passi mi rendo conto di aver fatto mille cappellate in quei giorni di febbre, fra cui tenere traccia delle azioni eseguite a pezzi e non in maniera completa (ecco perchè è un po nebuloso questo articolo, per alcuni aspetti sono andato a memoria sulla base di quanto mi ero segnato mesi fa).

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Commenti

Rispondi 23-10-2018 00:48
Ursula
Ciao, in questi giorni ho letto più volte questo articolo è devo dire che ė molto interessante. Ero alla ricerca di un articolo che descrivesse come capire se ho il mio sito bucato in quanto sono scesa con più di 632 keywords. L'unica cosa che non mi ė chiara se per vedere se qualcuno ha messo mani nel mio sito devo usare il procedimento che hai descritto  site:https//nomedominio.tld. Perché a me non compare niente.. Grazie mille un anticipo.
Rispondi 23-10-2018 15:06
Pino
Ciao Ursula, il comando site:https//nomedominio.tld mostra se il tuo dominio è stato infettato con un attacco che ha iniettato in serp URL spam. Ma potrebbe essere stato infettato in altre maniere, con redirect ad altri url, con iniezione di codice js malevolo per carpire le informazioni inserite dai tuoi utenti, con eliminazione di contenuti, etc etc (in alcuni di questi casi hai una notifica in serch console nel caso di infezione) o attacchi più classici di negative seo come una marea di backlink tossici o un redirect di un dominio con penalizzazione. Il tuo esser scesa per 632 key però potrebbe non essere dovuto ad un attacco ma ad altri motivi come: crash interno del sito in alcune sue sezioni, interventi pesanti e invalidanti lato codice, eliminazione di molti contenuti, riconsiderazione algoritmica data da motivi da evidenziare, etc, etc. In questo caso quindi ti consiglio di effettuare una audit SEO completa e comprendere se il motivo è interno prima di cercare a una motivazione esterna.
Rispondi 25-10-2018 18:52
Ursula
Ciao Pino, innanzitutto grazie per la tua risposta molto dettagliata. Andando su Google Search Console avevo visto dei backlink al mio sito che ho inviato a Google Disalow. Per sicurezza, ho ripulito l'intero sito anche da plugin. Ora vedrò si fare una Audit SEO. Grazie mille
Rispondi 02-09-2019 14:30
Daniel
Ciao Pino, complimenti per il tuo articolo. Molto esaustivo. Ho avuto un paio di siti hackerati, gli url sono stati puliti e danno errore 404, ma se richiamo il sito con operatore site: vedo ancora un sacco di pagine hackerate, che una volta cliccate danno 404. Può essere un problema? grazie, Daniel
Rispondi 05-09-2019 14:18
Pino
No, non è un problema, ci vorrà un po' di tempo perché l'indice di google si ripulisca ma pian piano vedrai che i risultati infetti restituiti da site:dominio diminuiranno
Rispondi 02-11-2019 08:24
Luigi
Ciao Pino, un articolo molto chiaro e dettagliato che sicuramente può essere d'aiuto a molte persone. Anche io sono stato colpito da un fenomeno del genere, ma è stata colpa mia, poichè era interessato all'acquisto di un plugin a pagamento che mi serviva per un mio sito, ma prima di acquistarlo l'ho scaricato da altri siti gratis e purtroppo questo plugin conteneva una parte di codice che in pratica mi ha spammato tutto il sito. In pratica ha creato quasi più 1.000 pagine spam sul mio sito, ma che in realtà non esistono infatti sono tutte in 404, e poi ha spammato il link del mio sito su altri siti che trattano argomenti ben noti come medicine, viagra, ecc. Ad oggi ho ripulito tutto il sito e non c'è più traccia del codice malevolo, sotto il profilo seo tramite SC sono riuscito ad eliminare alcune di queste pagine fantasma, mentre altre non mi permette di rimuoverle, la sitemap è pulita, la maggior parte di queste pagine che risultano ancora tramite SC lo ho bloccate tramite il file robots poichè tutti i permalink che il codice malevolo ha prodotto iniziavano tutti con un numero nomesito.it/254255ced_is-there-a-way-to-get-a-bigger-dick_natural-ways-to-get-a/ cosi facendo tutte le pagine SC me le da come "escluse" con la specifica che sono bloccate dal file robots. Il sito è stato bucato a Giugno 2019, fino ad un mese fa il traffico non ne ha risentito, da circa 1 mesetto ho riscontrato un calo delle visite organiche perdendo molte posizioni in serp. secondo te le azioni che ho messo in campo possono bastare?
Rispondi 03-11-2019 12:51
Pino
Ciao Luigi Se hai ancora pagine con codice malevolo no, vanno rimosse e mandate in 404/410, poi lascia che google le escluda dall'indice in autonomia. Per i link in ingresso il problema è diverso. Se hai perso posizioni va fatta una audit seo per tutta la sezione di off-site e nel caso comprendere che fare.

RI.DO.PC. - P.IVA 10902370013

© 2013-2024 Tutti i diritti riservati