A indexação que precisava se encontrar sozinha — JSON-LD, verificação e IndexNow
Descobertas·

A indexação que precisava se encontrar sozinha — JSON-LD, verificação e IndexNow

6 min de leitura← Voltar para timeline

O blog que cresceu sem dizer a ninguém

Todo post publicado no LifeLog vira duas páginas: uma em português, outra em inglês. Em outubro de 2026, o blog chegou a 183 posts em cada idioma — 366 páginas estáticas, cada uma com conteúdo original, tags e metadados próprios. O deploy sobe, o CI fica verde, o site aparece.

Mas os buscadores não sabiam.

Não é exagero. O Google e o Bing não adivinham que um site novo existe. Eles precisam de um convite: ou alguém linka de fora, ou o dono do site declara, de forma verificável, “eu controle este conteúdo”. O LifeLog cresceu durante meses sem esse convite. O sitemap existia, o robots.txt estava lá, mas faltava a camada que transforma um site bonito em um site encontrável.

Três peças que se encaixam

A solução veio em três partes, cada uma resolvendo um problema diferente:

JSON-LD — dados estruturados no cabeçalho de cada post. Em vez de depender que o buscador entenda HTML semântico, o JSON-LD declara explicitamente: isto é um BlogPosting, tem este autor, esta data, esta URL. O Google lê JSON-LD como uma ficha técnica; o HTML continua sendo para humanos.

Verificação de host — arquivos de texto público que provam domínio. O Google Search Console e o Bing Webmaster Tools pedem um arquivo com um token específico na raiz do site. Sem esse arquivo, a propriedade não é confirmada; sem propriedade confirmada, os relatórios de busca ficam vazios.

IndexNow — um protocolo que submete URLs diretamente para Bing, Yandex, Seznam e Naver. O Google não consome IndexNow; para ele, a descoberta vem do sitemap declarado no robots.txt. Mas para os outros buscadores, IndexNow é a diferença entre esperar semanas e ser indexado em horas.

O obstáculo que não estava no plano

A verificação de host tem um comportamento que nenhum documento menciona com clareza: quando o arquivo de token é publicado pela primeira vez, o buscador pode ainda não tê-lo indexado. A API do IndexNow responde com 403 SiteVerificationNotCompleted — e desiste.

O primeiro workflow de indexação rodou no dia 06 de outubro e ficou vermelho. Não era erro de configuração nem de código: era uma corrida de tempo. O arquivo estava no ar, mas o Bing ainda não o tinha lido. O script tentou submeter as URLs, a API negou, e o job falhou.

A solução foi um loop de retry com espera de 60 segundos entre tentativas, até 6 tentativas. O script agora aceita que o buscador é mais lento que o deploy e espera. Em produção, a segunda tentativa passou. As URLs do sitemap — todas as 366 — foram submetidas.

O detalhe que quase quebrou tudo

O script de IndexNow tinha o host e a chave definidos por variáveis de ambiente, com fallback para valores literais no código. O host era o domínio canônico do blog. Mas havia um problema: o script de verificação de alternados no CI resolvia o host por uma string hardcoded, não pela variável de ambiente. Quando o host canônico mudou, o script de verificação continuava testando o host antigo.

O fix foi simples: toda referência ao host agora vem da variável de ambiente, e o fallback só existe para desenvolvimento local. O workflow de CI confere o site com HTTP 200 antes de submeter qualquer URL — se o site não responde, o job falha antes de gastar chamadas de API.

O que ficou

Hoje, toda publicação no LifeLog dispara o workflow de indexação automaticamente. O CI/CD completa, o workflow de SEO confere o site, coleta as URLs do sitemap (ignorando as de preview de posts ocultos) e submete ao IndexNow com retry. O JSON-LD acompanha cada post desde o build.

Nada disso é visível para quem lê o blog. Mas é o que faz um post aparecer na busca do Google três dias depois de publicado, em vez de três semanas — ou nunca.

Aprendizados

Buscadores são mais lentos que deploys. Qualquer integração que envolva verificação de propriedade precisa de retry com backoff. Assumir que o buscador já leu o arquivo de token é assumir demais.

Dados estruturados são o denominador comum. JSON-LD é o formato que todos os buscadores entendem. HTML semântico ajuda, mas não substitui a declaração explícita.

Variável de ambiente não é opcional. String hardcoded no código funciona até o dia em que precisa mudar. Aí o fix é fácil, mas o diagnóstico custa um workflow vermelho.

IndexNow não substitui sitemap. São camadas diferentes: o sitemap é o mapa, o IndexNow é o aviso de que o mapa mudou. Um sem o outro funciona pior.

Próximos passos

O Google Search Console agora recebe dados de impressão e posição para cada post. O próximo passo é usar esses dados para decidir quais posts merecem atualização — conteúdo que ranqueia bem mas tem alta taxa de rejeição, ou que ranqueia mal mas recebe backlinks.

Métrica Valor
Páginas PT 183
Páginas EN 183
Total de URLs submetidas ao IndexNow 366
Retry máximo na verificação 6
Espera entre retries 60s
Workflow de indexação 1
~/lifelog — bash
$cat about.txt
╔══════════════════════════════════════╗
║  Samuel Medeiros                    ║
║  Senior Software Engineer           ║
║  Stack: Python · TypeScript · Rust  ║
║  Projetos: Arachne, Dogwalk,        ║
║            Capivara, TatuEngine      ║
╚══════════════════════════════════════╝
      
$