Test di indicizzazione tra X-Robots-Tag e robots.txt

Aggiungiamo un bel sommario prima di ogni altra cosa, perché il test si sta dilungando molto nel tempo e nei vari passaggi e diventa utile poter saltare in avanti per chi ha seguito dall’inizio.

Le premesse che hanno portato al test

In questi giorni mi è capitato di leggere questo articolo di Andrea Giudice, che tra le varie cose sostiene che il motore di ricerca possa leggere un’istruzione X-Robots-Tag presente negli header di una risorsa, anche in presenza di un’istruzione Disallow nel file robots.txt:

Dall’articolo “Il noindex nell’x-robots-tag fa la differenza”

[…]
Se esistesse il modo di fare leggere il noindex PRIMA del disallow deindicizzeremmo il contenuto dalla serp ed eviteremmo la Scansione.

Ricordiamo anche un’altra faccenda molto importante: il noindex non evita la Scansione della risorsa.

Con il noindex la pagina sarà sempre sottoposta alla Scansione dello spider anche se non apparirà tra le serp, quindi, non otterremo alcun risparmio di crawl budget (motivo per cui fare SEO su Shopify è quasi impossibile perchè non si può editare il robots.txt).

Soluzione: NOINDEX prima di DISALLOW

L’X-Robots-Tag noindex può essere utilizzato come risposta di intestazione HTTP in un determinato URL aggiungendo queste due righe nell’httaccess:

SetEnvIf Request_URI “/pagina/” NOINDEX
Header set X-Robots-Tag “noindex” env=REDIRECT_NOINDEX

Poi, da robots.txt metteremo il disallow:

disallow: /pagina/

Come risultato otterremo che le pagine saranno deindicizzate durante la risposta HTTP tramite x-robots-tag tipo noindex e lo spider non farà la scansione su di esse per via della presenza del disallow nel robots.txt

In pratica, avremo rimosso i contenuti per sempre dalle serp e risparmiato crawl budget. 

Ora, diciamolo chiaro: questa cosa non può succedere.

E la ragione è molto semplice… Googlebot per leggere l’istruzione X-Robots-Tag negli header di una risorsa, deve effettuare una scansione. Ma se è bloccato da robots non scansiona e non legge proprio nulla.

Ho fatto questa mia osservazione ad Andrea su Linkedin, da cui ne è scaturita una conversazione con dei punti di disaccordo, che riporto integralmente:

Ed eccoci qua.

Ho creato una pagina per fare il test e mostrare ad Andrea e ad altri che ancora avessero qualche dubbio che Googlebot non è in grado di leggere l’istruzione X-Robots-Tag se bloccato da robots.txt.

Aggiornerò questo post con i vari passaggi dell’esperimento.

04/11/2021

Creazione della pagina e richiesta di indicizzazione

Ho creato la pagina con un brutale PHP e codice HTML scritto a manella.

Per la massima trasparenza, ecco il codice che ho usato:

<?php
  //header("X-Robots-Tag: noindex", true);
  //Preparo già commentata l'istruzione X-Robots-Tag per quando mi servirà
?>

<html>
<head>
<title>Pagina di test per x-Robots-Tag | Martino Mosna</title>
<meta name="Description" content="Lo scopo dell'esperimento è dimostrare che Google NON &Egrave; in grado di leggere l'istruzione x-Robots-Tag in presenza di un Disallow nel file robots.txt.">
</head>
<body>
<h1>Pagina di test per x-Robots-Tag</h1>
<p>Questa pagina è stata creata allo scopo di:</p>
<ol>
	<li>Essere indicizzata da Google</li>
	<li>Una volta indicizzata, essere bloccata tramite robots.txt</li>
	<li>Una volta che Google ha recepito il robots.txt aggiornato, alla pagina verrà aggiunto l'header HTTP X-Robots-Tag noindex</li>
</ol>
<p>Lo scopo dell'esperimento è dimostrare che Google NON &Egrave; in grado di leggere l'istruzione x-Robots-Tag in presenza di un'istruzione Disallow nel file robots.txt</p>

<p>Di seguito vengono stampati gli attuali Header HTTP di questa pagina impostati via PHP:</p>
<pre>
<?php
  print_r(apache_response_headers());
?>
</pre>

<p>L'istruzione X-Robots-Tag è visibile utilizzando il pannello Network degli strumenti per sviluppatori del browser (F12)</p>

<p>Inoltre, sempre di seguito viene riportato l'attuale contenuto del file robots.txt:</p>

<pre>
<?php
  $file = file_get_contents('robots.txt');
  echo $file;
?>
</pre>
</body>
</html>

Ho quindi fatto la richiesta di indicizzazione a Google tramite Google Search Console:

E lo strumento di test mi conferma che la pagina è indicizzabile senza alcun problema:

E ora… si aspetta che Googlebot faccia i suoi comodi.

Restate sintonizzati per aggiornamenti!

Aggiornamenti della conversazione su Linkedin

Aggiungo anche questo scambio di pareri abbastanza surreale che ho fatto sempre con Andrea su Linkedin…

Per quanto lato client (e quindi lato Googlebot che agisce come un client) non faccia alcuna differenza inserire un header HTTP via codice PHP, piuttosto che inserirlo via htaccess… farò un’eccezione per amore di buona fede ed inserirò l’istruzione X-Robots-Tag negli header HTTP tramite htaccess come richiesto da Andrea.

Unico dettaglio: non condividerò il contenuto completo del mio file htaccess per ragioni di sicurezza. Nel file htaccess di questo sito infatti ho inserito diverse righe custom per bloccare alcune tipologie di accesso indesiderato da parte di bot malevoli. Confido nella comprensione dei lettori.

08/11/2021

Sto ancora aspettando l’indicizzazione…

Google è diventato veramente lento ad indicizzare. Sembra di essere tornati negli anni 2000 quando ci voleva una settimana buona per portare la roba su Google. Vabbè, rant veloce e si aspetta.

10/11/2021

E si va di indexing API…

Grazie ad un post di Antonio Mattiacci scopro che Rank Math offre un nuovo plugin che permette di inviare le URL tramite indexing API direttamente da backend di WordPress.

È un plugin standalone, ma ho colto l’occasione per cestinare Yoast e migrare il mio plugin SEO direttamente in blocco a Rank Math, che era un po’ che volevo farlo ed avevo bisogno dell’occasione giusta.

Fra parentesi: mi pare che Rank Math faccia di base le stesse cose di Yoast, ma con (molte) più opzioni di configurazione. Una cosa buona, se sai quello che stai facendo.

Ciancie SEO a parte, ho mandato la richiesta di indexing via API… vediamo come va.

12/11/2021

Niente di nuovo sul fronte Google

Davvero, Google: vuoi svegliarti? Che ci vuole ad indicizzare due URL oggi come oggi? In compenso dopo averlo inviato tramite le sue indexing API, Bing ha indicizzato l’articolo:

Per la pagina di test ancora non s’è mosso nulla. È pur vero che è molto tempo che non aggiorno questo sito, ma diamine: una settimana per indicizzare mi sembra davvero tantissimo.

20/11/2021

Finalmente Google ha indicizzato!

Devo aver scelto proprio il momento sbagliato per fare il mio test. Per fortuna Google, una volta finito il rollout dell’ultimo Core Update, ha ripristinato le risorse di scansione.

E finalmente siamo indicizzati:

Cambiamo il robots.txt

Per proseguire con l’esperimento, ora bloccherò la pagina di test via robots.txt aggiungendo la riga:

Disallow: /test-x-robots-tag.php

Una volta che Google avrà cachato la nuova versione del robots (e presumibilmente la pagina di test finirà senza titolo e descrizione in SERP), passeremo all’ultima fase, ovvero l’applicazione della direttiva X-Robots-Tag noindex negli header HTTP.

22/11/2021

Robots.txt ancora non cachato

Per il momento Google mostra ancora la versione dello scorso 26 ottobre.

Restiamo in attesa.

Robots.txt recepito da Google

Stavolta per fortuna l’attesa è stata breve: già in mattinata Google ha correttamente recepito il nuovo robots.txt:

È giunto finalmente il momento dell’ultima parte dell’esperimento, ovvero…

Applichiamo l’istruzione X-Robots-Tag noindex alla URL via .htaccess

Mi raccomando via .htaccess, non perché serva davvero, ma per fare contento Andrea.

Questo il codice che ho aggiunto al mio file .htaccess:

SetEnvIf Request_URI "/test-x-robots-tag.php" NOINDEX
Header set X-Robots-Tag "noindex" env=NOINDEX

Faccio fra parentesi notare che l’istruzione indicata da Andrea nel suo post, ovvero:

SetEnvIf Request_URI "/pagina/" NOINDEX
Header set X-Robots-Tag "noindex" env=REDIRECT_NOINDEX

Non funzionava correttamente, questo perché la direttiva env=REDIRECT_NOINDEX è da applicare solo qualora vi sia un’elaborazione precedente della URL (come ad esempio nel caso dello script index.php di WordPress che va poi a generare le pagine con URL Rewrite).

Ad ogni modo, ora l’istruzione X-Robots-Tag è impostata.

Prego notare come gli Header HTTP stampati in PHP sulla pagina di test non contengano l’istruzione X-Robots-Tag:

Array
(
    [Content-type] => text/html; charset=utf-8
)

Questo perché come detto gli header HTTP sono impostati prima, a livello di webserver (e non a livello di script). Per averne conferma è sufficiente verificare gli header di risposta utilizzando il pannello Network degli strumenti per sviluppatori del browser (F12):

Eccolo qua, X-Robots-Tag in tutto il suo splendore.

E ora siamo finalmente pronti per l’ultima parte.

Conclusione dell’esperimento

Verifica dell’accesso di Googlebot alla pagina di test

Facciamo innanzi tutto una verifica veloce: Googlebot può accedere alla risorsa? Usiamo lo strumento di test di GSC:

Niet. Accesso VERBOTEN.

Non ci resta quindi che chiudere la partita…

Richiesta di scansione della pagina tramite GSC

Secondo Andrea, Google dovrebbe leggere l’istruzione X-Robots-Tag e quindi rimuovere la pagina dai risultati di ricerca.

Mentre io sopra scrivevo:

Ora, diciamolo chiaro: questa cosa non può succedere.

E la ragione è molto semplice… Googlebot per leggere l’istruzione X-Robots-Tag negli header di una risorsa, deve effettuare una scansione. Ma se è bloccato da robots non scansiona e non legge proprio nulla.

E ora, rullo di tamburi…

E niente…

Lascia un commento