SEO técnico pra devs que odeiam marketing
Eu não sou marqueteiro. Se você está aqui, provavelmente também não é. Mas nossos clientes vão querer que o site deles apareça no Google. Isso é inevitável.
A boa notícia? A maioria do SEO que importa é técnica. É código. É a nossa linguagem.
Eu passei anos ignorando isso. Construía sites bonitos, rápidos, funcionais. Depois descobria que ninguém encontrava o site no Google porque faltavam meta tags. Era frustrante porque a solução era trivial.
Aquilo que realmente importa
Esqueça aquela conversa de “conteúdo é rei”. Para o dev, o que importa é que o site seja semanticamente correto e que o Google consiga ler tudo.
Meta tags são o começo. A tag title aparece como aquele azul no Google. Se você não colocar, o navegador inventa algo ruim. Eu já vi:
<title>Untitled Document</title>
A meta description é aquele texto cinzento embaixo. 155 caracteres no máximo. Google corta depois. Use-a ou o Google extrai qualquer coisa da página.
Aquilo que eu vejo nos meus projetos é a maioria dos devs deixando essas tags em branco. Depois o cliente reclama que o site não rankeia.
Open Graph é outra. Quando compartilha no LinkedIn ou WhatsApp, aquela imagem e aquele título vêm de onde? Da tag og:image e og:title. Se não tiver, fica feio.
No Astro, é uma linha em cada layout:
<meta property="og:title" content={title} />
<meta property="og:description" content={excerpt} />
<meta property="og:image" content={image} />
Feito. Seu cliente fica feliz quando compartilha.
Sitemap e robots.txt
Um sitemap.xml é basicamente uma lista de todas as páginas do seu site. Você a coloca em /sitemap.xml e pronto. O Google a encontra automaticamente. Astro já gera isso pra você se você configurar.
robots.txt é mais interessante. É onde você diz pro Google: “ei, não rastreie isso”. Útil pra esconder páginas de admin, termos de serviço que não precisam rankear, ou arquivos grandes que consomem cota de rastreamento.
A coisa mais importante? Disallow: nada. Você quer que o Google rastreie seu site. Deixe os default. Vi projetos com robots.txt bloqueando tudo. Era um erro manual.
Schema.org é o que vale ouro
Isso é HTML estruturado. Você marca dados dentro da página pra máquinas (e AI) entenderem o contexto. Preço, horário, endereço. Tipo, quando você vê um resultado no Google com estrelas ou horário de funcionamento, aquilo veio de Schema.
Pra clínica odontológica, eu faço assim:
{
"@context": "https://schema.org",
"@type": "LocalBusiness",
"name": "Clínica X",
"address": "Rua Y, 123",
"telephone": "+55 11 9999",
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": "Monday",
"opens": "09:00",
"closes": "18:00"
}
]
}
Coloca isso em uma tag
Pra artigos, uso ArticleSchema. Pra receitas, RecipeSchema. Cada tipo de conteúdo tem seu Schema. A Google Search Console mostra se seus Schemas estão certos.
Heading hierarchy
Isso é simples mas muito ignorado. Uma página tem um H1. Só um. Depois você usa H2, H3 conforme necessário. Não pule de H1 pro H3.
Por quê? Google lê a estrutura. Se a hierarquia está errada, ele não entende quais seções são principais. Parece bobagem mas Search Console marca isso como erro.
Meu padrão: um H1 por página (o título), depois H2 pra seções principais, H3 pra subsseções. Simples e semântico.
Links internos são subestimados
Quando você linka uma página do seu site pra outra dentro de um artigo, Google entende que aquela página linkada é importante. E você passa “link juice” pra ela.
Nos meus blogs, quando falo de Astro, linko pro post anterior sobre Astro vs Next. Isso ajuda o Google a entender que aquela página é relevante pro tema.
Mas cuidado: não force links. Eles têm que fazer sentido pro leitor. Links forçados destroem experiência e Google penaliza sites com excesso de links internos baratos.
Alt text em imagens
Alt text é aquele texto que aparece se a imagem não carrega. Mas também é como Google entende do que é a imagem.
Eu escrevo descritivamente. Em vez de “imagem-1.png”, escrevo “Dashboard do Supabase com tabela de pacientes”. Assim o Google sabe que a imagem tem relevância pra busca sobre Supabase.
Acessibilidade de graça. Seu site fica melhor pra leitores de tela e pro Google.
Core Web Vitals ainda importam
SEO não é só Crawlability. Google usa velocidade como sinal de ranking. Lighthouse score, Largest Contentful Paint, layout shifts. Isso tudo importa.
No Astro com Vercel, geralmente sai verde. Mas se você está usando imagens pesadas sem otimização, pode cair.
Eu uso do Astro, não
. Ele já otimiza tudo. Formato webp automático, lazy loading, responsive.
Checklist pra você fazer hoje
- Adicionar meta description em todas as páginas
- Implementar og:image, og:title, og:description
- Gerar sitemap.xml (Astro faz automático)
- Adicionar robots.txt básico (ou deixar o padrão)
- Implementar Schema.org relevante (LocalBusiness, Article, etc)
- Revisar heading hierarchy em páginas principais
- Adicionar alt text descritivo em imagens
- Rodar Lighthouse e corrigir warnings de performance
SEO não é magia. É engenharia. E você já sabe fazer.
Diferença entre on-page, technical e off-page
SEO se divide em 3:
On-page: Meta tags, heading hierarchy, conteúdo bem escrito. É na página mesmo.
Technical: Core Web Vitals, sitemap, estrutura de URL, mobile-friendly, sitemap. É a estrutura da sua aplicação.
Off-page: Backlinks, menção de marca, social signals. É fora do seu controle (mais ou menos).
Como dev, você controla 100% de on-page e technical. Off-page é trabalho de marketing/PR.
Canonical tags: importante demais pra ignorar
Canonical é tag que diz: “essa página é a versão original, não a cópia”.
Sem canonical:
exemplo.com/produto-123
exemplo.com/produto-123?utm_source=email
exemplo.com/produto-123?utm_medium=social
Google acha que são 3 páginas diferentes. O tráfego dilui.
Com canonical na última:
<link rel="canonical" href="https://exemplo.com/produto-123" />
Google entende que é a mesma página. O tráfego concentra na versão original.
Toda página com parâmetro de query precisa de canonical.
XML Sitemap vs HTML sitemap
XML sitemap é pra Google. Arquivo puro de URLs. Coloca em /sitemap.xml e pronto.
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://seusite.com/</loc>
<lastmod>2026-04-05</lastmod>
<changefreq>weekly</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>https://seusite.com/blog/post-1</loc>
<lastmod>2026-04-05</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
</urlset>
HTML sitemap é pra usuário. Lista de links pra navegação. Ambos ajudam SEO mas servem função diferente.
Astro gera XML sitemap automaticamente se você configurar.
Robots.txt avançado
Básico:
User-agent: *
Allow: /
Sitemap: https://seusite.com/sitemap.xml
Avançado (se tem query do Supabase rodando):
User-agent: *
Disallow: /admin/
Disallow: /api/
Disallow: /user-dashboard/
Allow: /
Crawl-delay: 1
Sitemap: https://seusite.com/sitemap.xml
Disallow: /api/ é importante. Google não precisa rastrear API routes, economiza quota.
Crawl-delay: 1 diz: “rastreie, mas espera 1 segundo entre requests”. Não mata seu servidor.
Verificar indexação no Search Console
Entra em Search Console, aba Coverage. Google mostra:
- Páginas válidas (indexadas)
- Pages with warnings (indexadas mas com problema)
- Pages with errors (não indexadas)
- Excluded (você bloqueou em robots.txt)
Se muita página tá em “errors”, algo errado tá acontecendo. Pode ser meta description faltando, heading hierarchy errada, conteúdo muito curto.
Vi site com 50% das páginas não indexadas. Culpado: falta de H1 em metade das páginas. Simples de arrumar, Google indexou tudo.
Caching e SEO
Cache bem feito afeta SEO positivamente.
Com Vercel, Cache-Control automático é bom. Mas se você tá em server próprio, cuida disso:
Cache-Control: public, max-age=3600, s-maxage=86400
max-age é cache do browser (1h). s-maxage é cache do CDN (24h).
Google respeita headers de cache. Se seu site cacheado bem, indexação é mais eficiente.
Monitoramento anual de SEO técnico
Não é checklist que você faz uma vez. É monitoramento contínuo.
Todo trimestre:
- Rodar auditoria no Lighthouse
- Checkar Core Web Vitals no Search Console
- Verificar Coverage (páginas indexadas)
- Contar links internos
- Auditar alt text em imagens
Script simples:
// Audit script que você roda toda trimestre
const links = document.querySelectorAll('a[href^="/"]').length;
const images = document.querySelectorAll('img[alt=""]').length;
const h1 = document.querySelectorAll('h1').length;
console.log(`Total links internos: ${links}`);
console.log(`Imagens sem alt: ${images}`);
console.log(`H1 na página: ${h1}`);
Simples, mas mostra se algo quebrou.
- Implementar canonical em páginas com query params
- Gerar XML sitemap
- Criar robots.txt com disallow de /api/
- Colocar meta description em todas as páginas
- Auditar alt text (0 imagens sem alt)
- Verificar Coverage no Search Console
- Rodar Lighthouse e anotar scores
- Agendar audit trimestral
Leia também: SEO técnico pra devs | Schema.org no Astro | GEO: otimizar site pra IA
SEO técnico bem feito é base pra marketing depois.