Implementación
Cómo se construye
La ruta [...slug].astro con getStaticPaths (una página por producto), el paso de props a ProductLayout (frontmatter + cuerpo en el slot), y el patrón de bloques opcionales (solo se pintan con datos).
La ruta es el corazón: getStaticPaths recorre getCollection('productos'), y por cada producto devuelve { params: { slug }, props: { producto, related } }. Astro genera una página estática por cada uno en build. El cuerpo Markdown se obtiene con render(producto) y se inyecta en el slot de ProductLayout como <Content />.
ProductLayout recibe pocos campos base (title, description, image, price, faqs, related) y un puñado de bloques opcionales (specs, applications, certifications). Cada bloque se renderiza tras un guard (specs.length > 0 && …), así que un producto sin ese dato simplemente no genera la sección. Abajo, las tres recetas: la ruta, el paso a layout y los bloques.