Lições de SEO ao Corrigir o Nosso Próprio Site
Passámos alguns dias a ler o nosso próprio site da forma como um motor de pesquisa o faz, e encontrámos seis coisas que valia a pena corrigir. 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 estava a aparecer em pesquisas às quais não respondia, e uma secção nova do site estava bloqueada pela nossa própria borda em staging. Nada disto foi dramático. Tudo isto nos estava a custar visibilidade em silêncio.
O site num parágrafo
O mythex.ai é uma single-page app que pré-renderizamos durante a compilação: um script percorre cada rota, escreve um ficheiro 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 motores de pesquisa o que é uma página; vê o que são dados estruturados). A maior parte do que se segue vive nesse passo de pré-renderização, porque é esse o HTML que um rastreador realmente lê.
1. Cada página reclamava ser a página de FAQ
Sintoma. O nosso modelo HTML trazia um bloco FAQPage para todo o site nos dados estruturados, com o URL a apontar para /faq. A pré-renderização acrescentava depois o FAQPage de cada página por cima. Por isso, cada página do site enviava dois — e a nossa política de privacidade dizia ao Google que era a página de FAQ.
Porque importa. O Google espera no máximo um FAQPage por página. Um segundo que aponte para outro sítio é o tipo de coisa que faz com que a marcação de uma página seja desvalorizada, e não apenas ignorada.
Correção. O bloco global foi eliminado. A marcação de FAQ de cada página vem agora de um único sítio, incluindo a própria /faq, que a constrói a partir da lista completa de perguntas. As páginas sem FAQ passam a não declarar nenhuma, que é a resposta honesta. E a pré-renderização falha a compilação se alguma página voltar a ter mais de um FAQPage. Uma regra que só existe na memória de alguém acaba por ser quebrada; uma regra que a compilação impõe não é.
2. O Google usava a imagem errada para nós
Sintoma. Nos resultados de pesquisa, a miniatura do Mythex era o brilho suave que pulsa por trás do herói da página inicial — uma imagem decorativa de fundo — em vez do nosso cartão de partilha.
Porque aconteceu. Nunca dissemos ao Google qual imagem representava cada página, por isso ele escolheu uma que encontrou.
Correção. Dois lados do mesmo problema:
- Diz qual é a imagem da página. A página inicial tem agora um nó
WebPagecom umprimaryImageOfPagea apontar para o cartão de partilha, e os dados estruturados de cada página pré-renderizada trazem a sua própria imagem (a imagem de partilha da página, ou a predefinida). - Esconde a decoração. As imagens de fundo estão agora proibidas no
robots.txte são servidas com um cabeçalhonoindex, noimageindex, para ficarem fora da pesquisa de imagens e das miniaturas.
3. Os motores de pesquisa só conheciam o nosso logótipo
A marcação Organization tinha um nome, um logótipo e algumas ligações a redes sociais — marca, e mais nada. Os motores de pesquisa constroem o painel de conhecimento de uma empresa a partir de factos do tipo registo comercial, por isso acrescentámos os que constam da nossa licença de atividade: nome legal, data de fundação, fundador e morada registada. Deixámos de propósito de fora o número de telefone.
4. As páginas de modelos respondiam a outra pergunta
Sintoma. A Search Console mostrava três páginas de modelos a receber impressões e nenhum clique. Uma aparecia para "portfólio de estratega de conteúdos" e variantes, outra para "melhor design de site para restaurante italiano", e outra para um grupo à volta de "agile board" — metade dessas pesquisas incluía a palavra "grátis". As posições iam de meados dos vinte até aos cinquenta.
Porquê. Cada página respondia a uma pergunta diferente da que tinha sido feita. Quem queria ver como é um bom design para restaurante italiano caía numa página que lhe vendia um construtor.
Correção. Cada uma das três tem agora uma secção escrita para a pesquisa e não para o produto, um título e uma descrição com as palavras que as pessoas escrevem, e FAQ que vale a marcação que já emitiam.
O mesmo commit corrigiu um problema mais discreto. O bloco de "modelos relacionados" usava os primeiros quatro modelos de uma categoria, por isso todos os modelos de portfólio apontavam para os mesmos quatro portfólios, e o resto da categoria não tinha quaisquer ligações internas. Substituímo-lo por um anel ordenado por subcategoria: cada página de modelo tem agora exatamente quatro ligações de entrada e quatro de saída. O HTML pré-renderizado também imprime essas ligações agora — antes, só existiam depois de o JavaScript correr, o que um rastreador pode nunca fazer.
5. Avisar o Bing das páginas novas no momento em que são publicadas
O Google ignora o IndexNow, um protocolo para avisar os motores de pesquisa quando um URL muda. O Bing, o Yandex e o Seznam usam-no — e o índice do Bing é o que a pesquisa do ChatGPT consulta. Um construtor de apps com IA que os assistentes de IA não conseguem encontrar é um tipo de falha muito particular.
A abordagem óbvia, submeter o sitemap inteiro a cada publicação, é a forma como uma chave acaba limitada, e a maior parte das publicações não muda nada que um motor de pesquisa se importe. Por isso, um script compara o sitemap que o site está a servir neste momento com o que acabou de ser compilado e submete apenas a diferença.
Dois detalhes fizeram-no funcionar:
- Tira o instantâneo antes de publicar. A referência tem de ser capturada antes de a nova compilação entrar em produção. Depois, o sitemap "em produção" já é o novo e todas as diferenças vêm vazias.
- Só páginas novas, por agora. O nosso sitemap não tem datas
lastmod, por isso o script anuncia páginas novas mas não reescritas. Carimbar cada URL com a data da compilação marcaria o site inteiro como alterado a cada publicação — exatamente o spam que estávamos a evitar.
Corre apenas nas publicações de produção e nunca faz falhar a compilação: quando corre, o site já está em linha, e um aviso a um motor de pesquisa não vale um deploy a vermelho.
6. A nossa própria borda dizia "não encontrado"
Quando lançámos as páginas /ai (mais sobre elas em uma página de destino para cada tipo de negócio), o staging mostrava "Not found" em todas elas, enquanto o alojamento estático as servia bem.
O serviço à frente dos nossos domínios de marketing só encaminha uma lista de caminhos permitidos; tudo o resto recebe um 404 seco. /ai era novo e não estava nessa lista. Acrescentámos /ai e /ai/*, com um teste que confirma que passam. Um bug pequeno, mas exatamente do tipo que torna uma secção nova invisível para os rastreadores sem que ninguém dê por isso.
O que tirámos disto
- Lê o HTML que um rastreador lê. A maior parte disto era invisível num browser e óbvio no ficheiro pré-renderizado.
- Transforma regras de SEO em verificações de compilação. "Um FAQPage por página" é agora imposto, não lembrado.
- Diz aos motores de pesquisa o que queres dizer. Se não disseres qual imagem ou quais factos te representam, eles vão adivinhar.
- A Search Console diz-te que pergunta as pessoas fizeram. Impressões sem cliques costumam significar que a página respondeu a outra pergunta.
- Submete diferenças, não tudo. Avisar apenas do que mudou mantém-te dentro dos limites de pedidos.
Se estiveres a fazer o mesmo para um site que construíste, os nossos guias sobre SEO para sites construídos com IA e como configurar o Google Search Console cobrem o essencial.