«125 URL fuera del sitemap» y eran 0: el falso positivo de las webs multiidioma

Carta náutica vista desde arriba con una esquina arrancada donde la costa se corta a media línea
125 → 0URL realmente fuera del sitemap
623 → 430URL reales al contar sin duplicados
98entradas para 22 direcciones distintas en un solo fichero

El informe decía «125 URL fuera del sitemap». Lo dijo en dos pasadas distintas del rastreo, lo cual daba mucha confianza. Iba camino de ser un hallazgo prioritario.

Al comprobarlo contra los sitemaps que existían de verdad, las URL fuera del sitemap eran cero.

La causa: tu herramienta solo compara contra lo que le diste

Este es el mecanismo y es aplicable a cualquier rastreador.

Un rastreador no descubre tus sitemaps por arte de magia: usa los que encuentra en el robots.txt o los que le has indicado a mano. Después compara las URL rastreadas contra ese conjunto, y todo lo que no esté ahí lo marca como fuera de sitemap.

En una web con varios idiomas montada con los plugins habituales de WordPress, hay un índice de sitemaps por idioma: uno en la raíz para el idioma principal, y otro dentro de /en/, /fr/, /de/, cada uno con sus sub-sitemaps.

Y el índice de la raíz no referencia a los demás. Así que la herramienta carga solo el del idioma principal y marca todas las traducciones como fuera de sitemap. Ciento veinticinco, en este caso.

Cómo comprobarlo antes de escribir el hallazgo

Es un minuto. Pide cada índice de idioma y cuenta sus entradas:

for l in en fr de ca it; do
  echo -n "/$l/sitemap_index.xml -> "
  curl -s -o /tmp/s.xml -w "%{http_code} " --max-time 20 "https://TUDOMINIO/$l/sitemap_index.xml"
  grep -c '<loc>' /tmp/s.xml
done
curl -s https://TUDOMINIO/robots.txt | grep -i sitemap

Si los índices responden 200 y traen entradas, existen. Y si la última línea solo devuelve el índice principal, ya tienes el hallazgo de verdad.

El hallazgo real es otro, y la tarea es distinta

Aquí está lo importante para quien recibe el informe.

El problema no era «hay 125 páginas fuera del sitemap» —eso habría significado rehacer la estructura de sitemaps—. El problema era «los sitemaps existen y no están declarados en el robots.txt».

Sigue siendo un hallazgo prioritario: si Google no los descubre por otra vía, tarda más en encontrar las traducciones. Pero la tarea pasa de un proyecto de plantillas a añadir cuatro líneas a un fichero de texto, y el esfuerzo pasa de alto a bajo.

El mismo diagnóstico mal formulado habría generado semanas de trabajo innecesario.

Segunda trampa: cada URL repetida una vez por idioma

Mientras estábamos ahí, apareció otra cosa. Uno de los sub-sitemaps servía 98 entradas para 22 direcciones distintas. Otro, 180 entradas para 73 únicas.

El plugin de traducción y el de SEO se combinaban para escribir cada URL una vez por idioma, pero con la dirección del original, y con una fecha de modificación distinta en cada repetición.

Dos consecuencias:

El recuento de URL de tu sitio queda inflado. En este caso, 623 declaradas frente a 430 reales. Si presupuestas o planificas sobre esa cifra, planificas sobre un 45% de más.

Y la fecha de modificación deja de servir. Si la misma dirección aparece con tres fechas distintas, ninguna herramienta puede usar ese campo para saber qué ha cambiado. Es una señal que Google sí usa y que ahí quedaba inutilizada.

Cuenta siempre sin duplicados:

curl -s https://TUDOMINIO/page-sitemap.xml | grep -o '<loc>[^<]*</loc>' \
  | sed 's/<[^>]*>//g' | sort | uniq -c | sort -rn | head

Tercera trampa: mira las direcciones, no solo el número

Y la última, que fue la peor y solo aparece si te lees el fichero.

Los sitemaps de un tipo de contenido no declaraban las direcciones normales: declaraban la forma cruda con parámetros, del estilo ?post_type=algo&p=1234.

Esas direcciones devolvían una redirección hacia una página de error personalizada. Y esa página de error respondía 200 y estaba indexada.

Es decir: el sitemap, que es el documento con el que le dices a Google qué páginas quieres que indexe, estaba mandándolo en fila a una página de error que se presentaba como contenido válido.

Ninguna de las tres cosas sale en un recuento. Las tres salen abriendo el fichero.

Es la misma lección que con los clics: en una web multiidioma hay que separar los datos por mercado antes de mirarlos, o el idioma dominante te esconde el resto.

La lista de comprobación

  1. ¿Cuántos índices de sitemap tiene el sitio? Uno por idioma, casi seguro, si es multiidioma.
  2. ¿Están todos declarados en el robots.txt?
  3. ¿Le has dado todos a tu herramienta antes de rastrear? Si no, el informe de «fuera de sitemap» no significa nada.
  4. ¿Cuántas direcciones únicas hay, no cuántas entradas?
  5. ¿Las direcciones declaradas son las canónicas y responden 200 sin redirección?
  6. ¿Tu página de error devuelve 404? Compruébalo con una dirección inventada. Si devuelve 200, tienes un problema mayor que los sitemaps.

¿Tu herramienta dice que tienes URL fuera del sitemap?

Comprobamos si el hallazgo es real o es el falso positivo de las webs multiidioma antes de meterlo en ningún plan de trabajo.

Ver agencia SEO

La honestidad del dato

El falso positivo no es culpa de la herramienta. El rastreador hizo exactamente lo que se le pidió: comparar contra los sitemaps que se le dieron. El error fue nuestro, por leer una etiqueta del informe como si fuera una conclusión.

Y es el mismo error dos veces en el mismo proyecto: un informe que devuelve un resultado está respondiendo a la pregunta que le hiciste, no a la que tenías en la cabeza. Aquí la pregunta real era «¿está esta URL en alguno de mis sitemaps?» y la que se contestó fue «¿está en el que cargué?».

Y sí, el hallazgo salió en dos pasadas. Que un dato se repita no lo confirma: si el método tiene un sesgo, lo repite igual las veces que haga falta.

Preguntas frecuentes

¿Qué significa «URLs fuera del sitemap» en un rastreo?

Que esas direcciones no aparecen en los sitemaps que la herramienta ha cargado. No necesariamente que no estén en ninguno: si tu web tiene varios índices de sitemap —lo habitual en sitios multiidioma— y solo se cargó uno, todas las demás salen marcadas por error.

¿Es un problema que una URL no esté en el sitemap?

Es un problema menor si recibe enlaces internos, porque Google llegará igual. Es serio cuando se combina con páginas huérfanas: si una página no está en ningún sitemap y tampoco recibe enlaces, solo se llega a ella desde fuera.

¿Cuántas URL tiene realmente mi sitemap?

Cuenta direcciones únicas, no entradas. Algunos plugins de traducción escriben la misma dirección una vez por idioma, con fechas de modificación distintas, y el recuento sale inflado: en un caso, 623 entradas eran 430 direcciones reales.

El dato clave: tu rastreador solo compara contra los sitemaps que le > diste. En una web multiidioma eso convierte 0 problemas en 125.