sitemap.xml y robots.txt: cómo configurarlos
Guía paso a paso para que el sitemap liste exactamente lo público y el robots.txt bloquee solo lo privado. Con los tres fallos que no rompen nada y te sacan del índice.
Un sitemap.xml bien hecho contiene exactamente las URLs públicas que quieres indexar, una sola vez cada una y en la forma canónica. Un robots.txt bien hecho bloquea lo que está detrás de una cuenta y nada más. Suena obvio, y aun así los dos archivos se corrompen solos: no rompen ninguna prueba, no dan error en el navegador y se quedan viejos sin que nadie mire.
Esta guía va paso a paso, con los fallos concretos que hemos tenido nosotros y cómo se cazan.
1. Decide qué es público antes de escribir nada
Antes del XML, una lista. Público es lo que quieres que aparezca en un buscador; privado es todo lo demás: el acceso, el registro, lo que hay detrás de una cuenta, la API y cualquier URL secreta por oscuridad —un enlace de compartir con un token, por ejemplo—.
Ese último caso merece atención: si un buscador indexa tu enlace secreto, deja de ser secreto. No basta con no enlazarlo; hay que bloquearlo explícitamente.
Escribe esa lista en un solo sitio del código y que la lean el sitemap y el robots.txt. Si vive dos veces, un día una copia se actualiza y la otra no.
2. Genera el sitemap, no lo escribas a mano
Un sitemap escrito a mano tiene una vida media de dos meses. Genéralo de la misma fuente que usa el sitio para pintar los enlaces.
Aquí hay una trampa importante en sitios renderizados en el servidor: los generadores de sitemap descubren las rutas estáticas al construir. Si todas tus páginas son dinámicas, no descubren ninguna y el sitemap sale vacío o a medias sin avisar. Nos pasó tal cual: dos páginas pasaron de estáticas a dinámicas y desaparecieron del sitemap sin romper ni una prueba. La solución fue declarar la lista de rutas en un módulo compartido y que el generador la reciba entera.
Para lo que nace después del build —contenido de la comunidad, artículos, cualquier cosa en base de datos— hace falta un sitemap propio que se genere en cada petición y que se consulte de verdad la fuente.
3. Una URL, una forma
El error más silencioso de todos: listar la misma página dos veces con formas distintas.
https://ejemplo.com/acerca
https://ejemplo.com/acerca/
Para un buscador son dos URLs con contenido idéntico, y encima contradicen al canonical, que solo puede apuntar a una. Nosotros llegamos a tener seis pares duplicados así y nada lo avisaba, porque comprobar «¿está esta página en el sitemap?» da verdadero igualmente.
Elige una forma —con barra o sin ella— y filtra la otra al generar. Que el canonical, los enlaces internos y el sitemap digan lo mismo.
4. Si tienes varios idiomas, declara las alternativas
Cuando la misma página existe en dos idiomas, cada entrada del sitemap debe declarar las dos con xhtml:link:
<url>
<loc>https://ejemplo.com/blog/mi-post</loc>
<xhtml:link rel="alternate" hreflang="es" href="https://ejemplo.com/blog/mi-post" />
<xhtml:link rel="alternate" hreflang="en" href="https://ejemplo.com/blog/mi-post?lang=en" />
</url>
Sin esto, la versión secundaria puede no llegar a indexarse nunca. Los detalles están en hreflang para un sitio en dos idiomas.
5. Escribe el robots.txt con la misma lista
El robots.txt no es un mecanismo de seguridad: es una petición que los rastreadores serios respetan. Lo que hay detrás de una cuenta se protege con autenticación, y además se bloquea aquí.
Una estructura que funciona:
User-agent: *
Allow: /
Disallow: /app
Disallow: /api
Disallow: /s/
Sitemap: https://ejemplo.com/sitemap-index.xml
Tres detalles que la gente se salta:
- La URL del sitemap tiene que ser absoluta, con dominio.
- Si tienes varios sitemaps, decláralos todos. Uno declarado y tres huérfanos es el patrón habitual cuando el sitio crece.
- Genera el archivo en vez de dejarlo estático si el dominio cambia entre entornos. Un
robots.txtde producción con el dominio de pruebas dentro es un clásico.
6. Decide qué haces con los rastreadores de IA
Es una decisión nueva y merece pensarse en vez de heredarla. No todos los rastreadores de IA hacen lo mismo:
- Los que leen para responder y citan la fuente —los de los asistentes con búsqueda— te traen visitas. Bloquearlos es renunciar a ese tráfico.
- Los que solo recolectan para entrenar consumen ancho de banda y no devuelven nada.
Se pueden tratar distinto, agente por agente. Nosotros dejamos entrar a los primeros con el mismo acceso que a Google y bloqueamos a los segundos. Y añadimos un llms.txt, que es el sitio resumido en Markdown para que un modelo no tenga que rastrear cien páginas de HTML; lo contamos en cómo hacer que la IA cite tu sitio.
7. Móntate una comprobación que falle sola
Nada de lo anterior aguanta seis meses sin vigilancia. Un script que rastree tu propio sitio y salga con código 1 cuando algo no cuadra vale más que cualquier auditoría.
Qué debe comprobar, como mínimo:
- Que el
robots.txtresponde, bloquea los prefijos privados y declara todos los sitemaps. - Que el sitemap existe y no tiene URLs con barra final duplicadas.
- Que toda página pública está en el sitemap y ninguna privada lo está.
- Que ninguna página pública lleva
noindexy que las privadas sí. - Que no hay enlaces internos rotos.
Cuélgalo de tu integración continua y se acabó el problema. Es el punto 8 de SEO técnico para desarrolladores, y el de mejor retorno de la lista.
Preguntas frecuentes
¿Un sitemap mejora el posicionamiento? No directamente. Sirve para que se descubra lo que existe, sobre todo páginas nuevas o poco enlazadas. Una página que ya se rastrea con normalidad no posiciona mejor por estar listada; una que no se descubre, sin sitemap, puede tardar mucho más en aparecer.
¿Cuántas URLs caben en un sitemap? Cincuenta mil URLs o cincuenta megabytes sin comprimir, lo que llegue antes. Si te pasas, se parten en varios y se declaran juntos en un índice de sitemaps, que es lo que hace cualquier generador decente por su cuenta.
¿Debo incluir las páginas paginadas del blog? Puedes, y es lo más coherente si tu principio es que el sitemap sea la lista completa de lo público. Lo que no debes hacer es ponerles a todas el canonical de la página 1: cada página del listado es contenido distinto y su canonical apunta a sí misma.
¿Disallow en robots.txt saca una página del índice?
No, y es la confusión más cara del SEO técnico. Disallow impide rastrear, no indexar: una URL bloqueada que reciba enlaces puede aparecer igualmente en los resultados, sin descripción. Para sacarla del índice hace falta noindex, y para eso el rastreador tiene que poder leer la página, así que no la bloquees a la vez.
¿Cada cuánto hay que actualizar el sitemap? Nunca a mano. Si se genera de la fuente real, se actualiza cuando cambia el contenido y no hay que acordarse de nada. Ese es todo el objetivo del ejercicio.
El directorio es la otra mitad de esto
115 servicios con plan gratuito real, con los límites de cada uno escritos en claro. Sin registro para empezar a mirar.