A descrição que ninguém escreveu
O Bing Webmaster Tools sinalizou “meta descriptions em muitas páginas são curtas demais.” Reclamação razoável, só que quando eu de fato fui checar, quase toda página do site tinha uma descrição específica e bem dimensionada. Posts do blog: 96-185 caracteres. Páginas de apps: parecido. As únicas duas páginas que não tinham eram a home e o índice do blog, que por acaso são as duas páginas mais visitadas do site inteiro.
Nenhuma das duas nunca tinha definido uma prop description no <Layout>. As duas caíam silenciosamente no padrão do site inteiro: “Imperfect Systems - Creator of software, games, and music.” Cinquenta e quatro caracteres. O snippet de resultado de todo motor de busca para a home, a página em que a maioria das pessoas cai primeiro, era a mesma frase genérica desde o lançamento do site.
Um fix fácil que dobrou de escopo silenciosamente
O issue estava delimitado a “home e índice do blog,” na versão singular delas. Mas o trabalho de i18n da home (três issues atrás, no mesmo dia) tinha acabado de adicionar as versões em espanhol dessas duas páginas. Mesmos componentes, mesma prop <Layout>, mesma descrição faltando, só que mais novas, então o issue que sinalizou esse bug foi criado antes das páginas que ele precisava cobrir também existirem.
Isso está virando um padrão que eu deveria vigiar: o parágrafo do rodapé que a primeira passada de i18n deixou passar. O próprio logger do Astro sem uma guard clause. Agora uma recomendação do Bing sem metade do escopo real dela porque o código mudou entre o momento em que a recomendação foi gerada e o momento em que eu agi sobre ela. Nenhum desses são bugs difíceis. Todos são “o fix foi delimitado contra uma imagem do código já um pouco desatualizada,” e o fix em cada caso foi o mesmo: não corrigir só o que o ticket diz, checar primeiro se a mesma forma de lacuna existe em outro lugar.
O que entrou
A home precisava de um texto novo, não havia nada para reaproveitar, então ganhou uma descrição nova em ui.ts, nos dois idiomas. O índice do blog era diferente: já tinha uma string blogIndex.description, renderizada como subtítulo visível na própria página, só nunca conectada de fato à meta tag. Reaproveitá-la significa que as palavras que um visitante lê e as palavras que um motor de busca indexa agora são a mesma frase, em vez de duas descrições que poderiam se distanciar silenciosamente com o tempo. É mais curta que a faixa “ideal” de 140-160 caracteres que o Bing prefere, mas é real, específica, e já verdadeira, melhor do que uma frase mais longa inventada só para bater uma contagem de caracteres.
Resultados
Chequei as quatro rotas - /, /es/, /blog/, /es/blog/ - de duas formas: curl contra um build de produção, e uma aba real do Chrome via Playwright lendo document.querySelector('meta[name="description"]').content diretamente. As quatro mostram a descrição real agora, não o fallback genérico. og:description e a tag do card do Twitter pegam de graça também, já que estão conectadas à mesma prop.
npm run a11y: 12/12, ainda 0 erros, uma mudança de meta tag nunca ia mexer com acessibilidade, mas a convenção do próprio projeto é checar de qualquer forma, e é barato o suficiente que pular seria só superstição.
Leitura relacionada
Dando um rosto para cada link compartilhado
Uma proteção de og:image que nunca disparava, um valor padrão de uma linha que resolveu, um card de terminal feito sob medida, e uma pegadinha de retina no Chrome headless.
O pacote que eu quase usei, e por que o container de build efêmero disse não
astro-indexnow assume que o CI consegue commitar um cache de volta no repo. O Cloudflare Workers Builds é um cano de mão única, então usei quarenta linhas sem dependências.
Dois bugs de i18n no Astro que só aparecem quando você compara o HTML renderizado
O fallback do Astro esconde traduções reais atrás do getStaticPaths, e o Astro.url reporta a localização errada em páginas renderizadas por fallback.
Você também pode achar útil
Proton Drive
Armazenamento em nuvem criptografado, da equipe por trás do Proton Mail.
Como parceiro da Proton, ganho com compras qualificadas dos serviços de privacidade e segurança da Proton (Pass, Mail, VPN, Drive).
Saiba maisRackNerd VPS
Hospedagem VPS econômica para serviços leves que funcionam continuamente.
Como afiliado da RackNerd, ganho com compras qualificadas.
Saiba maisProton Pass
Gerenciador de senhas focado em privacidade, da equipe por trás do Proton Mail.
Como parceiro da Proton, ganho com compras qualificadas dos serviços de privacidade e segurança da Proton (Pass, Mail, VPN, Drive).
Saiba mais