JavaScript e crawlers de IA e o HTML que cada robô lê
Entre os robôs de IA já medidos, só os do Google e da Apple executam JavaScript. No teste da Vercel com a MERJ, publicado em dezembro de 2024, GPTBot, ClaudeBot, PerplexityBot e os robôs da Meta e da ByteDance leram apenas o HTML inicial. Uma página renderizada no cliente pode ser indexada pelo Google e continuar vazia para ChatGPT, Claude e Perplexity. Por isso trato a renderização no servidor como pré-requisito de GEO e prefiro confirmar o comportamento de cada robô no log do próprio servidor.
Principais pontos
- Em dezembro de 2024, a Vercel e a MERJ não encontraram execução de JavaScript em nenhum robô de IA da OpenAI, Anthropic, Meta, ByteDance e Perplexity.
- GPTBot e ClaudeBot baixaram arquivos JavaScript sem executá-los, em 11,50% e 23,84% das requisições medidas no nextjs.org.
- O Gemini, pela infraestrutura do Googlebot, e o Applebot renderizaram as páginas no mesmo teste.
- No estudo da Vercel e da MERJ sobre o Googlebot, a renderização levou 10 segundos na mediana e cerca de 18 horas no percentil 99.
- Páginas com noindex no HTML inicial não foram renderizadas pelo Google, então remover a tag por JavaScript não surte efeito.
Quais robôs de IA executam JavaScript?
Os robôs de IA da OpenAI, da Anthropic, da Perplexity, da Meta e da ByteDance não executaram JavaScript no teste que a Vercel publicou com a MERJ em dezembro de 2024. O levantamento cruzou o tráfego da rede da Vercel e do nextjs.org com dois sites de vagas feitos em pilhas diferentes, um em Next.js e outro em framework próprio. Só dois grupos renderizaram as páginas: o Gemini, que aproveita a infraestrutura do Googlebot, e o Applebot, que rastreia com um navegador completo.
| Robô | Empresa | Executa JavaScript |
|---|---|---|
| GPTBot, OAI-SearchBot e ChatGPT-User | OpenAI | Não |
| ClaudeBot | Anthropic | Não |
| PerplexityBot | Perplexity | Não |
| Meta-ExternalAgent | Meta | Não |
| Bytespider | ByteDance | Não |
| CCBot | Common Crawl | Não |
| Googlebot, que atende a Busca e o Gemini | Sim | |
| Applebot | Apple | Sim |
Fonte: Vercel e MERJ, dezembro de 2024. O Microsoft Copilot ficou fora da medição por não ter user agent próprio.
O teste tem quase dois anos, e a falta de um anúncio posterior de renderização por esses robôs não equivale a uma medição nova. Por isso leio a tabela como retrato datado e prefiro confirmar o comportamento no log do próprio servidor.
Baixar o arquivo JavaScript e executar o arquivo JavaScript
O dado do estudo que mais confunde auditoria é que GPTBot e ClaudeBot baixam arquivos JavaScript sem rodá-los. Na amostra do nextjs.org, 11,50% das requisições do robô da OpenAI e 23,84% das do robô da Anthropic foram arquivos .js. Um log cheio de pedidos a bundles parece sinal de renderização. O robô guarda o código como texto, e o conteúdo que aquele componente montaria na tela nunca chega a existir para ele.
A Vercel faz uma ressalva importante para sites em Next.js. Conteúdo que já vem na resposta HTML inicial, como dados JSON embutidos ou o payload de React Server Components, pode ser aproveitado, porque o modelo interpreta texto que não é HTML. Some o que depende de execução no cliente depois do carregamento.
O mesmo levantamento mediu outro custo: 34,82% das requisições do robô do ChatGPT e 34,16% das do Claude caíram em páginas 404, a maioria atrás de arquivos antigos da pasta /static/. Para o Googlebot, a taxa foi de 8,22%.
O Google renderiza e ainda assim recomenda SSR
O Google Search processa páginas JavaScript em três fases, rastreamento, renderização e indexação, com uma versão sempre atualizada do Chromium. A documentação do Search Central, revista em março de 2026, avisa que a página pode passar segundos ou mais na fila de renderização e mantém a recomendação de renderizar no servidor ou pré-renderizar, com o argumento de que nem todo robô executa JavaScript.
A fila foi medida. No estudo anterior da Vercel com a MERJ, com mais de 37 mil pares de log e sinal de renderização em abril de 2024, o atraso ficou em 10 segundos na mediana, cerca de 3 horas no percentil 90 e cerca de 18 horas no percentil 99. O mesmo estudo mostrou que página com noindex no HTML inicial não foi renderizada, então JavaScript que remove a tag não tem efeito.
No estudo anterior da Vercel com a MERJ, com mais de 37 mil pares de log e sinal de renderização em abril de 2024, o atraso ficou em 10 segundos na mediana, cerca de 3 horas no percentil 90 e cerca de 18 horas no percentil 99.
Lucas Ferraz, especialista em SEO
O guia de recursos de IA do Google diz que AI Overviews e AI Mode não têm requisito técnico além dos da Busca. Na prática, uma página renderizada só no cliente pode entrar no índice do Google, aparecer como link de apoio no AI Mode e continuar vazia para ChatGPT, Claude e Perplexity.
SSR e CSR diante de cada superfície
A escolha entre SSR, SSG e CSR decide quais superfícies de IA recebem o texto da página. Renderização no servidor, geração estática e regeneração incremental entregam o HTML completo na primeira resposta, legível por qualquer robô. Renderização só no cliente entrega uma casca com uma div raiz e tags de script, que Google e Apple completam e os demais leem vazia.
Três elementos costumam ficar no cliente sem ninguém perceber:
- JSON-LD injetado por gerenciador de tags. O Google aceita e o teste de resultados avançados aprova, porque renderiza. Para robôs sem execução, o grafo não existe.
- Canonical e meta robots alterados por script. O Google pede que o JavaScript nunca mude o canonical definido no HTML original.
- Links de navegação montados depois do carregamento. Sem href no HTML inicial, o robô que não executa perde o caminho para as páginas internas.
Essa camada de acesso é a primeira da ordem de correção que a agência usa em como corrigir erros de Generative Engine Optimization, antes de qualquer ajuste de texto.
Como testar o que cada robô recebe?
O teste mais barato compara a resposta HTML crua com o DOM renderizado. Uma frase que só existe no conteúdo principal serve de marcador:
curl -s -A "GPTBot" https://exemplo.com/pagina/ | grep -c "frase que só existe no conteúdo"
Resultado zero indica que o texto depende de execução. Depois, vale comparar o código-fonte com o DOM nas ferramentas do navegador: o que aparece só no segundo não existe para os robôs sem renderização.
Para confirmar execução por robô, prefiro o método de sinal que a MERJ usou com o Googlebot. Um script mínimo chama um endereço próprio assim que roda, e o log mostra quem pediu a página e quem disparou o sinal:
<script>
navigator.sendBeacon('/sinal-render?p=' + encodeURIComponent(location.pathname));
</script>
Se o log registra o GPTBot na página e nenhum pedido a /sinal-render com o mesmo user agent, o robô não executou o script. A leitura do log por função, treino, índice e visita a pedido do usuário, está em como identificar crawlers de IA no log do servidor.
O que eu mantenho no HTML da primeira resposta?
Neste site, tudo o que precisa ser citado sai no HTML da primeira resposta: texto, JSON-LD com um grafo por página e links internos. O único arquivo JavaScript alterna o esquema de cores e não toca em conteúdo. Aqui e no site da agência, cada página também tem uma versão em Markdown, servida pelo sufixo /md/ e pelo cabeçalho Accept: text/markdown, detalhada em Markdown para agentes de IA. A decisão vem do teste da Vercel: se só dois grupos de robôs renderizam, o texto que depende de execução fica fora de parte das superfícies de IA sem aviso nenhum.
O que a IA desdobra desta pergunta?
Quando alguém faz esta busca em uma IA, o sistema abre subperguntas antes de responder. Estas são as que apareceram na medição, e onde cada uma é respondida.
Perguntas frequentes
O ChatGPT consegue ler conteúdo carregado por JavaScript?
Pelos robôs de rastreamento, não. No teste da Vercel com a MERJ, de dezembro de 2024, GPTBot, OAI-SearchBot e ChatGPT-User leram só o HTML inicial e baixaram arquivos JavaScript sem executá-los. Texto que aparece apenas depois da execução no navegador fica fora do que esses robôs recebem, mesmo quando o Google indexa a mesma página.
O Gemini e o AI Overviews enxergam páginas renderizadas no cliente?
Enxergam, porque dependem do Googlebot. O Google renderiza com um Chromium sem interface, e o guia de recursos de IA do Search Central não impõe requisito técnico extra para AI Overviews e AI Mode. A renderização leva tempo: no estudo da Vercel com a MERJ, a mediana foi de 10 segundos e o percentil 99, cerca de 18 horas.
JSON-LD injetado por JavaScript é lido pelos robôs de IA?
Só pelos que renderizam. O Google aceita dados estruturados gerados por JavaScript, mas GPTBot, ClaudeBot e PerplexityBot recebem apenas a resposta HTML inicial. Um JSON-LD inserido por gerenciador de tags passa no teste de resultados avançados, que renderiza a página, e continua ausente para os robôs que não executam código.
Fontes citadas
Versão em markdown para agentes de IA: https://lucasferraz.com/blog/javascript-e-crawlers-de-ia/md/