Últimamente, tengo una fijación enorme con tener más controlada la información, y por eso, tenerla toda en Markdown se ha convertido en una prioridad. Por eso hoy te voy a contar cómo transformar tu blog WordPress a Markdown de manera sencilla.
Lo vas a poder hacer gracias a la exportación de WordPress a XML y luego usando wordpress-export-to-markdown en tu ordenador.
Generamos un archivo XML con todos los post de WordPress
Esta parte es sencilla. Solo tienes que ir a Herramientas > Exportar en la barra lateral de tu instalación.

En pocos segundos se va a descargar un archivo .xml con toda la información de tu blog. Cambia el nombre al archivo, y ponle: export.xml.
Vamos a crear el ambiente en tu ordenador
Tienes que tener instalado Node.js. Puedes instalar directamente el paquete desde su página web, por ejemplo en macOS (node-v22.14.0.pkg) o en. Windows un archivo .msi o en Linux un binario .xz.
Yo lo he instalado simplemente usando Brew en macOS:
brew install node
Ya tienes todo lo necesario para empezar la exportación.
Exportamos WordPress a Markdown
¡Ojo! Antes de comenzar, te recomiendo que limpies de SPAM tus comentarios y el formulario de entrada de tu página de contacto (si es que lo tienes). También se pueden descargar al hacer la exportación.
Te vas a la línea de comandos y pones lo siguiente (en el home de tu usuario donde has guardado el archivo export.xml):
npx wordpress-export-to-markdown
Y automáticamente te va a preguntar unas cuantas cosas:

- Ok to proceed? (y) y
Starting wizard…
- ? Path to WordPress export file? export.xml (ya le hemos cambiado el nombre)
- ? Path to output folder? output (que lo haga en la misma carpeta en la que tenemos el archivo XML)
- ? Create year folders? No (esta opción y las siguientes depende de ti. Yo prefiero todo en una sola carpeta para luego crear un vault en Obsidian).
- ? Create month folders? No
- ? Create a folder for each post? No
- ? Prefix post folders/files with date? No
- ? Save images attached to posts? Yes (para que se descargue las imágenes asociadas a los post y se genere un link en Markdown)
- ? Save images scraped from post body content? Yes (por sí las moscas)
- ? Include custom post types and pages? (y/N) (depende de la configuración de blog)
Y a continuación empezará la exportación. Para un blog de unos 500 post con bastantes imágenes, puede tardar unas 3, 4 horas.
Al final de la ejecución, te dará los errores en la descarga de imágenes (si es que hay alguno). En la carpeta de descarga verás que han aparecido unas cuantas carpetas: page, post, images, wp_global_styles. Dependerá de que a qué opciones le hayas dicho que sí.
Si te has descargado e instalado wordpress-export-to-markdown (npm install -g wordpress-export-to-markdown), en vez de ejecutarlo como yo con npx wordpress-export-to-markdown, vas a poder configurar más cosas. Puedes ajustar los parámetros de settings.js para evitar que tu servidor, por ejemplo, evite que se descarguen las imágenes:
// Which fields to include in frontmatter. Look in /src/frontmatter to see available fields.
// Order is preserved. If a field has an empty value, it will not be included. You can rename a
// field by providing an alias after a ':'. For example, 'date:created' will include 'date' in
// frontmatter, but renamed to 'created'.
exports.frontmatter_fields = [
'title',
'date',
'categories',
'tags',
'coverImage'
];
// Time in ms to wait between requesting image files. Increase this if you see timeouts or
// server errors.
exports.image_file_request_delay = 500;
// Time in ms to wait between saving Markdown files. Increase this if your file system becomes
// overloaded.
exports.markdown_file_write_delay = 25;
// Enable this to include time with post dates. For example, "2020-12-25" would become
// "2020-12-25T11:20:35.000Z".
exports.include_time_with_date = false;
// Override post date formatting with a custom formatting string (for example: 'yyyy LLL dd').
// Tokens are documented here: https://moment.github.io/luxon/#/parsing?id=table-of-tokens. If
// set, this takes precedence over include_time_with_date.
exports.custom_date_formatting = '';
// Specify the timezone used for post dates. See available zone values and examples here:
// https://moment.github.io/luxon/#/zones?id=specifying-a-zone.
exports.custom_date_timezone = 'utc';
// Categories to be excluded from post frontmatter. This does not filter out posts themselves,
// just the categories listed in their frontmatter.
exports.filter_categories = ['uncategorized'];
// Strict SSL is enabled as the safe default when downloading images, but will not work with
// self-signed servers. You can disable it if you're getting a "self-signed certificate" error.
exports.strict_ssl = true;
Puedes ajustar exports.image_file_request_delay y exports.markdown_file_write_delay para evitar bloqueos del Firewall.
¿Qué puedes hacer después con todos los archivos Markdown (.md) y esas imágenes que has descargado?
Pues lo que he hecho yo. Me he quedado con post y páginas, todos en una misma carpeta (tu puedes hacer lo que quieras) y he creado una Vault en el programa de toma de notas Obsidian. Gracias a Obsidian vas a poder gestionar todos tus post en Markdown.
¿Más cosas? Luego puedes conectar esa vault de Obsidian a tu instalación de MkDocs y crear una página web estática (sin comentarios). Y puedes subir todas esas notas a GitHub para llevar un control de cambios.
Conclusión
Lo que tienes que tener claro, es que tus entradas de WordPress en formato Markdown son una apuesta de futuro para posibles migraciones entre software CMS de creación de webs. Es uno de los formatos más universales del mundo. Vas a tener totalmente el control sobre tu trabajo y la migración va a ser sencilla: ¿Quieres llevarte tu blog a Gatsby, Hugo? En Markdown es enormemente sencillo.