v2026.06+ added
Content Collections en Astro 7
Cómo estructurar un blog bilingüe con esquemas tipados y carpetas por locale.
astrotypescriptblog
Astro Content Collections ofrecen validación en build time y autocompletado en el editor.
Esquema con Zod
En src/content/config.ts defines el contrato de cada artículo:
const blog = defineCollection({
loader: glob({ pattern: "**/*.md", base: "./src/content/blog" }),
schema: z.object({
title: z.string(),
publishedAt: z.coerce.date(),
changeType: z.enum(["added", "fixed", "improved", "deprecated"]),
}),
});
Si el frontmatter no cumple el esquema, el build falla de inmediato.
Carpetas por idioma
Para i18n sin traducción automática, cada locale tiene su carpeta:
content/blog/
├── es/
│ └── articulo.md
└── en/
└── article.md
El id del entry incluye la ruta (es/articulo), lo que permite filtrar por locale en getCollection().
Renderizado
Cada entry expone .render() para obtener el componente de contenido y metadata de headings — ideal para tablas de contenido o enlaces internos en fases futuras.