// HERRAMIENTA GRATIS · VALIDADOR DE SITEMAP XML
Validador de sitemap XML
Pega tu sitemap.xml —o suelta el archivo encima— y verás cada error del protocolo con su número de línea y su corrección: loc, lastmod, priority, changefreq, el emparejamiento de hreflang y el límite de 50.000 URL. Gratis, en tu navegador, sin subir nada.
También enEnglishDeutschEspañolFrançais日本語한국어Português (Brasil)繁體中文
La validación se ejecuta según escribes. También puedes soltar un sitemap.xml o un sitemap.xml.gz directamente sobre este cuadro: tu navegador lo lee y lo descomprime, y el archivo nunca sale de ahí.
Cómo validar un sitemap XML
Tres pasos, todos en esta página. El validador lee el archivo que le das: no descarga tu sitio, así que pega el XML o suelta el archivo en vez de escribir una URL.
- Pega o suelta el archivo. Pega el XML en el cuadro de la izquierda, o arrastra encima sitemap.xml (o sitemap.xml.gz: tu navegador lo descomprime). La validación se ejecuta al momento, con cada tecla.
- Baja por los hallazgos. Cada hallazgo lleva su número de línea y la corrección. Los errores son cosas que un rastreador rechazará o leerá mal; los avisos son XML válido que aun así te cuesta algo, como un lastmod en el futuro o una URL duplicada.
- Copia el informe, corrige y vuelve a comprobar. El panel de la derecha contiene un informe en texto plano —tipo de archivo, distancia a los límites de 50.000 URL y 50 MB, y todos los hallazgos— que puedes pegar en un ticket. Corrige, pega el archivo nuevo y confirma que vuelve limpio.
Qué comprueba este validador de sitemap
Hace tres pasadas sobre el archivo que pegas. Primero, si el XML está bien formado: etiquetas sin cerrar o mal anidadas, un & sin escapar dentro de una cadena de consulta, un prefijo de espacio de nombres sin declarar; cada cosa señalada en la línea en la que ocurre, en vez de como un único «error de análisis». Después, el protocolo de sitemaps.org: la raíz es <urlset> o <sitemapindex> en el espacio de nombres http://www.sitemaps.org/schemas/sitemap/0.9, cada entrada lleva exactamente un <loc> absoluto, <lastmod> es un W3C Datetime real, <priority> va de 0.0 a 1.0 y <changefreq> es una de las siete palabras permitidas. Y por último, los límites y las referencias cruzadas: 50.000 URL, 50 MB sin comprimir, URL duplicadas, hosts mezclados y las anotaciones hreflang de xhtml:link comprobadas en los dos sentidos.
Un sitemap XML es un archivo publicado en una URL fija que enumera las páginas que quieres que se rastreen: cada una como un elemento <loc>, opcionalmente con <lastmod>, agrupadas bajo una raíz <urlset> —o bajo un <sitemapindex> que apunta a varios archivos de ese tipo. Ese es todo el protocolo, y sigue siendo el esquema 0.9 que acordaron los buscadores. Por eso conviene pasar el validador exactamente una vez por cada cambio del generador: los fallos son mecánicos y cada uno se arregla en una línea en cuanto algo te dice cuál.
| Regla | Nivel | Por qué |
|---|---|---|
XML bien formado: etiquetas cerradas y anidadas, & escrito &, cada prefijo declarado | error | El rastreador analiza el archivo con un parser estricto. Un solo ampersand suelto y se rechaza el archivo entero, no esa URL. |
Raíz <urlset> o <sitemapindex> con el espacio de nombres 0.9 declarado | error | Sin el espacio de nombres, esos elementos no son elementos de sitemap: el archivo se analiza y no lista nada. |
Un <loc> por entrada, absoluto con http(s), 2.048 caracteres como mucho | error | Un sitemap se lee sin contexto; no hay URL base contra la que resolver /precios/. |
<lastmod> es un W3C Datetime, con zona horaria si lleva hora | error | 01/09/2026 y 2026-09-01 10:00:00 se rechazan los dos. lastmod es la única pista que Google lee, así que una rota es un campo desperdiciado. |
<priority> de 0.0 a 1.0, <changefreq> en la lista permitida | error | 1,0 con coma decimal y semanal en vez de weekly son XML válido y sitemap inválido. |
| Solo elementos del protocolo en el espacio de nombres de sitemap; las extensiones declaran el suyo | error | <lastmodified> y <image:loc> sin xmlns:image son las dos erratas habituales. |
| 50.000 entradas y 50 MB sin comprimir por archivo | error | Pasado cualquiera de los dos límites, el archivo se rechaza entero, no se recorta. Gzip no ayuda: se mide antes de comprimir. |
| hreflang: autorreferencia, enlace de retorno, código válido, x-default | error | Google descarta por completo, y en silencio, una anotación que solo va en un sentido. |
<loc> duplicados, hosts mezclados, <lastmod> futuro o impreciso | aviso | XML válido que aun así te cuesta presupuesto de rastreo o credibilidad. |
Que haya <priority> o <changefreq> siquiera | aviso | La documentación de Google dice que ignora ambos. Conviene saberlo antes de dedicar una release a generarlos. |
El hreflang del sitemap, comprobado en los dos sentidos
Poner el hreflang en el sitemap en vez de en el <head> de cada página es lo que hacen casi todos los sitios grandes, y es donde un validador de sitemap se gana el sueldo, porque el fallo es invisible. La regla de Google es simétrica: si la página A nombra a B como alternativa, la entrada de B tiene que nombrar a A, y cada versión tiene que nombrarse a sí misma. Si falta un solo enlace de retorno, Google no se queda con el grupo a medias: descarta la anotación de ese par. Y nada grita en Search Console cuando ocurre.
Por eso este validador construye el grafo. Para cada <url> con elementos xhtml:link comprueba que la entrada se lista a sí misma, que toda alternativa que apunte a una URL del mismo archivo recibe su enlace de vuelta, que ningún código de idioma aparece dos veces, y que cada código es un idioma ISO 639-1 real con escritura y región opcionales. Cuando una alternativa apunta fuera del archivo, lo dice en vez de fingir que lo sabe. Cuando dos URL se diferencian solo por la barra final, también lo dice, porque esa es la discrepancia por encima de la que pasa la vista. Los grupos sin x-default reciben un aviso, no un error: es opcional, y es también la versión a la que aterriza quien busca en un idioma que no publicas.
Si lo que quieres es escribir las anotaciones y no depurarlas, el generador de etiquetas hreflang emite las dos formas a partir de un solo patrón de URL —el bloque de <link> para el head y el fragmento xhtml:link equivalente para el sitemap—, de modo que no puedan separarse. Genera allí, pega el resultado aquí y los enlaces de retorno salen correctos por construcción.
es-419, es-ES y los idiomas cooficiales: los códigos de región del hreflang en un sitemap
El español es el único idioma grande donde hace falta un código de región numérico, y ahí es donde empiezan casi todos los errores de hreflang de los sitios en español. Los códigos de región del hreflang salen de ISO 3166-1 alpha-2 —ES, MX, AR, CO—, pero «Latinoamérica» no es un país y no tiene código alpha-2. Sí existe como región UN M.49, con el número 419, y hreflang admite ese formato. Es decir:
| En el archivo | Qué dice el validador | Lo correcto |
|---|---|---|
es-419 | válido, sin comentarios | español para Latinoamérica |
es-LATAM | error: no es un valor de hreflang | es-419 |
es_ES | error: guion bajo | es-ES |
es-mx | aviso: la región va en mayúsculas | es-MX |
mx | aviso: no es un idioma | es-MX |
La decisión de fondo no es de sintaxis, es de estrategia, y conviene tomarla antes de generar nada: es a secas cubre a todo el mundo que busca en español. Solo tiene sentido separar por región si las versiones dicen cosas distintas de verdad —precios en pesos frente a euros, condiciones de envío, formas de pago, atención al cliente en otro horario—. Si tu versión mexicana es la peninsular con el mismo texto, dos anotaciones regionales no te dan nada y sí te dan un grafo más grande que mantener. Un patrón que funciona bien y se ve poco: es-ES para España, es-419 para el resto, y es o x-default para quien no encaje en ninguna.
Y una trampa que solo aparece en sitios de España: los idiomas cooficiales. El catalán (ca), el gallego (gl) y el euskera (eu) son idiomas ISO 639-1 con todas las de la ley, y el validador los acepta sin decir nada —son códigos de idioma, no variantes regionales del español, así que no se escriben es-CT ni nada parecido—. En cambio, va para el valenciano no está en ISO 639-1 y recibe un aviso: si publicas una versión valenciana diferenciada, el código que existe en la práctica para los buscadores es ca, con la región si de verdad la necesitas. El botón Ejemplo con errores de arriba carga un archivo con es_ES, es-LATAM, es-mx, va, una fecha en formato 01/09/2026 y un changefreq traducido al español. Salen trece hallazgos de un archivo de dieciséis líneas, unos cuantos más de los que aparenta: los códigos mal escritos arrastran consigo el grafo de enlaces de retorno, y ahí es donde se multiplica.
Por qué este valida un archivo pegado y no una URL
Cualquier otro validador de sitemap gratuito te pide una URL y la descarga desde un servidor. Este funciona entero dentro de la página que estás mirando, y un navegador no puede leer un archivo de otro dominio salvo que ese dominio lo permita: la política del mismo origen, aplicada como CORS. Prácticamente ningún sitio envía Access-Control-Allow-Origin en su sitemap, así que un campo de URL aquí fallaría con casi todas las direcciones que alguien escribiese. Antes que entregar un campo que falla la mayoría de las veces, la herramienta acepta el archivo.
Que resulta cubrir los casos a los que un campo de URL no llega:
- Todavía sin publicar: el archivo que tu generador acaba de escribir en tu portátil, antes del despliegue.
- Construido en CI: el artefacto de la pipeline, comprobado antes de llegar a ningún host.
- Detrás de un login, una VPN o una contraseña de staging: un validador que descarga recibe la página de acceso y la reporta como XML roto.
- Interno o sin salida a internet: nada del archivo sale de tu máquina, así que un sitemap que no puedes entregar a un servidor ajeno sigue siendo comprobable.
El precio conviene decirlo claro: esta herramienta no puede decirte si https://tudominio.es/sitemap.xml devuelve realmente un 200, si el robots.txt apunta a él, ni si las URL de dentro están vivas. Lee los bytes que le das. Para comprobar un archivo ya publicado, descárgalo tú —curl -s https://tudominio.es/sitemap.xml, o curl -s https://tudominio.es/sitemap.xml.gz | gunzip— y pega la salida. Por cierto: el google.com/ping?sitemap= que algunas herramientas todavía ofrecen quedó obsoleto en 2023 y ya no hace nada. Lo que sí funciona es una línea Sitemap: en el robots.txt, un envío único en Search Console y en Bing Webmaster Tools, y un <lastmod> que sea cierto. Todo lo que viene después del análisis es trabajo de servidor, y para eso está Agent SEO: clize seo check --domain tudominio.es lee tu sitemap y tu propiedad de Search Console a la vez y te dice qué páginas del archivo no han conseguido nunca una impresión. En la misma capa legible por máquinas viven el validador de llms.txt y el generador de schema FAQ, que comparten con este la regla de generar el archivo desde una sola fuente en vez de editarlo a mano.
// Preguntas frecuentes
¿Qué comprueba un validador de sitemap XML?
Tres cosas. Que el archivo sea XML bien formado: etiquetas cerradas y anidadas, ampersands escapados, prefijos de espacio de nombres declarados. Que siga el protocolo de sitemaps.org: una raíz <urlset> o <sitemapindex> en el espacio de nombres 0.9, exactamente un <loc> absoluto por entrada, un W3C Datetime válido en <lastmod>, <priority> entre 0.0 y 1.0 y <changefreq> de la lista permitida. Y que se mantenga dentro de los límites y sea coherente consigo mismo: menos de 50.000 URL y 50 MB sin comprimir, sin URL duplicadas, y con las alternativas hreflang apuntándose entre sí.
¿Cómo se escribe el español de Latinoamérica en hreflang?
es-419. El 419 es el código numérico UN M.49 de Latinoamérica, y hreflang admite ese formato además de los códigos de país ISO 3166-1 de dos letras. es-LATAM no existe y este validador lo marca como error. Si además publicas versiones por país, se escriben es-MX, es-AR, es-CO, siempre con el idioma delante y la región en mayúsculas. Y recuerda que es a secas ya cubre a todo el que busque en español: separa por región solo si las páginas dicen cosas distintas de verdad.
¿Puedo poner el catalán, el gallego o el euskera en el hreflang del sitemap?
Sí, y no son variantes regionales del español: son idiomas propios con código ISO 639-1 (ca, gl, eu), así que se escriben tal cual, sin nada delante. Este validador los acepta sin comentarios. El valenciano es el caso raro: va no está en ISO 639-1 y recibe un aviso, así que para los buscadores la anotación que existe es ca. Añade región solo si de verdad publicas versiones distintas por comunidad, que casi nunca es el caso.
¿Por qué me da error el lastmod si la fecha es correcta?
Casi siempre por la forma de escribirla, no por la fecha. Valen AAAA-MM-DD o AAAA-MM-DDThh:mm:ss con zona horaria. El formato 01/09/2026 no vale, un espacio en lugar de la T no vale, y una hora sin zona horaria tampoco. Si tu generador escribe hora local, lo más seguro es pasarla a UTC y añadir Z, o quitar la hora y dejar solo la fecha: una fecha sin hora es válida y suficientemente precisa como señal de rastreo.
¿Puede validar un archivo de índice de sitemaps?
Sí. Pega un archivo cuya raíz sea <sitemapindex> y el validador cambia a las reglas de índice: cada entrada debe ser un <sitemap> con un <loc> y como mucho un <lastmod>, sin <priority>, <changefreq> ni elementos <url> mezclados. No puede seguir los sitemaps hijos, porque nunca descarga nada: valida cada archivo hijo pegándolo por turnos.
¿Puede validar un sitemap.xml.gz comprimido?
Sí. Suelta el archivo .gz sobre el cuadro, o elígelo con el botón, y tu navegador lo descomprime localmente antes de comprobarlo. Ojo: gzip no cambia el límite de tamaño. El techo de 50 MB se mide sobre el archivo sin comprimir, que es lo que muestra el informe.
¿Se sube mi archivo a algún sitio y por qué no descarga el sitemap desde una URL?
No se sube nada. El validador es un script que corre en tu navegador: nada de lo que pegues o sueltes sale de la página, no hay cuenta ni registro, y una vez cargada la página funciona sin conexión. Esa es también la razón de que no pueda descargar una URL: la política del mismo origen impide que una página de un dominio lea un archivo de otro salvo que ese otro envíe cabeceras CORS, cosa que casi ningún sitio hace con su sitemap. Descarga el archivo tú con curl y pega la salida; a cambio puedes comprobar también archivos sin publicar, construidos en CI o detrás de un login.
Un archivo válido es el suelo. Ahora averigua qué se indexó.
Revisar tu propio sitio no cuesta nada: lee tu sitemap y tu propiedad de Search Console a la vez, lista las páginas con su estado HTTP y de indexación reales, marca las que nunca han conseguido una impresión y muestra el tráfico por fuente, con los motores de IA contados aparte. Un comando desde dentro de tu agente.
$ npm i -g @clize/clize && clize install $ clize seo check --domain tudominio.es[ Agent SEO by Clize → ]