Astro Markdown avanzado: 7 trucos prácticos para que tu blog sea 10 veces más profesional

Acabas de montar tu blog con Astro y empiezas a escribir tu primer artículo técnico. ¿Quieres resaltar una línea concreta de código? No se puede. ¿Añadir un aviso plegable para alertar al lector? Tampoco. ¿Incluir una fórmula matemática en una explicación de algoritmos? Ni idea por dónde empezar.
Yo también pasé por esa situación incómoda. Tras escribir varios artículos en Markdown puro, me di cuenta de lo limitado que era. En otros blogs técnicos, los bloques de código marcan lo importante, muestran comparativas antes/después e incluso incrustan componentes interactivos; yo solo podía pegar código a secas.
Por suerte, Astro ofrece MDX, un «Markdown mejorado». En pocas palabras, MDX te permite usar componentes y escribir JSX mientras redactas, y de golpe puedes hacer muchísimas cosas más.
En este artículo comparto 7 usos avanzados de Astro Markdown/MDX, desde la configuración básica hasta resaltado de código, componentes personalizados, fórmulas matemáticas y diagramas de flujo. Cada truco incluye código y pasos de configuración completos. Al terminar, tu blog técnico pasará de «se puede leer» a «se ve profesional».
Parte 1: actualización básica — de Markdown a MDX
¿Por qué usar MDX?
La diferencia entre Markdown y MDX es como la de una bicicleta y una bici eléctrica: ambas te llevan, pero la experiencia no tiene nada que ver.
El Markdown puro solo admite contenido estático: texto, bloques de código e imágenes. ¿Quieres un recuadro de aviso? Toca codificar HTML a mano. ¿Incrustar un componente interactivo? Casi imposible.
MDX es otra cosa: es la combinación de «Markdown + JSX». Puedes:
- Importar y usar componentes: importar cualquier componente de Astro, React o Vue directamente en un archivo .mdx
- Escribir expresiones JSX: usar
{variable}para insertar variables, e incluso bucles y condicionales - Personalizar estilos de elementos: sustituir un
<h1>estándar por tu propio componente con estilo
Un ejemplo concreto. Para añadir un aviso, con Markdown puro harías esto:
<div class="warning">
<p>Atención: esta operación borrará todos los datos.</p>
</div>
Con MDX, así:
import Alert from '@/components/Alert.astro';
<Alert type="warning">
Atención: esta operación borrará todos los datos.
</Alert>
¿Ves la diferencia? Con MDX, el artículo se siente más como «montar piezas» que como «escribir código».
Configurar MDX en 5 minutos
Configurar MDX es muy sencillo: tres pasos.
Paso 1: instalar la integración
Abre la terminal en tu proyecto Astro y ejecuta:
npx astro add mdx
La CLI de Astro instalará @astrojs/mdx y actualizará la configuración. Te hará unas preguntas (¿actualizar config?, ¿instalar dependencias?); responde Yes a todo.
Paso 2: verificar la configuración
Tras la instalación, abre astro.config.mjs. Deberías ver algo así:
import { defineConfig } from 'astro/config';
import mdx from '@astrojs/mdx';
export default defineConfig({
integrations: [mdx()],
});
Si no se añadió solo, hazlo manualmente.
Paso 3: probar que MDX funciona
Crea un archivo test.mdx en src/pages/ o src/content/:
---
title: Prueba MDX
---
# Esta es una prueba MDX
Texto Markdown normal.
export const greeting = "Hola";
¡Ya puedes usar variables: {greeting}!
<div style="padding: 1rem; background: #f0f0f0;">
Este es un elemento JSX
</div>
Ejecuta npm run dev, visita la página correspondiente y, si la variable y el elemento JSX se muestran bien, MDX está configurado correctamente.
Convivencia de archivos .md y .mdx
Tras instalar la integración MDX, los archivos .md siguen funcionando con normalidad. Astro elige el procesamiento según la extensión:
- Archivos
.md: Markdown estándar - Archivos
.mdx: MDX, con componentes y JSX
Mi recomendación: .md para artículos normales, .mdx cuando necesites componentes. No todos los artículos requieren MDX.
Parte 2: trucos avanzados de resaltado de código
Configurar el tema de resaltado (Shiki)
Astro usa Shiki por defecto para resaltar código, y ya va muy bien. Pero el tema por defecto es github-dark; quizá quieras uno que encaje mejor con el estilo de tu blog.
¿Shiki o Prism?
Sinceramente, recomiendo Shiki. Es la opción por defecto de Astro, soporta más de 100 lenguajes y temas, y se renderiza en el servidor sin JavaScript extra. Prism también vale, pero exige importar CSS y la configuración es un poco más laboriosa.
Cambiar el tema integrado
Abre astro.config.mjs y añade shikiConfig en la sección markdown:
import { defineConfig } from 'astro/config';
import mdx from '@astrojs/mdx';
export default defineConfig({
integrations: [mdx()],
markdown: {
shikiConfig: {
theme: 'dracula', // Opciones: github-dark, nord, monokai, dracula, etc.
},
},
});
Shiki ofrece muchísimos temas. Los que más uso:
github-dark/github-light— estilo GitHubdracula— clásico morado y negronord— estilo nórdico fríoone-dark-pro— tema oscuro por defecto de VSCode
Puedes elegir el que prefieras en la vista previa de temas de Shiki.
Tema claro/oscuro dual
Si tu blog alterna modo claro y oscuro, Shiki puede configurar dos temas:
markdown: {
shikiConfig: {
themes: {
light: 'github-light',
dark: 'github-dark',
},
},
},
Así Shiki aplicará el tema de resaltado según prefers-color-scheme o tu lógica personalizada de cambio de tema.
Resaltar líneas concretas y anotar código
En tutoriales suele hacer falta marcar «esta línea importa» o mostrar «qué cambió en el código». Los Transformers de Shiki lo permiten.
Resaltar líneas clave
Primero instala los transformers de Shiki:
npm install shiki
Luego activa transformerNotationHighlight en la configuración:
import { defineConfig } from 'astro/config';
import mdx from '@astrojs/mdx';
import { transformerNotationHighlight } from '@shikijs/transformers';
export default defineConfig({
integrations: [mdx()],
markdown: {
shikiConfig: {
theme: 'github-dark',
transformers: [transformerNotationHighlight()],
},
},
});
Ahora puedes marcar líneas con el comentario // [!code highlight]:
`
```javascript
function hello() {
console.log('Esta línea es normal');
console.log('Esta línea se resaltará'); // [!code highlight]
}
`
**Mostrar cambios de código (estilo diff)**
Para comparar código «antes/después», usa `transformerNotationDiff`:
```javascript
import { transformerNotationDiff, transformerNotationHighlight } from '@shikijs/transformers';
markdown: {
shikiConfig: {
theme: 'github-dark',
transformers: [
transformerNotationHighlight(),
transformerNotationDiff(),
],
},
},
Uso:
`
```javascript
function calculate(a, b) {
return a + b; // [!code --]
return a * b; // [!code ++]
}
`
Las líneas con `--` aparecen en rojo (eliminadas) y las de `++` en verde (añadidas). Muy útil en tutoriales de código.
**Enfocar código concreto**
También existe `transformerNotationFocus`, que «apaga» el resto del código y destaca solo la parte que quieres:
```javascript
import { transformerNotationFocus } from '@shikijs/transformers';
// Añadir al array transformers
transformers: [
transformerNotationFocus(),
],
Marca con // [!code focus]:
`
```javascript
function process() {
console.log('Esta línea se atenúa');
console.log('Esta línea se muestra normal'); // [!code focus]
console.log('Esta línea también se atenúa');
}
`
### Pasar a Expressive Code (opcional)
Si Shiki te queda corto, prueba Expressive Code. Es una solución comunitaria con más funciones listas para usar:
- Títulos en bloques de código
- Botón de copiar con un clic
- Numeración de líneas
- Estilo de ventana de terminal
- Comparación de código lado a lado
**Instalación sencilla**
```bash
npx astro add astro-expressive-code
La CLI de Astro lo configura todo. Tras instalarlo, los bloques de código ganan esas funciones sin configuración extra.
¿Cuándo usar Expressive Code?
Al principio usé Shiki por defecto; luego vi que los lectores querían copiar código con facilidad y cambié a Expressive Code. Si tu blog es sobre tutoriales y código, mejora mucho la experiencia.
Si solo incluyes código de vez en cuando, Shiki + Transformers basta; no hace falta otra dependencia.
Parte 3: incrustar componentes personalizados
Importar y usar componentes en MDX
Lo más potente de MDX es usar componentes directamente en el artículo. Yo lo uso para avisos, comparativas de código, secciones plegables, etc.
Crear un componente de aviso
Primero crea Alert.astro en src/components/:
---
interface Props {
type?: 'info' | 'warning' | 'error';
}
const { type = 'info' } = Astro.props;
const styles = {
info: 'bg-blue-50 border-blue-200 text-blue-800',
warning: 'bg-yellow-50 border-yellow-200 text-yellow-800',
error: 'bg-red-50 border-red-200 text-red-800',
};
---
<div class={`border-l-4 p-4 ${styles[type]}`}>
<slot />
</div>
Usarlo en un artículo MDX
Importa y úsalo en tu archivo .mdx:
---
title: Mi artículo técnico
---
import Alert from '@/components/Alert.astro';
# Título del artículo
Contenido normal del artículo.
<Alert type="warning">
Atención: haz una copia de seguridad antes de ejecutar este comando.
</Alert>
<Alert type="info">
Consejo: dentro del componente también puedes usar **sintaxis Markdown**, muy cómodo.
</Alert>
¿Lo ves? Dentro de <Alert> puedes seguir usando Markdown (negrita, enlaces, etc.) y MDX lo procesa automáticamente.
Usar componentes React/Vue
MDX no solo admite componentes Astro, también React, Vue y otros. Recuerda la directiva client::
import Counter from '@/components/Counter.tsx';
<Counter client:load initialCount={0} />
client:load indica que el componente se ejecutará en el cliente al cargar la página. Sin eso, solo se renderiza en el servidor y la interactividad no funciona.
Organización de componentes
Suelo poner los componentes habituales del blog en src/components/mdx/:
src/
├── components/
│ ├── mdx/
│ │ ├── Alert.astro
│ │ ├── CodeCompare.astro
│ │ ├── Callout.astro
│ │ └── Tabs.astro
│ └── ...otros componentes
Mapear sintaxis Markdown a componentes personalizados
Esta función tiene algo de «magia»: puedes sustituir elementos estándar de Markdown (h1, a, img) por tus propios componentes.
¿Para qué sirve?
Por ejemplo, quieres un icono de ancla en todos los títulos o marcar enlaces externos con «↗»; hacerlo uno a uno es tedioso. Con mapeo de componentes, escribes Markdown normal y se aplican tus estilos solos.
Práctica: componente de encabezado personalizado
Crea CustomHeading.astro:
---
interface Props {
level: 1 | 2 | 3 | 4 | 5 | 6;
id?: string;
}
const { level, id } = Astro.props;
const Tag = `h${level}` as any;
---
<Tag id={id} class="group relative">
<slot />
{id && (
<a href={`#${id}`} class="ml-2 opacity-0 group-hover:opacity-100 transition-opacity">
#
</a>
)}
</Tag>
Usar el mapeo en MDX
En tu .mdx, exporta un objeto components:
---
title: Título del artículo
---
import CustomHeading from '@/components/CustomHeading.astro';
export const components = {
h2: (props) => <CustomHeading level={2} {...props} />,
h3: (props) => <CustomHeading level={3} {...props} />,
};
## Este es un encabezado de nivel 2
Al pasar el ratón por el título aparece el enlace de ancla #.
### Este es un encabezado de nivel 3
Todos los h2 y h3 usan el estilo personalizado automáticamente.
Práctica: icono en enlaces externos
Crea ExternalLink.astro:
---
interface Props {
href?: string;
}
const { href } = Astro.props;
const isExternal = href?.startsWith('http');
---
<a href={href} target={isExternal ? '_blank' : undefined} rel={isExternal ? 'noopener noreferrer' : undefined}>
<slot />
{isExternal && <span class="ml-1 text-xs">↗</span>}
</a>
Uso del mapeo:
import ExternalLink from '@/components/ExternalLink.astro';
export const components = {
a: ExternalLink,
};
[Enlace interno](/about)
[Enlace externo](https://example.com) ← añade el icono ↗ automáticamente
Configuración global del mapeo (avanzado)
Si quieres el mismo mapeo en todos los MDX, puedes configurarlo en astro.config.mjs, pero requiere un plugin MDX personalizado; yo suelo configurarlo archivo por archivo.
Parte 4: fórmulas matemáticas e integración de diagramas
Integrar KaTeX para fórmulas matemáticas
Si escribes sobre algoritmos, matemáticas o ciencia de datos, necesitas mostrar fórmulas. KaTeX es hoy la mejor opción: mucho más rápido que MathJax y con renderizado en servidor.
Instalar KaTeX
Hace falta instalar tres paquetes:
npm install remark-math rehype-katex katex
remark-math: analiza sintaxis LaTeXrehype-katex: renderiza fórmulas a HTMLkatex: biblioteca principal de KaTeX
Configurar Astro
Abre astro.config.mjs y añade estos plugins:
import { defineConfig } from 'astro/config';
import mdx from '@astrojs/mdx';
import remarkMath from 'remark-math';
import rehypeKatex from 'rehype-katex';
export default defineConfig({
integrations: [mdx()],
markdown: {
remarkPlugins: [remarkMath],
rehypePlugins: [rehypeKatex],
},
});
Incluir estilos de KaTeX
Este paso es importante; sin él las fórmulas no se ven. En el layout (por ejemplo src/layouts/MarkdownLayout.astro), añade en <head>:
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/[email protected]/dist/katex.min.css"
crossorigin="anonymous"
/>
Usar fórmulas en artículos
Tras configurar, puedes escribir fórmulas en Markdown/MDX.
Fórmulas en línea (con un solo $):
Ecuación masa-energía: $E = mc^2$
Solución de la ecuación cuadrática: $x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}$
Fórmulas en bloque (con doble $$):
$$
\int_{-\infty}^{\infty} e^{-x^2} dx = \sqrt{\pi}
$$
$$
\sum_{i=1}^{n} i = \frac{n(n+1)}{2}
$$
Problema frecuente: las fórmulas no se muestran
Si no aparecen o el estilo falla, revisa:
- Si el CSS de KaTeX está bien enlazado (pestaña Network en F12)
- Si la versión de rehype-katex es compatible (prueba bajar a 6.x)
- Si la sintaxis de la fórmula es correcta (lista de soporte de KaTeX)
Integrar Mermaid para diagramas de flujo
Mermaid permite dibujar diagramas de flujo, secuencia, Gantt, etc. con código; ideal para documentación técnica.
Comparativa de tres enfoques
La comunidad ofrece varias integraciones; resumen rápido:
| Enfoque | Renderizado | SEO | Dificultad | Recomendación |
|---|---|---|---|---|
| rehype-mermaid | Servidor | Bueno | Media | ⭐⭐⭐⭐⭐ |
| astro-diagram | Servidor | Bueno | Baja | ⭐⭐⭐⭐ |
| astro-mermaid | Cliente | Malo | Baja | ⭐⭐⭐ |
Recomiendo rehype-mermaid: renderizado en servidor, bueno para SEO y genera SVG estático.
Instalar rehype-mermaid
npm install rehype-mermaid
Configuración
Añade en astro.config.mjs:
import { defineConfig } from 'astro/config';
import mdx from '@astrojs/mdx';
import rehypeMermaid from 'rehype-mermaid';
export default defineConfig({
integrations: [mdx()],
markdown: {
rehypePlugins: [
[rehypeMermaid, { strategy: 'img-svg' }]
],
},
});
strategy: 'img-svg' genera imágenes SVG; es el enfoque más estable.
Dibujar en artículos
Basta con bloques de código mermaid:
Ejemplo de diagrama de flujo:
`
```mermaid
graph TD
A[Inicio] --> B{¿MDX instalado?}
B -->|Sí| C[Configurar resaltado de código]
B -->|No| D[Instalar MDX]
D --> C
C --> E[Listo]
`
**Ejemplo de diagrama de secuencia**:
`
```markdown
```mermaid
sequenceDiagram
Usuario->>Navegador: Visitar página
Navegador->>Servidor: Solicitar HTML
Servidor->>Navegador: Devolver página renderizada
Navegador->>Usuario: Mostrar contenido
`
**Generación en el build**
Al ejecutar `npm run build`, los diagramas Mermaid se generan como SVG en la fase de compilación. La página final lleva imágenes estáticas: carga rápida y sin JavaScript en el cliente.
**Notas importantes**
Si el build falla con «Puppeteer not found», puede hacer falta configuración extra. Prueba a instalar playwright:
```bash
npm install -D playwright
O cambia a astro-diagram, que trae entorno de navegador integrado.
Parte 5: técnicas avanzadas y buenas prácticas
Optimización de MDX en Content Collections
Si gestionas el blog con Content Collections de Astro (muy recomendable), los MDX ganan mejor tipado y experiencia de desarrollo.
¿Qué son Content Collections?
En resumen: pones los artículos en src/content/, Astro los reconoce, valida el frontmatter y ofrece APIs tipadas para leer contenido.
Configurar Content Collections
Define la colección en src/content/config.ts:
import { defineCollection, z } from 'astro:content';
const blog = defineCollection({
type: 'content', // archivos de contenido (Markdown/MDX)
schema: z.object({
title: z.string(),
description: z.string(),
pubDate: z.date(),
tags: z.array(z.string()).optional(),
draft: z.boolean().default(false),
}),
});
export const collections = { blog };
Usar en MDX
El frontmatter del MDX se valida automáticamente:
---
title: Tutorial avanzado de Astro MDX
description: Aprende usos avanzados de MDX
pubDate: 2025-12-02
tags: [Astro, MDX, Tutorial]
---
import Alert from '@/components/Alert.astro';
# {frontmatter.title}
<Alert type="info">
Fecha de publicación: {frontmatter.pubDate.toLocaleDateString()}
</Alert>
Generar tabla de contenidos automáticamente
Content Collections ofrece getHeadings() para obtener todos los encabezados y armar un índice:
---
import { getEntry } from 'astro:content';
const entry = await getEntry('blog', 'my-mdx-article');
const { Content, headings } = await entry.render();
---
<aside>
<h2>Índice</h2>
<ul>
{headings.map(h => (
<li style={`margin-left: ${(h.depth - 1) * 1}rem`}>
<a href={`#${h.slug}`}>{h.text}</a>
</li>
))}
</ul>
</aside>
<article>
<Content />
</article>
Muy útil en artículos largos: el lector salta directo al apartado que le interesa.
Rendimiento y trampas habituales
MDX es potente, pero mal usado también ralentiza el sitio. Algunos puntos a vigilar.
Evita abusar de componentes en el cliente
En MDX puedes usar React/Vue, pero no olvides las directivas client:*. Sin ellas, solo hay renderizado en servidor y la interactividad no funciona; si abusas de client:load, añades mucho JavaScript y la página carga peor.
Mis recomendaciones:
- Contenido estático con componentes Astro (Alert, Callout)
- Interactividad con
client:visible(al ser visible) oclient:idle(en idle) client:loadsolo si hace falta
Optimización de imágenes
En MDX, no uses <img alt=""> directamente; usa el componente Image de Astro:
---
title: Mi artículo
---
import { Image } from 'astro:assets';
import cover from './cover.jpg';
<Image src={cover} alt="Imagen de portada" width={800} height={600} />
Astro optimiza automáticamente (compresión, WebP, lazy loading, etc.) y el rendimiento mejora mucho.
Opción optimize de MDX
Si tienes muchos MDX y el build es lento, prueba optimize:
export default defineConfig({
integrations: [
mdx({
optimize: true,
}),
],
});
Optimiza la salida MDX con plugins rehype internos y acelera el build. Puede cambiar la estructura HTML generada; prueba antes en tu proyecto.
Errores frecuentes y soluciones
| Error | Causa | Solución |
|---|---|---|
| El componente MDX no se muestra | Olvidaste importar el componente | Revisa el import |
| El componente interactivo no funciona | Falta directiva client: | Añade client:load, etc. |
| El resaltado de código no funciona | Configuración Shiki incorrecta | Revisa astro.config.mjs |
| Las fórmulas no se renderizan | CSS de KaTeX no incluido | Añade el enlace CSS en el layout |
| Build muy lento | Demasiados archivos MDX | Activa la opción optimize |
Conclusión
Resumen de lo esencial:
Repaso rápido de los 7 trucos:
- Configurar entorno MDX — un comando, 5 minutos
- Cambiar tema de resaltado — configura Shiki a tu gusto
- Resaltar y anotar código — Transformers para marcar lo importante y los cambios
- Incrustar componentes personalizados — del Alert al demo interactivo
- Mapear elementos Markdown — personalizar títulos, enlaces, etc. en bloque
- Mostrar fórmulas matemáticas — KaTeX para explicaciones de algoritmos más profesionales
- Dibujar diagramas de flujo — Mermaid con código y renderizado en servidor
Ruta de aprendizaje sugerida:
No hace falta dominarlo todo de golpe. Mi consejo:
- Paso 1: configura MDX e importa un componente sencillo
- Paso 2: configura resaltado de código si escribes mucho código
- Paso 3: si tratas algoritmos o arquitectura, añade KaTeX y Mermaid
- Paso 4: cuando domines lo básico, prueba el mapeo de componentes
Lista de comprobación:
Tras configurar, verifica que funcione:
- Los archivos MDX se renderizan bien
- Los bloques de código tienen resaltado correcto
- Los componentes personalizados se muestran
- Las fórmulas se renderizan (si las configuraste)
- Los diagramas Mermaid se generan (si los configuraste)
- La velocidad de build es aceptable
Próximos pasos:
- Explora Astro Integrations para más plugins
- Revisa bibliotecas de componentes MDX de la comunidad
- Prueba View Transitions de Astro para transiciones fluidas entre páginas
Elige la función que más te interese y pruébala en tu blog. Si algo falla en la configuración, no te agobies: la documentación oficial y la comunidad suelen tener la respuesta.
Al fin y al cabo, lo más importante de un blog técnico es el contenido. Estas herramientas solo hacen tu mensaje más claro y profesional; lo que atrae de verdad a los lectores son tus ideas y tu experiencia. ¡Que tu blog Astro siga mejorando!
Flujo completo de configuración avanzada de Astro Markdown/MDX
7 trucos prácticos para que tu blog sea 10 veces más profesional: migrar de Markdown a MDX, configurar resaltado de código, incrustar componentes personalizados, mostrar fórmulas matemáticas y diagramas de flujo
⏱️ Estimated time: 1 hr
- 1
Step 1: De Markdown a MDX: instalación y configuración
Por qué usar MDX:
• MDX es la combinación de Markdown + JSX
• Puedes importar y usar componentes, escribir expresiones JSX y personalizar estilos de elementos
• El Markdown puro solo admite texto, bloques de código e imágenes estáticas
Instalar la integración MDX:
• Ejecutar: npm install @astrojs/mdx
• Añadir la integración MDX en astro.config.mjs:
import mdx from '@astrojs/mdx';
export default defineConfig({
integrations: [mdx()]
})
Crear archivos .mdx:
• Renombrar .md a .mdx
• O crear directamente un archivo .mdx nuevo
• Ya puedes importar y usar componentes en el archivo - 2
Step 2: Configurar tema de resaltado de código con Shiki
Instalar Shiki:
• Astro usa Shiki por defecto para resaltar código; no hace falta instalarlo aparte
Configurar el tema:
• Configurar opciones shiki en astro.config.mjs
• Puedes elegir temas integrados (GitHub Dark, Monokai, One Dark, etc.)
• O definir un tema personalizado
Resaltado por líneas:
• Usar la función transformers de Shiki
• Permite resaltar líneas concretas, añadir numeración y marcar cambios
Ejemplo de configuración:
• En bloques de código MDX, usa comentarios para resaltar líneas
• Por ejemplo: // [!code highlight] resalta esa línea - 3
Step 3: Incrustar componentes personalizados: Alert, Callout, CodeBlock
Crear componentes personalizados:
• En src/components crea Alert.astro, Callout.astro, CodeBlock.astro, etc.
Usar en MDX:
• Importa al inicio del .mdx:
import Alert from '@/components/Alert.astro';
• Úsalo en el artículo:
<Alert type="warning">
Atención: esta operación borrará todos los datos.
</Alert>
Mapeo de componentes:
• Puedes mapear elementos Markdown a componentes personalizados
• Por ejemplo, sustituir <h1> estándar por tu componente con estilo
• Así el artículo queda más uniforme y profesional - 4
Step 4: Mostrar fórmulas matemáticas con KaTeX
Instalar dependencias:
• Ejecutar: npm install remark-math rehype-katex
• Instalar CSS de KaTeX: npm install katex
Configurar plugins:
• En astro.config.mjs configura plugins remark y rehype
• Añade remark-math y rehype-katex
Incluir CSS:
• En el layout, importa el CSS de KaTeX
Usar fórmulas matemáticas:
• En MDX usa sintaxis LaTeX
• Fórmulas en línea: $...$
• Fórmulas en bloque: $$...$$
• Ideal para explicaciones de algoritmos y documentación técnica - 5
Step 5: Dibujar diagramas de flujo con Mermaid
Instalar dependencias:
• Ejecutar: npm install @astrojs/mermaid
• Añadir la integración Mermaid en astro.config.mjs
Crear componente Mermaid:
• Crea un componente Mermaid.astro
• Para renderizar diagramas Mermaid
Usar diagramas de flujo:
• En MDX usa la etiqueta <Mermaid>
• Escribe código con sintaxis Mermaid dentro
Soporte de Mermaid:
• Diagramas de flujo, secuencia, Gantt y más
• Dibujar con código y renderizado en servidor
• Muy adecuado para documentación técnica
FAQ
¿Qué diferencia hay entre MDX y Markdown? ¿Por qué usar MDX?
• MDX es Markdown + JSX: puedes importar componentes, escribir expresiones JSX y personalizar estilos de elementos
• El Markdown puro solo admite texto, bloques de código e imágenes estáticas
¿Quieres un recuadro de aviso en Markdown? Toca HTML a mano. ¿Un componente interactivo en el artículo? Casi imposible.
Con MDX puedes:
• Importar y usar componentes (import de componentes Astro, React o Vue en .mdx)
• Escribir expresiones JSX ({variable}, bucles y condicionales)
• Personalizar estilos (sustituir <h1> por tu componente)
Ejemplo de aviso:
• En Markdown puro: HTML codificado a mano
• En MDX:
import Alert from '@/components/Alert.astro';
<Alert type="warning">Atención: esta operación borrará todos los datos.</Alert>
¿Cómo configurar el entorno MDX en Astro?
• Ejecutar npm install @astrojs/mdx
• Añadir en astro.config.mjs:
import mdx from '@astrojs/mdx';
export default defineConfig({
integrations: [mdx()]
})
Crear archivos .mdx:
• Renombrar .md a .mdx o crear un .mdx nuevo
• Ya puedes importar componentes, escribir JSX y personalizar estilos en el archivo
¿Cómo configurar el tema de resaltado de código?
• Astro usa Shiki por defecto; no hace falta instalación extra
Configurar el tema:
• Opciones shiki en astro.config.mjs
• Temas integrados (GitHub Dark, Monokai, One Dark, etc.) o personalizado
Resaltado por líneas:
• Transformers de Shiki para resaltar líneas, numeración y cambios
Ejemplo:
• En bloques de código MDX: // [!code highlight] resalta esa línea
• Hace el código más claro y profesional
¿Cómo incrustar componentes personalizados en MDX?
• En src/components: Alert.astro, Callout.astro, CodeBlock.astro, etc.
Usar en MDX:
• Import al inicio: import Alert from '@/components/Alert.astro';
• En el artículo: <Alert type="warning">Atención: esta operación borrará todos los datos.</Alert>
Mapeo de componentes:
• Mapear elementos Markdown a componentes personalizados
• Por ejemplo sustituir <h1> por tu componente con estilo
• Estilo más uniforme y profesional
Componentes habituales:
• Alert, Callout, CodeBlock, demos interactivos, etc.
¿Cómo mostrar fórmulas matemáticas y diagramas de flujo en un blog Astro?
1. Instalar dependencias:
npm install remark-math rehype-katex
npm install katex
2. Configurar plugins remark y rehype en astro.config.mjs
3. Incluir CSS de KaTeX en el layout
4. Usar LaTeX en MDX: $...$ en línea, $$...$$ en bloque
Diagramas de flujo:
1. Instalar: npm install @astrojs/mermaid
2. Añadir integración Mermaid en astro.config.mjs
3. Crear componente Mermaid.astro si hace falta
4. Usar <Mermaid> o bloques mermaid con sintaxis Mermaid
Soporta flujo, secuencia, Gantt; renderizado en servidor; ideal para documentación técnica
¿Qué problemas frecuentes hay al usar MDX y cómo solucionarlos?
• El componente MDX no se muestra:
- Olvidaste el import; revisa la sentencia import
• El componente interactivo no funciona:
- Falta directiva client:; añade client:load, etc.
• El resaltado no funciona:
- Configuración Shiki incorrecta; revisa astro.config.mjs
• Las fórmulas no se renderizan:
- CSS de KaTeX no incluido; añade el enlace en el layout
• Build muy lento:
- Demasiados MDX; activa optimize
Si tienes muchos MDX y el build es lento:
• mdx({ optimize: true }) en astro.config.mjs
• Optimiza la salida con rehype y acelera el build
• Puede cambiar el HTML generado; prueba antes
9 min de lectura · Publicado el: 2 dic 2025 · Actualizado el: 21 ago 2026
Guía de Astro
Si llegaste desde búsqueda, lo más rápido es ir al artículo anterior o siguiente de esta misma serie.
Anterior
Guía completa de Astro Content Collections: del concepto a la validación con Schema
Análisis en profundidad de cómo funcionan Astro Content Collections: configura content.config.ts desde cero, domina la validación con Zod Schema y consigue un sistema de gestión de contenido con tipos seguros, con ejemplos completos y soluciones a errores habituales.
Parte 3 de 18
Siguiente
5 mejores temas de blog Astro con tutorial de instalación y configuración
¿Quieres montar un blog rápido pero no sabes qué tema elegir? Este artículo recomienda 5 temas Astro probados (AstroPaper, Astro Air Blog, etc.), con tutorial de instalación detallado y soluciones a problemas habituales: blog personal en 30 minutos.
Parte 5 de 18



Comentarios
Inicia sesión con GitHub para dejar un comentario