Especificações de robots.txt

Resumo

Este documento detalha como o Google lida com o arquivo robots.txt que permite controlar como os rastreadores do Google rastreiam e indexam sites de acesso público.

O que mudou

Em 1º de julho de 2019, o Google anunciou que o protocolo robots.txt deve se tornar um padrão da Internet (links em inglês). Essas alterações estão listadas neste documento.

Definições básicas

Definições
Rastreador Um rastreador é um serviço ou agente que rastreia sites. De modo geral, um rastreador acessa automática e recursivamente URLs conhecidos de um host que expõe conteúdo que pode ser acessado com navegadores padrão da Web. À medida que novos URLs são encontrados (por vários meios, como a partir de links em páginas existentes e rastreadas ou de arquivos de Sitemap), eles também são rastreados da mesma forma.
User-agent É um meio de identificar um rastreador específico ou um conjunto de rastreadores.
Diretivas É uma lista de diretrizes aplicáveis a um rastreador ou grupo de rastreadores definidos no arquivo robots.txt.
URL São os Uniform Resource Locators, conforme definido no RFC 1738 (em inglês).
Específicos do Google Estes elementos são específicos da implementação do robots.txt por parte do Google e podem não ser relevantes para outras partes.

Aplicabilidade

As diretrizes estabelecidas neste documento são seguidas por todos os rastreadores automáticos do Google. Quando um agente acessar URLs em nome de um usuário (por exemplo, para tradução, feeds assinados manualmente, análise de malware), essas diretrizes não precisarão ser seguidas.

Localização do arquivo e período de validade

O arquivo robots.txt deve estar no diretório de nível superior do host, podendo ser acessado por meio do protocolo e número de porta adequado. Em geral, os protocolos aceitos para robots.txt são todos baseados em URI (em inglês), e os para a Pesquisa Google especificamente (por exemplo, rastreamento de sites) são "http" e "https". Para "http" e "https", o arquivo robots.txt é buscado por meio de uma solicitação GET não condicional HTTP.

Específico para o Google: o Google também aceita e segue arquivos robots.txt para sites FTP. Os arquivos robots.txt baseados em FTP são acessados por meio do protocolo FTP usando um login anônimo.

As diretivas listadas no arquivo robots.txt se aplicam somente ao host, ao protocolo e ao número de porta em que o arquivo está hospedado.

Exemplos de URLs robots.txt válidos:

Exemplos de URLs robots.txt
http://example.com/robots.txt Válido para:
  • http://example.com/
  • http://example.com/folder/file
Inválido para:
  • http://other.example.com/
  • https://example.com/
  • http://example.com:8181/
http://www.example.com/robots.txt

Válido para: http://www.example.com/

Inválido para:

  • http://example.com/
  • http://shop.www.example.com/
  • http://www.shop.example.com/
http://example.com/folder/robots.txt Não é um arquivo robots.txt válido. Os rastreadores não verificam arquivos robots.txt em subdiretórios.
http://www.müller.eu/robots.txt Válido para:
  • http://www.müller.eu/
  • http://www.xn--mller-kva.eu/

Inválido para: http://www.muller.eu/

ftp://example.com/robots.txt

Válido para: ftp://example.com/

Inválido para: http://example.com/

Específicos do Google: usamos o robots.txt para recursos de FTP.

http://212.96.82.21/robots.txt

Válido para: http://212.96.82.21/

Inválido para: http://example.com/ (mesmo se hospedado em 212.96.82.21)

http://example.com:80/robots.txt

Válido para:

  • http://example.com:80/
  • http://example.com/

Inválido para: http://example.com:81/

http://example.com:8181/robots.txt

Válido para: http://example.com:8181/

Inválido para: http://example.com/

Como lidar com códigos de resultado HTTP

Em geral, há três resultados diferentes quando os arquivos robots.txt são buscados:

  • Permissão total: todo o conteúdo pode ser rastreado.
  • Proibição total: nenhum conteúdo pode ser rastreado.
  • Permissão condicional: as diretivas no robots.txt determinam a capacidade de rastrear determinado conteúdo.
Como lidar com códigos de resultado HTTP
2xx (bem-sucedido) Códigos de resultado HTTP que sinalizam resultado bem-sucedido em uma "permissão condicional" de rastreamento.
3xx (redirecionamento) O Google acompanha pelo menos cinco saltos de redirecionamento, conforme definido pela RFC 1945 (em inglês) para HTTP/1.0. Depois interrompe essa ação e o trata como um erro 404. A manipulação de redirecionamentos do robots.txt para URLs não permitidos não é recomendada. Como não havia regras disponíveis, os redirecionamentos serão seguidos por pelo menos cinco saltos e, se nenhum robots.txt for encontrado, o Google o tratará como um erro 404 no robots.txt. O manuseio de redirecionamentos lógicos para o arquivo robots.txt com base no conteúdo HTML que retorna 2xx (frames, JavaScript ou redirecionamentos do tipo meta-atualização) não é recomendado, e o conteúdo da primeira página será usado para localizar regras aplicáveis.
4xx (erros de cliente) Todos os erros 4xx são tratados da mesma maneira, e o Google presume que não existe um arquivo robots.txt válido. Ele presume que não há restrições. Isso significa uma "permissão total" para o rastreamento.
5xx (erro do servidor)

Erros do servidor são vistos como erros temporários que resultam na "proibição total" do rastreamento. A solicitação é repetida até que um código de resultado HTTP sem erro do servidor seja atingido. Um erro 503 (Serviço Indisponível) resultará em novas tentativas frequentes. Se o robots.txt ficar inacessível por mais de 30 dias, a última cópia em cache do robots.txt será usada. Se ela não estiver disponível, o Google presumirá que não há restrições de rastreamento. Para suspender temporariamente o rastreamento, é recomendável veicular um código de resultado HTTP 503.

Específicos do Google: se for possível determinar que um site foi configurado incorretamente de modo a retornar resultados 5xx em vez do resultado 404 para páginas ausentes, o erro 5xx desse site será tratado como um resultado 404.

Solicitações malsucedidas ou dados incompletos A manipulação de um arquivo robots.txt que não pode ser encontrado devido a problemas de DNS ou de rede, como tempos de espera, respostas inválidas, conexões redefinidas/interrompidas e erros de agrupamento de HTTP é tratada como um erro de servidor.
Armazenamento em cache Em geral, o conteúdo do robots.txt é armazenado em cache por até 24 horas ou por mais tempo em situações em que não é possível fazer a atualização da versão em cache (por exemplo, devido a tempos limite ou erros 5xx). A resposta em cache pode ser compartilhada por diferentes rastreadores. O Google pode aumentar ou diminuir a duração do cache baseado em cabeçalhos HTTP Cache-Control de período máximo (em inglês).

Formato do arquivo

O formato de arquivo esperado é o texto simples codificado em UTF-8. O arquivo tem linhas separadas por CR, CR/LF ou LF.

Somente as linhas válidas são consideradas, e todo o outro conteúdo é ignorado. Por exemplo, se o documento resultante for uma página HTML, somente as linhas de texto válidas serão consideradas, o restante será descartado sem aviso ou erro.

Se a adoção de uma codificação de caracteres resultar no uso de caracteres que não fazem parte de um subconjunto de UTF-8, isso poderá gerar erros na análise dos conteúdos do arquivo.

Um Unicode opcional BOM (marca de ordem de byte, na sigla em inglês) no início do arquivo robots.txt será ignorado.

Cada linha válida consiste em um campo, dois pontos e um valor. Os espaços são opcionais (mas são recomendados para melhorar a legibilidade). Os comentários podem ser incluídos em qualquer local no arquivo usando o caractere "#". Todo o conteúdo após o início de um comentário e até o final da linha é tratado como um comentário e ignorado. O formato geral é <field>:<value><#optional-comment>. O espaço em branco no início e no final da linha é ignorado.

O elemento <field> diferencia maiúsculas e minúsculas. O elemento <value> pode diferenciar maiúsculas e minúsculas, dependendo do elemento <field>.

A manipulação de elementos <field> com erros simples ou erros de digitação (por exemplo, "useragent" em vez de "user-agent") não é compatível.

Um tamanho máximo de arquivo pode ser imposto pelo rastreador. Os conteúdos que ultrapassarem o tamanho máximo do arquivo serão ignorados. Atualmente o Google aplica um limite de tamanho de 500 kibibytes (KiB). Para reduzir o tamanho do arquivo robots.txt, consolide as diretivas que resultariam em um arquivo robots.txt muito grande. Por exemplo, coloque o material excluído em um diretório específico.

Sintaxe / definição formal

Veja uma descrição da forma aumentada de Backus-Naur (ABNF, na sigla em inglês), conforme descrito na RFC 5234 (em inglês).

robotstxt = *(group / emptyline)
group = startgroupline                    ; We start with a user-agent
        *(startgroupline / emptyline)     ; ... and possibly more user-agents
        *(rule / emptyline)               ; followed by rules relevant for UAs

startgroupline = *WS "user-agent" *WS ":" *WS product-token EOL

rule = *WS ("allow" / "disallow") *WS ":" *WS (path-pattern / empty-pattern) EOL

; parser implementors: add additional lines you need (for example, Sitemaps), and
; be lenient when reading lines that don’t conform. Apply Postel’s law.

product-token = identifier / "*"
path-pattern = "/" *(UTF8-char-noctl)    ; valid URI path pattern; see 3.2.2
empty-pattern = *WS

identifier = 1*(%x2d / %x41-5a / %x5f / %x61-7a)
comment = "#" *(UTF8-char-noctl / WS / "#")
emptyline = EOL
EOL = *WS [comment] NL         ; end-of-line may have optional trailing comment
NL = %x0D / %x0A / %x0D.0A
WS = %x20 / %x09

; UTF8 derived from RFC3629, but excluding control characters
UTF8-char-noctl = UTF8-1-noctl / UTF8-2 / UTF8-3 / UTF8-4
UTF8-1-noctl    = %x21 / %x22 / %x24-7F  ; excluding control, space, '#'
UTF8-2          = %xC2-DF UTF8-tail
UTF8-3          = %xE0 %xA0-BF UTF8-tail / %xE1-EC 2( UTF8-tail ) /
                  %xED %x80-9F UTF8-tail / %xEE-EF 2( UTF8-tail )
UTF8-4          = %xF0 %x90-BF 2( UTF8-tail ) / %xF1-F3 3( UTF8-tail ) /
                  %xF4 %x80-8F 2( UTF8-tail )
UTF8-tail       = %x80-BF

Agrupamento de linhas e regras

É uma ou mais linhas de user-agent seguidas por uma ou mais regras. O grupo é encerrado por uma linha user-agent ou pelo final do arquivo. O último grupo pode não ter regras, o que significa que ele permite implicitamente tudo.

Exemplo de grupos:

user-agent: a
disallow: /c

user-agent: b
disallow: /d

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

user-agent: h

Quatro grupos diferentes estão especificados, um para "a", outro para "b", bem como um para "e" e "f". Exceto pelo último grupo, cada um deles tem sua própria linha group-member. O último grupo está vazio. O uso do espaço em branco e de linhas vazias para melhorar a legibilidade é opcional.

Ordem de precedência para user-agents

Somente um grupo é válido para um determinado rastreador. O rastreador tem de determinar o grupo de linhas correto localizando o grupo com o user agent mais específico que ainda corresponde. Todos os outros grupos são ignorados pelo rastreador. O user-agent diferencia maiúsculas e minúsculas. Todo o texto não correspondente é ignorado (por exemplo, googlebot/1.2 e googlebot* são equivalentes a googlebot). A ordem dos grupos no arquivo robots.txt é irrelevante.

Se houver mais de um grupo para um user-agent específico, todas as regras dos grupos aplicáveis a ele serão combinadas.

Exemplo

No seguinte arquivo robots.txt:

user-agent: googlebot-news
(group 1)

user-agent: *
(group 2)

user-agent: googlebot
(group 3)

Esta é a forma como os rastreadores escolheriam o grupo relevante:

Grupo seguido por rastreador
Googlebot News O grupo seguido é o 1. Somente o grupo mais específico é seguido, e todos os outros são ignorados.
Googlebot (Web) O grupo seguido é o 3.
Googlebot Images O grupo seguido é o 3. Não há um grupo googlebot-images específico, de modo que o grupo mais genérico é seguido.
Googlebot News (ao rastrear imagens) >O grupo de registro seguido é o 1. Essas imagens são rastreadas pelo Googlebot News e para ele, portanto, somente o grupo Googlebot News é seguido.
Otherbot (Web) O grupo seguido é o 2.
Otherbot (Notícias) O grupo seguido é o 2. Mesmo que haja uma entrada para um rastreador relacionado, ela só será válida se for especificamente correspondente.

Veja também rastreadores do Google e strings user-agent

Regras group-member

Somente as regras padrão group-member são abordadas nesta seção. Essas regras também são chamadas de "diretivas" para os rastreadores. Essas diretivas estão especificadas no formulário de directive: [path], em que [path] é opcional. Por padrão, não há restrições para os rastreadores designados. As diretivas sem um [path] são ignoradas.

O valor [path], se especificado, relaciona-se à raiz do site em que o arquivo robots.txt foi buscado (usando o mesmo protocolo, número de porta, nomes de host e domínio). O valor do caminho precisa começar com "/" para designar a raiz. O caminho faz distinção de maiúsculas e minúsculas. Mais informações podem ser encontradas na seção "Correspondência de URLs com base em valores de caminho" abaixo.

disallow

A diretiva disallow especifica caminhos que não devem ser acessados pelos rastreadores designados. Quando nenhum caminho é especificado, a diretiva é ignorada.

Uso:

disallow: [path]

allow

A diretiva allow especifica caminhos que podem ser acessados pelos rastreadores designados. Quando nenhum caminho é especificado, a diretiva é ignorada.

Uso:

allow: [path]

Correspondência de URLs com base em valores de caminho

O valor do caminho é usado como base para determinar se uma regra se aplica a um URL específico em um site. Com a exceção de caracteres curinga, o caminho é usado para combinar o início de um URL (e quaisquer URLs válidos que começam com o mesmo caminho). Caracteres ASCII que não contêm sete bits em um caminho podem ser incluídos como caracteres UTF-8 ou como caracteres codificados UTF-8 com porcentagem de escape, de acordo com o RFC 3986 (em inglês).

Google, Bing, Yahoo e Ask oferecem suporte a uma forma limitada de "caracteres curinga" para os valores de caminho. Estes são:

  • * designa 0 ou mais instâncias de qualquer caractere válido;
  • $ designa o final do URL.
Exemplo de correspondências de caminho
/ Corresponde à raiz e a qualquer URL de nível mais baixo.
/* Equivalente a /. O caractere curinga delimitador é ignorado.
/fish

Resultados correspondentes:

  • /fish
  • /fish.html
  • /fish/salmon.html
  • /fishheads
  • /fishheads/yummy.html
  • /fish.php?id=anything

Resultados não correspondentes:

  • /Fish.asp
  • /catfish
  • /?id=fish
/fish*

Equivalente a /fish. O caractere curinga delimitador é ignorado.

Resultados correspondentes:

  • /fish
  • /fish.html
  • /fish/salmon.html
  • /fishheads
  • /fishheads/yummy.html
  • /fish.php?id=anything

Resultados não correspondentes:

  • /Fish.asp
  • /catfish
  • /?id=fish
/fish/

A barra delimitadora significa que isso corresponde a qualquer coisa nesta pasta.

Resultados correspondentes:

  • /fish/
  • /fish/?id=anything
  • /fish/salmon.htm

Resultados não correspondentes:

  • /fish
  • /fish.html
  • /Fish/Salmon.asp
/*.php

Resultados correspondentes:

  • /filename.php
  • /folder/filename.php
  • /folder/filename.php?parameters
  • /folder/any.php.file.html
  • /filename.php/

Resultados não correspondentes:

  • / (mesmo se mapear para /index.php)
  • /windows.PHP
/*.php$

Resultados correspondentes:

  • /filename.php
  • /folder/filename.php

Resultados não correspondentes:

  • /filename.php?parameters
  • /filename.php/
  • /filename.php5
  • /windows.PHP
/fish*.php

Resultados correspondentes:

  • /fish.php
  • /fishheads/catfish.php?parameters

Resultado não correspondente: /Fish.PHP

Linhas non-group-member compatíveis com o Google

Google, Ask, Bing e Yahoo são compatíveis com sitemap, conforme definido pelo sitemaps.org (em inglês).

Uso:

sitemap: [absoluteURL]

[absoluteURL] aponta para um sitemap, arquivo de índice de sitemap ou URL. O URL não precisa estar no mesmo host que o arquivo robots.txt. Várias entradas de sitemap podem existir. Como as linhas non-group-member, elas não estão vinculadas a user-agents específicos e podem ser seguidas por todos os rastreadores, contanto que não estejam proibidas.

Ordem de precedência para linhas group-member

Em um nível de group-member, em especial para diretivas allow e disallow, a regra mais específica baseada no tamanho da entrada [path] se sobrepõe à regra menos específica (mais curta). No caso de regras conflitantes, incluindo as com curingas, a regra menos restritiva será usada.

Situações de exemplo
http://example.com/page

allow: /p

disallow: /

Veredito: allow

http://example.com/folder/page

allow: /folder

disallow: /folder

Veredito: allow

http://example.com/page.htm

allow: /page

disallow: /*.htm

Veredito: undefined

http://example.com/

allow: /$

disallow: /

Veredito: allow

http://example.com/page.htm

allow: /$

disallow: /

Veredito: disallow

Enviar comentários sobre…