Lições de SEO ao corrigir o nosso próprio site
Passamos alguns dias lendo o nosso próprio site do jeito que um mecanismo de busca lê, e encontramos seis coisas que valiam a correção. Cada página declarava dois blocos de FAQ, o Google usava como miniatura um brilho decorativo do fundo, um conjunto de páginas de modelos aparecia em buscas que elas não respondiam, e uma nova seção do site estava bloqueada pela nossa própria borda na área de testes. Nada disso foi dramático. Tudo isso, porém, estava custando visibilidade em silêncio.
O site em um parágrafo
O mythex.ai é um app de página única que pré-renderizamos na hora do build: um script percorre cada rota, gera um arquivo HTML estático para ela e injeta o título, a descrição e os dados estruturados da página (o bloco JSON-LD que diz aos mecanismos de busca do que se trata a página; veja o que são dados estruturados). Quase tudo o que vem a seguir está nessa etapa de pré-renderização, porque é o HTML que um rastreador realmente lê.
1. Cada página dizia ser a página de FAQ
Sintoma. Nosso modelo HTML trazia, nos dados estruturados, um bloco FAQPage válido para o site todo, com a URL apontando para /faq. A pré-renderização então acrescentava o FAQPage próprio de cada página. Assim, todas as páginas do site tinham dois, e a nossa política de privacidade dizia ao Google que era a página de FAQ.
Por que importa. O Google espera no máximo um FAQPage por página. Um segundo que aponta para outro lugar é o tipo de coisa que faz a marcação da página perder valor, e não apenas ser ignorada.
Correção. O bloco global foi removido. A marcação de FAQ de cada página agora vem de um único lugar, inclusive a própria /faq, que a monta a partir da lista completa de perguntas. Páginas sem FAQs agora não declaram nenhuma, que é a resposta honesta. E a pré-renderização falha o build se alguma página voltar a ter mais de um FAQPage. Uma regra que vive só na memória de alguém acaba quebrada; uma regra que o build impõe não.
2. O Google usava a imagem errada para nós
Sintoma. Nos resultados de busca, a miniatura do Mythex era o brilho suave que pulsa atrás do destaque da nossa página inicial, uma imagem decorativa de fundo, em vez do nosso card de compartilhamento.
Por que aconteceu. Nunca dissemos ao Google qual imagem representava cada página, então ele escolheu uma que encontrou.
Correção. Dois lados do mesmo problema:
- Diga qual imagem é da página. A página inicial agora tem um nó
WebPagecom umprimaryImageOfPageapontando para o card de compartilhamento, e os dados estruturados de cada página pré-renderizada trazem a própria imagem (a imagem de compartilhamento da página, ou a padrão). - Esconda a decoração. As imagens de fundo agora são proibidas no
robots.txte servidas com o cabeçalhonoindex, noimageindex, para ficarem fora da busca de imagens e das miniaturas.
3. Os mecanismos de busca conheciam só o nosso logotipo
A nossa marcação Organization tinha um nome, um logotipo e alguns links de redes sociais: marca, e só. Os mecanismos de busca montam o painel de conhecimento de uma empresa a partir de dados do tipo cadastral, então acrescentamos os que constam na nossa licença comercial: razão social, data de fundação, fundador e endereço registrado. Deixamos o telefone de fora de propósito.
4. As páginas de modelos respondiam a outra pergunta
Sintoma. O Search Console mostrava três páginas de modelos recebendo impressões e nenhum clique. Uma aparecia para “portfólio de estrategista de conteúdo” e variações, outra para “melhor design de site de restaurante italiano”, outra para um conjunto em torno de “agile board”. Metade dessas buscas incluía a palavra “grátis”. As posições iam da casa dos 20 até a dos 50.
Por quê. Cada página respondia a uma pergunta diferente da que foi feita. Quem queria ver como é um bom design para restaurante italiano caía numa página que vendia um criador de sites.
Correção. Cada uma das três agora tem uma seção escrita para a busca, e não para o produto, um título e uma descrição com as palavras que as pessoas digitam, e FAQs que valem a marcação que já emitiam.
O mesmo commit corrigiu um problema mais discreto. O bloco de “modelos relacionados” pegava os quatro primeiros modelos de uma categoria, então todos os modelos de portfólio apontavam para os mesmos quatro portfólios, e o restante da categoria não tinha nenhum link interno. Substituímos por um anel ordenado por subcategoria: agora cada página de modelo recebe exatamente quatro links de entrada e quatro de saída. O HTML pré-renderizado também imprime esses links agora. Antes, eles só existiam depois que o JavaScript rodava, o que um rastreador pode nunca fazer.
5. Avisar o Bing sobre páginas novas assim que são publicadas
O Google ignora o IndexNow, um protocolo para avisar os mecanismos de busca quando uma URL muda. Bing, Yandex e Seznam usam, e o índice do Bing é o que a busca do ChatGPT lê. Um construtor de apps com IA que os assistentes de IA não conseguem encontrar é um tipo específico de falha.
A abordagem óbvia, enviar o sitemap inteiro a cada publicação, é o caminho para uma chave ser limitada, e a maioria das publicações não muda nada que um mecanismo de busca se importe. Então um script compara o sitemap que o site está servindo agora com o que acabou de ser gerado, e envia apenas a diferença.
Dois detalhes fizeram funcionar:
- Tire o retrato antes de publicar. A linha de base precisa ser capturada antes de o novo build ir ao ar. Depois, o sitemap “ao vivo” já é o novo, e todas as diferenças voltam vazias.
- Só páginas novas, por enquanto. Nosso sitemap não tem datas de
lastmod, então o script anuncia páginas novas, mas não reescritas. Carimbar cada URL com a data do build marcaria o site inteiro como alterado a cada publicação, exatamente o spam que estávamos evitando.
Ele roda só nas publicações de produção e nunca faz o build falhar: na hora em que roda, o site já está no ar, e um aviso a um mecanismo de busca não vale um deploy vermelho.
6. A nossa própria borda dizia “não encontrado”
Quando lançamos as páginas /ai (mais sobre elas em uma página de entrada para todo tipo de negócio), a área de testes mostrava “Not found” para todas, enquanto o host estático as servia sem problemas.
O serviço na frente dos nossos hosts de marketing só encaminha uma lista permitida de caminhos; qualquer outro recebe um 404 seco. /ai era novo e não estava na lista. Acrescentamos /ai e /ai/*, com um teste que verifica que passam. Um bug pequeno, mas exatamente do tipo que torna uma seção nova invisível para os rastreadores sem que ninguém perceba.
O que tiramos disso
- Leia o HTML que um rastreador lê. A maioria destes problemas era invisível no navegador e óbvia no arquivo pré-renderizado.
- Transforme regras de SEO em verificações de build. “Um FAQPage por página” agora é imposto, não lembrado.
- Diga aos mecanismos de busca o que você quer dizer. Se você não disser qual imagem ou quais dados representam você, eles vão adivinhar.
- O Search Console mostra qual pergunta as pessoas fizeram. Impressões sem cliques normalmente significam que a página respondeu a outra pergunta.
- Envie diferenças, não tudo. Avisar apenas o que mudou mantém você longe dos limites de taxa.
Se você estiver fazendo o mesmo para um site que construiu, nossos guias sobre SEO para sites criados com IA e como configurar o Google Search Console cobrem o básico.