Generar un sitemap
Muchos sitios crecen y pierden páginas silenciosamente cuando un script de compilación falla, mucho antes de que alguien note que el sitemap ya no coincide con la realidad. Este endpoint rastrea el sitio directamente en lugar de confiar en un plugin del gestor de contenido, y produce un sitemap.xml que refleja lo que existe en este momento.
La brecha entre el sitemap del CMS y el sitio real
La mayoría de los plugins de sitemap solo conocen las páginas que su propia tabla de base de datos registra: pasan por alto páginas estáticas agregadas fuera del CMS, olvidan quitar URLs que ya se borraron y rara vez notan un subdominio de pruebas que quedó rastreable por accidente. Un generador que sigue enlaces igual que lo haría un buscador detecta todo eso, porque reporta el sitio tal como es, no como la base de datos cree que es.
Cómo se comporta el rastreo
Le da una URL de inicio y sigue los enlaces internos en anchura, respetando las directivas de robots.txt y cualquier señal noindex que encuentre, de modo que las páginas que decidiste excluir permanecen excluidas. Por defecto se detiene en el límite del propio dominio, así que un enlace en el pie de página hacia un sitio socio no hace que el rastreo se desvíe. El resultado es un sitemap.xml válido, siguiendo el mismo protocolo que esperan los buscadores, con fechas lastmod calculadas a partir de lo que las propias páginas revelan.
Por qué el formato sigue importando en 2026
Aunque hoy los sitios se descubren constantemente por enlaces, feeds y redes sociales, el sitemap sigue siendo la señal que el dueño del sitio controla de forma directa, indicando a los buscadores qué URLs son canónicas y merecen revisarse. Para catálogos grandes, secciones recién lanzadas o sitios con enlazado interno pobre, suele ser la forma más rápida de lograr que páginas nuevas se noten.
Qué recibe y cuándo
La tarea corre de forma asíncrona: envía el dominio, recibe un task_id de inmediato y el sitemap.xml terminado llega por su webhook o por un enlace firmado cuando el rastreo concluye. Los sitios más grandes simplemente tardan más en rastrearse; no existe un nivel de precio distinto para 'sitio grande', el costo por solicitud se mantiene igual.
Cómo maneja un sitio desordenado o a medio romper
Los bucles de redirección, los tiempos de espera agotados y el HTML mal formado son comunes en sitios reales, y el rastreador está diseñado para sortearlos en lugar de abortar. Si el dominio queda inalcanzable después de tres intentos, la tarea falla con un error específico y no se le cobra por ella.
Qué puede hacer con ella
Reconstrucción de sitemap tras una migración
Regenerar el sitemap.xml desde cero justo después de un rediseño, en lugar de confiar en una exportación antigua del plugin que todavía lista páginas que ya no existen.
Sitios sin gestor de contenido
Producir un sitemap válido para un sitio estático o una aplicación a medida que no tiene ningún ecosistema de plugins que lo genere automáticamente.
Detectar páginas huérfanas u olvidadas
Comparar el sitemap rastreado contra el generado por el CMS para encontrar páginas que están activas pero invisibles para la lógica de sitemap del propio sitio.
Verificaciones periódicas de vigencia
Volver a ejecutar el rastreo cada mes en un sitio con mucho contenido para mantener las fechas lastmod y la lista de URLs alineadas con lo que realmente se publicó.
Preguntas frecuentes
¿En qué se diferencia esta api generar sitemap de un plugin de CMS?
Rastrea el sitio en vivo siguiendo los enlaces reales en lugar de leer una tabla de base de datos, por lo que captura páginas que un plugin pasaría por alto y descarta las que ya no existen.
¿Respeta robots.txt y las etiquetas noindex?
Sí, el rastreo respeta las reglas disallow de robots.txt y omite las páginas que llevan una directiva noindex.
¿Rastreará dominios externos enlazados desde el sitio?
No, por defecto el rastreo se mantiene dentro del límite del dominio de partida.
¿Hay una prueba gratis para probarlo primero?
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.
¿Cuánto cuesta esta api generar sitemap?
Una tarifa fija de $0.002 por solicitud, sin importar cuántas páginas encuentre el rastreo.
¿Qué tan grande puede ser el sitio que maneja?
No hay un límite fijo de páginas; los sitios más grandes simplemente tardan proporcionalmente más en rastrearse antes de que el sitemap quede listo.
¿Cómo obtengo el sitemap.xml terminado?
Mediante una notificación firmada a su webhook cuando el rastreo termina, o con un enlace firmado que permanece válido durante 24 horas.
¿Qué pasa si el sitio está caído temporalmente durante el rastreo?
La tarea reintenta automáticamente hasta tres veces; si el sitio sigue inaccesible, falla con un error claro y nunca se cobra.
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-generate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"input":"…"}'const res = await fetch("https://api.kit.forhosting.com/seo/sitemap-generate", {
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-generate",
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-generate", 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-generate", 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_generate",
"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. |
413 | input_too_large | El archivo supera el límite de tamaño. |