SEO Técnico

JavaScript SEO: SSR, CSR e o que o Googlebot realmente renderiza

Como o Google rastreia, renderiza e indexa sites em JavaScript, a diferença entre CSR, SSR e SSG, por que os robôs de IA não executam JS e como testar.

Neste artigo
TL;DRResumo em 30 segundos

O Google processa páginas em JavaScript em três fases: rastreamento, renderização e indexação. Ele executa JavaScript com um Chromium atualizado, mas a renderização entra em uma fila e nem todo robô faz isso: os robôs de IA, como os da OpenAI, da Anthropic e da Perplexity, leem só o HTML. Por isso, o conteúdo importante, os links e as meta tags devem estar no HTML que o servidor entrega, com SSR ou SSG, e o JavaScript deve entrar para a interação.

  • 1CSR puro (o HTML chega vazio e o JavaScript monta a página) funciona no Google, mas deixa o site invisível para a maioria dos robôs de IA.
  • 2O Google só segue links que são elementos <a> com href; botões com onClick não são descobertos.
  • 3noindex no HTML original faz o Google pular a renderização: removê-lo depois com JavaScript pode não funcionar.

O que é JavaScript SEO?

É a parte do SEO técnico que garante que páginas construídas ou alteradas com JavaScript sejam rastreadas, renderizadas e indexadas corretamente. Em sites com React, Vue, Angular ou qualquer framework moderno, o conteúdo que o usuário vê pode não existir no HTML que o servidor entrega. E o que não existe para o robô não ranqueia nem é citado.

O problema não é o JavaScript em si. É a pergunta: o conteúdo importante depende de JavaScript para aparecer? Se a resposta é sim, cada robô que não executa JavaScript, ou que executa com atraso, vê uma versão incompleta do site.

Esse é o tema que eu ensino no curso de JavaScript SEO e HTML Semântico da EducaSEO. O princípio que atravessa todo o curso é simples: conferir a página no código-fonte, onde o robô começa, e não só no DevTools, onde tudo já foi montado pelo JavaScript.

Como o Googlebot processa uma página em JavaScript?

Em três fases: rastreamento, renderização e indexação. A renderização é a fase que o JavaScript acrescenta, e é onde as coisas dão errado.

  1. Rastreamento: o Googlebot baixa o HTML da URL e confere o robots.txt. Os links <a href> encontrados nesse HTML entram na fila de rastreamento.
  2. Renderização: páginas com status 200 entram em uma fila de renderização. Quando há recursos, o Web Rendering Service executa o JavaScript em um Chromium atualizado e gera o HTML final. Segundo o Google, a página pode ficar na fila por alguns segundos ou mais.
  3. Indexação: o Google usa o HTML renderizado para indexar o conteúdo e descobrir novos links.
FaseO que o Google usaO que pode dar errado
RastreamentoHTML de origemLinks que não são <a href>, recursos bloqueados no robots.txt
RenderizaçãoJavaScript executado no ChromiumErros de JS, chamadas de API lentas, conteúdo que só aparece após interação
IndexaçãoHTML renderizadonoindex no HTML original, canonical divergente, soft 404

Qual a diferença entre CSR, SSR e SSG?

A diferença é onde o HTML é montado: no navegador (CSR), no servidor a cada visita (SSR) ou no build, antes de qualquer visita (SSG). Para SEO, o que importa é se o conteúdo chega pronto no HTML.

EstratégiaComo funcionaHTML de origemPara SEO
CSR (client-side rendering)O servidor manda um HTML vazio e o JS monta a páginaVazio ou quaseArriscado: depende da renderização do Google e some para robôs de IA
SSR (server-side rendering)O servidor monta o HTML a cada requisiçãoCompletoSeguro; exige servidor e cuidado com performance
SSG (static site generation)O HTML de cada página é gerado no buildCompletoO mais seguro e rápido, ideal para conteúdo
ISR / regeneração incrementalPáginas estáticas regeneradas de tempos em temposCompletoBom para catálogos grandes que mudam
Renderização dinâmicaHTML pré-renderizado só para robôsCompleto para robôsPaliativo; o Google não recomenda mais

Em todas as estratégias com HTML completo, o JavaScript ainda roda no navegador para deixar a página interativa. Esse processo se chama hidratação: o framework "assume" o HTML que já chegou pronto, em vez de montar tudo do zero.

Este blog é um exemplo de SSG: cada post é gerado como HTML completo no build, com o texto, os links, as meta tags e os dados estruturados, e o React hidrata a página no navegador para o sumário, o compartilhamento e as animações.

Por que os robôs de IA mudaram a conta?

Porque os principais robôs de IA não executam JavaScript: para eles, um site em CSR é uma página vazia. Uma análise da Vercel com a MERJ, sobre o tráfego de robôs na rede da Vercel, mostrou que os robôs da OpenAI, o ClaudeBot da Anthropic e o PerplexityBot baixam arquivos JavaScript, mas não os executam.

RobôExecuta JavaScript?Efeito em um site CSR
GooglebotSim, com Chromium atualizado, em filaIndexa, com atraso e risco de erros
Robôs da OpenAI (GPTBot, OAI-SearchBot)NãoVê a página vazia
ClaudeBot (Anthropic)NãoVê a página vazia
PerplexityBotNãoVê a página vazia

Antes, dava para argumentar que "o Google renderiza, então tudo bem". Com a busca nas IAs, essa conta não fecha: um site que depende de JavaScript para mostrar o conteúdo fica fora das respostas do ChatGPT, do Claude e do Perplexity. Isso pesa diretamente no GEO, porque a IA só cita o que consegue ler. E, antes mesmo da renderização, o robô precisa passar pelo CDN, como mostra o post sobre o Cloudflare e os robôs de IA.

Quais erros de JavaScript mais prejudicam o SEO?

Links que não são links, conteúdo que só aparece após interação, meta tags só no JavaScript e páginas de erro com status 200. A maioria vem de decisões de desenvolvimento que funcionam para o usuário e falham para o robô.

ErroPor que prejudicaComo corrigir
Navegação com <div onClick> ou <button>O Google só segue <a> com hrefUsar <a href="/pagina"> e interceptar o clique no JS, se preciso
Rotas com # (/#/produtos)Fragmentos não são resolvidos de forma confiávelURLs reais com a History API (pushState)
Conteúdo carregado só no clique ou na rolagemO Google não clica nem rola como uma pessoaConteúdo importante no HTML; abas e acordeões com o texto já no DOM
Title, canonical e robots só via JSRisco de divergência entre o HTML original e o renderizadoMeta tags no HTML do servidor; se mudar no JS, manter o mesmo valor
SPA que mostra "página não encontrada" com status 200Soft 404: o Google indexa páginas de erroRota que responde 404 de verdade ou noindex nas páginas de erro
Bundle sem hash no nomeO renderizador pode usar arquivos desatualizadosNome com impressão digital (main.2bb85551.js) e cache longo
Recursos de JS ou API bloqueados no robots.txtO renderizador não consegue montar a páginaLiberar os recursos necessários para a renderização

O caso das animações que escondem conteúdo

Um erro menos óbvio aconteceu neste próprio site. Os blocos abaixo da dobra tinham uma animação de entrada: começavam invisíveis (opacity: 0) e apareciam conforme a pessoa rolava. Na captura de tela do teste de URL do Search Console, o resumo do post, o bloco do autor e os relacionados apareciam vazios, e na home os contadores saíam zerados.

O motivo: o renderizador do Google não rola a página como uma pessoa e não espera as transições terminarem. O texto estava no HTML, mas aparecia como oculto na renderização. A correção foi desligar essas animações para os robôs que renderizam (Googlebot, ferramenta de teste do Search Console, Bing e Lighthouse), entregando a eles a página exatamente como o HTML. O conteúdo é o mesmo para todos, só sem a animação.

Como testar se o Google está vendo o conteúdo?

Compare o HTML de origem com o HTML renderizado e confira a captura de tela no Search Console. Cinco testes cobrem quase todos os casos:

  1. Código-fonte (Ctrl+U): o texto principal, os links e as meta tags estão no HTML que o servidor entrega? Se não, eles dependem de JavaScript.
  2. Teste do URL ativo no Search Console: na Inspeção de URL, veja o HTML renderizado, a captura de tela e, em "Mais informações", os recursos que não carregaram e os erros de JavaScript.
  3. Navegador com JavaScript desativado: desative o JavaScript no DevTools e recarregue. O que sumir é o que os robôs de IA não veem.
  4. Teste de pesquisa aprimorada: confere se os dados estruturados gerados por JavaScript aparecem para o Google.
  5. Rastreador com e sem renderização: ferramentas como o Screaming Frog rastreiam o site nos dois modos. A diferença de conteúdo e de links entre eles mostra o que depende de JavaScript.

Um teste rápido no terminal mostra o que um robô sem JavaScript recebe:

bash
curl -s https://seusite.com.br/produto | grep -c "Nome do produto"

Se o resultado for 0, o nome do produto não está no HTML de origem.

Qual estratégia escolher?

SSG para conteúdo, SSR para páginas que mudam a cada visita e CSR só para áreas logadas ou ferramentas que não precisam ranquear. A maioria dos frameworks atuais permite misturar as estratégias por rota.

Tipo de páginaEstratégia recomendada
Blog, guias, páginas institucionaisSSG
Categorias e produtos de e-commerceSSG com regeneração ou SSR, conforme o volume e a frequência de mudança
Resultados de busca interna, páginas personalizadasSSR (e, em geral, noindex na busca interna)
Painel do cliente, área logada, ferramentas internasCSR, sem preocupação com indexação

Para quem quer ir além da indexação, o próximo passo é deixar o site utilizável por agentes de IA, que é a proposta do WebMCP.

Quais erros evitar?

ErroO que fazer no lugar
Conferir a página só no DevToolsComparar o código-fonte (Ctrl+U) com o HTML renderizado
Achar que "o Google renderiza, então está tudo bem"Lembrar que os robôs de IA não executam JavaScript
Links com onClick sem href<a href> com URL real
noindex no HTML que o JS remove depoisNunca colocar noindex em página que deve ser indexada
Usar renderização dinâmica em projeto novoSSR, SSG ou hidratação
Página de erro com status 200Status 404 ou noindex
Animações que escondem conteúdo para robôsDesligar para os robôs ou não esconder conteúdo importante

Checklist rápido

0 de 8 itens marcados

FAQ

Perguntas frequentes

Sim. O Google renderiza as páginas com uma versão atualizada do Chromium e indexa o conteúdo gerado por JavaScript. Mas a renderização entra em uma fila, que pode levar de segundos a mais tempo, e erros no JavaScript podem impedir que o conteúdo apareça. Por isso, o Google ainda recomenda renderização no servidor ou pré-renderização.

No CSR (client-side rendering), o servidor entrega um HTML quase vazio e o navegador monta a página executando JavaScript. No SSR (server-side rendering), o servidor entrega o HTML já com o conteúdo, e o JavaScript só adiciona a interação. Para SEO, o SSR é mais seguro, porque qualquer robô lê o conteúdo sem executar JavaScript.

Os principais não. Uma análise da Vercel com a MERJ mostrou que os robôs da OpenAI, da Anthropic (ClaudeBot) e da Perplexity baixam arquivos JavaScript, mas não os executam. Um site em CSR puro aparece para eles como uma página vazia, o que prejudica a presença nas respostas do ChatGPT, do Claude e do Perplexity.

Não. A renderização dinâmica, em que o servidor entrega uma versão pré-renderizada só para robôs, é tratada pelo Google como uma solução paliativa, e não como uma recomendação. O caminho indicado é SSR, SSG ou hidratação, que entregam o mesmo HTML completo para pessoas e robôs.

Use o Testar URL ativo da Inspeção de URL no Search Console e confira o HTML renderizado e a captura de tela. Compare com o código-fonte da página (Ctrl+U): se um texto importante só aparece no HTML renderizado, ele depende de JavaScript para existir.

Fontes e referências

  1. Google Search Central: noções básicas de SEO para JavaScript
  2. Google Search Central: renderização dinâmica como solução paliativa
  3. Vercel: The rise of the AI crawler
Patrick Perdigão
Escrito por
Patrick Perdigão
Especialista de SEO na Omie · Instrutor na Alura · Professor na EducaSEO

Mais de 8 anos em SEO técnico e crescimento orgânico. Formado em Marketing Digital & Data Science pela FIAP.