SEO e Meta Tags no Nuxt 4 em 2026: useHead, useSeoMeta e Perguntas de Entrevista

Guia completo sobre os composables useHead e useSeoMeta do Nuxt 4. Otimização SEO, Open Graph, Twitter Cards e perguntas técnicas para entrevistas Vue.

SEO e Meta Tags no Nuxt 4 em 2026: useHead, useSeoMeta e Perguntas de Entrevista

O Nuxt 4 oferece dois composables para gerenciar meta tags de SEO: useHead para elementos head gerais e useSeoMeta para metadados SEO com tipagem segura. Com o fim de vida do Nuxt 3 programado para 31 de julho de 2026, dominar esses composables no Nuxt 4.5 torna-se essencial para qualquer desenvolvedor Vue que esteja se preparando para entrevistas técnicas.

Diferença Principal

useSeoMeta gerencia tags específicas de SEO (title, description, Open Graph, Twitter Cards) com suporte completo a TypeScript. useHead gerencia todo o resto: scripts, folhas de estilo, URLs canônicas e meta tags personalizadas. Ambos os composables trabalham juntos para um gerenciamento completo do head.

useSeoMeta: Metadados SEO com Tipagem Segura no Nuxt 4

O composable useSeoMeta aceita um objeto plano com mais de 100 propriedades tipadas. Essa abordagem elimina erros comuns como confundir os atributos name com property nas tags Open Graph.

vue
<!-- pages/product/[id].vue -->
<script setup lang="ts">
const product = await useFetch(`/api/products/${route.params.id}`)

useSeoMeta({
  title: () => product.data.value?.name,
  description: () => product.data.value?.description,
  ogTitle: () => product.data.value?.name,
  ogDescription: () => product.data.value?.description,
  ogImage: () => product.data.value?.imageUrl,
  ogType: 'product',
  twitterCard: 'summary_large_image',
  twitterTitle: () => product.data.value?.name,
  twitterDescription: () => product.data.value?.description,
  twitterImage: () => product.data.value?.imageUrl,
})
</script>

A sintaxe com arrow function () => value cria getters reativos. Quando product.data muda, as meta tags são atualizadas automaticamente. Para páginas estáticas onde as tags SEO nunca mudam após a renderização inicial, essa reatividade adiciona overhead desnecessário.

Meta Tags Apenas no Servidor para Melhor Performance

Os rastreadores de mecanismos de busca e bots de IA como GPTBot e ClaudeBot leem apenas a resposta HTML inicial. Eles não executam JavaScript. Isso significa que atualizações de meta tags no lado do cliente são invisíveis para eles.

vue
<!-- pages/about.vue -->
<script setup lang="ts">
if (import.meta.server) {
  useSeoMeta({
    title: 'Sobre o SharpSkill',
    description: 'Plataforma de preparação para entrevistas técnicas para desenvolvedores',
    ogTitle: 'Sobre o SharpSkill',
    ogDescription: 'Plataforma de preparação para entrevistas técnicas para desenvolvedores',
    ogImage: 'https://sharpskill.dev/og-about.png',
    robots: 'index, follow',
  })
}
</script>

Envolver useSeoMeta em import.meta.server garante que o composable só execute durante o SSR. As meta tags aparecem no HTML enviado aos rastreadores, mas nenhum watcher reativo é criado no cliente. Isso reduz o tamanho do bundle e melhora a performance de hidratação.

Enquanto useSeoMeta cobre os metadados SEO, useHead gerencia todo o resto: scripts externos, folhas de estilo, URLs canônicas e atributos HTML/body.

vue
<!-- pages/blog/[slug].vue -->
<script setup lang="ts">
const route = useRoute()
const config = useRuntimeConfig()

useHead({
  link: [
    {
      rel: 'canonical',
      href: `${config.public.siteUrl}/blog/${route.params.slug}`,
    },
    {
      rel: 'alternate',
      hreflang: 'pt',
      href: `${config.public.siteUrl}/pt/blog/${route.params.slug}`,
    },
  ],
  script: [
    {
      type: 'application/ld+json',
      innerHTML: JSON.stringify({
        '@context': 'https://schema.org',
        '@type': 'Article',
        headline: article.value?.title,
        author: { '@type': 'Person', name: 'Anthony Fillion-Maillet' },
        datePublished: article.value?.publishedAt,
      }),
    },
  ],
})
</script>

O array link gerencia URLs canônicas e tags hreflang para internacionalização. O array script injeta dados estruturados para resultados enriquecidos. Ambos são críticos para SEO, mas ficam fora do escopo do useSeoMeta.

Pronto para mandar bem nas entrevistas de Vue.js / Nuxt.js?

Pratique com nossos simuladores interativos, flashcards e testes tecnicos.

Hierarquia de Meta Tags: Níveis App, Layout e Página

O Nuxt 4 mescla as meta tags de três níveis: nuxt.config.ts (valores padrão do app), layouts e páginas. As tags no nível da página sobrescrevem as do layout, que sobrescrevem as do app.

nuxt.config.tstypescript
export default defineNuxtConfig({
  app: {
    head: {
      titleTemplate: '%s | SharpSkill',
      meta: [
        { charset: 'utf-8' },
        { name: 'viewport', content: 'width=device-width, initial-scale=1' },
      ],
      link: [
        { rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' },
      ],
    },
  },
})
vue
<!-- layouts/default.vue -->
<script setup lang="ts">
useSeoMeta({
  ogSiteName: 'SharpSkill',
  twitterSite: '@sharpskill',
})
</script>
vue
<!-- pages/index.vue -->
<script setup lang="ts">
useSeoMeta({
  title: 'Preparação para Entrevistas Técnicas',
  description: 'Prepare-se para sua próxima entrevista técnica com questões práticas e simulações',
})
</script>

O título final se torna "Preparação para Entrevistas Técnicas | SharpSkill" porque a página fornece o valor do placeholder %s e a config fornece o template. Essa hierarquia evita repetição enquanto permite sobrescritas específicas por página.

Perguntas Comuns de Entrevista sobre SEO no Nuxt

Entrevistas técnicas para posições Vue/Nuxt frequentemente incluem perguntas sobre SSR e otimização SEO. Estes são os padrões que os entrevistadores esperam.

Quando useSeoMeta deve usar getters reativos versus valores estáticos?

Valores estáticos funcionam para páginas com conteúdo fixo: landing pages, páginas sobre, páginas legais. Getters reativos são necessários quando as meta tags dependem de dados buscados ou parâmetros de rota. A diferença de performance importa em escala: 50 páginas com watchers desnecessários desperdiçam memória e desaceleram a hidratação.

Como os rastreadores de IA diferem do Googlebot?

O Googlebot executa JavaScript e aguarda a renderização do lado do cliente. Rastreadores de IA como GPTBot e ClaudeBot buscam HTML bruto sem executar scripts. Meta tags renderizadas no servidor alcançam ambos. Tags apenas do cliente não alcançam nem bots de IA nem mecanismos de busca antigos.

O que mais frequentemente quebra as tags Open Graph?

A ausência das dimensões de og:image. Facebook e LinkedIn fazem cache agressivo de dados OG. Quando as dimensões da imagem estão ausentes, as plataformas podem exibir miniaturas incorretamente ou não exibir nada.

vue
<script setup lang="ts">
useSeoMeta({
  ogImage: 'https://example.com/og-image.png',
  ogImageWidth: 1200,
  ogImageHeight: 630,
  ogImageAlt: 'Prévia do artigo mostrando editor de código com sintaxe Vue',
})
</script>

Incluir ogImageWidth, ogImageHeight e ogImageAlt previne problemas de renderização e melhora as pontuações de acessibilidade.

useHeadSafe para Conteúdo Gerado por Usuários

Quando meta tags incluem entrada de usuários, vulnerabilidades XSS se tornam uma preocupação. O composable useHeadSafe sanitiza os valores antes da injeção.

vue
<!-- pages/profile/[username].vue -->
<script setup lang="ts">
const user = await useFetch(`/api/users/${route.params.username}`)

useHeadSafe({
  title: user.data.value?.displayName,
  meta: [
    { name: 'description', content: user.data.value?.bio },
  ],
})
</script>

Um nome de usuário malicioso como <script>alert('xss')</script> é escapado em vez de executado. O useHead padrão não sanitiza, então useHeadSafe é obrigatório para qualquer conteúdo não confiável.

Módulo Nuxt SEO para Requisitos Avançados

O módulo Nuxt SEO agrupa geração de sitemap, gerenciamento de robots.txt, marcação schema.org e geração de imagens OG. Para projetos que requerem ferramentas SEO abrangentes além dos composables integrados, esse módulo reduz código repetitivo.

nuxt.config.tstypescript
export default defineNuxtConfig({
  modules: ['@nuxtjs/seo'],
  site: {
    url: 'https://sharpskill.dev',
    name: 'SharpSkill',
  },
})

O módulo auto-gera sitemaps a partir das rotas, gerencia a normalização de trailing slashes e fornece composables para dados estruturados. Equipes mantendo sites grandes se beneficiam da configuração centralizada.

Comece a praticar!

Teste seus conhecimentos com nossos simuladores de entrevista e testes tecnicos.

Melhores Práticas de SEO no Nuxt 4 para Produção

  • Usar useSeoMeta para todas as tags SEO (title, description, Open Graph, Twitter Cards) com autocompletar TypeScript
  • Usar useHead para URLs canônicas, tags hreflang, dados estruturados e scripts externos
  • Envolver meta tags estáticas em import.meta.server para eliminar o overhead de reatividade no cliente
  • Incluir ogImageWidth, ogImageHeight e ogImageAlt para prévias de compartilhamento em redes sociais
  • Usar useHeadSafe para qualquer conteúdo gerado por usuários para prevenir ataques XSS
  • Definir valores padrão no nível do app em nuxt.config.ts e sobrescrever no nível da página apenas quando necessário
  • Testar com Google Rich Results Test para validar dados estruturados
  • Verificar a renderização na aba Network do DevTools do navegador com JavaScript desabilitado para simular o comportamento dos rastreadores
Desafio do dia

Você saberia encontrar o bug em Vue.js / Nuxt.js?

Um trecho real, um bug escondido, uma tentativa por dia. Sem conta para testar.

Anthony Fillion-Maillet

Escrito por

Anthony Fillion-Maillet

Fundador da SharpSkill

Desenvolvedor fullstack há mais de 10 anos. Dirige a SharpSkill e responde por tudo o que é publicado aqui.

Atualizado em 12 de setembro de 2026

Compartilhar

Artigos relacionados