Layouts: src/layouts/
Un Layout es una plantilla que define el esqueleto HTML global que comparten múltiples páginas de tu sitio web. Generalmente incluye la etiqueta <!DOCTYPE html>, la cabecera <head>, el navegador principal <header> y el pie de página <footer> ya sea escrita dentro del mismo o creada con componentes.
Características clave de un Layout
- SIEMPRE utiliza la etiqueta
<slot />: En los layouts, siempre se debe dejar una "ranura" reservada en el medio para inyectar el contenido específico de cada página. En el caso de los Layouts la etiqueta<slot />es obligatoria (para inyectar toda la página dentro), a diferencia de los componentes cuyo uso es opcional (para inyectar contenido pequeño) y depende de su naturaleza. - Gestiona la metadata y el SEO: Recibe mediante
Propsdatos como el<title>de la pestaña del navegador o la description para buscadores. - Mantiene la consistencia visual: Si se cambia algo en el layout base (por ejemplo, el menú de navegación), se actualiza automáticamente en toda la web.
Reglas de ubicación y nombrado
- Carpeta: Los layouts de Astro se ubican dentro de la carpeta
src/layouts/. - Extensión Utilizan la extensión
.astroSon archivos nativos de Astro, a diferencia de los componentes, que pueden ser interactivos (React/Svelte/Vue) para aquellas piezas de la interfaz que necesiten interactividad (islas). - Nomenclatura (UpperCamelCase): Por convención estándar, los nombres de archivos deben empezar con mayúscula y usar PascalCase / UpperCamelCase (ejemplos: BaseLayout.astro, BlogPostLayout.astro, DefaultLayout.astro).
Ejemplo de Layout
src/layouts/DefaultLayout.astro
¿Cómo envuelve el contenido de la página?
src/pages/index.astro
src/layouts/ vs src/components/
Aunque técnicamente los archivos .astro de ambas carpetas son componentes de Astro y comparten el mismo lenguaje, cumplen propósitos de diseño y arquitectura completamente opuestos.
La diferencia fundamental
- Los componentes (
src/components/) son piezas de contenido ("ladrillos"). Van dentro de la página o de otros componentes. - Los layouts (
src/layouts/): Son estructuras envolventes (el "marco de la casa"). Van alrededor de la página completa o del contenido principal.
┌────────────────────────────────────────────────────────┐
│ LAYOUT BASE (BaseLayout.astro) │
│ ├── <head> (Metadatos, SEO, Favicon, CSS Global) │
│ ├── <Header /> ────────────┐ │
│ │ │ │
│ │ PÁGINA (index.astro) │ Componentes de UI │
│ │ ├── <HeroSection /> │ (src/components/) │
│ │ ├── <PostCard /> │ │
│ │ └── <Footer /> ────────┘ │
│ │ │
│ └── </body> │
└────────────────────────────────────────────────────────┘