API de metadados e SEO no App Router
Exporte objetos de metadados estáticos e dinâmicos para definir títulos, descrições e etiquetas OG das páginas.
API de metadados e SEO no App Router é uma aula grátis de React Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de React Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de React Academy inclui 4 aulas no total.
Por que os metadados são importantes
Bons metadados (título, descrição, marcadores de OG) melhoram as classificações de otimização para mecanismos de busca e as pré-visualizações de compartilhamento social. O Roteador de aplicativos do Next.js fornece uma interface de metadados com tipagem segura que gera marcadores <head> no servidor.
Exportação de metadados estáticos
Exporte um objeto metadata de qualquer page.tsx ou layout.tsx para definir marcadores estáticos para esse segmento.
import type { Metadata } from 'next';
export const metadata: Metadata = {
title: 'My App',
description: 'The best app ever built',
keywords: ['react', 'nextjs', 'typescript'],
};
export default function Page() { return <main>Hello</main>; }Modelos de título
Use title.template em um layout para que as páginas filhas recebam automaticamente um título formatado sem repetir o nome do site.
// app/layout.tsx
export const metadata: Metadata = {
title: {
template: '%s | My App',
default: 'My App',
},
};
// app/about/page.tsx
export const metadata: Metadata = {
title: 'About', // renders as "About | My App"
};Metadados dinâmicos com generateMetadata
Exporte uma função assíncrona generateMetadata para rotas que precisam de marcadores baseados em dados — ela recebe params e os metadados do pai.
export async function generateMetadata({ params }: { params: { id: string } }): Promise<Metadata> {
const product = await getProduct(params.id);
return {
title: product.name,
description: product.summary,
openGraph: {
title: product.name,
images: [product.imageUrl],
},
};
}Marcadores do Open Graph
A chave openGraph define marcadores de OG para compartilhamento em redes sociais.
export const metadata: Metadata = {
openGraph: {
title: 'My Product',
description: 'Buy now!',
url: 'https://example.com/product',
siteName: 'My App',
images: [{ url: 'https://example.com/og.png', width: 1200, height: 630 }],
type: 'website',
locale: 'en_US',
},
};Marcadores de cartões para redes sociais
A chave twitter define metadados específicos de cartões para gerar pré-visualizações avançadas nas publicações.
twitter: {
card: 'summary_large_image',
title: 'My Product',
description: 'Buy now!',
images: ['https://example.com/twitter.png'],
creator: '@myhandle',
},Robots e canônicos
Controle o rastreamento com robots e defina URLs canônicas para evitar penalizações por conteúdo duplicado.
export const metadata: Metadata = {
robots: { index: true, follow: true, googleBot: { index: true } },
alternates: { canonical: 'https://example.com/products' },
};Favicons e ícones
Coloque arquivos de ícone em app/ usando nomes reservados (icon.png, apple-icon.png, favicon.ico) ou declare-os em metadata.icons.
// Convention: place app/icon.png → auto-detected as favicon
// Or declare explicitly:
export const metadata: Metadata = {
icons: {
icon: '/icon.png',
apple: '/apple-icon.png',
shortcut: '/shortcut-icon.png',
},
};Gerando imagens de OG com ImageResponse
Use ImageResponse de next/og em um route.ts para gerar imagens de OG dinâmicas com JSX renderizado como PNG.
// app/og/route.ts
import { ImageResponse } from 'next/og';
export async function GET(req: Request) {
const { searchParams } = new URL(req.url);
const title = searchParams.get('title') ?? 'Default';
return new ImageResponse(
<div style={{ fontSize: 48, background: '#fff', width: '100%', height: '100%' }}>
{title}
</div>,
{ width: 1200, height: 630 }
);
}Dados estruturados (JSON-LD)
Adicione dados estruturados no formato JSON-LD injetando uma tag <script> no JSX da página — isso não faz parte da interface de metadados, mas funciona em conjunto com ela.
export default function ProductPage({ product }) {
const jsonLd = {
'@context': 'https://schema.org',
'@type': 'Product',
name: product.name,
price: product.price,
};
return (
<>
<script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }} />
<h1>{product.name}</h1>
</>
);
}Verificando os metadados
Use o DevTools do navegador (aba Rede, visualização do código-fonte HTML) ou ferramentas como opengraph.xyz para verificar se os metadados são renderizados corretamente no HTML do servidor.
Verificação rápida
Qual recurso da interface de metadados do Next.js permite que as páginas filhas herdem e personalizem um sufixo de título compartilhado, como 'Sobre | Meu aplicativo'?
Recapitulação
Exporte metadata para marcadores estáticos ou generateMetadata() para marcadores dinâmicos. Use title.template nos layouts para manter títulos sem repetição, defina openGraph e twitter para pré-visualizações sociais e use ImageResponse em um manipulador de rota para fornecer imagens de OG dinâmicas.
Perguntas Frequentes
A aula “API de metadados e SEO no App Router” é grátis?
Sim — o texto completo de “API de metadados e SEO no App Router” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de React Academy, atualize para CoddyKit PRO. O curso de React Academy inclui 4 aulas no total.
O que vou aprender em “API de metadados e SEO no App Router”?
Exporte objetos de metadados estáticos e dinâmicos para definir títulos, descrições e etiquetas OG das páginas. Você pratica React Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar React Academy?
Nenhuma experiência prévia é necessária. React Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.
Quanto tempo leva a aula “API de metadados e SEO no App Router”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de React Academy?
Sim. Cada aula de React Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Convenções de arquivos do App Router
- Componentes de servidor e cliente no Next.js
- Rotas dinâmicas e grupos de rotas
- API de metadados e SEO no App Router