CodeAventura
Astro
▸Producción▸SEO y metadata

Misión

●iniciando…
Astro
Preparando entorno

Esto solo ocurre la primera vez que abres el curso.

21 / 22SEO y metadata
Anterior

SEO y metadata

Por qué importa el <head>

Lo que pones en el <head> es invisible para el usuario, pero clave para Google, Twitter, WhatsApp, Facebook, navegadores y lectores RSS. Un <head> bien hecho gana clics y mejora el ranking; uno descuidado pierde tráfico antes de que el usuario llegue a verte.

Las piezas mínimas:

  • <title> — qué aparece en la pestaña y en los resultados de búsqueda.
  • <meta name="description"> — el snippet bajo el título en Google.
  • <meta property="og:title"> y og:description — Open Graph, lo que se ve cuando compartes el enlace.
  • <meta property="og:image"> — la imagen del unfurl.
  • <link rel="canonical"> — la URL "oficial" (evita penalizaciones por contenido duplicado).

Centralizarlo en el layout

Lo ergonómico es que el <head> lo construya el layout, recibiendo los datos por props:

Cada página solo tiene que pasar title y description:

Datos clave que tienes "gratis" en Astro

  • Astro.url → URL de la petición/build (con pathname, search, etc.).
  • Astro.site → el site que pongas en astro.config.mjs. Útil para construir URLs absolutas.
  • Astro.params y Astro.props → para componer titles dinámicos.

Sitemap y RSS

Astro tiene integraciones oficiales:

  • @astrojs/sitemap → genera sitemap-index.xml automático.
  • @astrojs/rss → endpoint RSS desde tus content collections.

Las añades en astro.config.mjs con integrations: [sitemap(), ...].

Schema.org y JSON-LD

Para datos estructurados (artículos, productos, eventos), inyecta JSON-LD desde el layout:

set:html mete el contenido sin escaparlo (úsalo solo cuando confíes en los datos).

Tu desafío 🚀

Abre src/layouts/BaseLayout.astro. Tu trabajo:

  1. Declara interface Props { title: string; description: string } en el frontmatter.
  2. Destructura const { title, description } = Astro.props.
  3. Dentro del <head>:
    • Pinta el <title>{title}</title>.
    • Añade <meta name="description" content={description} />.
    • Añade <meta property="og:title" content={title} />.

Si haces todo, cualquier página que use BaseLayout puede pasarle un title/description y obtener un <head> SEO-ready, consistente y sin repetir código.