SEO para JavaScript: por que suas páginas ficam invisíveis para o Google
Por Toy Wen Da, Cofundador · Atualizado em · 13 min de leitura
Traduzido do original em inglês. Ler em inglês
SEO para JavaScript é a prática de garantir que o Google e outros mecanismos de busca consigam rastrear, renderizar e indexar conteúdo que o navegador monta com JavaScript em vez de HTML simples. O Google renderiza as páginas em uma etapa separada e atrasada, depois do rastreamento inicial, então o conteúdo pode passar semanas sem ser visto.

Se você criou seu site com React ou Vue, ou com um framework como o Next.js, o intervalo entre "rastreada" e "renderizada" provavelmente é o principal motivo de páginas ficarem sem indexação. A correção geralmente não é complicada quando você sabe em que ponto o processo falha.
O que é SEO para JavaScript e por que ele atrapalha o Google?
SEO para JavaScript é um ramo do SEO técnico focado em um único problema: tornar páginas criadas com JavaScript tão rastreáveis e indexáveis quanto páginas em HTML simples. Um site tradicional em HTML entrega ao Google tudo de que ele precisa em uma única resposta. Um site em JavaScript muitas vezes entrega uma casca quase vazia e monta o conteúdo de verdade no navegador.
O Google consegue executar JavaScript e diz isso há anos. Mas fazer isso consome recursos de processamento, e o Google precisa racioná-los entre bilhões de páginas. É nesse racionamento que os problemas começam.
Como o Google rastreia e indexa uma página em JavaScript
A documentação do Google no Search Central descreve a renderização como uma etapa distinta do rastreamento, e não como algo que acontece na primeira visita. O processo tem três partes:
- Rastreamento: o Googlebot solicita a página e lê o HTML bruto. Em uma página que depende muito de JavaScript, esse HTML pode conter pouco mais que um
<div id="root"></div>e uma tag de script. - Renderização: a página entra em uma fila de renderização, onde o Web Rendering Service do Google, baseado em um mecanismo Chromium sempre atualizado (evergreen), executa o JavaScript para montar a página final.
- Indexação: só depois que a renderização termina o Google indexa o conteúdo, os links e os metadados que encontra.
O Web Rendering Service agora tenta renderizar perto de 100% das páginas HTML que o Google rastreia. Tentar renderizar não é o mesmo que renderizar rápido. O intervalo entre o rastreamento e a renderização pode ir de algumas horas em um site consolidado a várias semanas em um site de menor autoridade, e, para uma página de produto nova ou um artigo sensível ao tempo, isso pode significar perder a janela de tráfego.

O problema da indexação em duas etapas

Esta é a parte que pega a maioria dos donos de site de surpresa. Sua página é rastreada quase de imediato, mas o conteúdo dentro dela só é visto bem mais tarde, isso se chegar a ser visto.
| Etapa | O que acontece | Prazo típico | Impacto no SEO |
|---|---|---|---|
| Rastreamento inicial | O Googlebot busca o HTML bruto e extrai texto estático, links e tags | Imediato | Só o conteúdo independente de JS é indexado de cara |
| Fila de renderização | O Chromium executa o JavaScript e monta a página final | De horas a várias semanas, mais em sites de baixa autoridade | Conteúdo, links e dados estruturados criados por scripts ficam invisíveis até essa etapa terminar |
| Falha de renderização | Um erro de script, um recurso bloqueado ou um timeout impede a conclusão da renderização | Imprevisível | O conteúdo nunca chega a ser indexado |
Vários fatores empurram uma página para o extremo lento desse intervalo: pacotes de JavaScript grandes, scripts bloqueados no robots.txt, erros de JavaScript não tratados, scripts de terceiros que não carregam e baixa autoridade do site. O orçamento de rastreamento (crawl budget) é distribuído de forma desigual, então sites maiores ou mais novos muitas vezes esperam mais na fila.
Renderização no cliente vs. no servidor: qual usar?
Use renderização no servidor (SSR) ou geração de site estático (SSG), e não renderização no cliente (CSR), em qualquer página que você queira indexada. Com CSR, o Google precisa esperar a fila de renderização. Com SSR ou SSG, o Google recebe o HTML pronto na primeira requisição e não há espera nenhuma.
| Abordagem | Como o conteúdo chega ao navegador | Adequação ao SEO | Melhor uso |
|---|---|---|---|
| Renderização no cliente (CSR) | O navegador (ou o Googlebot) executa o JavaScript para montar a página após o carregamento | Fraca para páginas públicas; depende da fila de renderização | Painéis com login, ferramentas internas |
| Renderização no servidor (SSR) | O servidor monta o HTML completo a cada requisição | Forte; o conteúdo está na primeira resposta | Páginas de produto, blogs, landing pages |
| Geração de site estático (SSG) | O HTML é pré-construído no momento do deploy | Forte, e a mais rápida de servir | Sites de marketing, documentação, portfólios |
| Regeneração estática incremental (ISR) | Páginas estáticas que se atualizam em intervalos definidos ou sob demanda | Forte | Catálogos de e-commerce, conteúdo atualizado com frequência |
| Snapshots pré-renderizados para bots | Um snapshot HTML separado é entregue só aos bots | Aceitável como solução de transição, não como correção de longo prazo | Sites CSR legados em migração |
O Google já afirmou que entregar aos bots um snapshot pré-renderizado não é cloaking, desde que bots e usuários acabem vendo conteúdo equivalente. Ele é explícito, porém, ao dizer que isso deve ser uma solução temporária. Manter dois caminhos de renderização lado a lado traz uma complexidade extra que você terá de manter sincronizada indefinidamente.
A maioria das equipes de desenvolvimento acaba num modelo híbrido: SSR ou SSG para tudo o que os mecanismos de busca ou os mecanismos de resposta de IA devem encontrar, e CSR para experiências com login, em que a indexação nunca foi o objetivo. Um projeto em Next.js faz essa escolha página por página, e os detalhes estão neste guia de configurações de SEO do Next.js.

Sinais de que seu site tem um problema de SEO com JavaScript

Você não precisa de um desenvolvedor para identificar os primeiros sinais de alerta. Procure estes padrões no Google Search Console e nas suas análises:
- As páginas continuam como "Descobertas: atualmente não indexadas" (Discovered, currently not indexed) por semanas depois de publicadas.
- A visualização renderizada de uma página no Search Console não mostra texto, links ou imagens que aparecem claramente no navegador.
- Links internos criados como manipuladores
onClickde JavaScript, em vez de tags<a href>de verdade, não aparecem como "linked from" no Search Console. - As tags de título ou meta descriptions nos resultados de busca não correspondem ao que está na página.
- Dados estruturados injetados no lado do cliente não são validados no Teste de Resultados Esperados (Rich Results Test).
- Uma paginação criada a partir do estado do JavaScript, em vez de URLs únicas, impede que as páginas mais profundas sejam rastreadas.
Quando vários desses sinais aparecem juntos, a causa quase sempre é uma lacuna de renderização, e não um problema de conteúdo ou de palavras-chave. Uma auditoria de SEO técnico que compare o HTML renderizado com o bruto vai confirmar isso rapidamente.
O que precisa estar no seu HTML inicial
Por mais que o JavaScript melhore a página depois, alguns elementos precisam existir na primeira resposta em HTML. Sem eles, o Google pode tratar a página como quase vazia durante o rastreamento, mesmo que a versão renderizada pareça completa.
| Elemento | Por que importa para o SEO com JavaScript | Risco se existir só via JS |
|---|---|---|
| Tag de título e meta description | Sinal central de ranqueamento e de taxa de cliques | Pode não aparecer nos resultados de busca por semanas |
| Títulos H1, H2 e H3 | Dão ao Google a estrutura temática da página | Indexação atrasada, perda de elegibilidade para snippets |
| Texto do corpo | Estabelece relevância e profundidade temática | A página parece vazia no primeiro rastreamento |
Links internos (<a href>) |
O caminho de rastreamento que o Googlebot segue até outras páginas | As páginas linkadas podem nunca ser descobertas |
| Dados estruturados (JSON-LD) | Elegibilidade para resultados aprimorados e citações em respostas de IA | Excluídos por completo dos resultados aprimorados |
| Tags canonical | Evitam confusão de conteúdo duplicado | A versão errada da URL é indexada |
Faça uma auditoria de marcação schema junto com as verificações de renderização. O JSON-LD injetado apenas por JavaScript no lado do cliente é um dos itens que mais somem da versão que o Google indexa.
Core Web Vitals: onde o JavaScript causa mais estrago
O JavaScript pesado atrasa a indexação e também deixa a página mais lenta para os visitantes reais, o que pesa contra você como fator de ranqueamento. Os Core Web Vitals do Google medem o tipo de lentidão que scripts não otimizados causam.
| Métrica | O que mede | Limite considerado bom | Causa comum no JavaScript |
|---|---|---|---|
| Largest Contentful Paint (LCP) | A rapidez com que o conteúdo principal aparece | Menos de 2.5 segundos | Pacotes de JS grandes atrasam a renderização do conteúdo visível |
| Interaction to Next Paint (INP) | O quanto a página responde a cliques e toques | Menos de 200 milissegundos | Tarefas longas de JavaScript bloqueiam a thread principal do navegador |
| Cumulative Layout Shift (CLS) | O quanto o layout se mexe durante o carregamento | Menos de 0.1 | Elementos injetados tardiamente pelo JavaScript empurram o conteúdo |
O INP substituiu o First Input Delay como Core Web Vital oficial em março de 2024, uma mudança tratada na documentação do web.dev do Google. Ele é uma medida mais rigorosa e mais realista de responsividade do que o antecessor, e penaliza os scripts de longa duração que sites com muito JavaScript costumam entregar.
Uma meta muito citada é um pacote inicial compactado abaixo de 200KB, com qualquer tarefa acima de 50 milissegundos dividida em partes menores para não bloquear a thread principal. O Google não aplica nenhum dos dois números como corte rígido, mas ambos acompanham de perto os sites que passam nos Core Web Vitals com folga. Uma lista curta de verificação cobre a maior parte do trabalho:
- Adie (defer) os scripts que não são necessários para a primeira renderização.
- Elimine do pacote o JavaScript não utilizado.
- Divida as tarefas longas para que a thread principal fique livre para cliques e toques.
- Corrija erros de script e libere os recursos que o robots.txt atualmente esconde do Googlebot.
Por que isso importa ainda mais para sites de SaaS e B2B
Plataformas de SaaS, portais corporativos e marketplaces de tecnologia costumam ser construídos como aplicações JavaScript desde a base. A indexação atrasada das páginas de produto, os dados estruturados invisíveis e os Core Web Vitals fracos prejudicam todos esses sites ao mesmo tempo, e os empurram para trás dos concorrentes nas buscas de alta intenção, em que os negócios são ganhos ou perdidos.
A falha mais comum é um site de marketing e um app de produto compartilhando a mesma base de código renderizada no cliente. Uma estrutura mais segura renderiza as páginas públicas (preços, recursos, documentação, blog) no servidor ou no momento do build, e mantém o CSR para o app com login, em que a indexação não importa.
Correções por plataforma
A correção certa depende da plataforma em que você está construindo.
- Os temas da Shopify dependem de JavaScript para filtros, seleção de variantes e atualizações do carrinho. Isso geralmente não é problema para o SEO, desde que títulos de produto, descrições e tags canonical continuem no HTML renderizado no servidor. As configurações que vale a pena conferir estão neste guia de SEO para Shopify.
- O Wix melhorou bastante o tratamento da renderização, mas seções interativas geradas pelo editor ainda podem atrasar a indexação se carregarem o conteúdo de forma assíncrona. Veja as configurações relevantes neste guia de SEO para Wix.
- Os apps do Lovable costumam ser criados por padrão como aplicativos React de página única, o que os coloca no território do CSR, a menos que você configure de outra forma. Este guia de SEO para sites Lovable mostra como indexar o conteúdo de blog em um site criado a partir de um único prompt.
- Os sites em WordPress geralmente já nascem priorizando o HTML, mas temas pesados em JavaScript, construtores de páginas e alguns plugins reintroduzem o risco de renderização. As correções estão neste guia de configurações de SEO para WordPress.
- Sites baseados em Git, criados com geradores de sites estáticos e publicados via GitHub, tendem a usar SSG por padrão, que é a escolha de renderização mais segura disponível. Os detalhes de publicação e indexação estão neste guia de SEO para sites publicados no GitHub.
- O Next.js oferece o maior controle, permitindo escolher SSR, SSG ou ISR página por página. Metadados, sitemaps e robots.txt importam tanto quanto o modo de renderização, e o guia de SEO para Next.js trata de todos eles.
A busca com IA muda o que está em jogo
O SEO para JavaScript costumava ser uma preocupação só do Google. A maioria dos rastreadores de IA, incluindo os bots por trás do ChatGPT, do Claude e do Perplexity, não executa JavaScript. O Gemini é a exceção notável, porque usa a própria estrutura de renderização do Google, embora isso seja descrito como experimental e não algo em que se possa confiar.
Uma página que depende de JavaScript no lado do cliente para exibir seu conteúdo pode, portanto, ficar invisível para os mecanismos de resposta de IA, mesmo que o Googlebot acabe vendo. Para ser elegível a citações em respostas geradas por IA, o conteúdo precisa existir no HTML bruto. O mesmo princípio vale para a otimização para mecanismos de resposta: escreva a resposta onde qualquer rastreador, feito por humanos ou por IA, consiga lê-la.
Como testar e monitorar o SEO para JavaScript
Você consegue verificar se o Google vê sua página do jeito que você pretende, sem adivinhação.
- Compare o HTML bruto com o renderizado. Veja o código-fonte para obter a versão bruta e depois coloque-a ao lado do que o Chrome DevTools mostra depois que a página carrega por completo. Grandes diferenças apontam uma dependência de renderização.
- Use a ferramenta de inspeção de URL do Search Console. Ela mostra a captura de tela renderizada e o HTML que o Google usou, além de eventuais erros de console do JavaScript que ele encontrou.
- Rastreie com o JavaScript desativado. Um modo de rastreamento "somente texto" revela o que um bot que não renderiza enxerga, o que é importante, dado o número de rastreadores de IA que ignoram o JavaScript.
- Acompanhe os arquivos de log do servidor ao longo do tempo. Revisar a frequência de rastreamento numa janela de três a seis meses mostra se os templates importantes são revisitados com frequência suficiente e se as correções de renderização melhoraram a atividade de rastreamento depois.
- Refaça uma auditoria técnica após grandes mudanças de framework. A migração para um novo framework é o momento em que regressões de renderização passam despercebidas, e uma auditoria de SEO técnico antes e depois as pega enquanto ainda é barato corrigi-las.
Dá para corrigir o SEO para JavaScript por conta própria?
Em parte, sim. Verificar se as tags de título e os títulos aparecem no HTML bruto leva cinco minutos e um clique em "exibir código-fonte". Adicionar o atributo defer aos scripts não críticos, eliminar JavaScript não utilizado e garantir que os links internos usem tags <a href> de verdade são mudanças que o dono do site pode pedir a um desenvolvedor sem precisar reconstruir nada.
Migrar um app CSR para SSR, ou configurar snapshots pré-renderizados como solução provisória, é um projeto maior. Em geral exige um desenvolvedor que conheça seu framework, porque uma implementação errada pode quebrar as funcionalidades que você está tentando preservar. Se a suspeita recai sobre a arquitetura de renderização, chame um desenvolvedor antes que alguém mexa no código de produção e use um plano de SEO estruturado para organizar a ordem das correções, de modo que uma não desfaça a outra.
Onde isso se encaixa no seu trabalho de SEO como um todo
Um site com problemas de renderização muitas vezes tem lacunas também na visibilidade local, nos dados estruturados ou na saúde técnica geral. Se você atende áreas específicas, combine as correções de renderização com páginas de SEO local criadas em torno dos bairros em que você quer ranquear. Se o seu framework também gera URLs duplicadas ou canonicals inconsistentes, o que os roteadores no lado do cliente costumam fazer, resolva isso na mesma revisão técnica, em vez de tratar como um projeto separado mais tarde.
Perguntas frequentes
O Google penaliza sites em JavaScript?
Não. O Google não penaliza um site por usar JavaScript. O problema é indireto: se o JavaScript atrasa a renderização ou esconde conteúdo, as páginas são indexadas tarde ou nem chegam a ser, o que parece um problema de ranqueamento, mas é de indexação.
Quanto tempo o Google leva para indexar uma página em JavaScript?
Varia muito. Sites consolidados e de alta autoridade podem ter a renderização feita em poucas horas, enquanto sites mais novos ou de menor autoridade podem esperar semanas para que a mesma página passe pela fila, segundo a própria descrição do Google sobre o processo.
O React é ruim para SEO?
O React em si não é, mas um app React renderizado totalmente no cliente é. Combinar o React com um framework que ofereça renderização no servidor ou geração estática, como o Next.js, elimina a maior parte do risco.
Qual é a diferença entre SSR e pré-renderização?
O SSR monta o HTML completo no servidor a cada requisição, em tempo real. A pré-renderização gera um snapshot HTML estático com antecedência (ou na primeira requisição de um bot) e entrega essa versão em cache aos rastreadores. Ela é mais barata de operar, mas precisa ser atualizada para continuar precisa.
Chatbots de IA como o ChatGPT leem conteúdo em JavaScript?
Em geral, não. A maioria dos rastreadores de IA não executa JavaScript, então o conteúdo que só aparece depois que um script roda costuma ficar invisível para eles. O Gemini, do Google, é a exceção porque usa a infraestrutura de renderização do próprio Google, embora ainda seja considerado um caso à parte.
Mande verificar sua renderização antes que ela custe mais posições
Os problemas de SEO com JavaScript são silenciosos. As páginas não geram erros, simplesmente não aparecem, e nada no seu painel sinaliza um atraso de renderização até você saber que precisa procurar. A forma mais rápida de entender sua situação é comparar o que o Google renderiza com o que o seu site entrega. Fale com a equipe e receba um relatório de SEO de exemplo que mostra o que está acontecendo nas suas páginas agora.
Recursos / Referências
Fontes
Sobre o autor
O SearchBlueprint pesquisou, escreveu e avaliou este artigo com o mesmo pipeline de conteúdo que nossos clientes usam nos próprios sites. A nota que aparece na assinatura é a que nosso mecanismo de conteúdo deu a esta página antes de ela ser publicada. Nada aqui passa por revisão manual, e esse é justamente o ponto: é o resultado do produto, publicado onde qualquer pessoa pode conferir.