Robots.txt Specifications

Riepilogo

In questo documento viene illustrato in che modo Google gestisce il file robots.txt che ti consente di controllare come i crawler di siti di Google sottopongono a scansione e indicizzano i siti web pubblicamente accessibili.

Requisiti relativi alla lingua

Le parole chiave "DEVE", "DEVONO", "NON DEVE", "NON DEVONO", "OBBLIGATORIO", "OBBLIGATORI", "DOVREBBE", "DOVREBBERO", "NON DOVREBBE", "NON DOVREBBERO", "CONSIGLIATO", "CONSIGLIATI", "POTREBBE", "POTREBBERO", "FACOLTATIVO", "FACOLTATIVI" nel presente riepilogo devono essere interpretate come descritto nel documento RFC 2119.

Definizioni di base

  • crawler: un crawler è un servizio o agente che sottopone a scansione i siti web. In termini generali, un crawler accede automaticamente e ripetutamente agli URL conosciuti di un host che pubblica contenuti accessibili tramite i browser web standard. Man mano che vengono rilevati nuovi URL (in vari modi, ad esempio, dai link nelle pagine analizzate esistenti o dai file Sitemap), anche questi vengono sottoposti a scansione nello stesso modo.
  • user-agent: mezzo per identificare un crawler o un insieme di crawler specifici.
  • istruzioni: elenco delle linee guida applicabili per un crawler o gruppo di crawler impostate nel file robots.txt.
  • URL: Uniform Resource Locator, così come definito nel documento RFC 1738.
  • Specifico di Google: riferito a elementi specifici dell'implementazione del file robots.txt di Google, che potrebbero risultare non pertinenti per altre parti.

Applicabilità

Le linee guida contenute nel presente documento sono seguite da tutti i crawler automatizzati di Google. Quando un agente accede agli URL per conto di un utente (ad esempio, per traduzione, feed registrati manualmente, analisi malware e così via), non è necessario seguire queste linee guida.

Percorso e ambito di validità del file

Il file robots.txt deve essere contenuto nella directory di primo livello dell'host, accessibile tramite il numero di porta e il protocollo adeguati. I protocolli generalmente accettati per il file robots.txt (e la scansione di siti web) sono "http" e "https". Nei protocolli http e https, il file robots.txt viene recuperato utilizzando una richiesta HTTP con GET non condizionale.

Specifico di Google: Google accetta e segue anche file robots.txt per siti FTP. I file robots.txt basati su FTP sono accessibili tramite il protocollo FTP, utilizzando un accesso anonimo.

Le istruzioni contenute nel file robots.txt si applicano solo all'host, al protocollo e al numero di porta in cui è ospitato il file.

Nota: l'URL del file robots.txt fa distinzione tra maiuscole e minuscole, come gli altri URL.

Esempi di URL validi per file robots.txt:

URL robots.txtValido per Non valido perCommenti
http://example.com/robots.txt http://example.com/
http://example.com/cartella/file
http://altro.example.com/
https://example.com/
http://example.com:8181/
Questo è il caso g Non è valido per altri sottodomini, protocolli o numeri di porta. È valido per tutti i file in tutte le sottodirectory dello stesso host, protocollo e numero di porta.
http://www.example.com/robots.txt http://www.example.com/ http://example.com/
http://negoz.www.example.com/
http://www.negozio.example.com/
Un file robots.txt in un sottodominio è valido solo per tale sottodominio.
http://example.com/cartella/robots.txt non è un file robots.txt valido.   I crawler non verificano la presenza di file robots.txt nelle sottodirectory.
http://www.müller.eu/robots.txt http://www.müller.eu/
http://www.xn--mller-kva.eu/
http://www.muller.eu/ I nomi IDN corrispondono alle rispettive versioni punycode. Vedi anche il documento RFC 3492.
ftp://example.com/robots.txt ftp://example.com/ http://example.com/ Specifico di Google: Google utilizza il file robots.txt per le risorse FTP.
http://212.96.82.21/robots.txt http://212.96.82.21/ http://example.com/ (anche se ospitato su 212.96.82.21) Un file robots.txt con indirizzo IP come nome host è valido solo per la scansione di quell'indirizzo IP come nome host. Non sarà automaticamente valido per tutti i siti web ospitati in quell'indirizzo IP (anche se è possibile che il file robots.txt sia condiviso; in tal caso sarebbe disponibile anche nel nome host condiviso).
http://example.com:80/robots.txt http://example.com:80/
http://example.com/
http://example.com:81/ I numeri di porta standard (80 per http, 443 per https, 21 per ftp) corrispondono ai relativi nomi host predefiniti. Vedi anche [portnumbers].
http://example.com:8181/robots.txt http://example.com:8181/ http://example.com/ I file robots.txt sui numeri di porta non standard sono validi solo per i contenuti resi disponibili tramite tali numeri di porta.

Gestione dei codici risultato HTTP

In genere, esistono tre diversi risultati quando vengono recuperati i file robots.txt:

  • full allow: tutti i risultati possono essere sottoposti a scansione.
  • full disallow: nessun risultato può essere sottoposto a scansione.
  • conditional allow: le istruzioni nel file robots.txt definiscono la capacità di sottoporre a scansione determinati contenuti.
2xx (esito pos)
I codici risultato HTTP che indicano un esito positivo generano un'istruzione di scansione di tipo "conditional allow".
3xx (reindirizzamento)
In genere, i reindirizzamenti vengono seguiti fino all'individuazione di un risultato valido (o finché non viene riconosciuto un loop). Google esegue un determinato numero di tentativi di reindirizzamento (il documento RFC 1945 per HTTP/1.0 consente fino a 5 reindirizzamenti), quindi si interrompe restituendo un errore 404. La gestione dei reindirizzamenti dal file robots.txt agli URL non consentiti non è definita né consigliata. La gestione dei reindirizzamenti logici per il file robots.txt basata su contenuti HTML che restituisce un errore di tipo 2xx (frame, JavaScript o reindirizzamenti di aggiornamento dei metadati) non è definita né consigliata.
4xx (errori client)
Google tratta tutti gli errori 4xx nello stesso modo e presuppone che non esistano file robots.txt validi. Si presuppone che non vi siano restrizioni. Si tratta di un'istruzione di scansione di tipo "full allow". Nota. Include i codici risultato HTTP 401 "Autorizzazione negata" e 403 "Accesso negato".
5xx (errore del server)
Gli errori del server vengono considerati come errori temporanei che generano un'istruzione di scansione di tipo "full disallow". La richiesta viene ripetuta fino a ottenere un codice risultato HTTP che non corrisponde a un errore del server. Un errore 503 (Servizio non disponibile) genera ripetizioni abbastanza frequenti. Per sospendere temporaneamente la scansione, si consiglia di pubblicare un codice risultato HTTP 503. La gestione di un errore permanente del server non è definita.

Specifico di Google: se Google riesce a stabilire che un sito è configurato in modo errato e restituisce un errore di tipo 5xx anziché 404 per le pagine mancanti, l'errore 5xx restituito da tale sito viene trattato come errore 404.
Richieste non riuscite o dati incompleti
La gestione di un file robots.txt che non può essere recuperato a causa di problemi di rete o DNS come timeout, risposte non valide, connessioni ripristinate/interrotte, errori di suddivisione HTTP e così via non è definita.
Memorizzazione nella cache
In genere, una richiesta robots.txt viene memorizzata nella cache per massimo un giorno, ma può essere memorizzata più a lungo nei casi in cui non è possibile aggiornare la versione memorizzata nella cache (ad esempio, a causa di timeout o di errori di tipo 5xx). La risposta memorizzata nella cache può essere condivisa da diversi crawler. Google potrebbe aumentare o diminuire la durata della cache in base alle intestazioni HTTP max-age Cache-Control.

Formato file

Il formato di file previsto è testo normale codificato in UTF-8. Il file è composto da record (righe) separati da CR, CR/LF o LF.

Verranno considerati solo i record validi; tutti gli altri contenuti verranno ignorati. Ad esempio, se il documento risultante è una pagina HTML, verranno considerate solo le righe di testo valide. Le altre verranno eliminate senza avviso o errore.

Se viene utilizzata una codifica i cui caratteri non appartengono a UTF-8, i contenuti del file potrebbero essere analizzati in modo errato.

Un carattere Unicode facoltativo BOM (byte order mark) all'inizio del file robots.txt viene ignorato.

Ogni record è composto da un campo, due punti e un valore. Gli spazi sono facoltativi (ma consigliati per una maggiore leggibilità). I commenti possono essere inclusi in qualsiasi punto del file utilizzando il carattere "#"; tutti i contenuti dopo l'inizio di un commento fino alla fine del record vengono trattati come commento e ignorati. Il formato generale è "<campo>:<valore><#commento-facoltativo>". Lo spazio vuoto all'inizio e alla fine del record viene ignorato.

L'elemento <campo> non fa distinzione tra maiuscole e minuscole. L'elemento <valore> potrebbe fare distinzione tra maiuscole e minuscole, a seconda dell'elemento <campo>.

La gestione degli elementi <campo> contenenti semplici errori di digitazione (ad esempio "useragent" anziché "user-agent") non è definita e tali errori potrebbero essere interpretati come un'istruzione corretta da alcuni user-agent.

Potrebbe essere applicata una dimensione massima del file per crawler. I contenuti che superano tale dimensione massima vengono ignorati. Al momento, Google applica un limite di dimensione di 500 kilobyte (kB).

Definizione/sintassi formale

Questa è una descrizione con sintassi di tipo Backus-Naur Form (BNF), che utilizza le convenzioni del documento RFC 822, a eccezione di "|", che viene utilizzato per indicare alternative. I valori letterali sono indicati con "", le parentesi "(" e ")" vengono utilizzate per raggruppare gli elementi, gli elementi facoltativi sono inclusi tra [parentesi quadre] e gli elementi possono essere preceduti da <n>* per indicare n o più ripetizioni dell'elemento che segue; il valore predefinito di n è 0.

robotstxt = *entries
entries = *( ( <1>*startgroupline
  *(groupmemberline | nongroupline | comment)
  | nongroupline
  | comment) )
startgroupline = [LWS] "user-agent" [LWS] ":" [LWS] agentvalue [comment] EOL
groupmemberline = [LWS] (
  pathmemberfield [LWS] ":" [LWS] pathvalue
  | othermemberfield [LWS] ":" [LWS] textvalue) [comment] EOL
nongroupline = [LWS] (
  urlnongroupfield [LWS] ":" [LWS] urlvalue
  | othernongroupfield [LWS] ":" [LWS] textvalue) [comment] EOL
comment = [LWS] "#" *anychar
agentvalue = textvalue

pathmemberfield = "disallow" | "allow"
othermemberfield = ()
urlnongroupfield = "sitemap"
othernongroupfield = ()

pathvalue = "/" path
urlvalue = absoluteURI
textvalue = *(valuechar | SP)
valuechar = <any UTF-8 character except ("#" CTL)>
anychar = <any UTF-8 character except CTL>
EOL = CR | LF | (CR LF)

La sintassi di "absoluteURI", "CTL", "CR", "LF", "LWS" è definita nel documento RFC 1945. La sintassi di "path" è definita nel documento RFC 1808.

Raggruppamento di record

I record vengono suddivisi in diversi tipi in base al tipo di elemento <campo>:

    • start-of-group
    • group-member
    • non-group

Tutti i record group-member dopo un record start-of-group fino al record start-of-group successivo vengono considerati come gruppi di record. L'unico elemento campo start-of-group è user-agent. Più righe start-of-group una dopo l'altra seguono i record group-member successivi alla riga start-of-group finale. Tutti i record group-member che non sono preceduti da un record start-of-group vengono ignorati. Tutti i record non-group sono validi indipendentemente da tutti i gruppi.

Gli elementi <campo> validi, che verranno illustrati singolarmente e in dettaglio in questo documento, sono:

  • user-agent (start-ofgroup)
  • disallow (valido solo come record group-member)
  • allow (valido solo come record group-member)
  • sitemap (record non-group)

Tutti gli altri elementi <campo> potrebbero essere ignorati.

L'elemento start-of-group user-agent viene utilizzato per specificare il crawler per cui il gruppo è valido. Solo un gruppo di record è valido per un determinato crawler. L'ordine di preferenza verrà illustrato successivamente in questo documento.

Gruppi di esempio:

user-agent: a
disallow: /c

user-agent: b
disallow: /d

user-agent: e
user-agent: f
disallow: /g

Sono specificati tre gruppi distinti, uno per "a", uno per "b" e uno per "e" e "f". Ogni gruppo ha un record group-member proprio. Tieni presente l'utilizzo facoltativo di white-space (riga vuota) per migliorare la leggibilità.

Ordine di precedenza degli user-agent

Solo un gruppo di record group-member è valido per un determinato crawler. Il crawler deve determinare il gruppo di record corretto individuando il gruppo con lo user-agent corrispondente più specifico. Tutti gli altri gruppi di record vengono ignorati dal crawler. Lo user-agent non fa distinzione tra maiuscole e minuscole. Tutto il testo che non corrisponde viene ignorato (ad esempio, googlebot/1.2 e googlebot* corrispondono entrambi a googlebot). L'ordine dei gruppi all'interno del file robots.txt non è rilevante.

Esempio:

Prendiamo il seguente file robots.txt:

user-agent: googlebot-news
(group 1)

user-agent: *
(group 2)

user-agent: googlebot
(group 3)

Ecco in che modo i crawler sceglierebbero il gruppo pertinente:

Nome del crawlerGruppo di record seguito Commenti
Googlebot News (group 1) Viene seguito solo il gruppo più specifico; tutti gli altri vengono ignorati.
Googlebot (Web) (group 3) 
Googlebot Immagini (group 3) Non esiste un gruppo googlebot-images specifico e, pertanto, viene seguito il gruppo più generico.
Googlebot News (durante la scansione di immagini) (group 1) Le immagini vengono sottoposte a scansione per e da Googlebot News e, pertanto, viene seguito solo il gruppo Googlebot News.
Otherbot (Web)(group 2) 
Otherbot (News)(group 2) Anche se esiste un'occorrenza per un crawler correlato, questa è valida solo se corrisponde in modo specifico.

Vedi anche Stringhe user-agent e crawler di Google

Record group-member

In questa sezione sono illustrati solo i tipi di record group-member generali e specifici di Google. Questi tipi di record vengono detti anche "istruzioni" per i crawler. Queste istruzioni sono specificate in forma di "istruzione: [percorso]" dove [percorso] è facoltativo. Per impostazione predefinita, non esistono limitazioni di scansione per i crawler designati. Le istruzioni senza [percorso] vengono ignorate.

Se specificato, il valore [percorso] va considerato come derivato dal percorso principale del sito web per cui è stato recuperato il file robots.txt file (utilizzando lo stesso protocollo, numero di porta, nome host e di dominio). Tale valore deve iniziare con "/" per indicare il percorso principale. Il percorso fa distinzione tra maiuscole e minuscole. Sono disponibili ulteriori informazioni nella sezione "Corrispondenza degli URL in base ai valori del percorso" qui sotto.

disallow

L'istruzione disallow specifica i percorsi a cui i crawler designati non devono accedere. Quando non sono specificati percorsi, l'istruzione viene ignorata.

Utilizzo:

disallow: [path]

allow

L'istruzione allow specifica i percorsi a cui i crawler designati possono accedere. Quando non sono specificati percorsi, l'istruzione viene ignorata.

Utilizzo:

allow: [path]

Corrispondenza degli URL in base ai valori del percorso

Il valore relativo al percorso viene utilizzato come base per stabilire se una regola è applicabile a un URL specifico in un sito. A eccezione dei caratteri jolly, il percorso viene utilizzato in modo che corrisponda all'inizio di un URL (e a qualsiasi URL valido che inizia con lo stesso percorso). È possibile includere caratteri ASCII non a 7 bit in un percorso sotto forma di caratteri UTF 8 o caratteri UTF 8 sottoposti a escape con segno di percentuale in base al documento RFC 3986.

Nota: gli URL "Scansione AJAX" devono essere specificati nelle relative versioni sottoposte a scansione.

Google, Bing, Yahoo e Ask supportano una serie limitata di "caratteri jolly" per i valori relativi al percorso. Questi sono:

  1. * indica 0 o più istanze di un valore valido
  2. $ indica la fine dell'URL

Esempi di corrispondenze di percorso

[percorso]Corrisponde a Non corrisponde aCommenti
/qualsiasi URL valido  Corrisponde all'URL principale e ogni URL di livello inferiore
/*equivalente a / equivalente a / Equivalente a "/" -- il carattere jolly finale viene ignorato.
/fish/fish
/fish.html
/fish/salmon.html
/fishheads
/fishheads/yummy.html
/fish.php?id=qualsiasi
/Fish.asp
/catfish
/?id=fish
Da notare la corrispondenza che fa distinzione tra maiuscole e minuscole.
/fish*/fish
/fish.html
/fish/salmon.html
/fishheads
/fishheads/yummy.html
/fish.php?id=qualsiasi
/Fish.asp
/catfish
/?id=fish
Equivalente a "/fish" -- il carattere jolly finale viene ignorato.
/fish//fish/
/fish/?id=qualsiasi
/fish/salmon.htm
/fish
/fish.html
/Fish/Salmon.asp
La barra finale indica che corrisponde a ogni elemento contenuto nella cartella.
/*.php/filename.php
/folder/filename.php
/folder/filename.php?parametri
/folder/any.php.file.html
/filename.php/
/ (anche se indirizza a /index.php)
/windows.PHP
 
/*.php$/filename.php
/folder/filename.php
/filename.php?parametri
/filename.php/
/filename.php5
/windows.PHP
 
/fish*.php/fish.php
/fishheads/catfish.php?parametri
/Fish.PHP  

Record non-group-member supportati da Google

Sitemap

Supportato da Google, Ask, Bing, Yahoo; definito su sitemaps.org.

Utilizzo:

sitemap: [absoluteURL]

[absoluteURL] indirizza a una Sitemap, file Indice Sitemap o URL equivalente. L'URL non deve trovarsi sullo stesso host del file robots.txt. Possono esistere più occorrenze sitemap. In quanto non-group-member, questi gruppi non sono legati a nessuno user-agent specifico e possono essere seguiti da tutti i crawler, a patto che siano consentiti.

Ordine di precedenza per i record group-member

A livello di record group-member, soprattutto per le istruzioni allow edisallow, la regola più specifica basata sulla lunghezza dell'occorrenza [percorso] ha la precedenza sulla regola meno specifica (più breve). L'ordine di precedenza per le regole con caratteri jolly non è definita.

Situazioni di esempio:

URLallow:disallow:Esito Commenti
http://example.com/pagina /p /allow 
http://example.com/cartella/pagina /folder/ /folderallow 
http://example.com/pagina.htm /page /*.htmnon definito 
http://example.com/ /$ /allow 
http://example.com/pagina.htm /$ /disallow 

Invia feedback per...