Sitemap a JSON
Un índice de sitemaps casi nunca es una lista simple: suele ser un árbol de sub-sitemaps anidados que mezcla páginas, imágenes y noticias con espacios de nombres distintos. Este endpoint recorre ese árbol por usted y devuelve un arreglo JSON plano con todas las URLs y sus metadatos, listo para recorrer en cualquier script.
Ejecutar — gratis
Corre en su navegador. Gratis y sin límite: sus datos no salen de esta página.
Por qué los sitemaps dejan de ser simples
Un solo archivo sitemap.xml admite como máximo 50,000 URLs, así que cualquier sitio más grande se divide en un índice que apunta a decenas o cientos de archivos hijos. Analizar eso a mano implica descargar cada hijo de forma recursiva, detectar cuáles son a su vez índices y conciliar espacios de nombres XML distintos para imágenes, video y noticias. Los equipos que hacen auditorías de contenido, migraciones o revisiones de enlaces rotos casi siempre solo quieren la lista final de URLs, no la tubería para llegar a ella.
Qué hace exactamente la tarea
Envía la URL del sitemap raíz y la tarea la descarga, detecta si es un índice o un sitemap final, y recorre automáticamente cada hijo. Resuelve rutas relativas, decodifica entidades HTML dentro de las URLs y conserva los campos lastmod, changefreq y priority cuando la fuente los incluye, de modo que nada se pierde al pasar de XML a JSON.
Un poco de historia útil
El protocolo de sitemaps se introdujo en 2005 y fue adoptado en conjunto por los principales buscadores al año siguiente, precisamente para resolver el problema de descubrimiento en sitios grandes o con enlazado interno pobre. Dos décadas después el formato central no ha cambiado, pero las implementaciones reales varían mucho: algunos gestores de contenido emiten XML mal formado, otros comprimen sus archivos, otros mezclan protocolos. Esta tarea normaliza todo eso antes de que llegue a su resultado.
Dónde encaja en un flujo automatizado
Como el resultado es JSON plano, se conecta directo con una cola de rastreo, un script que compara el conjunto de URLs de esta semana contra el de la anterior, o un reporte que cuenta cuántas páginas expone realmente el sitio de un cliente. La tarea es asíncrona: la envía, recibe un task_id de inmediato y obtiene la lista terminada por su webhook o por un enlace firmado cuando el procesamiento concluye.
Confiabilidad por diseño
Si un sub-sitemap no responde o el XML está irrecuperablemente roto, la tarea reintenta hasta tres veces antes de fallar de forma clara con un error específico, y una tarea fallida nunca se cobra. Solo paga por resultados que realmente puede usar.
Qué puede hacer con ella
Auditorías de migración de sitio
Extraer el inventario completo de URLs de un sitemap heredado antes de mover un dominio, para que nada se pierda silenciosamente en el mapa de redirecciones.
Definición de alcance de rastreo semanal
Usar la lista aplanada como conjunto semilla de un rastreador en lugar de redescubrir páginas por enlaces internos en cada corrida.
Inventario de contenido para clientes
Convertir un índice de sitemaps desordenado y multinivel en una lista JSON lista para hoja de cálculo dentro de un entregable de auditoría SEO.
Monitoreo de cambios
Comparar la lista de URLs de hoy contra la instantánea del mes pasado para detectar secciones del sitio que crecieron o se redujeron sin previo aviso.
Preguntas frecuentes
¿Qué devuelve exactamente esta api para leer sitemap?
Un arreglo JSON plano con cada URL encontrada en el sitemap y en todos sus sub-sitemaps, incluyendo lastmod, changefreq y priority cuando la fuente los trae.
¿Maneja índices de sitemaps con sub-sitemaps anidados?
Sí, recorre los índices de forma recursiva, incluso con varios niveles de anidamiento, y devuelve una sola lista combinada.
¿Soporta archivos sitemap.xml.gz comprimidos?
Sí, los sitemaps comprimidos con gzip se descomprimen automáticamente antes de procesarse.
¿Hay plan gratuito o prueba gratis?
La herramienta de arriba es gratis en su navegador. La API es de pago: cada llamada se descuenta de su saldo prepago de ForHosting KIT — se recarga desde $10.00 (no caduca), se paga el precio publicado de cada solicitud, y una llamada sin saldo devuelve HTTP 402. Sin suscripción, sin tokens, y una tarea fallida no se cobra.
¿Cuánto cuesta cada llamada?
Una tarifa fija de $0.002 por solicitud, sin importar cuántas URLs tenga el sitemap.
¿Cómo recibo el resultado?
Mediante una llamada firmada a su webhook cuando la tarea termina, o descargando un enlace firmado válido por 24 horas.
¿Qué pasa si un sitemap está roto o inaccesible?
La tarea reintenta automáticamente hasta tres veces; si sigue fallando, recibe un error claro y no se le cobra.
¿Mis datos se usan para entrenar modelos?
No. Los resultados se eliminan al vencer el 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/seo/sitemap-to-json \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"input":"…"}'const res = await fetch("https://api.kit.forhosting.com/seo/sitemap-to-json", {
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/seo/sitemap-to-json",
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/seo/sitemap-to-json", 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/seo/sitemap-to-json", 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": "seo.sitemap_to_json",
"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.
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. |