Curso de Astro
🧾 1. ¿Qué es Markdown?
Markdown es un formato de texto plano que se usa para escribir contenido con formato sin usar HTML directamente. Es muy usado en GitHub, blogs y documentación.
Ejemplo:
1# Título principal 2## Subtítulo 3**negrita**, *cursiva*, [enlace](https://astro.build) 4 5- Elemento 1 6- Elemento 2 7- Elemento 3
Astro convierte automáticamente este texto en HTML optimizado.
🧱 2. Estructura típica de un blog en Astro
Puedes crear un blog solo con Markdown:
src/
├── pages/
│ ├── index.astro
│ └── blog/
│ └── [slug].astro
└── content/
└── posts/
├── primer-post.md
└── segundo-post.md
✍️ 3. Crear un post Markdown
Crea un archivo en:
src/content/posts/primer-post.md
1--- 2title: "Mi primer post con Astro" 3date: "2025-10-06" 4author: "Ángel González" 5tags: ["astro", "markdown"] 6--- 7 8¡Hola! 9Este es mi **primer post** creado con *Astro*. 10Markdown me permite escribir de forma rápida, simple y elegante.
🧩 Lo que está entre las líneas --- se llama frontmatter: son metadatos que Astro puede leer (como el título o la fecha).
⚙️ 4. Activar el soporte para contenido en Astro
Astro 3+ ya incluye un sistema integrado llamado Content Collections. Te permite definir tipos de contenido y validarlos.
Paso 1. Crea el esquema
Crea el archivo:
src/content/config.ts
1import { z, defineCollection } from "astro:content"; 2 3const posts = defineCollection({ 4 schema: z.object({ 5 title: z.string(), 6 date: z.string(), 7 author: z.string().optional(), 8 tags: z.array(z.string()).optional(), 9 }), 10}); 11 12export const collections = { posts };
💡 Esto le dice a Astro qué estructura deben tener los archivos Markdown.
Paso 2. Importar los posts
En tu página src/pages/blog.astro:
1--- 2import { getCollection } from 'astro:content'; 3const posts = await getCollection('posts'); 4--- 5 6<h1>📝 Blog</h1> 7 8<ul> 9 {posts.map(post => ( 10 <li> 11 <a href={`/blog/${post.slug}`}>{post.data.title}</a> 12 <small>({post.data.date})</small> 13 </li> 14 ))} 15</ul>
✅ getCollection('posts') lee automáticamente todos los .md de la carpeta /posts.
🔗 5. Crear la página de detalle de cada post
Crea una página dinámica:
src/pages/blog/[slug].astro
1--- 2import { getCollection } from 'astro:content'; 3 4const posts = await getCollection('posts'); 5const { slug } = Astro.params; 6const post = posts.find(p => p.slug === slug); 7--- 8 9<html lang="es"> 10 <body> 11 <article> 12 <h1>{post.data.title}</h1> 13 <p><em>{post.data.date}</em></p> 14 <post.Content /> 15 </article> 16 </body> 17</html>
💡 <post.Content /> renderiza el contenido Markdown como HTML.
Resultado:
Cada post tiene su propia URL
👉 /blog/primer-post
⚡ 6. Qué es MDX y por qué usarlo
MDX es una versión avanzada de Markdown que permite incluir componentes de Astro o React directamente dentro del texto.
Ejemplo:
src/content/posts/post-mdx.mdx
1--- 2title: "Post interactivo con MDX" 3date: "2025-10-06" 4--- 5 6# ¡Hola desde MDX! 7 8Puedes incluir componentes de Astro dentro del contenido: 9 10<Counter start={5} />
src/components/Counter.astro
1--- 2const { start = 0 } = Astro.props; 3let count = start; 4--- 5 6<button id="btn">Count: {count}</button> 7 8<script> 9 let n = {count}; 10 document.getElementById("btn").addEventListener("click", () => { 11 n++; 12 document.getElementById("btn").textContent = "Count: " + n; 13 }); 14</script>
🎉 Así puedes tener contenido interactivo dentro de tus artículos.
🧰 7. Integrar Markdown y MDX juntos
Instala el soporte MDX:
1npx astro add mdx
Esto permite que Astro reconozca .mdx junto con .md.
Ambos se comportan igual, solo que MDX te da la opción de incluir componentes.
📁 8. Organizar tus contenidos
Estructura sugerida:
src/content/
├── posts/
│ ├── post1.md
│ ├── post2.mdx
│ └── post3.md
├── tutorials/
│ ├── intro.mdx
│ └── avanzado.mdx
└── config.ts
Puedes tener múltiples colecciones (blog, tutoriales, proyectos…).
💡 9. Mostrar etiquetas y metadatos
Puedes acceder a todos los datos del frontmatter:
1{posts.map(post => ( 2 <li> 3 <a href={`/blog/${post.slug}`}>{post.data.title}</a> 4 <p>Autor: {post.data.author}</p> 5 <small>Etiquetas: {post.data.tags?.join(", ")}</small> 6 </li> 7))}
🧠 10. Ventajas de usar Markdown/MDX en Astro
- ✅ No necesitas base de datos.
- ✅ El contenido se genera automáticamente.
- ✅ Puedes escribir artículos fácilmente sin código complejo.
- ✅ MDX permite mezclar texto y componentes dinámicos.
- ✅ Excelente para blogs, documentación y portfolios.
- Loading...