Se você adicionar /robots.txt ao final do endereço de qualquer site e abrir, geralmente vai ver um arquivo de texto simples com poucas linhas. É nesse arquivo que o site diz a buscadores, crawlers e scrapers: "não rastreiem estes caminhos". Para um especialista em SEO, é uma configuração que afeta como o site aparece nos buscadores; para um desenvolvedor que coleta dados, é o primeiro documento a ler antes de começar.
Neste artigo, explicamos o que é o robots.txt, onde ele fica e como as regras são lidas, junto com User-agent, Disallow, Allow, curingas e a regra da correspondência mais longa. Depois, vemos as linhas Crawl-delay e Sitemap, se o arquivo tem força legal, como um scraper deve ler o robots.txt com Python (e quando o parser da biblioteca padrão erra), os erros de SEO mais comuns e as linhas escritas para bots de IA.
O que é robots.txt?
O robots.txt é o arquivo do Robots Exclusion Protocol, usado desde 1994 e difundido por anos sem um padrão escrito. O protocolo virou padrão oficial em 2022 com a RFC 9309. O padrão define o formato do arquivo, como as regras são comparadas e o que fazer quando o arquivo não pode ser acessado.
A função do arquivo é simples: o dono do site informa de quais caminhos os visitantes automatizados devem ficar longe. Motivos comuns:
- Carga no servidor: caminhos como páginas de busca e filtro, que consultam o banco de dados a cada requisição.
- Conteúdo de pouco valor ou duplicado: milhares de páginas iguais geradas por parâmetros de ordenação, páginas de carrinho e de conta.
- Orçamento de rastreamento: direcionar o tempo dos bots dos buscadores para as páginas importantes.
- Preferência de uso do conteúdo: impedir que certos bots, como os que coletam dados para treinar IA, rastreiem o site.
O robots.txt não é um mecanismo de segurança. O arquivo é público, e fechar um caminho com Disallow também anuncia que esse caminho existe. Páginas que precisam continuar privadas devem ser protegidas com senha, controle de acesso ou métodos como noindex.
Onde fica o robots.txt?
O arquivo fica sempre no diretório raiz do site, e o nome é robots.txt em letras minúsculas:
https://example.com/robots.txté válido.https://example.com/folder/robots.txtnão é lido por nenhum bot.
As regras valem por protocolo, host e porta. https://example.com/robots.txt só vale para https://example.com; o subdomínio https://shop.example.com precisa do próprio arquivo. As versões http:// e https:// também são tecnicamente arquivos separados.
A RFC 9309 define o que acontece quando o arquivo não pode ser acessado:
- Uma resposta
4xx(o arquivo não existe): o crawler pode supor que o site não tem restrições. - Uma resposta
5xxou erro de rede (o arquivo está inacessível): o crawler deve supor que o site inteiro está fechado.
O padrão também diz que os crawlers podem guardar o arquivo em cache, mas em geral não devem usar uma versão em cache por mais de 24 horas. Ou seja, uma mudança no arquivo pode levar até um dia para chegar aos bots.
Como as regras são lidas?
Abaixo há um arquivo de exemplo realista para uma loja online:
User-agent: *
Disallow: /cart
Disallow: /account/
Disallow: /search
Allow: /search/popular
Disallow: /*?sort=
Disallow: /*.pdf$
Crawl-delay: 5
User-agent: ExamplePriceBot
Disallow: /account/
Allow: /
User-agent: GPTBot
Disallow: /
Sitemap: https://example.com/sitemap.xml| Linha | Significado |
|---|---|
User-agent: * | As regras deste grupo valem para todo bot que não tem grupo próprio |
Disallow: /cart | Todo caminho que começa com /cart: /cart, /cart/add e até /cartoon |
Disallow: /account/ | A pasta /account/ e tudo abaixo dela; /account (sem barra final) não corresponde |
Disallow: /search | /search, /search?q=phone, /search/popular |
Allow: /search/popular | Uma exceção à proibição anterior; é mais longa, então esse caminho pode ser rastreado |
Disallow: /*?sort= | * é qualquer sequência de caracteres: todo endereço com um parâmetro ?sort= |
Disallow: /*.pdf$ | $ marca o fim do endereço: endereços que terminam em .pdf; /catalog.pdf?v=2 não corresponde |
Crawl-delay: 5 | Um pedido para esperar 5 segundos entre as requisições (não padronizado, explicado abaixo) |
User-agent: ExamplePriceBot | Um grupo só para este bot; este bot não lê o grupo * acima |
Allow: / | Para este bot, tudo está aberto, exceto as páginas de conta |
User-agent: GPTBot + Disallow: / | O GPTBot não deve rastrear nada do site |
Sitemap: | O endereço do sitemap; independente dos grupos |
Grupos User-agent
O arquivo é formado por grupos. Cada grupo começa com uma ou mais linhas User-agent, e as regras que vêm depois pertencem a esse grupo. Quando um bot lê o arquivo:
- Procura um grupo que corresponda ao próprio nome. A comparação é feita com o token de produto do bot (por exemplo,
GPTBot), sem diferenciar maiúsculas e minúsculas, e não com a string User-Agent completa do navegador. - Se encontrar um grupo próprio, aplica só as regras desse grupo. As regras do grupo
*não são somadas para esse bot. - Se não houver grupo próprio, aplica o grupo
*. - Se não houver grupo nenhum, supõe que o site não tem restrições.
O ponto 2 costuma passar despercebido. No exemplo acima, como o ExamplePriceBot tem grupo próprio, esse bot não é afetado nem pelas proibições de /cart e /search, nem pelo pedido de Crawl-delay.
Disallow, Allow e a regra da correspondência mais longa
As regras correspondem como prefixos de caminho: Disallow: /cart cobre todo caminho que começa com /cart. Quando mais de uma regra corresponde a um endereço, segundo a RFC 9309 vence a regra correspondente mais longa. O endereço /search/popular corresponde tanto a Disallow: /search (7 caracteres) quanto a Allow: /search/popular (15 caracteres); o Allow, mais longo, vence e a página pode ser rastreada.
Se duas regras tiverem o mesmo tamanho e uma for Allow e a outra Disallow, o padrão recomenda preferir o Allow. A ordem das regras no arquivo não muda o resultado. Como veremos abaixo, alguns parsers não implementam esse ponto corretamente.
Curingas
*corresponde a zero ou mais caracteres:Disallow: /*?session=fecha todo endereço que tenha um parâmetro de sessão.$marca o fim do endereço:Disallow: /*.pdf$fecha só os endereços que terminam em.pdf.
Se o valor de uma linha Disallow: ficar vazio (Disallow:), nenhum caminho é fechado. Disallow: / fecha o site inteiro. A diferença de um caractere entre essas duas linhas pode causar um dos erros de SEO mais caros.
As linhas Crawl-delay e Sitemap
O Crawl-delay é um pedido que diz a um bot quantos segundos esperar entre requisições seguidas ao mesmo site. Ele não faz parte da RFC 9309, mas muitos crawlers e scrapers o leem. O Google não suporta a linha Crawl-delay; a taxa de rastreamento do Google é definida pelos sistemas dele. Alguns outros buscadores levam a linha em conta.
Para um scraper, o valor de Crawl-delay é uma preferência de velocidade que o dono do site declarou explicitamente e, mesmo não sendo padrão, é um sinal que vale seguir. Outras formas de respeitar limites de taxa estão em Como fazer web scraping sem ser bloqueado.
A linha Sitemap informa o endereço completo do arquivo de sitemap. Ela é independente dos grupos, pode aparecer em qualquer parte do arquivo e ser escrita mais de uma vez. Para buscadores e scrapers, é o jeito de ir direto à lista de páginas em vez de rastrear o site inteiro link por link.
O robots.txt tem força legal?
Tecnicamente, o robots.txt é um pedido, não uma barreira de acesso. Um caminho estar fechado no arquivo não impede fisicamente o acesso a ele. Por isso a resposta para "sou obrigado a seguir o robots.txt?" é mais jurídica e ética do que técnica.
O que você precisa saber na prática:
- Todo crawler legítimo o segue. Buscadores, serviços de arquivamento e crawlers corporativos leem e aplicam o robots.txt.
- Ele é avaliado junto com os termos do site. Os termos de uso de muitos sites regulam o acesso automatizado fazendo referência ao robots.txt. Os termos de serviço do Google, por exemplo, citam entre os exemplos de abuso o acesso automatizado que viola instruções legíveis por máquina, como o robots.txt.
- Pode ser um sinal decisivo em disputas. Um scraper que rastreia caminhos que um site fechou explicitamente é visto como quem ignorou de propósito a preferência do site.
- Seguir o robots.txt não torna tudo legal. Coletar dados pessoais de um caminho aberto não isenta das obrigações de leis como a LGPD e o GDPR.
Tratamos do enquadramento legal da coleta de dados em Web scraping é legal?. Este artigo não é aconselhamento jurídico; recomendamos consultar um advogado para o seu caso.
Como um scraper deve ler o robots.txt?
A biblioteca padrão do Python inclui o módulo urllib.robotparser, e a documentação oficial dele descreve o uso básico. Mas, quando testamos o módulo com o arquivo de exemplo acima, ele se afastou da RFC 9309 em quatro pontos:
| Caso | RFC 9309 | urllib.robotparser |
|---|---|---|
Primeiro Disallow: /search, depois Allow: /search/popular | /search/popular pode ser rastreado (regra mais longa) | Não pode ser rastreado; aplica a primeira regra que corresponde |
| As mesmas duas regras em ordem inversa | Pode ser rastreado | Pode ser rastreado |
Disallow: /*?sort= | /category?sort=price está fechado | Aberto; * não é suportado |
Disallow: /*.pdf$ | /catalog.pdf está fechado | Aberto; $ não é suportado |
Há também duas diferenças de comportamento:
- Quando recebe como nome do bot a string User-Agent completa (
Mozilla/5.0 (compatible; GPTBot/1.2; ...)), o módulo não encontrou o grupo próprio do bot e aplicou o grupo*. É preciso passar à função só o token de produto (GPTBot). - Quando o arquivo responde com
401ou403, o módulo trata o site inteiro como fechado. A RFC 9309 trata respostas4xxcomo "o arquivo não existe". Como a funçãoread()do módulo baixa o arquivo com o User-Agent padrão do Python e sem timeout, você pode receber por engano "tudo fechado" em um site que bloqueia esse valor.
Por isso é mais seguro baixar o arquivo com o seu próprio cliente, passá-lo para parse() e usar um parser mais completo em arquivos com curingas:
from urllib.parse import urlsplit
from urllib.robotparser import RobotFileParser
import requests
BOT_NAME = "ExamplePriceBot"
USER_AGENT = f"{BOT_NAME}/1.0 (+https://example.com/about-our-bot)"
def robots_for(site, session):
"""Baixa o robots.txt e aplica o comportamento 4xx e 5xx da RFC 9309."""
parser = RobotFileParser()
try:
response = session.get(f"{site}/robots.txt", timeout=10)
except requests.RequestException:
parser.parse(["User-agent: *", "Disallow: /"]) # inacessível: tudo fechado
return parser
if response.status_code >= 500:
parser.parse(["User-agent: *", "Disallow: /"])
elif response.status_code >= 400:
parser.parse([]) # sem arquivo: sem restrições
else:
parser.parse(response.text.splitlines())
return parser
session = requests.Session()
session.headers["User-Agent"] = USER_AGENT
url = "https://example.com/product/123"
site = "{0.scheme}://{0.netloc}".format(urlsplit(url))
robots = robots_for(site, session)
if robots.can_fetch(BOT_NAME, url):
delay = robots.crawl_delay(BOT_NAME) or 2
print(f"Pode rastrear, vai esperar {delay} s entre as requisições")
else:
print("O robots.txt fecha este endereço, pulando")
print("Sitemaps:", robots.site_maps())Dois detalhes do exemplo importam: can_fetch recebe só o nome do bot, não a string User-Agent completa; e o arquivo é baixado uma vez por site e mantido em memória, não baixado de novo para cada página.
Se curingas e a regra da correspondência mais longa importam para você, a biblioteca protego, usada pelo Scrapy, aplica essas regras de forma mais próxima da RFC. Seja qual for o parser, confira os resultados testando à mão alguns endereços contra o arquivo do site de destino.
Erros comuns de SEO
Como o robots.txt afeta diretamente a visibilidade nos buscadores, ele também é configurado errado com frequência do lado do SEO:
- Esquecer a linha
Disallow: /ao publicar. A linha escrita para fechar o site no ambiente de homologação vai para o site em produção, e o site some dos buscadores. - Tentar tirar uma página do índice com o robots.txt. O
Disallowimpede que a página seja rastreada, não que seja indexada. Uma página fechada que recebe links de outros sites pode aparecer nos resultados só com o endereço, sem o conteúdo ter sido lido. Para tirá-la do índice, a página precisa poder ser rastreada e ternoindex. - Fechar arquivos CSS e JavaScript. O buscador não consegue renderizar a página corretamente, e a avaliação de compatibilidade com dispositivos móveis e do conteúdo sai prejudicada.
- Confundir as barras finais.
Disallow: /blogfecha tanto a pasta/blog/quanto uma página/blogger-guide. - Ignorar maiúsculas e minúsculas. A comparação de caminhos diferencia maiúsculas:
Disallow: /Searchnão fecha/search. - Não colocar arquivo no subdomínio.
shop.example.comprecisa do próprio robots.txt. - Esperar que as mudanças valham na hora. Os bots leem o arquivo do cache; uma mudança pode levar até um dia para fazer efeito.
A documentação do Google Search Central explica em detalhe como o Google interpreta o robots.txt, incluindo o limite de tamanho do arquivo e o comportamento diante de códigos de erro. Para verificar resultados de busca em países diferentes, veja a nossa página de solução de proxy para SEO.
Linhas para bots de IA
Nos últimos anos, as linhas mais adicionadas aos arquivos robots.txt são voltadas aos crawlers de empresas de IA. Alguns desses bots coletam dados para treinar modelos; outros buscam uma página na hora, em resposta à pergunta de um usuário. Tokens de produto comuns:
GPTBot(OpenAI)ClaudeBot(Anthropic)CCBot(Common Crawl)Google-Extended: não é um crawler separado, e sim um token que controla se o conteúdo coletado pelos bots existentes do Google é usado nos modelos Gemini; não afeta a visibilidade na Pesquisa Google.
Por exemplo, um site que quer fechar o rastreamento para treinamento e continuar aberto aos buscadores pode adicionar estas linhas:
User-agent: GPTBot
Disallow: /
User-agent: CCBot
Disallow: /
User-agent: Google-Extended
Disallow: /As empresas adicionam nomes de bots novos ou dividem as funções dos bots existentes de tempos em tempos. Ao escrever essas linhas, ou ao configurar um scraper com base nelas, consulte a documentação atual da empresa correspondente. Para um exemplo das medidas que os sites tomam em outras camadas contra bots que não seguem o robots.txt, veja Cloudflare Precursor. Para um exemplo de como modelos de IA usam dados da web, veja Web scraping com GPT-6 Astra.
Se você está criando o seu próprio agente de IA ou scraper, dê a ele um token de produto definido e leia o robots.txt com esse nome. Assim o dono do site pode escrever um grupo só para você e passar as preferências de rastreamento diretamente.
Casos de uso
- Um crawler em grande escala: baixa o robots.txt uma vez por domínio, guarda em cache e verifica cada endereço antes de colocá-lo na fila. O lado da escala está na nossa página de solução de web crawler.
- Um script de monitoramento de preços: pega os endereços de produto do sitemap, nunca visita as páginas de busca e filtro fechadas pelo robots.txt e respeita o
Crawl-delay. A configuração geral está na nossa página de solução de extração de dados. - Uma auditoria de SEO: antes de publicar, confere se o robots.txt não fecha páginas importantes e se a linha do sitemap está correta.
- Definir uma política para bots de IA: o dono do conteúdo decide quais bots podem rastrear o site e para qual finalidade, e adiciona as linhas correspondentes.
Alguns sites também colocam links escondidos para atrair bots para caminhos fechados pelo robots.txt; um crawler que segue o robots.txt fica naturalmente longe dessas armadilhas. Explicamos o mecanismo em Armadilhas honeypot.
Erros comuns (lado do scraper)
- Nunca ler o robots.txt. Começar a rastrear sem conhecer uma preferência que o site declarou explicitamente.
- Confiar cegamente no
urllib.robotparser. Ele pode dar resultados errados com a ordem das regras e com curingas. - Passar a string User-Agent completa para
can_fetch. O grupo próprio do bot não é encontrado. - Supor que o grupo próprio do bot se soma ao grupo
*. Se houver grupo próprio, só ele vale. - Baixar o arquivo de novo a cada requisição. Sobrecarrega o site sem necessidade; baixe uma vez por site e guarde em cache.
- Continuar rastreando diante de uma resposta
5xx. O padrão diz que, quando o arquivo está inacessível, o site inteiro deve ser tratado como fechado. - Ignorar o
Crawl-delaypor não ser padrão. É um pedido explícito de velocidade do dono do site.
Guia de decisão
| Sua situação | Recomendação |
|---|---|
O endereço está fechado com Disallow | Não rastreie |
O endereço está aberto e há Crawl-delay | Espere pelo menos esse tempo entre as requisições |
O robots.txt retorna 404 | Trate como sem restrições, mas confira os termos do site mesmo assim |
O robots.txt retorna 5xx ou está inacessível | Trate o site como fechado e tente de novo mais tarde |
O arquivo usa os curingas * ou $ | Use um parser compatível com a RFC |
| Há um grupo para o seu bot | Aplique só esse grupo |
| Há uma linha de sitemap | Pegue os endereços do sitemap |
| Você quer tirar uma página dos buscadores | Não com robots.txt, e sim com noindex |
Perguntas frequentes
Posso rastrear um site sem robots.txt?
Se não houver robots.txt, considera-se que o site não tem restrições de rastreamento. Isso não significa que os termos de uso do site, os limites de taxa e as leis de proteção de dados pessoais deixem de valer.
Qual é a diferença entre Disallow e noindex?
O Disallow impede que um bot rastreie a página, ou seja, baixe o conteúdo dela. O noindex pede que a página não apareça nos resultados de busca e exige que o bot consiga ler a página. Se você fechar uma página com Disallow e também adicionar noindex, o bot nunca vê a tag noindex.
O Google lê a linha Crawl-delay?
Não. O Google não suporta a linha e define a taxa de rastreamento com os próprios sistemas. Alguns outros buscadores e muitos crawlers a levam em conta.
Qual pode ser o tamanho de um arquivo robots.txt?
A RFC 9309 exige que os crawlers consigam processar um arquivo de pelo menos 500 kibibytes; regras além desse limite podem ser ignoradas. Na prática, os arquivos robots.txt ficam muito abaixo disso, e mantê-los curtos reduz o risco de erro.
Posso bloquear bots de IA com o robots.txt?
Sim, no caso dos bots que seguem o robots.txt: abra um grupo com o token de produto correspondente e escreva Disallow: /. Para bots que não seguem o robots.txt, você precisa de medidas adicionais do lado do servidor ou da CDN.
Qual nome de User-agent o meu scraper deve usar?
Um valor com um token de produto curto que identifique o seu bot e um endereço de contato: ExamplePriceBot/1.0 (+https://example.com/about-our-bot). Ao verificar o robots.txt, use só a parte ExamplePriceBot.
Em resumo
O robots.txt é o arquivo no diretório raiz de um site que diz aos bots quais caminhos não rastrear. As regras são divididas em grupos User-agent; se um bot tem grupo próprio, só ele vale, a correspondência mais longa vence quando as regras conflitam, e * e $ são usados como curingas. O Crawl-delay não é padronizado nem suportado pelo Google, mas para scrapers é um pedido explícito de velocidade. O urllib.robotparser do Python se afasta da RFC na ordem das regras e nos curingas; baixe o arquivo com o seu próprio cliente e confira os resultados. Para trabalhos de coleta de dados dentro das regras, conheça os nossos serviços de proxy.




