Poco a poco me he acostumbrado al flujo de trabajo de Hugo. Podrán ver algunas mejoras, por ejemplo, acabo de instalar giscus como sistema de comentarios. Eso fue sencillo, el theme tiene muchas opciones para eso.
Pero para detectar enlaces rotos ¡Ahhhhhh! esa es otra historia.
Con WordPress lo más sencillo era buscar algún plugin que hiciera la tarea para luego ir corrigiendo los enlaces que con el tiempo han dejado de funcionar.
Pero esto es Hugo y los plugins ya no son una opción.
Lychee es veloz
Después de investigar cuales serían mis opciones di con un programita peculiar.
Lychee esta basado en Rust y es realmente veloz, como un rayo 🌩 (imáginese la escena de pixar por favor, si ya sabe cual).
Lychee encuentra enlaces rotos y direcciones de correo electrónico dentro de Markdown, HTML, reStructuredText o cualquier otro archivo de texto o sitio web.
Con esta gran herramienta a la mano, solo necesitaba automatizar un poco la tarea.
Empezamos generando el sitio web
Es lo más sencillo, ejecutar el comando que genera el sitio web en la carpeta public
hugo
Si se completa exitosamente este comando (siempre puede haber errores) pasamos a la siguiente etapa.
Buscar los enlaces rotos con lychee
Pues ya tenemos nuestro sitio web estático generado en la carpeta public.
Ahora a buscar los enlaces rotos solamente en los archivos con extensión html.
lychee public --include ".html" --format json --root-dir / --output enlaces_rotos.json

Y como pueden ver guardamos los resultados en el archivo enlaces_rotos.json
Pero el resultado no es muy amigable que digamos, por eso agregamos un paso más.
Generar un archivo CSV con los resultados
Para encontrar la aguja en el pajar y hacer todo más manejable decidí generar un archivo CSV que puedo abrir sin problemas en cualquier programa de hoja de cálculo.
Para hacerlo me ayudó el programa jq que es especialista en obtener información de archivos JSON .
jq -r '
.error_map
| to_entries[]
| .key as $source
| .value[]
| select(.url | startswith("http"))
| "\($source) | \(.url) | \(.status.text)"
' enlaces_rotos.json > enlaces-rotos-externos.csv

Algunos no están realmente rotos, pero con el tiempo aprendes a ignorar los errores comunes para centrarte en los que realmente necesitan mi atención.
Lo más probable es que haga un archivo bash que ejecute todo esto regularmente.
¿Ustedes como enfrentan este problema? ¿Qué herramientas utilizan?
“Conócete a ti mismo.”
― Sócrates
