JavaScript SEO: como o Google rastreia e renderiza sites em JS

Ricardo Nakamura

Escrito por

Tempo de leitura 8 min de leitura

Resumo rápido

  • JavaScript SEO é a parte do SEO técnico que garante que sites construídos com JavaScript possam ser rastreados, renderizados e indexados pelos buscadores.
  • O Google processa páginas em JavaScript em três fases: rastreamento, renderização e indexação. A renderização é feita por um Chromium headless sempre atualizado (o Web Rendering Service).
  • O Google renderiza JavaScript, mas outros robôs não: os rastreadores de IA como GPTBot, ClaudeBot e PerplexityBot não executam JS, segundo estudo da Vercel com a MERJ.
  • A recomendação oficial é usar renderização no servidor, renderização estática ou hidratação. A renderização dinâmica é tratada pelo Google como paliativo, não como solução.
  • Links precisam ser <a href> de verdade, e noindex no HTML inicial pode impedir a renderização da página.

O que é JavaScript SEO

JavaScript SEO é o conjunto de práticas de SEO técnico que garante que páginas construídas ou modificadas por JavaScript sejam rastreadas, renderizadas e indexadas corretamente pelos buscadores e por outros robôs, como os rastreadores de IA.

O tema ganhou peso com frameworks como React, Vue, Angular, Next.js e Nuxt. Em um site tradicional, o servidor entrega um HTML pronto. Em muitas aplicações modernas, o servidor entrega um HTML quase vazio, com uma <div id="root"> e alguns arquivos .js. Quem monta a página é o navegador, depois de baixar e executar esses scripts.

Para o usuário, o resultado pode ser idêntico. Para um robô, não: se ele não executa JavaScript, enxerga uma página em branco. Se executa, precisa de mais tempo e recursos para chegar ao conteúdo. JavaScript SEO trata justamente dessa diferença entre o que o servidor entrega e o que o usuário vê.

Como o Google rastreia, renderiza e indexa JavaScript

A documentação do Google Search Central descreve o processamento de aplicações JavaScript em três fases principais.

  1. Rastreamento
    O Googlebot pega uma URL da fila de rastreamento, verifica se o robots.txt permite o acesso e baixa o HTML. Nessa etapa ele já extrai os links presentes no código e os envia para a fila. Páginas e arquivos bloqueados no robots.txt não são renderizados.
  2. Renderização
    As páginas com status 200 entram em uma fila de renderização. Quando os recursos do Google permitem, um Chromium headless carrega a página e executa o JavaScript. Segundo o Google, a página pode ficar alguns segundos nessa fila, mas pode levar mais tempo. Depois de renderizada, o Googlebot analisa o HTML resultante e encontra novos links.
  3. Indexação
    O Google usa o HTML renderizado para indexar a página. É esse HTML, e não o código bruto, que define o que entra no índice.

O Web Rendering Service (WRS)

O componente que faz a renderização é chamado de Web Rendering Service, ou WRS. Na prática, é um navegador Chromium sem interface gráfica. O Google afirma que roda JavaScript com uma versão “evergreen” do Chromium, isto é, sempre atualizada. Recursos modernos de JavaScript funcionam normalmente.

Um detalhe do WRS importa para quem desenvolve: o Googlebot faz cache agressivo dos recursos e pode ignorar cabeçalhos de cache, usando um arquivo JS ou CSS desatualizado. A solução indicada pelo Google é o fingerprinting: incluir um hash do conteúdo no nome do arquivo (por exemplo, main.2bb85551.js), de modo que cada versão nova gere uma URL nova.

Quanto tempo a renderização demora?

Existe um mito antigo de que o Google leva dias ou semanas para renderizar páginas em JavaScript. Um estudo publicado em julho de 2024 pela Vercel em parceria com a agência MERJ analisou mais de 100 mil requisições do Googlebot, principalmente no site nextjs.org, em abril de 2024. Os resultados:

Percentil Atraso entre rastreamento e renderização
p50 (mediana) 10 segundos
p75 26 segundos
p90 cerca de 3 horas
p99 cerca de 18 horas

O mesmo estudo registrou renderização completa em 100% das páginas HTML com status 200 indexáveis, inclusive com interações complexas em JS. Ressalva dos autores: a maior parte dos dados vem de um único site, e o resultado pode não se repetir em todos os casos.

Na prática: o Google consegue renderizar JavaScript, e na maioria das vezes rápido. O problema costuma ser um detalhe de implementação que quebra a renderização, esconde links ou manda sinais contraditórios.

Renderização no servidor x no cliente

A decisão técnica mais importante em JavaScript SEO é onde o HTML é montado. O artigo “Rendering on the Web”, do web.dev, define as principais abordagens:

Abordagem Como funciona Impacto em SEO
CSR (client-side rendering) O navegador recebe um HTML mínimo e monta a página executando JavaScript. Pode ser indexado pelo Google, mas exige testes extras. Robôs que não executam JS não veem o conteúdo.
SSR (server-side rendering) O servidor gera o HTML completo a cada requisição. Conteúdo e links chegam prontos no HTML. Pode aumentar o TTFB, já que o servidor precisa montar a página.
Renderização estática (SSG) Um arquivo HTML por URL é gerado antecipadamente, no momento do build. A opção mais segura para conteúdo que muda pouco (blog, páginas institucionais). TTFB rápido e estável.

O que é hidratação

Hidratação (hydration) é o processo em que o JavaScript do cliente “assume” um HTML que já veio pronto do servidor, conectando eventos e estado para torná-lo interativo. É o modelo usado por frameworks como Next.js e Nuxt: o robô recebe o HTML completo, e o usuário ganha a interatividade de uma aplicação.

A hidratação tem custo. O web.dev alerta que a reidratação pode ter impacto negativo significativo em TBT e INP, mesmo melhorando a primeira exibição de conteúdo. Ou seja, o SSR resolve o problema de visibilidade, mas um volume grande de JavaScript para hidratar ainda pode piorar as Core Web Vitals, especialmente o INP.

E a renderização dinâmica?

Renderização dinâmica é entregar HTML pré-renderizado para robôs e a versão em JavaScript para usuários, detectando o user agent. Hoje o Google é direto: a renderização dinâmica é um paliativo e não uma solução recomendada, porque adiciona complexidade e consumo de recursos. No lugar dela, o Google recomenda renderização no servidor, renderização estática ou hidratação.

Dica: você não precisa escolher uma abordagem para o site inteiro. Um padrão comum é renderizar no servidor ou de forma estática tudo o que precisa ranquear (páginas de produto, categorias, artigos) e deixar em CSR as áreas logadas, painéis e filtros que não precisam aparecer na busca.

Mesmo quando a renderização funciona, alguns padrões de código impedem o Google de entender a página. Os mais importantes estão na documentação oficial.

Links precisam ser <a href>

O Google só descobre links de forma confiável em elementos <a> com atributo href contendo uma URL. Links inseridos por JavaScript são aceitos, desde que sigam esse formato. Isso é a base de uma boa linkagem interna em aplicações modernas.

Código Rastreável?
<a href="/produtos/tenis"> Sim (recomendado)
<a href="/produtos/tenis" onclick="goTo('tenis')"> Sim, porque o href existe
<a routerLink="produtos/tenis"> Não é confiável (sem href)
<span href="/produtos/tenis"> Não é confiável (não é um elemento <a>)
<a onclick="goto('/produtos/tenis')"> Não é confiável (URL só no evento)
<a href="javascript:goTo('tenis')"> Não recomendado

Use a History API, não fragmentos com #

SPAs antigas usavam URLs como /#/produtos. O Google considera isso má prática, porque não resolve esses fragmentos de forma confiável como páginas diferentes. O correto é usar caminhos reais (/produtos) com a History API (pushState), para que cada tela tenha uma URL própria e rastreável. Um sitemap XML atualizado ajuda na descoberta: o estudo Vercel/MERJ observou que ele reduz bastante as diferenças de tempo de descoberta entre os padrões de renderização.

Noindex, canonical e códigos de status

  • Noindex: se o Google encontra uma tag noindex no HTML inicial, pode pular a renderização e a execução do JavaScript. Um script que remove o noindex depois não vai funcionar. Se a página deve ser indexada, não coloque noindex no código original.
  • Canonical: o ideal é declarar a tag canonical no HTML. Se for preciso injetá-la via JavaScript, ela deve ser a única tag rel="canonical" da página e não deve contradizer o HTML original.
  • Status HTTP: todas as páginas com status 200 vão para a fila de renderização; em respostas diferentes de 200, a renderização pode ser pulada. Use 404 para páginas inexistentes, 401 para áreas com login e redirecionamentos para URLs que mudaram.
  • Soft 404 em SPAs: com roteamento no cliente, toda URL costuma responder 200, inclusive as que não existem. O Google sugere duas saídas: redirecionar via JavaScript para uma URL que responde 404 no servidor (como /nao-encontrado) ou inserir um meta robots noindex nas telas de erro.

IAs e rastreadores que não executam JavaScript

Hoje o site também é lido por robôs de IA que alimentam ChatGPT, Claude, Perplexity e outros assistentes, e eles funcionam de outro jeito.

O estudo “The rise of the AI crawler”, publicado pela Vercel com a MERJ em dezembro de 2024, analisou o tráfego de rastreadores na rede da Vercel. A conclusão principal: nenhum dos grandes rastreadores de IA testados renderiza JavaScript, incluindo GPTBot (OpenAI), ClaudeBot (Anthropic) e PerplexityBot. O ChatGPT e o Claude até baixam arquivos JS (11,50% e 23,84% das requisições, respectivamente), mas não os executam.

Rastreador Executa JavaScript? Observação
Googlebot (Busca e Gemini) Sim O Gemini usa a infraestrutura do Googlebot
AppleBot Sim Usa um rastreador baseado em navegador
GPTBot (OpenAI) Não Baixa arquivos JS, mas não executa
ClaudeBot (Anthropic) Não Baixa arquivos JS, mas não executa
PerplexityBot Não Lê apenas o HTML inicial

Fonte: Vercel e MERJ, dezembro de 2024. Comportamentos podem mudar; teste periodicamente.

A consequência é simples: se o texto principal, os preços ou as especificações de um produto só aparecem depois da execução do JavaScript, esses assistentes simplesmente não veem essa informação. O estudo observa que conteúdo presente no HTML inicial, inclusive dados em JSON embutidos, ainda pode ser aproveitado.

Isso tem efeito direto em estratégias de GEO (Generative Engine Optimization). Já no ecossistema do Google, o cenário é diferente: AI Overviews e Modo IA usam o mesmo índice da busca, e o Google afirma que não há requisitos adicionais para aparecer neles. Entre as boas práticas listadas está garantir que o conteúdo importante esteja disponível em forma de texto e que o rastreamento seja permitido no robots.txt e na infraestrutura de CDN ou hospedagem.

Regra prática para 2026: trate o HTML inicial como a versão “oficial” da página. Tudo o que você quer que buscadores e IAs leiam (texto principal, título, meta description, canonical, links de navegação, dados estruturados) deve estar nele. Use JavaScript para melhorar a experiência, não para entregar o conteúdo essencial.

Como auditar um site em JavaScript

Uma auditoria de JavaScript SEO compara o que o servidor entrega com o que o navegador monta. Este roteiro cobre o essencial:

  1. Compare o código-fonte com o DOM renderizado
    Abra a página, veja o código-fonte (Ctrl+U) e procure o texto principal e os links. Depois compare com o elemento inspecionado no DevTools. O que só aparece no segundo depende de JavaScript.
  2. Desative o JavaScript no navegador
    Com o JS desativado, você vê algo próximo do que um rastreador de IA enxerga. Se a página fica em branco ou sem o conteúdo principal, há risco de invisibilidade fora do Google.
  3. Use a inspeção de URL do Search Console
    No Google Search Console, rode “Testar o URL publicado” e abra “Ver a página testada”. Ali estão o HTML, a captura de tela, os recursos carregados e a saída do console JavaScript, que revela erros de script durante a renderização.
  4. Verifique o robots.txt
    Confirme que arquivos JS, CSS e endpoints de API necessários para montar a página não estão bloqueados. Recurso bloqueado é página renderizada pela metade.
  5. Teste a versão mobile
    Com a indexação mobile-first, o Google rastreia principalmente com o agente de smartphone. Componentes que só carregam no desktop, ou menus que só existem após um toque, podem ficar fora do índice.

Erros comuns de JavaScript SEO

  • Conteúdo carregado só após interação: textos que aparecem apenas depois de clicar, rolar ou passar o mouse podem não ser vistos, já que o robô não interage com a página como um usuário.
  • Title e meta description iguais em todas as rotas: em SPAs, é comum o HTML inicial ter o mesmo title para todas as URLs, com troca apenas via JS.

Perguntas Frequentes

O Google consegue indexar sites feitos em React, Vue ou Angular?

Sim. O Google renderiza JavaScript com um Chromium atualizado e consegue indexar conteúdo gerado no cliente. O risco está nos detalhes de implementação: links sem href, URLs com #, noindex no HTML inicial, erros de script e recursos bloqueados.

Preciso migrar para renderização no servidor?

Não é obrigatório para o Google, mas é a recomendação oficial (junto com renderização estática e hidratação) e a forma mais segura de ser lido também por rastreadores de IA, que não executam JavaScript. Priorize as páginas que precisam ranquear.

O ChatGPT consegue ler meu site em JavaScript?

Segundo o estudo da Vercel com a MERJ (dezembro de 2024), o GPTBot baixa arquivos JavaScript, mas não os executa. Conteúdo que só aparece depois da renderização tende a ficar invisível para ele. O que estiver no HTML inicial pode ser lido.

Como saber o que o Google vê na minha página?

Use a ferramenta de inspeção de URL do Search Console, com o teste em tempo real. Ela mostra o HTML, a captura de tela da página renderizada, os recursos carregados e as mensagens do console JavaScript.

Fontes e referências

  1. Google Search Central. Understand the JavaScript SEO basics.
  2. Google Search Central. Dynamic rendering as a workaround.
  3. Google Search Central. SEO link best practices for Google.
  4. Google Search Central. AI features and your website.
  5. Ajuda do Search Console. Ferramenta de inspeção de URL.
  6. web.dev. Rendering on the Web.
  7. Vercel e MERJ (2024). How Google handles JavaScript throughout the indexing process.
  8. Vercel e MERJ (2024). The rise of the AI crawler.

Sobre o autor

Ricardo Nakamura

Ricardo Nakamura lidera o SEO Next+ da Oxigenweb, departamento dedicado a SEO e GEO (Generative Engine Optimization). Há mais de 5 anos conduz projetos digitais de ponta a ponta para marcas como JBS, Grupo Petrópolis, Caloi e Lufthansa City Center. Escreve sobre processos escaláveis de SEO, busca orientada por IA e como transformar otimização em resultado de negócio.

Ver perfil e todos os artigos de Ricardo →

Deixe seu comentário

dezoito − treze =