Files
portifolio-evandrodevbr/docs/seo-geo-validation.md
T

8.5 KiB
Raw Blame History

SEO, AEO e GEO: medição antes e depois (2026-10-05)

Este documento registra o que foi medido, com ferramenta e comando, e o que ainda depende de conta externa. Ele complementa docs/seo-geo-operations.md (runbook de Search Console, Bing, Cloudflare e CrUX, ainda não executado) e respeita as exclusões dele: sem llms.txt, sem FAQPage/ProfessionalService/LocalBusiness, sem páginas por cidade, sem keywords, sem datas ou métricas inventadas.

Como repetir

# 1) auditoria (HTML sem JavaScript, como um robô vê); funciona em produção ou localhost
node scripts/seo-audit.mjs --base https://evandro.dev.br --out audit-depois.json

# 2) comparar duas execuções (antes.json vs depois.json); sai com código 2 se algo piorou
node scripts/seo-compare.mjs audit-antes.json audit-depois.json

A auditoria lê o sitemap.xml e confere, página a página: status, compressão, TTFB, lang, title e description (tamanho e unicidade), canônica própria, indexabilidade, um h1 e hierarquia, alt das imagens, links internos e externos, Open Graph e Twitter Card (e se a imagem social abre), JSON-LD (válido, referências @id resolvem, sem os tipos excluídos pela política), resposta direta cedo no HTML, acesso de 8 robôs de busca e de IA (Googlebot, bingbot, OAI-SearchBot, GPTBot, ChatGPT-User, Claude-SearchBot, ClaudeBot, PerplexityBot), e-mail visível para robôs, links do GitHub e links internos quebrados. Cada verificação é passa/falha com a evidência; não existe "nota" inventada.

Resultado: main contra a branch (build de produção local, 17 URLs)

Grupo main branch
técnico 57/57 57/57
on-page 204/221 213/221
social (Open Graph e Twitter) 35/51 51/51
AEO/GEO 54/60 56/60
dados estruturados 84/84 84/84

27 verificações corrigidas e 0 pioradas. O que mudou: og:locale em todas as rotas (só a home tinha), títulos e descrições mais curtos, e conteúdo textual novo em 2 cases.

Lighthouse (categorias SEO, acessibilidade e boas práticas, mobile): 100 / 97 / 100 nas duas versões. O Lighthouse não distingue esse tipo de melhoria, por isso a auditoria acima é a medida principal.

Validador independente: structured-data-testing-tool (npm), preset de redes sociais. Facebook/Open Graph 100% e Twitter 71–85%; o aviso restante é twitter:site ausente (opcional). A ferramenta não interpreta JSON-LD dentro de @graph (reporta "WebSite não encontrado" por limitação dela, não do site); para o JSON-LD, use os dois validadores manuais abaixo.

O que foi alterado no código

  • openGraph.locale: "pt_BR" nas 6 rotas que redefinem openGraph.
  • Titles: casos passam de "Case de Engenharia de Software" para "Case de Engenharia"; /curriculo, Tauri e Engenharia de Software ficam mais curtos. Descrição da home de 193 para 146 caracteres e a de AS Serviços de 184 para 136.
  • Person (JSON-LD) ganha jobTitle e knowsAbout, ambos já visíveis no site.
  • Reddit Posts Explorer e MinGW GCC Installer ganham resposta, desafio, implementação, limites e fontes fixadas em commit (repositórios públicos); os textos anteriores diziam o que o código não sustenta (SSG, "rate limiting" por cache, busca em tempo real, download assíncrono, monitoramento).
  • SC Plus: removida a alegação "otimizada para Core Web Vitals / LCP < 2,5 s". Medição local (Lighthouse mobile): LCP 3,7 s, desempenho 89.
  • Hero e páginas: conteúdo visível já no HTML (LCP da home no Lighthouse local: 4,0 s para 3,5 s).

Achados que o código não resolve (ações suas)

Ordenados pelo efeito provável na descoberta:

  1. Cloudflare ofusca o e-mail para robôs. Confirmado em produção: o HTML servido ao Googlebot tem /cdn-cgi/l/email-protection#... e o texto "[email protected]", sem nenhum mailto:. Buscadores e respostas de IA não veem o contato. Segundo a documentação da Cloudflare, desative em Security > Settings > Email Address Obfuscation (ou envolva um endereço com <!--email_off-->). A verificação email-visivel-para-robos da auditoria passa a ficar verde depois.
  2. Resultados de busca desatualizados. Uma busca por "evandro.dev.br" ainda mostra o título e a descrição antigos ("Engenharia de Software, Next.js, Tauri, Rust e Consultoria Tecnica"). Peça nova indexação no Search Console (Inspeção de URL > Solicitar indexação) e envie a URL no Bing Webmaster Tools.
  3. Dois repositórios com "Ver código" quebrado. evandrodevbr/twins-lab e evandrodevbr/scplus respondem 404 para visitantes (são privados), e o Twins Lab traz o selo "Código público". Torne os repositórios públicos ou remova o link e o selo. A auditoria acusa isso (links-github-acessiveis).
  4. Posicionamento e URLs diferentes entre perfis. O site se apresenta como "sistemas sob medida para empresas"; o perfil do GitHub diz "Backend Software Engineer | Node.js, NestJS, TypeScript, Python & PostgreSQL", com empresa "Apolo Energia", e o README do perfil se declara aberto a vagas de backend (os "cinco anos" coincidem com o site). Respostas de IA misturam essas descrições. Escolha a frase central e repita-a nos perfis. O LinkedIn também aparece com duas URLs no site (/in/evandro-fonseca-junior-0969aa1b0/ na hero e no JSON-LD, /in/evandrodevbr/ no rodapé): use a mesma.
  5. Homônimos. Há outras pessoas com nome parecido (por exemplo "Evandro Junior" no LinkedIn e "Evandro Fonseca Junior" em outros sites). sameAs e a repetição do mesmo texto de apresentação nos perfis ajudam a desambiguar.
  6. SC Plus. O site no ar se apresenta como "SCPLUS — Educação, Ciência e Tecnologia em Garuva-SC", e o portfólio diz "SC Plus Aquicultura". Confirme o nome correto.

Ferramentas que precisam da sua conta (não executadas)

Ferramenta Para quê O que observar
Google Search Console cobertura, canônica escolhida, consultas, cliques as 17 URLs do sitemap; a canônica que o Google escolheu
Bing Webmaster Tools indexação e relatório de IA (quando disponível) AI Performance, se a conta tiver
Rich Results Test JSON-LD como o Google lê Person, WebSite, BreadcrumbList sem erros
Schema Markup Validator JSON-LD contra schema.org sem erros em @graph
CrUX / PageSpeed Insights desempenho de campo (LCP, INP, CLS) só aparece com tráfego suficiente; sem dado de campo, não substitua por nota de laboratório

Fontes conferidas

  • Google, AI features and your website: não há marcação nem arquivo especial para aparecer em AI Overviews/AI Mode; vale o SEO padrão (conteúdo em texto, links internos, robots.txt liberando, dados estruturados coerentes com o texto).
  • Google, FAQPage: resultado enriquecido só para sites governamentais e de saúde conhecidos. Por isso FAQPage continua excluído.
  • OpenAI, crawlers: OAI-SearchBot precisa estar liberado para aparecer nas buscas do ChatGPT; GPTBot é de treinamento; ChatGPT-User é iniciado pelo usuário. O robots.txt do site já libera todos (User-agent: *, Allow: /) e a auditoria confirma HTTP 200 para os 8 robôs.
  • Anthropic, crawlers: ClaudeBot (treinamento), Claude-User e Claude-SearchBot (busca), cada um controlável no robots.txt.
  • llms.txt: o Google informou que nenhum sistema de IA o usa hoje e que não planeja suportá-lo (declarações de John Mueller e Gary Illyes reportadas pela imprensa especializada). Continua excluído.

Limites desta medição

  • A auditoria vê o HTML entregue sem JavaScript; ela não prevê posição em buscas nem citações em respostas de IA. Esses resultados só aparecem com dados de plataforma (Search Console, Bing, relatórios de IA) ao longo de semanas.
  • A busca usada para ver como o site aparece hoje é uma única consulta pontual; não é série histórica.
  • Limiares como 30–65 caracteres no título e 70–165 na descrição são orientações de exibição, não regras de ranqueamento.