
Herramienta CLI rápida para escanear sitios web, mapas del sitio y listas de URL en busca de enlaces rotos, con trabajadores concurrentes, informes de cobertura y múltiples formatos de salida.
Encuentra enlaces muertos (enlaces rotos)
Documentación • Instalación • Acción de GitHub • Contribuir • Registro de cambios
Un enlace muerto (enlace roto) significa un enlace dentro de una página web que no se puede conectar. Estos enlaces pueden tener un impacto negativo en SEO y Seguridad. Esta herramienta facilita su identificación y modificación.

¿Buscas la v1 (gema Ruby)? Ahora vive en la rama
legacy/v1y continúa publicando la gemadeadfinderpara correcciones de errores y versiones de seguridad. aloja la reescritura en Crystal (v2+).
mainbrew install deadfinder
# https://formulae.brew.sh/formula/deadfinder
docker run ghcr.io/hahwul/deadfinder:latest deadfinder url https://example.com
Descarga el archivo comprimido de tu plataforma desde la última versión, extrae y coloca deadfinder en tu PATH.
nix run github:hahwul/deadfinder
nix profile install github:hahwul/deadfinder
nix develop github:hahwul/deadfinder
Requiere Crystal >= 1.19.1 y cmake (para el post-instal del analizador HTML lexbor; sin él, shards install falla con 'cmake': No such file or directory).
# macOS
brew install crystal cmake
# Debian / Ubuntu
sudo apt install crystal cmake
shards install
crystal build src/cli_main.cr -o deadfinder --release
# o: simplemente compilar
deadfinder sitemap https://www.hahwul.com/sitemap.xml
Ancla una etiqueta de versión específica. @latest no es una referencia válida de Actions.
steps:
- name: Ejecutar DeadFinder
uses: hahwul/deadfinder@v2 # sigue la última 2.x — ancla una etiqueta específica (ej. @2.0.2) para mayor reproducibilidad
id: broken-link
with:
command: sitemap # url / file / sitemap / pipe
target: https://www.hahwul.com/sitemap.xml
# timeout: 10
# concurrency: 50
# silent: false
# headers: "X-API-Key: 123444"
# worker_headers: "User-Agent: Deadfinder Bot"
# include30x: false
# user_agent: "Apple"
# proxy: "http://localhost:8070"
# proxy_auth: "id:pw"
# match: ""
# ignore: ""
# coverage: true
# visualize: report.png
- name: Manejo de Salida
run: echo '${{ steps.broken-link.outputs.output }}'
Si has encontrado un Enlace Muerto y quieres añadirlo automáticamente como incidencia, consulta el artículo "Automatizando la Detección de Enlaces Muertos".
Usage: deadfinder <command> [options]
Commands:
pipe Escanear las URLs desde STDIN
file <FILE> Escanear las URLs desde un archivo
url <URL> Escanear una sola URL
sitemap <SITEMAP-URL> Escanear las URLs desde un sitemap
completion <SHELL> Generar script de autocompletado (bash/zsh/fish)
version Mostrar versión
Options:
-r, --include30x Incluir redirecciones 30x como enlaces muertos
-c, --concurrency=N Número de trabajadores concurrentes (por defecto: 50)
-t, --timeout=N Tiempo de espera en segundos (por defecto: 10)
-o, --output=FILE Archivo para escribir los resultados
-f, --output_format=FORMAT Formato de salida: json, yaml, toml, csv, sarif (por defecto: json)
-H, --headers=HEADER Cabeceras HTTP personalizadas para la petición inicial
--worker_headers=HEADER Cabeceras HTTP personalizadas para peticiones de trabajadores
--user_agent=UA Cadena User-Agent
-p, --proxy=PROXY Servidor proxy (HTTP y HTTPS CONNECT)
--proxy_auth=USER:PASS Autenticación de proxy
-m, --match=PATTERN Patrón de URL a coincidir (regex)
-i, --ignore=PATTERN Patrón de URL a ignorar (regex)
-s, --silent Modo silencioso
-v, --verbose Modo verboso
--debug Modo debug
--limit=N Límite de URLs a escanear
--coverage Activar seguimiento e informe de cobertura
--visualize=PATH Generar imagen PNG de visualización
# Escanear las URLs desde STDIN (múltiples URLs)
cat urls.txt | deadfinder pipe
# Escanear las URLs desde un archivo
deadfinder file urls.txt
# Escanear una sola URL
deadfinder url https://www.hahwul.com
# Escanear las URLs desde un sitemap
deadfinder sitemap https://www.hahwul.com/sitemap.xml
deadfinder sitemap https://www.hahwul.com/sitemap.xml -o output.json
cat output.json | jq
{
"Target URL": [
"DeadLink URL",
"DeadLink URL",
"DeadLink URL"
]
}
Con --coverage:
deadfinder sitemap https://www.hahwul.com/sitemap.xml --coverage -o output.json
{
"dead_links": {
"Target URL": ["DeadLink URL 1", "DeadLink URL 2"]
},
"coverage": {
"targets": {
"Target URL": {
"total_tested": 14,
"dead_links": 7,
"coverage_percentage": 50.0
}
},
"summary": {
"total_tested": 14,
"total_dead": 7,
"overall_coverage_percentage": 50.0
}
}
}
deadfinder completion bash > /etc/bash_completion.d/deadfinder
deadfinder completion zsh > ~/.zsh/completion/_deadfinder
deadfinder completion fish > ~/.config/fish/completions/deadfinder.fish
¡Las contribuciones son bienvenidas! Si tienes una idea para mejorar o deseas reportar un error:
feature/awesome-feature o bugfix/annoying-bug).main.