Sitemap y canonical en WordPress headless: una sola fuente de verdad, servida desde el front-end

Sitemap y canonical en WordPress headless: una sola fuente de verdad, servida desde el front-end

Última verificación: 22 de septiembre de 2026
6 min de lectura
Guía
500+ proyectos WP
SEO técnico

#Sitemap y canonical en WordPress headless: una sola fuente de verdad, servida desde el front-end

Dos de los siete patrones SEO para WordPress headless merecen un artículo propio, porque son los primeros en fallar y fallan en silencio. El sitemap y la URL canónica son las dos señales en las que Google más confía para saber qué es este sitio y cuál es la URL real. Un proyecto headless que se equivoque en cualquiera de las dos pierde el posicionamiento que la migración pretendía conservar.

Este artículo concreta el patrón. Da por hecho que la decisión de arquitectura (Astro o Next.js según la matriz de decisión) ya está tomada.

#¿En qué consiste el patrón de sitemap y canonical en headless, en un párrafo?

Genere el sitemap desde el framework de front-end, con URL que coincidan con el sitio público real. Muestre la URL canónica como <link rel="canonical"> en el head del HTML, tomada de WordPress (Yoast o Rank Math) y emitida por el front-end. Desactive o redirija con un 301 el sitemap y el canonical del origen de WordPress. Un sitemap, un canonical por página, ambos generados en el servidor.

#¿Por qué los sitios WordPress headless acaban con dos sitemaps?

WordPress 5.5 introdujo /wp-sitemap.xml como función del núcleo. Desde entonces, todas las instalaciones de WordPress lo tienen activo por defecto. Los plugins de SEO (Yoast, Rank Math) generan sus propios sitemaps, que sustituyen o complementan al del núcleo. Un proyecto headless que lo ignore acaba con tres sitemaps en el mismo nombre de host:

  1. /wp-sitemap.xml del núcleo de WordPress.
  2. /sitemap_index.xml de Yoast o Rank Math.
  3. /sitemap.xml del framework de front-end.

Search Console detecta solapamiento, a veces marca inconsistencias, y las URL que se indexan de verdad pasan a depender de qué sitemap lea Google primero ese día. La solución es mecánica:

  • El framework de front-end genera el sitemap canónico en una única ruta conocida (usamos /sitemap-index.xml porque Cloudflare Pages lo sirve sin problemas).
  • El sitemap del origen de WordPress se desactiva (Yoast y Rank Math tienen un interruptor para ello) o se redirige con un 301 al sitemap del front-end.
  • El sitemap del núcleo en /wp-sitemap.xml también se redirige con un 301 a su equivalente en el front-end.

Tras el cambio, solo un sitemap responde 200 OK. El resto devuelve 301 o 404.

#¿Cómo se construye el sitemap del front-end en WordPress headless?

Para un front-end en Astro o Next.js hay dos opciones reales:

Generación durante el build. El build del front-end obtiene del origen de WordPress las URL de todas las entradas, páginas y términos publicados, las ordena y emite el XML. Funciona para sitios con un ritmo de publicación previsible (la mayoría). La invalidación de la caché se resuelve lanzando un nuevo build al publicar.

Bajo demanda en el edge. Una ruta de Cloudflare Worker genera el sitemap en cada petición, leyendo una lista de URL en caché que el origen de WordPress envía por webhook al publicar. Es la opción para sitios que publican con tanta frecuencia que el tiempo de build sería un problema.

Por defecto usamos la generación durante el build. El patrón con Worker lo reservamos para sitios que publican más de unas pocas veces por hora.

#¿Cómo debe mostrarse la URL canónica en un front-end headless?

La URL canónica debe estar en el head del HTML, en la respuesta inicial del servidor, antes de que se ejecute cualquier script del lado del cliente. El patrón:

<link rel="canonical" href="https://example.com/headless-wordpress-for-woocommerce/" />

Tres reglas.

Primera: generarla en el servidor. Astro la genera desde el frontmatter de la página o desde el layout. Next.js la genera desde metadata (App Router) o desde <Head> en rutas con getServerSideProps. Lo que hay que evitar es actualizar la URL canónica en un efecto del lado del cliente; los motores generativos y muchas superficies AEO solo leen el HTML inicial.

Segunda: tomarla de WordPress. Yoast y Rank Math exponen la URL canónica de cada entrada mediante REST. El front-end la obtiene durante el build (o en cada petición) y la muestra en el HTML. WordPress sigue siendo la fuente de verdad.

Tercera: autorreferencial por defecto. Cada URL se declara a sí misma como canónica, salvo que haya un motivo explícito para apuntar a otra (archivos paginados, URL filtradas con parámetros, contenido sindicado). Cuando apunta a otra, el canonical de destino apunta a sí mismo.

#¿Qué casos límite de sitemap y canonical rompen el SEO headless?

  • Barra final inconsistente. Los enlaces permanentes de WordPress suelen terminar en /. El framework de front-end puede trabajar por defecto sin barra final. Elija una variante, redirija la otra y no permita nunca que existan las dos.
  • HTTP o HTTPS, www o dominio raíz. Suele resolverse en la CDN, pero la URL canónica debe declarar la variante elegida. Nosotros declaramos https:// en el dominio raíz; todo lo demás se redirige allí con un 301.
  • URL filtradas (búsqueda facetada en un catálogo). Suelen producir miles de variantes de URL pobres. Su canonical apunta a la URL base sin filtros; además llevan noindex para quedar fuera del sitemap.
  • Archivos paginados. La página 2, la página 3 y siguientes llevan cada una un canonical a sí misma, con rel="prev" y rel="next" para mayor claridad. Algunos equipos apuntan el canonical a la página 1; así, páginas únicas salen del índice. No lo recomendamos.
  • Contenido traducido. Cada versión de idioma lleva canonical a sí misma, con <link rel="alternate" hreflang="..."> para las demás. El mapa hreflang es autorreferencial y debe coincidir en todas las versiones de idioma.

#¿Cómo validar el sitemap y el canonical antes de publicar?

Dos comprobaciones que ejecutamos en cada proyecto WordPress headless:

Comparación de sitemaps. Genere el nuevo sitemap y compare el conjunto de URL con el sitemap heredado de WordPress. Todo lo que falte en el nuevo es un hueco de contenido. Todo lo nuevo es sospechoso de regresión (a menudo un borrador o una entrada privada que se filtra).

Muestra de canonicals. Para las 50 páginas con más tráfico, solicite la URL en el nuevo front-end y compruebe que el canonical del head del HTML coincide con la propia URL (o con el destino esperado si apunta a otra página de forma intencionada). Una discrepancia es un error; diez discrepancias son un patrón que obliga a revisar de nuevo el build del front-end.

Ambas comprobaciones se ejecutan en CI. Un build nuevo que falle cualquiera de las dos no se despliega.

#Guías relacionadas sobre SEO en WordPress headless

Anclado a la lista de comprobación de patrones SEO para WordPress headless. Se complementa con el pilar del servicio WordPress headless y la matriz de decisión Next.js vs Astro para las decisiones más amplias sobre el build.

Siguiente paso

Transforma el artículo en una implementación real

Este bloque refuerza el enlazado interno y lleva al lector al siguiente paso más útil dentro de la arquitectura del sitio.

Cluster relacionado

Explora otros servicios WordPress y base de conocimiento

Refuerza tu negocio con soporte técnico profesional en áreas clave del ecosistema WordPress.

¿Dónde debe estar el sitemap en un proyecto WordPress headless?#
En el dominio del front-end, generado por el framework de front-end. Las URL del sitemap deben coincidir con las URL públicas que visita el usuario. Si se genera desde el origen de WordPress, las URL apuntan al host de origen y no al sitio público, y Search Console marcará la discrepancia.
¿Hay que eliminar el sitemap del origen de WordPress?#
Desactívelo o rediríjalo con un 301 al sitemap del front-end. WordPress 5.5 añadió /wp-sitemap.xml como función del núcleo, así que incluso sin ningún plugin de SEO activo ya hay un sitemap estorbando. Rediríjalo al sitemap del front-end o bloquéelo mediante robots.txt y una cabecera noindex.
¿La URL canónica tiene que estar en el HTML o basta con JSON-LD?#
Tiene que estar en el HTML, en el head de la respuesta inicial, como elemento ``. JSON-LD es un añadido, no un sustituto. Los motores generativos y las superficies AEO leen el head del HTML de forma fiable; algunos tratan JSON-LD solo como complemento.
¿Puedo dejar que Yoast SEO genere el canonical y limitarme a mostrarlo?#
Sí. Los endpoints REST de Yoast exponen la URL canónica de cada entrada o página; el front-end la muestra en el HTML. Lo mismo vale para Rank Math. El patrón mantiene los metadatos de SEO en WordPress como única fuente de verdad, y el front-end queda como capa de presentación.
¿Y la paginación, los filtros y los archivos de categoría?#
Cada página de archivo genera su propio canonical apuntando a sí misma, y `rel=prev`/`rel=next` si la cadena tiene sentido. El riesgo son las URL filtradas (por ejemplo, búsquedas facetadas en un catálogo), que producen miles de variantes pobres. En ellas, apunte el canonical a la URL base sin filtros y use noindex.

¿Necesitas un FAQ adaptado a tu sector y mercado? Preparamos una versión alineada con tus objetivos de negocio.

Hablemos

Artículos Relacionados