API de metadatos y SEO en App Router
Exporte objetos de metadatos estáticos y dinámicos para establecer títulos y descripciones de páginas y tags OG.
API de metadatos y SEO en App Router es una lección gratuita de React Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de React Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de React Academy incluye 4 lecciones en total.
Por qué son importantes los metadatos
Unos buenos metadatos (título, descripción y etiquetas OG) mejoran el posicionamiento SEO y las vistas previas al compartir en redes sociales. El App Router de Next.js proporciona una API de metadatos con seguridad de tipos que genera etiquetas <head> en el servidor.
Exportación de metadatos estáticos
Exporte un objeto metadata desde cualquier page.tsx o layout.tsx para establecer etiquetas estáticas para ese 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>; }Plantillas de títulos
Utilice title.template en un layout para que las páginas secundarias obtengan automáticamente un título con el formato adecuado, sin repetir el nombre del sitio.
// 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"
};Metadatos dinámicos con generateMetadata
Exporte una función asíncrona generateMetadata para las rutas que necesiten etiquetas basadas en datos; recibe params y los metadatos principales.
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],
},
};
}Etiquetas Open Graph
La clave openGraph establece las etiquetas OG para compartir contenido en Facebook, LinkedIn y Slack.
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',
},
};Etiquetas de Twitter Cards
La clave twitter establece los metadatos específicos de las tarjetas de Twitter para mostrar vistas previas enriquecidas en los tweets.
twitter: {
card: 'summary_large_image',
title: 'My Product',
description: 'Buy now!',
images: ['https://example.com/twitter.png'],
creator: '@myhandle',
},Robots y URL canónicas
Controle el rastreo con robots y establezca URL canónicas para evitar penalizaciones por contenido duplicado.
export const metadata: Metadata = {
robots: { index: true, follow: true, googleBot: { index: true } },
alternates: { canonical: 'https://example.com/products' },
};Favicons e iconos
Coloque los archivos de iconos en app/ utilizando nombres reservados (icon.png, apple-icon.png, favicon.ico) o declárelos en 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',
},
};Generar imágenes OG con ImageResponse
Utilice ImageResponse de next/og en un route.ts para generar imágenes OG dinámicas con 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 }
);
}Datos estructurados (JSON-LD)
Añada datos estructurados JSON-LD insertando una etiqueta <script> en el JSX de la página; esto no forma parte de la API de metadatos, pero funciona junto con ella.
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>
</>
);
}Verificar los metadatos
Utilice las herramientas de desarrollo del navegador (la pestaña Network o la vista del código fuente HTML) o herramientas como opengraph.xyz para comprobar que los metadatos se renderizan correctamente en el HTML del servidor.
Comprobación rápida
¿Qué función de la API de metadatos de Next.js permite que las páginas secundarias hereden y personalicen un sufijo de título compartido, como «About | My App»?
Resumen
Exporte metadata para las etiquetas estáticas o generateMetadata() para las dinámicas. Utilice title.template en los layouts para mantener los títulos sin duplicación, establezca openGraph y twitter para las vistas previas en redes sociales, y use ImageResponse en un controlador de rutas para servir imágenes OG dinámicas.
Aprende React con un tutor de IA — gratis
Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.
- Cursos
- 88
- Lecciones
- 324
Preguntas frecuentes
¿La lección «API de metadatos y SEO en App Router» es gratis?
Sí — el texto completo de «API de metadatos y SEO en App Router» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de React Academy, actualiza a CoddyKit PRO. El curso de React Academy incluye 4 lecciones en total.
¿Qué aprenderé en «API de metadatos y SEO en App Router»?
Exporte objetos de metadatos estáticos y dinámicos para establecer títulos y descripciones de páginas y tags OG. Practicas React Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar React Academy?
No se requiere experiencia previa. React Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «API de metadatos y SEO en App Router»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de React Academy?
Sí. Cada lección de React Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Convenciones de archivos de App Router
- Componentes de servidor frente a componentes de cliente en Next.js
- Rutas dinámicas y grupos de rutas
- API de metadatos y SEO en App Router