Sitemap XML: cómo crearlo, validarlo y enviarlo
Cómo crear un sitemap con las URL canónicas finales, validar sus entradas y usarlo junto con el enlazado interno y robots.txt.
Un sitemap XML es una lista de URL en formato legible por máquinas que ayuda a los buscadores a descubrir las páginas que quieres que se tengan en cuenta. Complementa los enlaces internos rastreables, pero no garantiza la indexación: incluye solo URL finales y canónicas que cumplan la política de indexación del sitio.
El protocolo sitemaps.org se presentó en 2005. Google lo adoptó primero y Yandex lo siguió un año después. Hoy todos los grandes buscadores admiten el estándar.
Qué es un sitemap XML y para qué lo necesitas
Un bot de búsqueda descubre páginas de dos formas: siguiendo los enlaces internos y leyendo los sitemaps. El rastreo por enlaces funciona bien con páginas que reciben muchos enlaces entrantes. Pero las páginas sin ningún enlace, el contenido publicado hace poco o las secciones con poco enlazado interno pueden pasar desapercibidas o descubrirse con demasiado retraso. Ahí es donde ayuda un sitemap.
Acelera el rastreo
El bot recibe la lista de URL directamente y no tiene que recorrer los enlaces internos página por página.
Señala las actualizaciones
El atributo lastmod indica al buscador que una página ha cambiado y que hay que volver a rastrearla.
Admite sitios multilingües
Con xhtml:link puedes declarar las relaciones hreflang directamente en el sitemap, sin duplicar etiquetas en el HTML.
Estructura básica del archivo
Un sitemap mínimo válido es un archivo XML con la declaración de codificación, un elemento raíz urlset y elementos url dentro. Cada url debe contener al menos un atributo obligatorio: loc.
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://example.com/</loc>
<lastmod>2026-05-15</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>https://example.com/about</loc>
<lastmod>2026-04-01</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://example.com/blog/article-slug</loc>
<lastmod>2026-05-10</lastmod>
<changefreq>monthly</changefreq>
<priority>0.75</priority>
</url>
</urlset>El archivo debe estar codificado en UTF-8. Los caracteres especiales de las URL se escapan según las reglas de XML: & pasa a ser & y < pasa a ser <. Un solo archivo sitemap admite como máximo 50 000 URL y 50 MB sin comprimir.
Atributos: loc, lastmod, changefreq, priority
| Atributo | Obligatorio | Formato | Descripción |
|---|---|---|---|
| loc | Sí | URL absoluta | Dirección completa de la página, con protocolo y dominio. Máximo 2048 caracteres. |
| lastmod | No | W3C Datetime (YYYY-MM-DD) | Fecha de la última modificación. Google solo la tiene en cuenta si el valor es estable y preciso. |
| changefreq | No | always / hourly / daily / weekly / monthly / yearly / never | Pista sobre la frecuencia de actualización. Google la usa como una señal, pero no la sigue al pie de la letra. |
| priority | No | 0.0 — 1.0 | Importancia relativa de la URL dentro de tu sitio. No afecta a las posiciones en los resultados de búsqueda. |
loc: el único atributo obligatorio
La URL debe ser absoluta y coincidir con lo que devuelve realmente el servidor: si la página se sirve por HTTPS, loc debe usar HTTPS. Si el sitio usa www, loc debe incluir www. Si loc no coincide con la dirección real, Google ignora la entrada.
lastmod: el atributo opcional más valioso
La fecha debe reflejar cambios reales en el contenido, no actualizaciones de la plantilla ni la regeneración del sitemap. Si cambias lastmod en cada despliegue sin modificar el contenido, Google deja de confiar en el campo y lo ignora. Formatos admitidos: 2026-05-15, 2026-05-15T10:30:00+03:00, 2026-05-15T07:30:00Z.
changefreq: una pista, no una directiva
changefreq no controla la frecuencia de rastreo: es solo una pista. Google indica oficialmente que usa el valor como una de muchas señales. Yandex también trata el campo como informativo. Valores habituales: página de inicio, daily; entradas del blog, monthly; páginas legales, yearly.
priority: importancia relativa dentro del sitio
Priority, de 0.0 a 1.0, indica al buscador qué páginas consideras más importantes, en relación con tu propio sitio y no frente a otros sitios. Poner 1.0 en todas las páginas no tiene sentido: el buscador lo interpreta como si no hubiera ninguna priorización. Un esquema razonable: página de inicio 1.0; hubs de sección 0.85; artículos y productos 0.7–0.75; páginas de servicio 0.5.
Sitemap Index: cuándo un solo archivo no basta
Si tienes más de 50 000 páginas o el archivo supera los 50 MB, necesitas un Sitemap Index. Es un archivo XML que enlaza a sitemaps hijos en lugar de enlazar URL directamente. Cada archivo hijo es un urlset normal, limitado a 50 000 entradas.
<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap>
<loc>https://example.com/sitemap/blog.xml</loc>
<lastmod>2026-05-15T00:00:00Z</lastmod>
</sitemap>
<sitemap>
<loc>https://example.com/sitemap/products.xml</loc>
<lastmod>2026-05-14T00:00:00Z</lastmod>
</sitemap>
<sitemap>
<loc>https://example.com/sitemap/static.xml</loc>
<lastmod>2026-04-01T00:00:00Z</lastmod>
</sitemap>
</sitemapindex>Puedes dividir el sitemap por tipo de contenido (blog, productos, páginas estáticas) o por idioma (ru.xml, en.xml). Ambos enfoques son válidos. Dividir por idioma facilita revisar la indexación de cada idioma por separado.
Sitemap de imágenes
Las imágenes pueden aparecer en Google Imágenes y generar tráfico adicional. Para que el rastreador las encuentre y las entienda, añade la extensión image a tu urlset habitual. Cada entrada url puede contener hasta 1000 imágenes.
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">
<url>
<loc>https://example.com/gallery/city</loc>
<image:image>
<image:loc>https://example.com/images/city-skyline.jpg</image:loc>
<image:title>City skyline at sunset</image:title>
<image:caption>Downtown panorama taken from the observation deck, 2025</image:caption>
<image:geo_location>New York, USA</image:geo_location>
<image:license>https://creativecommons.org/licenses/by/4.0/</image:license>
</image:image>
</url>
</urlset><url> y valores admitidos:| Etiqueta | Obligatorio | Descripción |
|---|---|---|
| image:loc | Sí | URL absoluta de la imagen. Puede estar en otro dominio (por ejemplo, en una CDN). |
| image:title | No | Título de la imagen. Equivale al atributo title de img. |
| image:caption | No | Leyenda de la imagen. Equivale al atributo alt de img. |
| image:geo_location | No | Ubicación geográfica del objeto de la imagen. |
| image:license | No | URL de la licencia de la imagen. |
Las imágenes del sitemap no sustituyen al atributo alt del HTML: ambos funcionan en conjunto. El sitemap ayuda al rastreador a descubrir las imágenes; alt describe su significado.
Sitemap de vídeo
Un sitemap de vídeo permite que tu contenido aparezca en la búsqueda de vídeos de Google y en resultados enriquecidos con vista previa de vídeo. El namespace es video.
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:video="http://www.google.com/schemas/sitemap-video/1.1">
<url>
<loc>https://example.com/tutorials/getting-started</loc>
<video:video>
<video:thumbnail_loc>https://example.com/thumbnails/tutorial-1.jpg</video:thumbnail_loc>
<video:title>Getting started with the product</video:title>
<video:description>Step-by-step guide for first-time users</video:description>
<video:content_loc>https://example.com/videos/tutorial-1.mp4</video:content_loc>
<video:duration>183</video:duration>
<video:publication_date>2026-03-10T12:00:00+00:00</video:publication_date>
<video:family_friendly>yes</video:family_friendly>
</video:video>
</url>
</urlset>video:duration se indica en segundos. video:content_loc debe apuntar a un archivo reproducible (mp4, webm), no a una página con reproductor. Para vídeos alojados en YouTube o Vimeo, usa video:player_loc en lugar de video:content_loc.
Sitemap de noticias
Google News Sitemap es un formato especial para editores que participan en Google News. Incluye solo los artículos publicados en las últimas 48 horas. El contenido más antiguo no debe incluirse: se elimina automáticamente del índice de noticias.
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:news="http://www.google.com/schemas/sitemap-news/0.9">
<url>
<loc>https://example.com/news/tech-breakthrough-2026</loc>
<news:news>
<news:publication>
<news:name>Example Daily</news:name>
<news:language>en</news:language>
</news:publication>
<news:publication_date>2026-05-15T09:00:00+00:00</news:publication_date>
<news:title>Technology breakthrough set to transform the industry</news:title>
</news:news>
</url>
</urlset>Localización: hreflang en el sitemap
Si tu sitio existe en varios idiomas o para varias regiones, tienes que conectar las páginas correspondientes con hreflang. Hay tres formas de hacerlo: con etiquetas link rel en el HTML, con cabeceras HTTP Link o directamente en el sitemap. El sitemap es la opción más práctica para sitios grandes, porque no requiere cambios en las plantillas de las páginas.
En el sitemap, hreflang se declara a través del namespace xhtml. Cada página debe aparecer como entrada url, y cada entrada debe listar todas las variantes de idioma, incluida ella misma.
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<!-- Russian version -->
<url>
<loc>https://example.com/blog/seo-guide</loc>
<xhtml:link rel="alternate" hreflang="ru" href="https://example.com/blog/seo-guide"/>
<xhtml:link rel="alternate" hreflang="en" href="https://example.com/en/blog/seo-guide"/>
<xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/blog/seo-guide"/>
</url>
<!-- English version -->
<url>
<loc>https://example.com/en/blog/seo-guide</loc>
<xhtml:link rel="alternate" hreflang="ru" href="https://example.com/blog/seo-guide"/>
<xhtml:link rel="alternate" hreflang="en" href="https://example.com/en/blog/seo-guide"/>
<xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/blog/seo-guide"/>
</url>
</urlset>El valor x-default indica la página de reserva: la que se muestra a los usuarios que no encajan con ninguna configuración de idioma explícita. Normalmente es la versión en el idioma principal del sitio.
| Código hreflang | Uso |
|---|---|
| ru | Ruso, cualquier región |
| en | Inglés, cualquier región |
| en-US | Inglés, región EE. UU. |
| ru-RU | Ruso, región Rusia |
| x-default | Página predeterminada para un idioma o región no determinados |
Robots.txt: basta con una línea
Para que los buscadores encuentren tu sitemap, añade una sola directiva Sitemap a robots.txt. Si usas un Sitemap Index, apunta a él. El rastreador descubre automáticamente todos los archivos hijos a través del índice.
User-agent: *
Disallow: /admin/
Disallow: /api/
Allow: /
Sitemap: https://example.com/sitemap.xmlSi tienes varios índices raíz (por ejemplo, uno separado para ru y otro para en), puedes indicar varias directivas Sitemap:
Sitemap: https://example.com/sitemap/index-ru.xml
Sitemap: https://example.com/sitemap/index-en.xmlDocumentación de Google y Yandex
Documentación oficial de Google sobre sitemaps
Documentación oficial de Yandex Webmaster sobre sitemaps
Yandex admite el estándar sitemaps.org y, además, la extensión para noticias. Yandex lee changefreq y priority, pero recomienda centrarse en un lastmod preciso, que es más importante para volver a rastrear las páginas actualizadas.
Lista de comprobación
- El archivo está codificado en UTF-8 y tiene <?xml version="1.0" encoding="UTF-8"?> en la primera línea
- Todas las URL son absolutas (con protocolo y dominio) y coinciden con la URL canónica real
- HTTPS en loc si el sitio funciona con HTTPS
- lastmod refleja la fecha real del cambio en el contenido, no la fecha de compilación
- El archivo no supera las 50 000 URL ni los 50 MB sin comprimir
- En sitios grandes, un Sitemap Index con archivos hijos
- En páginas multilingües, xhtml:link con hreflang, incluido x-default
- En contenido multimedia, las extensiones correspondientes (image, video, news)
- robots.txt contiene una directiva Sitemap con una URL absoluta
- El sitemap está enviado a Google Search Console y a Yandex Webmaster
- Las páginas con noindex no se incluyen en el sitemap
- No se incluyen las páginas con una canonical que apunte a otra URL
FAQ
¿Es obligatorio un sitemap para un sitio pequeño?
¿Hay que incluir en el sitemap las páginas con noindex?
¿Afecta priority a las posiciones en los resultados?
¿Con qué frecuencia hay que actualizar el sitemap?
¿Cuántos sitemaps se pueden indicar en robots.txt?
Check it with SpiderHead
Free and local: run the audit on your own machine.



