Como funciona esta verificação
O Scanaris descarrega o HTML da tua página tal como o servidor o serve, sem executar JavaScript, tira-lhe os scripts, os estilos, as etiquetas noscript, os templates e os SVG, e mede quanto texto visível fica no body. Só abre um achado, de severidade média, se se cumprirem duas condições ao mesmo tempo: esse texto ter menos de 250 caracteres e o HTML conter um contentor vazio de aplicação de página única, ou seja, um <div> com id root, app, __next, __nuxt ou q-app sem nada lá dentro. Um site com renderização no servidor ou geração estática tem texto no HTML inicial e nunca é marcado; um site com pouco conteúdo mas sem contentor de SPA também não. O limiar é deliberadamente baixo para não dar falsos positivos.
Porque importa
O Googlebot executa JavaScript, mas numa segunda passagem que pode demorar dias e com um orçamento limitado. Os rastreadores dos assistentes de IA (GPTBot, ClaudeBot, PerplexityBot) em geral não o executam: leem o HTML que lhes chega e ponto. Se o teu HTML é um <div id="root"></div> e um script, para eles o teu site está vazio. Não podem indexar o que não veem nem citar o que não leem, por isso quando alguém pergunta ao ChatGPT pela tua categoria de produto, tu não existes. É o problema mais comum dos sites feitos com ferramentas de IA que geram uma aplicação React ou Vue puramente de cliente, e o mais invisível, porque no browser tudo se vê perfeito.
Como corrigir
- Ativa a renderização no servidor. No Nuxt vem ativada por defeito (
ssr: true); se a desativaste, volta a ativá-la. No Next.js, o App Router renderiza no servidor salvo se marcares o componente com'use client'logo no topo. Em Vite com React ou Vue puros não há SSR: passa para Next.js, Remix, Nuxt ou Astro, ou gera as páginas públicas como HTML estático. - Se migrar não é opção, pré-renderiza: gera o HTML das rotas públicas no momento do build (Nuxt
nitro.prerender, exportação estática do Next.js, Astro por defeito) ou usa um serviço de pré-renderização que sirva HTML renderizado aos bots. - No mínimo, põe o conteúdo essencial no HTML: o título, a descrição do que fazes e as ligações principais, mesmo que a aplicação os substitua ao carregar. É o que os bots vão ver.
- Verifica as páginas que importam, não só a home: o blog e as páginas de produto são as que os assistentes citam.
Confirma que está corrigido
curl -s https://teudominio.com | sed -e 's/<script[^>]*>.*<\/script>//g' -e 's/<[^>]*>/ /g' | tr -s ' \n' ' ' | wc -c
Se o resultado ficar numas poucas dezenas de caracteres, o conteúdo é pintado pelo JavaScript. Devia contar milhares. Outra forma: no browser, desativa o JavaScript nas ferramentas de programador e recarrega; o que vires é o que os bots veem.
Perguntas frequentes
A Google indexa-me bem. Porque me importa?
Porque cada vez mais gente pergunta a um assistente em vez de pesquisar, e esses assistentes não executam o teu JavaScript. E porque mesmo na Google, a renderização diferida atrasa dias a indexação das tuas alterações. Os números e o porquê estão em porque é que as apps feitas com IA são invisíveis para a IA.
A minha app é um painel privado atrás de login. Afeta-me?
Não: o que está atrás de autenticação não deve ser indexado. Esta verificação importa para as páginas públicas, as que queres que apareçam. Se o teu site é só o painel mais uma landing, faz com que a landing seja HTML.
Tenho SSR e mesmo assim sai pouco texto.
Então o HTML traz estrutura mas pouco conteúdo real, e convém rever se a landing conta alguma coisa. Os cabeçalhos que organizam esse conteúdo vê-os cabeçalhos.