Detectar enlaces rotos
Los enlaces se pudren en silencio: un proveedor renombra una página, un socio cierra su blog, un PDF se muda de carpeta, y seis meses después una parte de su sitio apunta a callejones sin salida que nadie notó. Este endpoint revisa los enlaces de una página y le dice con precisión cuáles ya no resuelven, para que se entere por un reporte y no por un visitante frustrado.
Ejecútela online
Ejecute esto en nuestros servidores con su cuenta. Las herramientas gratuitas corren en su navegador; esta cobra de su saldo del KIT según el precio de arriba.
El deterioro lento que tiene todo sitio
Nadie rompe sus enlaces a propósito. Se rompen porque la web que hay detrás de una página sigue cambiando después de que esa página se publicó: un proveedor reestructura su sitio, una landing de una campaña vieja se retira, un enlace interno apunta a un artículo que luego se eliminó. Cada enlace roto es pequeño por sí solo, pero un sitio que acumula suficientes empieza a verse descuidado tanto para los visitantes como para los motores de búsqueda. web.broken_links existe para sacar a la luz ese deterioro con la frecuencia que usted decida, en vez de dejar que un ticket de soporte o una venta perdida sean la primera señal.
Qué revisa realmente el rastreo
Haga POST a /web/broken-links con una URL, reciba un task_id de inmediato y obtenga un reporte estructurado por webhook firmado o mediante un enlace firmado cuando la tarea asíncrona termine. El reporte lista cada enlace encontrado en la página junto con su estado resultante: un 200 limpio, un 404, un error de servidor, un timeout o una cadena de redirecciones que vale la pena conocer, de modo que no solo le dicen 'algo está roto', sino exactamente qué enlace y por qué.
Enlaces internos frente a referencias hacia afuera
Un verificador como este demuestra su valor en dos frentes distintos: los enlaces internos están completamente bajo su control y cada 404 entre ellos es un error que se puede corregir, mientras que los enlaces salientes hacia otros dominios se degradan por razones que nunca controlará y solo necesitan revisión periódica. Tratar ambos con la misma disciplina y revisar el reporte de forma rutinaria es cómo los sitios que publican o referencian mucho contenido se adelantan a ese desgaste, en vez de descubrirlo durante un rediseño dos años después.
Su lugar en una rutina de mantenimiento
Los equipos que gestionan sitios con mucho contenido, portales de documentación o directorios de recursos ejecutan esto después de cada migración importante y luego con periodicidad fija, porque el deterioro de enlaces nunca avisa: solo se hace visible cuando alguien va a buscarlo. Con precio por solicitud, revisar un lote de páginas después de una migración o antes de una auditoría trimestral de contenido cuesta lo mismo sin importar si las páginas resultan estar limpias o llenas de enlaces muertos, lo que facilita ejecutarlo de forma rutinaria en vez de solo cuando ya se sospecha un problema.
Qué puede hacer con ella
Verificación tras una migración
Un equipo que mueve un sitio a nuevas URL corre el verificador sobre las páginas clave justo después del lanzamiento para detectar enlaces internos que no se actualizaron.
Mantenimiento de un portal de documentación
Un equipo de documentación revisa sus páginas de referencia con periodicidad fija para detectar enlaces a herramientas o APIs externas que fueron renombradas o dadas de baja antes de que un desarrollador tropiece con ellos.
Revisión editorial antes de publicar
Un editor pasa un artículo largo por el verificador antes de publicarlo para confirmar que cada enlace a una fuente citada todavía resuelve.
Mantenimiento de un directorio de recursos
Un directorio de enlaces curados revisa su listado completo de forma periódica, ya que los sitios enlazados cambian o desaparecen sin previo aviso.
Preguntas frecuentes
¿Cómo reviso una página en busca de enlaces rotos con la API?
Envíe la URL de la página por POST a /web/broken-links, guarde el task_id devuelto y reciba el reporte de enlaces muertos y redireccionados por webhook o mediante un enlace firmado válido por 24 horas.
¿Es gratis la API para detectar enlaces rotos?
No, no hay plan gratuito ni prueba; cuesta $0.002 por solicitud, y una tarea fallida nunca se cobra.
¿Revisa tanto enlaces internos como externos?
Sí, reporta el estado de cada enlace encontrado en la página, sin importar si apunta dentro del mismo dominio o hacia otro sitio.
¿Qué se considera un enlace roto en el reporte?
Se marcan como rotos los 404, errores de servidor y timeouts, y las cadenas de redirecciones se reportan aparte porque sí resuelven pero puede convenir limpiarlas.
¿Puedo escanear un sitio completo de una sola vez?
Cada solicitud revisa los enlaces encontrados en la URL que envíe, así que escanear un sitio completo implica encolar una solicitud por cada página que quiera cubrir.
¿Qué tan rápido corre una revisión?
Se ejecuta de forma asíncrona: recibe un task_id de inmediato y el reporte llega por webhook o enlace firmado cuando termina el rastreo, lo cual depende de cuántos enlaces tenga la página.
¿Ya está disponible este endpoint?
Sí, está en producción y aceptando solicitudes.
¿Se conservan los datos del rastreo después?
No, el contenido de la página y los resultados se eliminan después del período de retención y nunca se usan para entrenamiento.
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, y pronto desde nuestra app, el email y Telegram.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/web/broken-links \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"input":"…"}'const res = await fetch("https://api.kit.forhosting.com/web/broken-links", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"input": "…"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/web/broken-links",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"input": "…"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/web/broken-links", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"input":"…"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"input":"…"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/web/broken-links", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"input": "…"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "web.broken_links",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Límites
timeout_sec | 30 |
max_crawl_pages | 25 |
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |
413 | input_too_large | El archivo supera el límite de tamaño. |