This page is also available in English.

Publicado em 11 min de leitura

Foto de Christopher Gower no Unsplash
Você bloqueou o GPTBot no robots.txt para tirar o conteúdo dos treinos de modelo — e depois se perguntou por que o ChatGPT Search nunca cita sua documentação. São sistemas diferentes. A documentação oficial de crawlers da OpenAI deixa claro: cada bot é independente. Permitir OAI-SearchBot mantém você elegível às respostas de busca do ChatGPT; bloquear GPTBot só opta você fora do treinamento de modelos fundacionais.
Este artigo é um playbook de Generative Engine Optimization (GEO) para Next.js App Router: como engines de resposta descobrem páginas, quais user-agents importam de verdade, como configurar robots.ts e sitemaps, como manter HTML rastreável e o que o llms.txt faz — e o que ele não garante.
Trate “aparecer em um LLM” como três pipelines separados:
| Pipeline | O que faz | Bots / tokens típicos |
|---|---|---|
| Crawl de treinamento | Coleta páginas públicas que podem entrar em treinos futuros | GPTBot, ClaudeBot, Google-Extended (token), CCBot da Common Crawl |
| Índice de busca / respostas | Constrói ou atualiza a recuperação para que respostas possam citar suas URLs | OAI-SearchBot, Claude-SearchBot, PerplexityBot, Googlebot / Bingbot clássicos (e parceiros) |
| Fetch disparado pelo usuário | Baixa uma URL porque um humano pediu (ou colou um link) | ChatGPT-User, Claude-User, Perplexity-User |
Bloquear o bot de treinamento não bloqueia automaticamente o bot de busca. A OpenAI afirma isso explicitamente para GPTBot vs OAI-SearchBot. A Anthropic documenta a mesma divisão para ClaudeBot, Claude-SearchBot e Claude-User. A Perplexity documenta PerplexityBot para indexação de busca e Perplexity-User para fetches ao vivo.
O ChatGPT Search também pode fazer parceria com provedores de busca de terceiros. O help center da OpenAI documenta que consultas reescritas podem ser enviadas a parceiros como o Bing (e outros listados naquele artigo). Em paralelo, a OpenAI recomenda permitir o OAI-SearchBot se você quer aparecer nas respostas de busca do ChatGPT. Implicação prática: mantenha os bots de busca liberados e uma presença saudável nos grandes índices da web — não otimize só para o rumor do mês sobre “quem realmente alimenta” o Search.
Segundo o overview de crawlers da OpenAI:
Usado para exibir sites nas funcionalidades de busca do ChatGPT. Sites que optam out do OAI-SearchBot não aparecem nas respostas de busca do ChatGPT, embora ainda possam surgir como links de navegação simples. A OpenAI recomenda permitir o bot no robots.txt e liberar os intervalos de IP publicados. Mudanças podem levar cerca de 24 horas para propagar.
Rastreia conteúdo que pode ser usado para treinar modelos fundacionais. Bloquear GPTBot sinaliza que o conteúdo não deve entrar nesse treinamento. Não controla elegibilidade no ChatGPT Search.
Usado quando o ChatGPT ou Custom GPTs buscam uma página por ação do usuário. A OpenAI deixa claro: não é crawl automático da web, não decide inclusão no Search, e regras de robots.txt podem não se aplicar porque o fetch foi iniciado por uma pessoa. Gerencie Search com OAI-SearchBot; trate ChatGPT-User como canal de fetch ao vivo separado.
Só visita páginas enviadas como anúncios no ChatGPT; não treina modelos fundacionais. Relevante se você roda ads — ignore para GEO orgânico.
Política comum e defensável para sites de conteúdo que querem citação, mas não treinamento:
User-agent: OAI-SearchBot
Allow: /
User-agent: GPTBot
Disallow: /O help center da Anthropic (atualizado em abril de 2026) define três bots:
ClaudeBot — possível contribuição ao treinamento de modelosClaude-SearchBot — indexa conteúdo para qualidade de busca; desabilitá-lo pode reduzir visibilidade nos resultadosClaude-User — fetches orientados pelo usuário; desabilitá-lo pode reduzir visibilidade em buscas dirigidas pelo usuárioA Anthropic respeita robots.txt (incluindo o não padrão Crawl-delay) e avisa que bloquear só por IP é pouco confiável, porque isso pode impedir o bot de ler o seu robots.txt.
A documentação de crawlers da Perplexity recomenda permitir o PerplexityBot para o site aparecer nos resultados da Perplexity. O Perplexity-User cuida de fetches iniciados pelo usuário e em geral ignora robots.txt, porque uma pessoa pediu a página. Se você usa WAF, faça whitelist por user-agent + JSON de IPs publicados (perplexitybot.json / perplexity-user.json) — robots.txt sozinho não basta se a borda derruba a requisição.
O Google-Extended é um token de controle no robots.txt, não um user-agent HTTP separado. Ele governa se o conteúdo rastreado pode ser usado para treinar futuras gerações de Gemini e para grounding em Gemini Apps / Vertex AI Grounding with Google Search. O Google afirma que não afeta inclusão nem ranking no Google Search.
Trade-off importante: na OpenAI você pode permitir busca e bloquear treinamento separadamente. No Google, Google-Extended cobre tanto treinamento quanto grounding do Gemini. Permita se quiser que apps Gemini usem seu conteúdo no grounding; bloqueie se quiser sair desses usos do Gemini (o Search em si continua separado via Googlebot).
app/robots.tsO App Router gera /robots.txt a partir de um arquivo tipado. Docs oficiais: convenção robots.txt.
Exemplo que mantém bots de busca/citação liberados, opcionalmente opta out de treinamento, isola rotas privadas e anuncia o sitemap:
// app/robots.ts
import type { MetadataRoute } from 'next'
const SITE = 'https://example.com'
export default function robots(): MetadataRoute.Robots {
return {
rules: [
{
userAgent: '*',
allow: '/',
disallow: ['/api/', '/admin/', '/drafts/'],
},
// ChatGPT Search + fetch ao vivo
{ userAgent: 'OAI-SearchBot', allow: '/' },
{ userAgent: 'ChatGPT-User', allow: '/' },
// Opt-out de treinamento (opcional — remova para permitir treino)
{ userAgent: 'GPTBot', disallow: '/' },
// Claude
{ userAgent: 'Claude-SearchBot', allow: '/' },
{ userAgent: 'Claude-User', allow: '/' },
{ userAgent: 'ClaudeBot', disallow: '/' },
// Perplexity
{ userAgent: 'PerplexityBot', allow: '/' },
{ userAgent: 'Perplexity-User', allow: '/' },
// Token Gemini grounding/treino (permita se quiser que o Gemini use você)
{ userAgent: 'Google-Extended', allow: '/' },
],
sitemap: `${SITE}/sitemap.xml`,
host: SITE,
}
}Depois do deploy, abra https://seu-dominio/robots.txt e confira os grupos. User-agents falsificados existem — para verificação, OpenAI e Perplexity publicam JSON de faixas de IP; a Anthropic hoje orienta publishers a confiar no robots.txt em vez de bloqueio por IP.
Crawlers precisam de URLs para descobrir. O Next.js gera /sitemap.xml a partir de app/sitemap.ts (docs):
// app/sitemap.ts
import type { MetadataRoute } from 'next'
export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
const posts = await getPublishedPosts() // sua camada de dados
return [
{ url: 'https://example.com', lastModified: new Date(), priority: 1 },
...posts.map((p) => ({
url: `https://example.com/blog/${p.slug}`,
lastModified: p.updatedAt ?? p.publishedAt,
changeFrequency: 'monthly' as const,
priority: 0.7,
})),
]
}Em seguida:
Se o ChatGPT Search usar o Bing em parte das consultas, um índice Bing saudável continua sendo seguro barato. Um índice Google saudável ainda importa para Google Search, AI Overviews / AI Mode e qualquer grounding sobre o índice do Google.
Engines de resposta e crawlers clássicos são mais confiáveis quando a prosa importante está na primeira resposta HTML. Server Components e SSR do App Router ajudam; um shell vazio que só preenche depois do JavaScript no cliente é um jeito clássico de parecer invisível.
Checklist prático no Next.js:
<title>, meta description e Open Graph reais via Metadata API — eles viajam com o documento.alternates.languages no sitemap quando houver locales.200 rápido e estável em páginas públicas — timeouts e soft 404s gastam crawl budget.Dados estruturados (JSON-LD de Article, FAQPage, Organization, etc.) não substituem boa prosa, mas headings claros, parágrafos definicionais curtos, tabelas e FAQs alinham com o que a própria orientação de GEO da Bing descreve como conteúdo mais fácil de citar com precisão.
Acesso técnico é necessário, mas não suficiente. Páginas que tendem a ser citadas:
## / ### descritivos que batem com como as pessoas perguntamVocê não precisa de um CMS novo. Precisa de páginas que sejam a melhor resposta extraível para uma intenção específica.
llms.txt: mapa útil, não interruptor de rankingA proposta llms.txt de Jeremy Howard sugere um Markdown em /llms.txt: nome do site como #, um resumo curto em >, depois seções ## com links absolutos curados. Arquivos companheiros (contexto concatenado) existem no ecossistema. Plataformas de docs (e muitos workflows de agentes) já usam esse padrão.
O que ele não é: um padrão formal imposto pela OpenAI, Google ou Anthropic para ranking de citações. Não substitui robots.txt. Não bloqueia crawlers. Trate como sumário curado para agentes e humanos que buscam /llms.txt sob demanda — sobretudo sites de documentação — não como alavanca garantida de ranking no ChatGPT.
No Next.js você pode começar com public/llms.txt ou gerar via Route Handler:
// app/llms.txt/route.ts
export function GET() {
const body = `# Acme Docs
> Documentação oficial da API e dos SDKs da Acme.
## Docs
- [Quick start](https://example.com/docs/quickstart.md): Instale e faça a primeira requisição
- [Auth](https://example.com/docs/auth.md): API keys e OAuth
## Optional
- [Changelog](https://example.com/changelog): Histórico de releases
`
return new Response(body, {
headers: {
'Content-Type': 'text/plain; charset=utf-8',
'Cache-Control': 'public, max-age=3600',
},
})
}Se você também servir espelhos Markdown das páginas-chave (a ideia do sufixo .md na proposta), agentes recebem contexto mais limpo do que parsear o HTML de marketing.
GPTBot e achar que saiu do ChatGPT Search — para respostas de Search você precisa do OAI-SearchBot permitido.robots.txt certo, WAF hostil — regras de “block AI bots” no Cloudflare / AWS WAF podem derrubar crawlers de busca antes de lerem o Allow. Faça whitelist por user-agent e IPs publicados quando o vendor fornecer.curl não mostra o texto da resposta, muitos crawlers também não vão.llms.txt como controle de acesso — ele orienta; não aplica.Google-Extended e ainda esperar grounding no Gemini — esse token cobre treinamento e grounding do Gemini, não o ranking do Search.Invista em GEO quando você publica expertise pública (docs, tutoriais, comparações, pesquisa) e quer tráfego de referência ou citação de marca no ChatGPT, Claude, Perplexity, Copilot ou Gemini.
Despriorize (ou opte out por completo) quando o produto é privado, paywalled, sensível juridicamente, ou você deliberadamente não quer reuso em treino / engines de resposta — então bloqueie os bots relevantes e aceite menor visibilidade em IA.
Não. Segundo a OpenAI, a visibilidade no Search é governada pelo OAI-SearchBot. O GPTBot é o crawler orientado a treinamento. Você pode bloquear GPTBot e ainda permitir OAI-SearchBot.
A OpenAI documenta parceiros de busca de terceiros (incluindo Bing) e o próprio OAI-SearchBot. Faça os dois: permita OAI-SearchBot e mantenha presença saudável nos grandes índices. Não dependa de um blog secundário que afirme dependência exclusiva de Bing ou Google.
llms.txt faz o ChatGPT me citar?Não há compromisso público das grandes labs de que o llms.txt controle ranking de citações no ChatGPT. Ainda vale publicar para docs e UX de agentes. Citações continuam dependendo de acesso de crawl, indexabilidade e qualidade do conteúdo.
Não automaticamente. Decida por pipeline: busca/citação vs treinamento vs fetch do usuário. Muitos sites de conteúdo permitem bots de busca, decidem conscientemente sobre treinamento e mantêm paths sensíveis bloqueados para todos.
Não — Server Components e as convenções de Metadata / sitemap / robots combinam bem com HTML rastreável. O problema vem de padrões só no cliente, não do App Router em si.
Para aparecer no ChatGPT Search e em outras respostas de LLM: permita os crawlers de busca, não deixe o WAF anular o robots.txt, entregue HTML rastreável no Next.js, envie sitemaps (e IndexNow onde ajudar) e escreva páginas que respondam perguntas específicas com clareza. Opcionalmente adicione llms.txt como mapa curado. Opcionalmente bloqueie bots de treinamento se essa for a política — sem confundi-los com bots de busca.
Neste sprint: se faltar a regra de Allow do OAI-SearchBot, publique-a. O resto acumula em cima de ser fetchável.