SEO não é só palavras-chave e backlinks. Existe uma camada inteira que vive no código — e que a maioria dos projetos ignora até o site estar no ar e com problema de indexação. Este checklist cobre os itens técnicos que um desenvolvedor controla diretamente, com exemplos de implementação em cada um.
1. Canonical URL: evitando conteúdo duplicado
A canonical URL diz ao Google qual é a versão "oficial" de uma página quando o mesmo conteúdo pode ser acessado por URLs diferentes. Sem ela, o Google pode dividir a autoridade entre variantes e rankear a versão errada.
<!-- No <head> de cada página -->
<link rel="canonical" href="https://www.seusite.com.br/pagina/" />
Pontos de atenção:
- www vs não-www: escolha um e redirecione o outro com 301. A canonical deve refletir o domínio canônico.
- Trailing slash:
/paginae/pagina/são URLs diferentes para o Google. Seja consistente e use a mesma forma na canonical e no sitemap. - Parâmetros de query:
/produtos?cor=azulnão deve ter canonical para/produtosa não ser que o conteúdo seja idêntico. - Páginas paginadas: cada página de paginação deve ter canonical para si mesma (não para a página 1).
2. Meta tags essenciais
Além de <title> e <meta name="description">, existem tags que impactam diretamente o comportamento do crawler e a exibição em redes sociais.
<!-- Controle de indexação -->
<meta name="robots" content="index, follow" />
<!-- Para páginas que não devem indexar: -->
<meta name="robots" content="noindex, nofollow" />
<!-- Open Graph (Facebook, LinkedIn, WhatsApp) -->
<meta property="og:title" content="Título da página" />
<meta property="og:description" content="Descrição em até 300 chars" />
<meta property="og:type" content="website" /> <!-- ou "article" para posts -->
<meta property="og:url" content="https://www.seusite.com.br/pagina/" />
<meta property="og:image" content="https://www.seusite.com.br/og-image.png" />
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />
<meta property="og:locale" content="pt_BR" />
<!-- Twitter/X Card -->
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="Título da página" />
<meta name="twitter:description" content="Descrição" />
<meta name="twitter:image" content="https://www.seusite.com.br/og-image.png" />
Limites que importam: título entre 30 e 60 caracteres (o Google trunca depois disso no SERP), description entre 120 e 160 caracteres. OG image ideal: 1200×630px, menos de 1MB.
3. Schema.org: dados estruturados
Schema markup é código JSON-LD no <head> que diz ao Google o que sua página representa. Isso habilita rich snippets — estrelas de avaliação, perguntas frequentes, breadcrumbs, preços — que aumentam o CTR sem mudar o conteúdo visível.
Organization (toda empresa deve ter)
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Nome da Empresa",
"url": "https://www.seusite.com.br",
"logo": {
"@type": "ImageObject",
"url": "https://www.seusite.com.br/logo.png",
"width": 400,
"height": 400
},
"contactPoint": {
"@type": "ContactPoint",
"contactType": "customer service",
"email": "contato@empresa.com.br"
},
"sameAs": [
"https://www.linkedin.com/company/empresa",
"https://www.instagram.com/empresa"
]
}
BreadcrumbList (navegação hierárquica)
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{ "@type": "ListItem", "position": 1, "name": "Home", "item": "https://www.seusite.com.br" },
{ "@type": "ListItem", "position": 2, "name": "Blog", "item": "https://www.seusite.com.br/blog" },
{ "@type": "ListItem", "position": 3, "name": "Título do Artigo", "item": "https://www.seusite.com.br/blog/slug" }
]
}
FAQPage (perguntas frequentes — gera rich snippet)
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "Qual o prazo de entrega?",
"acceptedAnswer": {
"@type": "Answer",
"text": "O prazo depende do escopo do projeto..."
}
}
]
}
BlogPosting (artigos do blog)
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "Título do artigo",
"description": "Descrição breve",
"datePublished": "2026-01-20",
"dateModified": "2026-01-20",
"inLanguage": "pt-BR",
"keywords": "keyword1, keyword2",
"author": {
"@type": "Organization",
"name": "Neryx",
"url": "https://www.neryx.com.br"
},
"publisher": {
"@type": "Organization",
"name": "Neryx",
"logo": { "@type": "ImageObject", "url": "https://www.neryx.com.br/logo.png" }
},
"mainEntityOfPage": { "@type": "WebPage", "@id": "https://www.seusite.com.br/blog/slug" }
}
Valide sempre em search.google.com/test/rich-results.
4. robots.txt
O robots.txt controla quais URLs o crawler pode visitar. Um erro aqui pode desindexar o site inteiro. Configuração mínima segura:
User-agent: *
Allow: /
# Bloqueia parâmetros de busca interna (evita conteúdo duplicado)
Disallow: /*?q=
Disallow: /*?s=
Disallow: /*?search=
# Bloqueia rotas de admin/API que não devem ser indexadas
Disallow: /admin/
Disallow: /api/
Sitemap: https://www.seusite.com.br/sitemap-index.xml
Atenção: Disallow: / bloqueia tudo. Disallow: /admin/ bloqueia só a pasta admin. Teste em Search Console → Testador de robots.txt antes de publicar.
5. Sitemap XML
O sitemap informa ao Google quais URLs existem no site e quando foram atualizadas pela última vez. Para sites Astro, o @astrojs/sitemap gera automaticamente. Para outros frameworks:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://www.seusite.com.br/</loc>
<lastmod>2026-01-20</lastmod>
<changefreq>monthly</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>https://www.seusite.com.br/sobre/</loc>
<lastmod>2026-01-15</lastmod>
<priority>0.8</priority>
</url>
</urlset>
Regras importantes:
- Inclua apenas URLs que devem ser indexadas (sem noindex, sem redirecionamentos)
- Use sempre a URL canônica (com ou sem trailing slash, consistente com a canonical tag)
- Exclua URLs com parâmetros de query, páginas de erro e páginas de obrigado
- Submeta o sitemap no Google Search Console
6. Performance como fator de SEO
Core Web Vitals são um fator de ranqueamento. Os três pontos de maior impacto no score do Google:
- LCP ≤ 2,5s: maior elemento visível deve renderizar rápido. Principal causa: imagens sem fetchpriority e fontes externas.
- CLS ≤ 0,1: sem saltos de layout. Principal causa: imagens sem width/height declarados.
- INP ≤ 200ms: respostas às interações devem ser rápidas. Principal causa: JavaScript pesado no main thread.
Para sites estáticos, a maneira mais rápida de melhorar TTFB (Time to First Byte) — que influencia LCP — é usar um CDN na borda como Cloudflare Pages ou Vercel Edge Network. O HTML fica fisicamente próximo do usuário.
7. URLs amigáveis e estrutura de navegação
URLs legíveis facilitam o entendimento do Google sobre a hierarquia do site e melhoram CTR nos SERPs porque o usuário sabe o que vai encontrar antes de clicar.
- Use hífens como separador:
/desenvolvimento-de-softwarenão/desenvolvimento_de_software - Evite parâmetros de ID:
/blog/meu-artigoé melhor que/blog?id=123 - Hierarquia clara:
/blog/categoria/slugsinaliza estrutura ao crawler - Evite URLs muito longas (mais de 5 segmentos) — o Google lê mas não favorece
8. Links internos
Links internos distribuem autoridade (PageRank) entre páginas e ajudam o Google a entender quais páginas são mais importantes. Práticas essenciais:
- Use anchor text descritivo: "saiba mais sobre arquitetura de microsserviços" é melhor que "clique aqui"
- Páginas importantes (serviços, contato) devem receber links de várias outras páginas do site
- Artigos do blog devem linkar para páginas de serviço relevantes — o leitor do artigo é lead potencial
- Não deixe páginas "órfãs" (sem links apontando para elas) — o crawler pode não encontrá-las
9. Internacionalização e hreflang
Se o site tem versões em diferentes idiomas ou regiões, o atributo hreflang diz ao Google qual versão servir para cada localidade:
<link rel="alternate" hreflang="pt-BR" href="https://www.seusite.com.br/pagina/" />
<link rel="alternate" hreflang="en" href="https://www.seusite.com/en/page/" />
<link rel="alternate" hreflang="x-default" href="https://www.seusite.com.br/pagina/" />
Para sites exclusivamente em português do Brasil, não é necessário — mas use lang="pt-BR" no <html> para sinalizar o idioma.
Checklist de auditoria rápida
Execute esses comandos antes de publicar qualquer projeto:
- Cada página tem
<title>único entre 30–60 chars? - Cada página tem
<meta name="description">único entre 120–160 chars? - Cada página tem
<link rel="canonical">apontando para si mesma? - Imagens têm
width,heightealt? - A imagem LCP tem
fetchpriority="high"? - Fontes são auto-hospedadas ou usam
font-display: swap? - O robots.txt não bloqueia páginas importantes?
- O sitemap está referenciado no robots.txt e submetido no Search Console?
- Há schema Organization na homepage?
- Páginas que não devem indexar têm
noindexe estão excluídas do sitemap? - PageSpeed Insights mostra verde nos Core Web Vitals?
SEO técnico não é mágica — é engenharia. Cada item do checklist acima remove um obstáculo que o Google enfrentaria para entender, rastrear ou rankear o seu site. A diferença entre dois sites com conteúdo similar muitas vezes está aqui, no código.