Robots.txt: dalla creazione alle funzioni avanzate
Come sappiamo, il nostro sito è soggetto periodicamente a una scansione da parte di appositi programmi, chiamati "crawler", dei motori di ricerca.
Ad esempio il crawler di Google di chiama Googlebot, quello di Bing è Bingbot.
Un file robots.txt è un file di testo, in formato .txt, salvato nella directory principale del sito (la "root"), che contiene una serie di regole che indicano quali parti del sito NON sono devono essere accessibili ai crawler dei motori di ricerca, e che quindi che non devono essere scansionate ed indicizzate dal crawler stesso. E' una arma a doppio taglio perchè con questo file aiutiamo il crawler a indicizzare solo quello che vogliamo, ma se sbagliamo a crearne le regole rischiamo di penalizzare il nostro sito, impedendo al crawler la sua indicizzazione.
Di default l'accesso a tutto il sito è consentito per cui senza una specifica direttiva "Disallow" il crawler potrà accedere a tutte le directory del sito stesso. Occorre quindi negare con "Disallow" quelle parti del sito che vogliamo preservare dalla scansione.
Definite le regole di "Disallow" possiamo, se necessario, aggiungere delle eccezioni. Ad esempio impediamo l'accesso ad una determinata directory, ma al suo interno acconsentiamo l'accesso ad un determinata pagina o file. Per fare questo usiamo delle regole di "Allow".
Regole principali di creazione del file robots.txt
- Il file robots.txt è un file di testo, che può essere codificato solo con caratteri ASCII o UTF-8
- Puoi esistere solo un file robots.txt per ogni sito.
- Il suo nome deve essere sempre robots.txt.
- Deve essere localizzato nella root del sito, cioè nella sua directory principale. Non può essere localizzato quindi in una sottodirectory.
Ad esempio "http://ww.miosito.it/robots.txt" è un file valido, "http://www.miosito.it/pages/robots.txt" non è valido.
Sintassi di un file robots.txt
Come detto, un robots.txt contiene una serie di regole con cui neghiamo ("Disallow") o consentiamo ("Allow") ad un determinato crawler, identificato dal suo "User-agent", di accedere a specifiche pagine, directory, files, o a tutto il sito.
Lo utilizziamo, ad esempio, per impedire l'accesso del crawler alle pagine dell'amministrazione del nostro sito, o ad una area riservata.
Vediamo subito alcuni esempi pratici.
Esempio1 : Neghiamo a tutti i crawler l'accesso a determinate directory (amministrazione, demo e tmp). Per fare questo come User-Agent utilizziamo un asterisco, detto"wildcard" o "carattere jolly", che sta a significare "tutti".
User-agent: *
Disallow: /amministrazione/
Disallow: /demo/
Esempio 2: Impediamo al crawler di Google di accedere alla directory "amministrazioni" e "demo", ma può accedere alla sottodirectory "demo1".
User-agent: googlebot
Disallow: /amministrazione/
Disallow: /demo/
Allow: /demo/demo1/
In questo esempio GoogleBot non può accedere solo ad "amministrazione" e "demo" e alle sottodirectory di "demo" tranne in "demo1" a cui può accedere. In tutte le altre directory potrà accedere.
NOTA: con Disallow e Allow non andiamo ad indicare delle url assolute (ad esempio "http://www.miosito.it/demo/") ma solo delle path relative che partono dalla root del nostro sito ("/demo/").
Esempio 3: non vogliamo consentire la scansione di uno specifico tipo di file (ad esempio i file .xls).
User-agent: googlebot
Disallow: /*.xls$
In questo esempio 3 abbiamo usato la wildcard asterisco: facciamo in modo che i file con qualunque nome, e in qualunque path siano sul nostro sito (l'asterisco si intende come "tutto quello che precede il .xls"), e che finiscono con ".xls", saranno soggetti a questa regola.
Il dollaro serve ad indicare che il file deve terminare esattamente con ".xls". Per cui ad esempio i file di tipo ".xlsx" non saranno oggetto di questa regola!
Se vogliamo considerare anche i file .xlsx o creiamo una regola disallow apposita oppure togliamo il dollaro della regola.
Esempio 4: utilizzo avanzato di wildcard
Il nostro sito ha una sezione "news", una sottosezione con l'anno delle notizie, e poi gli argomenti, come di seguito
/news/2016/seo
/news/2016/linux
/news/2017/seo
/news/2017/linux
/news/2018/seo
/news/2018/linux
Ci interessa impedire a GoogleBot di scansionare le news della sola sottosezione "seo", di tutti gli anni. Per realizzare questo risultato ci viene in aiuto la wildcard "asterisco" usata in questo modo:
User-agent: googlebot
Disallow: /news/*/seo
Esempio 5: bloccare le querystring
Se il nostro sito prevede ad esempio un motore di ricerca, o una paginazione, potremmo generare url con parametri appesi in GET.
Se ad esempio ho molte news e le spezzo su più pagine, presentando 10 news per pagine, e creando un paginazione cliccabile per spostarsi da una pagina all'altra, potrei ritrovarmi con una url come questa, in cui è appeso un parametro che identifica il numero di pagina ("pg").
http://www.miosito.it/news/?pg=3
Il rischio è che un motore di ricerca, seguendo i link del sito, segua anche queste tipologie di url con query string, andando così a creare pagine di bassissima qualità, totalmente inutili al fine dell'indicizzazione, anzi che possono penalizzare il nostro sito.
Per impedire ad un crawler di seguire queste tipologie di url utilizziamo questa regola: dice semplicemente di bloccare tutte le url del sito che iniziano in qualunque modo, in qualuque path (asterisco) e che presentano il punto interrogativo che è il carattere che definisce le query string, cioè dopo il quale vengono appesi in GET i vari parametri. Non mettiamo il dollaro dopo il punto interrogativo, in questo modo qualunque cosa ci sia dopo a noi non interessa e verrà comunque bloccato dalla scansione.
User-agent: googlebot
Disallow: /*?
Più crawler nello stesso file robots.txt
Negli esempi 2, 3 e 4 l'oggetto della nostra attenzione è solo GoogleBot, ma all'interno del file possiamo creare tante regole quanti sono i crawler su cui vogliamo agire.
Ad esempio, modifichiamo il file robots.txt dell'esempio 2, aggiungendo alla regola prevista per googlebot, anche una regola per il crawler di Bing, chiamato bingbot, per negargli l'accesso a tutto il sito tranne che ad una specifica directory. Ed ancora una ulteriore regola destinata a tutti gli altri crawler con cui blocchiamo a questi l'accesso a tutto il sito.
User-agent: googlebot
Disallow: /amministrazione/
Disallow: /demo/
Allow: /demo/demo1/
User-agent: bingbot
Disallow: /
Allow: /demo/
User-agent: *
Disallow: /
In file robots.txt è quindi un insieme di regole che si susseguono e che iniziano attraverso l'indicazione dello "User-agent" del crawler di cui ci interessa impedire o acconsentire la scansione di determinate directory del sito.
Priorità delle regole
Ci sono casi in cui le regole conenute all'interno del file robots.txt possono andare in conflitto.
Ad esempio in questo caso, prevale la regola per tutti i crawler o quella specifica per googlebot?
User-agent: *
Disallow: /news/
User-agent: googlebot
Allow: /news/
Prevale sempre la regola dello specifico crawler. Per cui se accede GoogleBot potrà scansionare la directory "seo", gli altri crawler non potranno.
Ma se il conflitto avviene all'interno del blocco di istruzioni dello stesso crawler, come ad esempio avviene qui?
User-agent: googlebot
Disallow: /news/seo/
Allow: /news/
In questo caso googlebot non indicizzerà le pagine nella directory seo o nelle sue sottodirectory. In motivo però non è l'ordine con cui sono presenti le regole di disallow e allow. Potevamo anche mettere allow prima di disallow e nulla sarebbe cambiato. La priorità di GoogleBot, così come di tutti i crawler, si basa SOLO sulla url più lunga (che ha un numero di caratteri maggiore), che andrà a prevalere su quella più breve. Quindi prevale la regola di Disallow sulla regola di Allow SOLO perchè il path "/news/seo" è più lungo di "/news".
Bloccare l'accesso a tutto il sito tranne che alla home
Spesso è utile impedire il crawling di tutto il sito, tranne che della home page. Utilizziamo questa regola.
User-agent: *
Disallow: /
Allow: /$
La regola "disallow" si applica sempre, a tutte le pagine.
La regola Allow invece si applica solo alla home page, cioè alle pagine che iniziamo con "/" e finiscono esattamente così, senza parametri o altro appeso. Solo la home page, senza eventuali parametri appesi, ha questa specificità.
E sulla base della regola sulle prorità prevale la regola "allow".
Sitemap all'interno file robots.txt
All'interno del file robots.txt è anche possibile segnalare ai crawler la presenza di una sitemap del sito. Per farlo è sufficiente aggiungere la seguente riga, con l'indicazione dell'indirizzo assoluto, cioè comprensivo di prefisso http o https.
Sitemap: https://www.miosito.it/sitemap.xml
Se abbiamo più sitemap indichiamo una sitemap per riga
Sitemap: https://www.miosito.it/sitemap1.xml
Sitemap: https://www.miosito.it/sitemap2.xml
Sitemap: https://www.miosito.it/sitemap3.xml
I crawler rispettano sempre le regole dei file robots.txt?
Quello che scriviamo nel file robots.txt rappresenta solo un suggerimento, e non è detto che venga effettivamente preso in considerazione dal crawler.
I motori principali come Google e Bing generalmente seguono le direttive, ma i crawler esistenti sono centinaia, migliaia, e molti di questi possono tranquillamente trascurare queste direttive e scansionare tutto il sito.
Quindi se vogliamo nascondere certe directory da occhi indiscreti non è questa (o non è solo questa) la via da seguire: ad esempio tramite "autenticazione http" o comunque tramite un accesso con password a certe pagine o sezioni.
Robots.txt, file .css e .js
Occorre prestare attenzione a non impedire al crawler di leggere i file css e javascript necessari per la corretta visualizzazione del tuo sito. Google, Bing e gli altri motori vogliono scansionare il sito esattamente come lo vedrebbe l'utente, per cui impedire, tramite il file robots.txt, la scansione di questi file porterebbe ad una lettura errata da parte del crawler, con rischio anche di perdita di posizioni nelle SERP dei motori di ricerca.
Per questo motivo, se, per qualche motivo, i file js e css sono presenti in directory a cui si applica una regola Disallow, devi renderli disponibili utilizzando una specifica regola di Allow.
Per esempio se abbiamo una cartella "template" e al suo interno sono presenti file css e js necessari per la corretta visualizzazione del sito, ed ho impostato una regole Disallow sulla cartella "template", per consentire la scansione di css e js userò queste regole:
User-agent: *
Disallow /template
Allow: /*.js$
Allow: /*.css$
Ma la priorità non dovrebbe essere data all'istruzione più lunga e quindi al Disallow? Per quanto detto in precedenza dovremmo rispondere di si, ma mancava una informazione che diamo adesso: il sistema sulle priorità basato sulla lunghezza non viene applicato se sono presenti regole con l'asterisco. In questi casi prevalgono le regole contenenti l'asterisco.
Robots.txt ed indicizzazione
Consentire tramite il file robots.txt la scansione di una directory o dell'intero sito non è sinonimo di indicizzazione. Stiamo semplicemente dicendo al crawler che può accedere o non accedere alla scansione di quelle pagine.
Possiamo quindi dire che la presenza del file è propedeutica all'indicizzazione che poi dipende poi da altri fattori che rientrano nelle tecniche SEO. Certo è che se create delle regole errate ed impedite al crawler la scansione del sito, l'indicizzazione non potrà poi avvenire.
Testare un file robots.txt
Esistono vari tool on line per testare la correttezza di un file robots.txt. Ad esempio possiamo usare quello presente nella Search Console di Google. Dopo essersi registrati ed aver creato il profilo per il proprio sito, accedete dal menu di sinistra alla voce "Tester dei file robots.txt", inserite la url del file robots.txt nell'apposito campo, e verranno visualizzati eventuali errori presenti nel file stesso.