Robots.txt: Allow, Disallow, User-agent e Wildcards Explicados
Uma regra errada no robots.txt pode tirar o site inteiro do Google. Veja a sintaxe completa, o significado de cada diretiva, wildcards e ancoragem, regras de precedência e os erros mais perigosos — com exemplos prontos por CMS.
Por Vitor Morais
Fundador do MochaLabz ·
Gere seu robots.txt sem erro
Configurações pré-validadas para WordPress, Next.js, Shopify e outros — sem o risco de bloquear o site inteiro.
Gerar robots.txt →O robots.txt é um arquivo de texto colocado na raiz do domínio que orienta crawlers (bots de busca, agregadores, ferramentas de IA) sobre o que rastrear no seu site. É o primeiro arquivo que o Googlebot lê ao chegar — e uma regra mal escrita pode tirar o site inteiro do índice de busca em horas. Este guia cobre cada diretiva da especificação, com exemplos concretos e os erros mais comuns.
Anatomia básica do robots.txt
Um robots.txt é apenas um arquivo de texto com diretivas organizadas por User-agent. Cada bloco se aplica a um ou mais bots. Não há sintaxe complicada — é texto plano:
# Vive em https://meusite.com/robots.txt
# UTF-8, sem BOM, terminadores de linha LF ou CRLF
User-agent: * # Aplica-se a todos os bots
Disallow: /admin/ # Proíbe o crawl
Disallow: /api/
Allow: /api/public/ # Exceção dentro de /api/
User-agent: Googlebot # Bloco específico só para o Google
Disallow: /beta/
User-agent: Bingbot
Crawl-delay: 10 # Bing aceita; Google ignora
Sitemap: https://meusite.com/sitemap.xml
Sitemap: https://meusite.com/sitemap-news.xmlLinhas que começam com # são comentários. Linhas em branco separam blocos de bots. Cada diretiva fica numa linha própria.
As 5 diretivas oficiais
| Critério | Bing | Yandex | DuckDuckGo | |
|---|---|---|---|---|
| User-agent | ✅ | ✅ | ✅ | ✅ |
| Disallow | ✅ | ✅ | ✅ | ✅ |
| Allow | ✅ | ✅ | ✅ | ✅ |
| Sitemap | ✅ | ✅ | ✅ | ✅ |
| Crawl-delay | ❌ | ✅ | ✅ | ✅ |
| Wildcards (* $) | ✅ | ✅ | ✅ | Parcial |
User-agent: identificando o bot
A diretiva User-agent abre cada bloco e identifica para qual bot as regras se aplicam. * é o curinga que vale para qualquer bot que não tenha bloco específico.
| Critério | O que é |
|---|---|
| Googlebot | Crawler principal de busca do Google |
| Googlebot-Image | Específico para Google Imagens |
| Googlebot-News | Específico para Google News |
| GoogleOther | Crawls auxiliares do Google (P&D, treino) |
| Bingbot | Crawler do Microsoft Bing |
| DuckDuckBot | Crawler do DuckDuckGo |
| Yandex | Crawler do Yandex (mercado russo) |
| GPTBot | Crawler da OpenAI para treino de modelos |
| ChatGPT-User | Acessos do ChatGPT em tempo real |
| ClaudeBot, anthropic-ai | Crawlers da Anthropic |
| CCBot | Common Crawl, usado por muitos modelos de IA |
Bots ignoram robots.txt?
robots.txt é uma convenção honrada. Bots sérios (Google, Bing, OpenAI, Anthropic) respeitam. Scrapers mal-intencionados, spam-bots e crawlers acadêmicos amadores podem ignorar. Para esses, controle por firewall, rate-limit ou WAF (Cloudflare, AWS WAF, fail2ban).
Disallow: o que significa exatamente
Disallow proíbe o crawl de URLs que combinam com o padrão. A interpretação depende exatamente de como o caminho é escrito:
# Bloqueia o site inteiro — CUIDADO!
Disallow: /
# Bloqueia /admin, /admin/, /administracao, /admin-painel
Disallow: /admin
# Bloqueia apenas /admin/ e tudo abaixo (mais preciso)
Disallow: /admin/
# Bloqueia /pesquisa.php, /pesquisa.html, /pesquisa
Disallow: /pesquisa
# Bloqueia URLs que terminam em .pdf
Disallow: /*.pdf$
# Não bloqueia nada (= mesmo que Allow: /)
Disallow:Allow: a exceção dentro do Disallow
Allow não tem efeito sozinho — ele faz sentido como exceção dentro de uma área bloqueada por Disallow. Em conflitos, a regra mais específica (mais longa) vence:
User-agent: *
Disallow: /assets/ # Bloqueia /assets/ inteiro
Allow: /assets/public/ # Exceto /assets/public/
# Resultado:
# /assets/secret.zip → BLOQUEADO
# /assets/public/logo.png → PERMITIDO
# Para bloquear PHP mas permitir um específico:
Disallow: /*.php$
Allow: /index.php$Wildcards: * e $
Dois caracteres especiais aumentam a expressividade das regras:
*— qualquer sequência de caracteres (incluindo nada).$— ancoragem no final da URL.
# Bloqueia qualquer URL com ?sort=
# /produtos?sort=price ✅ bloqueado
# /listar?sort=asc ✅ bloqueado
Disallow: /*?sort=
# Bloqueia .pdf no final exato (sem query string)
# /doc.pdf ✅ bloqueado
# /doc.pdf?v=1 ❌ NÃO bloqueado
Disallow: /*.pdf$
# Bloqueia tudo dentro de /tmp/ que termine em .log
Disallow: /tmp/*.log
# Cuidado com greedy: * pega TUDO entre o anterior e o próximo padrão
Disallow: /img/*.jpg # bloqueia /img/foto.jpg E /img/sub/foto.jpgSitemap: indique seus mapas
A diretiva Sitemap aponta para o sitemap XML do seu site. Pode aparecer várias vezes (um por arquivo de sitemap) e fica fora dos blocos User-agent. Use URL absoluta:
Sitemap: https://meusite.com/sitemap.xml
Sitemap: https://meusite.com/sitemap-news.xml
Sitemap: https://meusite.com/sitemap-images.xmlPara mais detalhes, veja como enviar e monitorar o sitemap no Google Search Console.
Disallow ≠ Noindex
O erro mais frequente
Disallow proíbe o crawl, não a indexação. Uma URL bloqueada pode continuar aparecendo nas SERPs (sem snippet, com texto “Nenhuma informação disponível”) se tiver backlinks externos apontando para ela.
Para realmente remover do índice, faça o oposto:
- Permita o crawl da URL (não Disallow).
- Adicione no
<head>da página:<meta name="robots" content="noindex" />. - Quando o Googlebot revisitar e ver a tag, vai remover do índice.
Regras de precedência: como o bot decide
Quando há conflito entre Allow e Disallow, ou múltiplos User-agents aplicáveis, o bot segue uma ordem clara:
- Bloco User-agent mais específico vence: se existem blocos para
Googlebote para*, o Googlebot lê apenas o seu bloco — o curinga é ignorado. - Não combina regras de blocos diferentes. Se você quer aplicar regras a Googlebot E o que estava no curinga, precisa repeti-las no bloco do Googlebot.
- Allow vs Disallow: a regra com path mais longo (mais específica) vence.
- Empate: em alguns bots, Allow vence; no Google também — em caso de empate exato, prevalece a permissão.
Exemplos prontos por CMS
WordPress padrão
User-agent: *
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php
Disallow: /wp-includes/
Disallow: /wp-content/plugins/
Disallow: /?s=
Disallow: /search/
Sitemap: https://meusite.com/sitemap_index.xmlNext.js / Vercel
User-agent: *
Allow: /
Disallow: /api/
Disallow: /_next/
Allow: /_next/static/
Allow: /_next/image
Sitemap: https://meusite.com/sitemap.xmlE-commerce (Shopify, WooCommerce, custom)
User-agent: *
Disallow: /carrinho
Disallow: /checkout
Disallow: /minha-conta
Disallow: /*?sort=
Disallow: /*?ordem=
Disallow: /*?utm_
Sitemap: https://meusite.com/sitemap-produtos.xml
Sitemap: https://meusite.com/sitemap-categorias.xmlBloquear bots de IA generativa
User-agent: GPTBot
Disallow: /
User-agent: ChatGPT-User
Disallow: /
User-agent: anthropic-ai
Disallow: /
User-agent: ClaudeBot
Disallow: /
User-agent: CCBot
Disallow: /
User-agent: Google-Extended
Disallow: / # bloqueia treino do Gemini, mantém GooglebotOs 6 erros que tiram seu site do Google
Lista negra
- Disallow: / sem querer (esquecer um robots.txt de staging em produção). Tira o site inteiro do índice.
- Bloquear /css/, /js/, /assets/ — Google não consegue renderizar e degrada ranqueamento.
- Disallow + noindex juntos: contraditório. O bot bloqueado nunca vê o noindex.
- Esquecer Sitemap: linha esquecida significa demora para o Google descobrir páginas novas.
- Múltiplos blocos User-agent: * — só o último é considerado por alguns bots; o resto é ignorado.
- Tentar bloquear conteúdo sensível por robots.txt — o arquivo é público. Se algo é confidencial, proteja por autenticação, não por robots.txt.
Como testar e validar
- Robots.txt Tester (Search Console legado): cola URLs específicas e simula o Googlebot.
- URL Inspection no Search Console: mostra o status real de uma URL, incluindo se está bloqueada.
- curl direto:
curl https://seusite.com/robots.txtpara ver o que o bot vê (lembre que CDNs podem cachear — force refresh). - Screaming Frog: crawla seu site respeitando robots.txt e mostra exatamente o que é bloqueado vs permitido.
Checklist do robots.txt enxuto
- ✅ Arquivo na raiz, em UTF-8, com terminadores LF.
- ✅ Não bloqueia /css/, /js/, /assets/, /_next/static/.
- ✅ Bloqueia áreas administrativas (/wp-admin/, /admin/).
- ✅ Bloqueia parâmetros de tracking (?utm_, ?fbclid=, ?gclid=).
- ✅ Bloqueia áreas dinâmicas sem valor SEO (/carrinho, /minha-conta).
- ✅ Inclui pelo menos um Sitemap absoluto.
- ✅ Sem Disallow: / em produção.
- ✅ Considerou se quer bloquear bots de IA generativa.
- ✅ Testado pelo Robots.txt Tester antes de publicar.
Perguntas frequentes
Onde o arquivo robots.txt deve ficar?+
Sempre na raiz do domínio, em texto puro UTF-8, acessível em https://seudominio.com/robots.txt. O Google só lê o robots.txt nessa exata localização — colocar dentro de subpastas, em outro nome de arquivo ou em subdomínios diferentes não funciona. Cada subdomínio precisa de seu próprio robots.txt.
Disallow no robots.txt remove a página do índice do Google?+
Não. Disallow impede o crawl, mas não a indexação. Uma URL bloqueada ainda pode aparecer nas SERPs (sem snippet, com a frase "Nenhuma informação disponível") se tiver backlinks externos. Para remover do índice, use a meta tag noindex na página — e deixe o crawl liberado para o Googlebot conseguir ler essa tag.
Qual a diferença entre Disallow: /admin e Disallow: /admin/?+
Disallow: /admin (sem barra final) bloqueia tudo que começar com /admin: /admin, /admin/, /administracao, /admin-area. Disallow: /admin/ (com barra) bloqueia apenas /admin/ e seus filhos: /admin/users, /admin/config, mas permite /administracao. Use a forma com barra quando quiser ser preciso e não pegar URLs com prefixo similar.
Posso bloquear bots de IA como GPTBot e ChatGPT-User?+
Sim, e a partir de 2023 a OpenAI passou a respeitar robots.txt. Para bloquear o treino de modelos com seu conteúdo, adicione blocos específicos para User-agent: GPTBot, ChatGPT-User, GoogleOther, CCBot, anthropic-ai e ClaudeBot. Outros bots ainda ignoram robots.txt — para esses, controle por firewall ou WAF.
Qual a diferença entre Allow e Disallow?+
Disallow proíbe o crawl de uma URL ou padrão. Allow é a exceção: permite explicitamente algo dentro de um Disallow mais amplo. Exemplo: Disallow: /assets/ + Allow: /assets/public/ bloqueia /assets/ inteiro mas libera /assets/public/. Allow só faz sentido em conjunto com algum Disallow.
Wildcards (* e $) funcionam em qualquer bot?+
Os principais (Googlebot, Bingbot, DuckDuckBot, Yandex) reconhecem * (qualquer sequência) e $ (fim da URL). Bots menos populares podem não suportar. Para máxima compatibilidade, prefira regras simples baseadas em prefixos. Para Google especificamente, wildcards são totalmente seguros.
Posso ter um robots.txt diferente para cada bot?+
Sim. Cada bloco User-agent define regras para um bot específico. O bot lê primeiro o bloco que combina com seu nome; se não existe, cai no User-agent: * (curinga). Atenção: o bot só obedece o primeiro bloco aplicável — não combina regras de blocos diferentes.
Crawl-delay funciona no Google?+
Não. O Google ignora a diretiva Crawl-delay desde sempre. Para controlar a taxa do Googlebot, use as configurações de rastreamento dentro do Google Search Console (versão antiga ainda disponível para algumas propriedades). Bing, Yandex e Yahoo respeitam Crawl-delay.
Continue lendo
Google Search Console: Como Enviar e Monitorar Sitemap (Guia 2026)
Verificação de propriedade, envio passo a passo, sitemap-index para sites grandes, decifrar status, relatório de Páginas e estratégias para acelerar indexação.
Crawl Budget: O que é e Como Otimizar para Indexar Mais Páginas
Crawl budget é o número de URLs que o Googlebot rastreia no seu site. Aprenda como funciona, quando se preocupar, os 7 maiores desperdiçadores e o checklist completo de otimização — com exemplos reais de robots.txt, canonical, sitemap e arquitetura.
Redirect 301 vs 302 vs 307 vs 308 para SEO: Guia Completo (2026)
Quando usar cada tipo de redirect HTTP, como afeta SEO e link equity, implementação em Next.js, Apache, Nginx, Vercel e Cloudflare, mapeamento em massa para migrações e auditoria de chains/loops.