Documentação Técnica

Manual SEO para Desenvolvedores

Guia oficial para manter e evoluir o SEO do Instituto Venditti com máxima performance.

1. Stack e Arquitetura

O site usa TanStack Start (React 19 + Vite 7) com SSR no edge (Cloudflare Workers). Cada rota é um arquivo em src/routes/ e possui seu próprio head().

  • Domínio oficial: https://institutovenditti.lovable.app
  • Sitemap dinâmico: /sitemap.xml (gerado em src/routes/sitemap[.]xml.ts)
  • Robots: public/robots.txt
  • JSON-LD Organization: em src/routes/__root.tsx

2. Regras Obrigatórias de Meta Tags por Rota

Toda rota pública DEVE definir, no head():

  • title único (<60 caracteres, com palavra-chave)
  • description única (<160 caracteres)
  • og:title, og:description, og:url
  • canonical — APENAS na rota leaf, NUNCA no __root.tsx
  • og:image absoluto (URL https://...) quando houver imagem relevante
export const Route = createFileRoute("/exemplo")({
  head: () => ({
    meta: [
      { title: "Título Único — Instituto Venditti" },
      { name: "description", content: "Descrição única de até 160 caracteres." },
      { property: "og:title", content: "Título Único" },
      { property: "og:description", content: "Descrição para redes sociais." },
      { property: "og:url", content: "https://institutovenditti.lovable.app/exemplo" },
      { property: "og:image", content: "https://institutovenditti.lovable.app/og-exemplo.jpg" },
    ],
    links: [
      { rel: "canonical", href: "https://institutovenditti.lovable.app/exemplo" },
    ],
  }),
  component: Pagina,
});

3. Atualizando o Sitemap

Ao criar uma nova rota pública, adicione uma entrada em src/routes/sitemap[.]xml.ts dentro do array entries. Rotas administrativas, /lovable e páginas com noindex NÃO entram no sitemap.

{ path: "/nova-rota", changefreq: "monthly", priority: "0.7" },

Após publicar, envie o sitemap no Google Search Console: /sitemap.xml.

4. Dados Estruturados (JSON-LD)

O schema Organization global vive em __root.tsx. Para páginas específicas, adicione schemas no head().scripts:

  • Artigos/Blog: Article
  • Cursos: Course
  • Eventos: Event
  • FAQs: FAQPage
  • Navegação profunda: BreadcrumbList
scripts: [{
  type: "application/ld+json",
  children: JSON.stringify({
    "@context": "https://schema.org",
    "@type": "Course",
    name: "Nome do Curso",
    provider: { "@type": "Organization", name: "Instituto Venditti" },
  }),
}]

5. Performance (Core Web Vitals)

  • LCP: hero image com width, height e fetchpriority="high". Pré-carregar via head().links.
  • CLS: sempre definir dimensões explícitas em <img> e iframes.
  • INP: usar useTransition em filtros e debounce em buscas.
  • Imagens: formato WebP/AVIF via vite-imagetools (?format=webp).
  • Lazy loading: loading="lazy" em tudo abaixo do fold.
  • Fontes: font-display: swap e preconnect ao provedor.
// Preload do LCP na rota dona da imagem
head: () => ({
  links: [
    { rel: "preload", as: "image", href: "/hero.webp", fetchpriority: "high" },
  ],
})

6. Acessibilidade e HTML Semântico

  • UM único <h1> por página, hierarquia de headings sem pular níveis.
  • alt descritivo em todas as imagens (vazio só em decorativas).
  • Landmarks: <header>, <nav>, <main>, <footer>.
  • Contraste mínimo WCAG AA (4.5:1 texto normal).
  • Foco visível em todos os elementos interativos.

7. Robots & Indexação

public/robots.txt libera todo o site e aponta para o sitemap. Para bloquear uma página da indexação, use noindex no head() da rota:

meta: [{ name: "robots", content: "noindex, follow" }]

Páginas atualmente com noindex: /manual-seo.

8. Checklist ao Criar Nova Página

  1. Criar src/routes/nome-da-rota.tsx com head() completo.
  2. Adicionar entrada em sitemap[.]xml.ts.
  3. Verificar canonical e og:url com URL absoluta.
  4. Definir og:image (1200×630) se houver imagem hero.
  5. Conferir hierarquia de headings (1× h1).
  6. Testar Lighthouse (meta Performance + SEO ≥ 95).
  7. Resubmeter sitemap no Google Search Console.

9. Ferramentas de Auditoria

  • Google Search Console — indexação e Core Web Vitals reais.
  • PageSpeed Insights — diagnóstico Lighthouse.
  • Rich Results Test — validação de JSON-LD.
  • Schema Markup Validator — schema.org.
  • Aba SEO do Lovable — varredura interna automática.

10. Contato Técnico

Dúvidas sobre esta documentação devem ser direcionadas ao responsável técnico do projeto via canal interno. Mantenha este manual atualizado a cada alteração estrutural de SEO.

Última atualização: Maio de 2026