Validar un sitemap
Un sitemap se supone que es el inventario confiable de un sitio, y sin embargo la mayoría acumula URLs malformadas o relativas y errores de formato que erosionan silenciosamente la confianza que un rastreador le tiene al resto del archivo.
Ejecutar — gratis
Este endpoint lee el XML, comprueba que cada URL listada sea una dirección absoluta bien formada e indica si el archivo incluye fechas lastmod.
Por qué importa la confianza en el archivo
Un sitemap no obliga a un buscador a rastrear nada; es una propuesta, y los rastreadores ponderan qué tan confiable ha sido históricamente esa propuesta. Un archivo que el rastreador no puede analizar, o que lista direcciones que no puede resolver, le enseña a tratar todo el archivo con más escepticismo, lo que puede retrasar el descubrimiento de las URLs nuevas y legítimas que están justo al lado de las rotas.
Qué se comprueba
La tarea lee el sitemap, extrae cada URL listada en una entrada loc y comprueba que sea una URL absoluta sintácticamente válida —el fallo estructural más común que introduce un generador—. Informa cuántas URLs lista el archivo, cuáles están malformadas y si el archivo incluye fechas lastmod. Comprueba la sintaxis de lo declarado; no consulta las URLs, así que su estado HTTP real es un asunto aparte, página por página.
URLs absolutas, no relativas
El protocolo de sitemaps exige que cada ubicación sea una URL absoluta completa, con esquema y host incluidos: una ruta relativa como /productos/42 es inválida en un sitemap aunque funcione perfectamente como enlace dentro de una página. Es justamente el fallo que una exportación o una edición a mano cuela con más frecuencia, y es el que esta comprobación está pensada para revelar: una dirección relativa o de otro modo no analizable se le devuelve individualmente en lugar de quedar oculta en un conteo de fallos opaco.
Un formato pensado para otra época
El protocolo de sitemaps se diseñó cuando los sitios eran más pequeños y las actualizaciones lo bastante poco frecuentes como para que un archivo mantenido a mano tuviera sentido; los sitemaps de hoy son casi todos autogenerados, y los errores que se cuelan son por eso sistémicos y no simples errores de tipeo aislados: un fallo de plantilla afecta a la vez a todas las URLs de un tipo determinado, exactamente el tipo de problema que una revisión de sintaxis está diseñada para revelar rápido.
Mantenerlo limpio con el tiempo
Como los sitemaps se regeneran en cada cambio de contenido, validarlos una vez y asumir que se mantienen correctos es una estrategia perdedora; lo práctico es enviar la URL del sitemap tras cada despliegue o de forma periódica, recibir un task_id de inmediato, y obtener la lista de las URLs malformadas y si hay lastmod en el webhook al terminar la descarga. A 0.002 dólares por solicitud, revisarlo con regularidad cuesta mucho menos que perder presupuesto de rastreo por un archivo que el rastreador no puede leer.
Qué puede hacer con ella
Verificación de salud posterior al despliegue
Leer el sitemap regenerado justo después de una publicación para detectar un fallo de plantilla que de pronto emite URLs malformadas o relativas.
Barrido de URLs relativas
Pasar todo el sitemap por la comprobación para detectar rutas relativas que un generador coló donde se exigen URLs absolutas, el fallo que Search Console reporta de forma más vaga.
Auditoría de presencia de lastmod
Comprobar que el sitemap regenerado siga incluyendo fechas lastmod, un campo que los generadores a veces omiten por completo entre publicaciones.
Puerta de sintaxis antes de enviar
Antes de enviarlo a Search Console, confirmar que cada URL se analiza como una dirección absoluta válida para que el archivo no sea rechazado al primer intento.
Preguntas frecuentes
¿Qué hace la comprobación de sitemap?
Lee el XML, extrae las URLs listadas en las entradas loc, informa cuántas hay y cuáles no son URLs absolutas válidas, e indica si el archivo incluye fechas lastmod.
¿Detecta enlaces rotos dentro del sitemap?
Detecta las URLs malformadas o relativas. No consulta las URLs, así que un 404 en vivo o una redirección son una comprobación aparte, hecha página por página contra la respuesta real del servidor.
¿Verifica hreflang en sitemaps además de en HTML?
No. Lee las URLs de loc y si hay lastmod; no inspecciona las anotaciones hreflang de las entradas xhtml:link dentro del sitemap.
¿Aplica el límite de tamaño del sitemap?
El propio protocolo de sitemaps limita un archivo a 50,000 URLs y 50MB sin comprimir. Esta comprobación lee las URLs y su sintaxis e informa el conteo; no marca ni bloquea por usted un archivo que exceda el límite.
¿Cuánto cuesta cada comprobación?
0.002 dólares por solicitud, cobrados solo cuando la descarga se completa con éxito; los fallos se reintentan hasta tres veces antes de devolver un error sin costo.
¿Existe un plan gratuito?
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.
¿Cómo obtengo el informe?
Por webhook firmado, recomendado para flujos automatizados, o mediante un enlace firmado válido por 24 horas.
¿Puedo validar un índice de sitemaps que referencia varios sitemaps hijos?
Lee las URLs que un archivo lista. En un índice de sitemaps, eso significa que las URLs de los sitemaps hijos se comprueban por su sintaxis; no descarga ni valida cada archivo hijo a su vez.
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, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/seo/sitemap-validate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com/sitemap.xml"}'const res = await fetch("https://api.kit.forhosting.com/seo/sitemap-validate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"url": "https://example.com/sitemap.xml"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/seo/sitemap-validate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"url": "https://example.com/sitemap.xml"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/seo/sitemap-validate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"url":"https://example.com/sitemap.xml"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"url":"https://example.com/sitemap.xml"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/seo/sitemap-validate", 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://example.com/sitemap.xml"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "seo.sitemap_validate",
"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. |