Extraer enlaces
Una solicitud, una página, todos los enlaces que contiene, internos, externos, anclas e incluso mailto o tel, ordenados en una lista estructurada lista para usar de inmediato. Es el endpoint más pequeño y económico del kit web, hecho para los momentos en que no necesita el contenido, solo el cableado entre páginas.
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.
Una tarea acotada, hecha barata y con frecuencia
No toda pregunta necesita un rastreo completo ni un scraping del contenido de la página; a veces solo hace falta saber a dónde enlaza una página específica, ahora mismo, sin leer el resto. Este endpoint responde exactamente eso, por lo que tiene un precio plano y mínimo por solicitud en vez del precio por URL que tiene sentido para una extracción cargada de contenido.
Cómo lucen la solicitud y la respuesta
Una llamada a POST /web/links con una sola URL devuelve un task_id de inmediato, y luego se descarga la página y se recolecta cada etiqueta de ancla en un resultado estructurado: el href de cada enlace, su texto de ancla visible, y si apunta internamente dentro del mismo dominio o hacia uno externo. El resultado terminado llega por webhook firmado o mediante un enlace firmado válido por 24 horas, el mismo patrón de entrega que el resto de las tareas de la plataforma.
Por qué importa la separación entre interno y externo
La estructura de enlaces ha sido una señal que los motores de búsqueda ponderan desde los primeros algoritmos tipo PageRank de finales de los años noventa, y la distinción entre interno y externo sigue separando dos cosas muy distintas: los enlaces internos describen cómo se organiza un sitio, los externos describen a quién cita o en quién confía. Separarlos automáticamente en la respuesta evita que tenga que escribir esa lógica de clasificación usted mismo para cada página que revise.
Qué recibe exactamente de vuelta
La respuesta es un arreglo estructurado y plano, sin contenido anidado, sin texto renderizado más allá de la etiqueta de cada enlace, lo cual mantiene tanto el payload pequeño como el precio genuinamente insignificante al revisar cientos de páginas. Como en el resto de la plataforma, una página que falla al cargar se reintenta automáticamente hasta tres veces antes de devolver un error claro, y nunca se cobra una tarea que no llegó a completarse.
Cómo encaja en un flujo de trabajo mayor
Los equipos usan este endpoint antes de un rastreo más amplio para estimar el alcance, junto a auditorías SEO para detectar páginas huérfanas o exceso de enlaces externos, y dentro de pipelines de verificación de enlaces que marcan anclas apuntando a dominios que ya no están en buen estado. Como el costo por llamada es lo bastante bajo como para correrlo en cada página de un sitio sin pensarlo dos veces, suele ser la primera herramienta a la que se recurre antes de decidir si un scraping o rastreo más pesado realmente se justifica.
Qué puede hacer con ella
Auditorías de enlazado interno
Extraiga todos los enlaces de un conjunto de páginas clave para verificar que las páginas importantes reciban suficientes enlaces internos que respalden su peso SEO.
Revisión de enlaces salientes y de afiliados
Extraiga los enlaces externos de una página para verificar que las URLs de afiliado estén presentes y apunten a donde deben antes de lanzar una campaña.
Estimar el alcance de un rastreo antes de lanzarlo
Corra la extracción de enlaces sobre la página principal primero para calcular cuántas rutas únicas probablemente necesitaría cubrir un rastreo completo del sitio.
Detectar enlaces salientes rotos o sospechosos
Alimente los enlaces externos extraídos a una verificación aparte de dominios caídos o redirecciones para marcar páginas que necesitan limpieza.
Preguntas frecuentes
¿Qué devuelve la api de extraer enlaces de una url?
Una lista estructurada de cada enlace de la página, con su URL, texto de ancla, y si es interno al mismo dominio o externo.
¿Cuánto cuesta web.links?
$0.002 por solicitud, una tarifa plana sin importar cuántos enlaces contenga la página, cobrada solo cuando la tarea se completa.
¿Hay una forma gratuita de extraer enlaces de una url?
No hay capa gratuita: las capas gratis se abusan y ralentizan a todos. El acceso funciona con un saldo prepago de ForHosting KIT: se recarga desde $10.00 (no caduca) y cada solicitud se cobra a su precio publicado, así que una llamada sin saldo devuelve HTTP 402. Sin suscripción, sin tokens ni créditos inventados, y una tarea fallida no se cobra.
¿Devuelve los enlaces internos y externos por separado?
Sí, cada enlace del resultado viene etiquetado como interno o externo para que pueda filtrarlos o agruparlos sin lógica adicional de su lado.
¿Sigue los enlaces que extrae?
No, este endpoint solo lee la página que envía; seguir enlaces por todo un sitio es para lo que existe el endpoint de rastreo.
¿Incluye enlaces mailto y tel?
Sí, se recolectan etiquetas de ancla de todo tipo en la página, incluyendo enlaces mailto y tel junto a las URLs de página estándar.
¿Cómo recibo los resultados?
Por webhook firmado cuando la tarea termina, o mediante un enlace firmado válido por 24 horas si prefiere consultarlo usted mismo.
¿Puedo correrlo en muchas páginas de forma masiva?
Sí, envíe una solicitud por cada URL; a $0.002 por solicitud se mantiene económico incluso al revisar cientos de páginas.
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/links \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://ejemplo.com"}'const res = await fetch("https://api.kit.forhosting.com/web/links", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"url": "https://ejemplo.com"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/web/links",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"url": "https://ejemplo.com"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/web/links", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"url":"https://ejemplo.com"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"url":"https://ejemplo.com"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/web/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
{
"url": "https://ejemplo.com"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "web.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. |