This page is also available in English.

Voltar aos artigos

Como fazer seu site Next.js aparecer no ChatGPT (e em qualquer LLM)

Publicado em 11 min de leitura

  • Next.js
  • SEO
  • ChatGPT
  • LLMs
  • GEO
MacBook em uma mesa de madeira com linhas de código na tela

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.

Como LLMs encontram o seu site

Trate “aparecer em um LLM” como três pipelines separados:

PipelineO que fazBots / tokens típicos
Crawl de treinamentoColeta páginas públicas que podem entrar em treinos futurosGPTBot, ClaudeBot, Google-Extended (token), CCBot da Common Crawl
Índice de busca / respostasConstrói ou atualiza a recuperação para que respostas possam citar suas URLsOAI-SearchBot, Claude-SearchBot, PerplexityBot, Googlebot / Bingbot clássicos (e parceiros)
Fetch disparado pelo usuárioBaixa 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.

OpenAI: os bots que decidem a visibilidade no ChatGPT

Segundo o overview de crawlers da OpenAI:

OAI-SearchBot — citações no ChatGPT Search

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.

GPTBot — treinamento, não opt-out de Search

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.

ChatGPT-User — fetches ao vivo iniciados pelo usuário

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.

OAI-AdsBot

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:

Text
User-agent: OAI-SearchBot
Allow: /

User-agent: GPTBot
Disallow: /

Outras engines de resposta (mesma ideia, nomes diferentes)

Anthropic (Claude)

O help center da Anthropic (atualizado em abril de 2026) define três bots:

  • ClaudeBot — possível contribuição ao treinamento de modelos
  • Claude-SearchBot — indexa conteúdo para qualidade de busca; desabilitá-lo pode reduzir visibilidade nos resultados
  • Claude-User — fetches orientados pelo usuário; desabilitá-lo pode reduzir visibilidade em buscas dirigidas pelo usuário

A 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.

Perplexity

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.

Google Gemini vs Google Search

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).

Next.js: configure o app/robots.ts

O 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:

TypeScript
// 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.

Sitemap, Bing, Google e frescor

Crawlers precisam de URLs para descobrir. O Next.js gera /sitemap.xml a partir de app/sitemap.ts (docs):

TypeScript
// 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:

  1. Google Search Console — verifique a propriedade, envie o sitemap, corrija erros de crawl.
  2. Bing Webmaster Tools — verifique (muitas vezes dá para importar do GSC) e envie o mesmo sitemap. Em fevereiro de 2026 a Microsoft lançou o preview de AI Performance no Bing Webmaster Tools, com citações em Copilot, resumos de IA do Bing e algumas integrações parceiras — telemetria útil de GEO nas superfícies Microsoft; não trate como dashboard completo de citações do ChatGPT a menos que a Microsoft diga isso.
  3. IndexNow — notifique engines participantes (Bing, Yandex e outras listadas no site) quando URLs forem adicionadas, atualizadas ou removidas, para priorizar conteúdo fresco além do crawl passivo.

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.

Faça o HTML valer o crawl (específico de Next.js)

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:

  • Prefira Server Components (ou SSR) para corpos de artigo, docs e copy de produto.
  • Coloque <title>, meta description e Open Graph reais via Metadata API — eles viajam com o documento.
  • Evite esconder a resposta principal atrás de fetches só no cliente, infinite scroll sem URLs rastreáveis ou murros de auth no conteúdo que você quer citado.
  • Mantenha canônicas estáveis; use alternates.languages no sitemap quando houver locales.
  • Responda 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.

Forma de conteúdo que engines conseguem citar

Acesso técnico é necessário, mas não suficiente. Páginas que tendem a ser citadas:

  • Respondem a pergunta cedo, em linguagem clara (depois aprofundam)
  • Usam ## / ### descritivos que batem com como as pessoas perguntam
  • Separam fato de opinião; linkam fontes primárias
  • Ficam atualizadas — números de versão velhos são ignorados ou contraditos
  • Evitam listicles rasos que todo mundo já parafraseou

Você 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 ranking

A 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:

TypeScript
// 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.

Erros comuns

  1. Bloquear GPTBot e achar que saiu do ChatGPT Search — para respostas de Search você precisa do OAI-SearchBot permitido.
  2. 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.
  3. Conteúdo só no cliente — se o curl não mostra o texto da resposta, muitos crawlers também não vão.
  4. Sem sitemap / nunca enviado ao Bing ou Google — a descoberta trava.
  5. Tratar llms.txt como controle de acesso — ele orienta; não aplica.
  6. Bloquear Google-Extended e ainda esperar grounding no Gemini — esse token cobre treinamento e grounding do Gemini, não o ranking do Search.
  7. Esperar milagre da noite para o dia — a OpenAI fala em ~24h para ajustes de robots no Search; índice e reputação ainda pedem tempo e qualidade.

Quando isso importa (e quando não)

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.

Perguntas frequentes

Bloquear o GPTBot me esconde do ChatGPT?

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.

Só o Bing basta para aparecer no ChatGPT?

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.

O 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.

Devo liberar todo bot de IA?

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.

O App Router prejudica SEO ou visibilidade em IA?

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.

Conclusão

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.

Referências

  1. Overview of OpenAI Crawlers — OpenAI Developers (acesso ago 2026)
  2. ChatGPT Search — OpenAI Help Center
  3. Does Anthropic crawl data from the web… — Anthropic / Claude Help Center (abr 2026)
  4. Perplexity Crawlers — Perplexity Docs
  5. Google’s common crawlers (incl. Google-Extended) — Google for Developers
  6. The /llms.txt file — proposta de Jeremy Howard / Answer.AI
  7. Next.js robots.txt — Next.js Docs
  8. Next.js sitemap — Next.js Docs
  9. Introducing AI Performance in Bing Webmaster Tools — Bing Webmaster Blog (fev 2026)
  10. IndexNow — protocolo IndexNow
  11. OAI-SearchBot IP ranges — OpenAI
  12. GPTBot IP ranges — OpenAI

Comentários