Canonical vs Hreflang: Conoce sus diferencias y evita conflictos

Si te gusta mi contenido, dile a Google que te lo muestre antes:
Portada del artículo sobre etiquetas canonical y hreflang, con un globo terráqueo y dos documentos enlazados

¿Alguna vez te has preguntado cómo Google sabe qué versión de tu página mostrar en diferentes países o en distintos idiomas? Aquí es donde entra en juego la famosa etiqueta hreflang. ¿Y qué pasa si tu web tiene contenido muy parecido entre sí, o distintas URLs con el mismo contenido? Por ejemplo, URLs con http y otras con https, URLs con barra al final y otras que no. ¿Cuál de ellas deben indexar los motores de búsqueda? Pues para eso tenemos a nuestras colegas las etiquetas canonical.

Usar bien estas dos etiquetas es clave para el SEO internacional y para evitar duplicidades. Las hreflang guían al usuario hacia la versión más relevante para su idioma y su ubicación, mientras que las canonical se aseguran de que Google entienda cuál es la versión principal. Te voy a contar cómo sacarles el máximo partido, cómo evitar que se pisen entre ellas y cómo hacer que trabajen a tu favor. ¡Fuimos!

Entendiendo las etiquetas hreflang

Pongamos que tienes una tienda online que vende en España y en México. Aunque los dos países hablan español, hay diferencias en la forma de expresarse, en las palabras que usamos y en los productos que le pueden interesar a tus clientes en cada sitio. En general, hay diferencias a la hora de hacer marketing para un país o para otro.

Aquí es donde las etiquetas hreflang entran en acción, como tu asistente personal para decirle a Google: «Oye, muestra esta página a los usuarios de España y esta otra a los de México».

Esto se hace mucho más evidente cuando ni siquiera el idioma es el mismo. Piensa en un sitio que venda en España y en Reino Unido: obviamente hay que indicarle a Google qué versión es cada una y qué contenido debe servirle a cada audiencia.

Las etiquetas hreflang ayudan a Google a entender qué versión de tu página mostrar según el país y el idioma del usuario.

Por ejemplo, si alguien en Argentina busca tus productos, Google sabrá que debe mostrar la versión destinada a los hispanohablantes de América Latina y no la de España. Esto mejora la experiencia del usuario y además puede subir tu CTR y bajar la tasa de rebote, porque el usuario llega a contenido más relevante para él.

Pero, ¿cómo se usan estas etiquetas? Es bastante sencillo. En el código de tu página añades un pequeño fragmento que le dice a Google: «esta página está dirigida a usuarios que hablan X idioma en Y región». Por ejemplo, es-ES para España y es-MX para México.

El primer código del atributo hreflang es el código de idioma (en formato ISO 639-1), seguido de un segundo código opcional que representa el código regional (en formato ISO 3166-1 Alpha 2) de una URL alternativa.

Ojo con esto, que es el fallo que más veo: el código de idioma es obligatorio y el de país no puede ir solo. Google lo dice con todas las letras en su documentación. Si pones hreflang="MX" pensando en México, la anotación no vale para nada, porque Google no deduce el idioma a partir del país. Lo correcto es hreflang="es-MX".

Te enseño las cuatro formas de implementarlas.

Implementando la etiqueta hreflang

Existen varios caminos para implementar estas etiquetas de forma correcta. Algunos son más complicados y requieren conocimientos técnicos. Otros, si tu sitio está construido con WordPress, se reducen a instalar un plugin y poco más. Los tres métodos oficiales (head, sitemap y cabeceras HTTP) son equivalentes para Google, así que elige uno y no los mezcles.

Etiquetas hreflang en la sección head del HTML

Puedes implementar las etiquetas hreflang directamente en el código HTML de tu sitio. Para ello debes añadirlas en la sección head de cada página que tenga contenido multilingüe o dirigido a distintas regiones. Mira este ejemplo, con una tienda que se dirige a España, a México y al mercado en inglés:

<link rel="alternate" hreflang="es-ES"
      href="https://tusitio.com/es-es/" />
<link rel="alternate" hreflang="es-MX"
      href="https://tusitio.com/es-mx/" />
<link rel="alternate" hreflang="en"
      href="https://tusitio.com/en/" />
<link rel="alternate" hreflang="x-default"
      href="https://tusitio.com/" />

Ese bloque va igual en las tres páginas, no solo en la española. Cada versión tiene que listar a todas las demás y también a sí misma. Si la versión mexicana no se menciona a sí misma, o si la inglesa no menciona a la española, Google puede ignorar el grupo entero.

Qué es x-default y cuándo lo necesitas

La última línea del ejemplo anterior es la que más gente se deja fuera. x-default es un valor reservado que le dice a Google qué versión servir cuando el idioma del usuario no encaja con ninguna de las que tienes. Un usuario en Japón que busca tu producto no habla español ni le sirve la versión mexicana: a ese lo mandas a la página que hayas marcado como x-default.

<link rel="alternate" href="https://tusitio.com/" hreflang="x-default" />

Los usos típicos son dos: apuntarlo a un selector de idioma o país en la raíz del dominio, o apuntarlo a tu versión internacional (normalmente la inglesa). No es obligatorio, y si no lo pones no se rompe nada, pero es la diferencia entre decidir tú qué ve el resto del mundo o dejar que lo decida Google.

Hreflang en el sitemap XML

También puedes incluir la información hreflang en el sitemap XML de tu sitio. Esto proporciona una manera estructurada de comunicarle a los motores de búsqueda las versiones multilingües y regionales de tus páginas, y es la vía más cómoda cuando tienes muchas URLs. Vamos paso a paso.

  1. Prepara las etiquetas hreflang. Antes de meterlas en el sitemap, asegúrate de tener claras las versiones de cada página. Puedes apoyarte en el generador de hreflang de Sistrix.
  2. Monta la estructura del sitemap. Un sitemap XML es un documento que enumera las páginas que quieres que los buscadores rastreen. La diferencia con uno normal es que aquí hay que declarar el espacio de nombres xhtml en la etiqueta urlset:
<?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">
  <url>
    <loc>https://tusitio.com/es-es/</loc>
  </url>
</urlset>
  1. Incluye las etiquetas hreflang. Cada URL debe llevar entradas secundarias <xhtml:link> que especifiquen las variantes de idioma y región. Con una página en español para España y otra para México quedaría así:
<url>
  <loc>https://tusitio.com/es-es/</loc>
  <xhtml:link rel="alternate" hreflang="es-ES"
              href="https://tusitio.com/es-es/"/>
  <xhtml:link rel="alternate" hreflang="es-MX"
              href="https://tusitio.com/es-mx/"/>
</url>
<url>
  <loc>https://tusitio.com/es-mx/</loc>
  <xhtml:link rel="alternate" hreflang="es-ES"
              href="https://tusitio.com/es-es/"/>
  <xhtml:link rel="alternate" hreflang="es-MX"
              href="https://tusitio.com/es-mx/"/>
</url>

Fíjate en que cada bloque repite la lista completa, incluida su propia URL. Es la misma regla de reciprocidad de antes.

  1. Valida antes de subirlo. Comprueba que el XML está bien formado con un validador de sitemaps online. Un sitemap roto no avisa: simplemente deja de servir para lo que lo hiciste.

Vamos a ver un ejemplo más extenso, con una tienda que se dirige a España, México, Reino Unido y Alemania. Este sería el bloque de la URL española (y habría uno igual, con la misma lista, para cada una de las otras tres):

<url>
  <loc>https://tusitio.com/es-es/</loc>
  <xhtml:link rel="alternate" hreflang="es-ES"
              href="https://tusitio.com/es-es/"/>
  <xhtml:link rel="alternate" hreflang="es-MX"
              href="https://tusitio.com/es-mx/"/>
  <xhtml:link rel="alternate" hreflang="en-GB"
              href="https://tusitio.com/en/"/>
  <xhtml:link rel="alternate" hreflang="de-DE"
              href="https://tusitio.com/de/"/>
  <xhtml:link rel="alternate" hreflang="x-default"
              href="https://tusitio.com/"/>
</url>

Hreflang en las cabeceras HTTP

El tercer método es la cabecera Link, y tiene un caso de uso muy concreto: los archivos que no son HTML. Un PDF no tiene sección head donde meter una etiqueta, así que si tienes el mismo catálogo en PDF en cuatro idiomas, esta es la única forma de relacionarlos. La sintaxis mete la URL entre ángulos:

Link: <https://tusitio.com/es-es/catalogo.pdf>;
        rel="alternate"; hreflang="es-ES",
      <https://tusitio.com/es-mx/catalogo.pdf>;
        rel="alternate"; hreflang="es-MX",
      <https://tusitio.com/en/catalog.pdf>;
        rel="alternate"; hreflang="en-GB"

En Apache lo configuras desde el archivo de configuración o desde un .htaccess, y necesitas el módulo mod_headers activado:

<IfModule mod_headers.c>
  <Files "catalogo.pdf">
    Header add Link '<https://tusitio.com/es-es/catalogo.pdf>;
      rel="alternate"; hreflang="es-ES"'
    Header add Link '<https://tusitio.com/es-mx/catalogo.pdf>;
      rel="alternate"; hreflang="es-MX"'
  </Files>
</IfModule>

Para páginas HTML normales puedes usarlo igual, pero no te lo recomiendo salvo que tengas una razón de peso. Las cabeceras no se ven abriendo el código fuente, engordan cada respuesta del servidor y hacen que depurar un problema de hreflang sea mucho más incómodo.

Implementación de hreflang con plugins de WordPress

Esta es la vía más sencilla y menos arriesgada si tocar código no es lo tuyo. Si utilizas WordPress (el dios al que yo le rezo cada noche), puedes simplificar la implementación con plugins. Hay varios que gestionan las etiquetas hreflang y algunos, además, te permiten traducir y administrar las versiones multiidioma de tu web. Veamos los más famosos.

  • WPML: tal y como dicen en su propia web, WPML facilita la creación y administración de sitios web multilingües. Es lo suficientemente poderoso para sitios empresariales y muy simple para crear blogs. Y es verdad, sus miles de instalaciones activas lo avalan. Con las opciones SEO que trae tendrás un etiquetado hreflang correcto casi al instante, al mismo ritmo que vas creando las versiones. Mala noticia: no tiene versión gratuita.
Panel de gestión de idiomas del plugin WPML en WordPress
  • Polylang: otro de los plugins estrella para crear y gestionar webs en distintos idiomas. En una competición de popularidad con el anterior, Polylang quizás es más sencillo pero menos personalizable. Para implementar hreflang no hay que hacer casi nada: activas los idiomas y el propio plugin se encarga de añadir las etiquetas. Y lo mejor, este sí tiene versión gratuita.
Configuración de idiomas del plugin Polylang para generar etiquetas hreflang
  • Hreflang Manager: este se enfoca solo en la gestión de etiquetas hreflang. Te permite añadirlas a tus páginas y entradas de forma manual y sencilla, sin montar toda la maquinaria de un plugin multiidioma. Es la opción lógica si tus versiones ya existen y viven en instalaciones distintas.
Interfaz del plugin Hreflang Manager para WordPress con las URLs alternativas por idioma

Los errores de hreflang que más me encuentro

Después de auditar unos cuantos proyectos internacionales, los fallos se repiten siempre. Son estos cuatro, y ninguno da error en pantalla: la web funciona perfectamente y las anotaciones no sirven para nada.

  • Falta de reciprocidad. Es el número uno con diferencia. La página española apunta a la mexicana, pero la mexicana no apunta de vuelta. Google lo dice claro: si falta la confirmación, «es posible que estas anotaciones se ignoren o no se interpreten correctamente». La regla es que cada versión lista a todas, incluida ella misma.
  • URLs relativas. Poner href="/es-mx/" en lugar de la URL completa. Google exige URLs cualificadas, con su protocolo delante. Si no lo llevan, la anotación se cae.
  • El código de país solo. Ya lo he dicho arriba pero lo repito porque es muy habitual: hreflang="MX" o hreflang="UK" no valen. Y ojo, que para Reino Unido el código correcto es GB, no UK.
  • Apuntar a una URL que no es la canónica. De este va media sección de más abajo, porque es el conflicto clásico entre las dos etiquetas y el que más quebraderos de cabeza da.

La importancia de las etiquetas canonical

Ahora hablemos de otro jugador clave en nuestro equipo de SEO: las etiquetas canonical.

Las etiquetas canónicas (también conocidas como etiquetas rel="canonical") son elementos HTML que le indican a los motores de búsqueda cuál es la versión preferida de una página cuando existe contenido duplicado o muy similar en varias URLs.

Es común tener varias páginas en tu web que se parecen mucho o que son idénticas. Sin las canonical, los motores de búsqueda pueden confundirse y no saber cuál es la versión principal que mostrar en los resultados. Eso lleva a problemas de contenido duplicado, algo que a Google no le gusta nada.

Usar etiquetas canonical es como decirle a Google: «Mira, sé que estas páginas son muy parecidas, pero esta es la que realmente quiero que tengas en cuenta e indexes».

Es una forma de asegurarte de que la autoridad de tu página se mantenga concentrada en la versión que tú consideras más importante, y no se disperse entre múltiples versiones similares.

Implementando la etiqueta canonical

Implementar canónicas no es difícil: basta con añadir en la cabecera de tus páginas un enlace rel="canonical" que apunte a la URL que consideras principal, o a la propia página si es autorreferenciada.

Pero antes de ver las formas de implementación, ¿realmente es obligatorio establecer una URL canónica? La respuesta es no. Ahora bien, si no se la das, Google se encarga del asunto con sus propias manos:

Si no indicas una URL canonical, identificaremos lo que creemos que es la mejor versión o URL.

Confiar en Google de esta manera no es una gran idea, porque puede que elija una versión de tu página que tú no querías. Así que, por el bien de tu proyecto, vamos a ver cómo implementarlas.

Implementar canonicals en WordPress con plugins

WordPress es una maravilla a la hora de facilitarnos tareas como esta, y en su repositorio de plugins hay varios que nos sirven de soporte en el día a día como SEOs. Los más populares con diferencia son estos dos.

  • Yoast SEO: uno de los plugins por excelencia para hacer SEO en WordPress. Entre su montaña de opciones está la de establecer etiquetas canónicas en páginas y entradas: entras a editar, abres «Configuración avanzada» y añades la URL canónica. Si no pones ninguna a mano, el plugin crea una canonical autorreferenciada, de la que hablo justo debajo.
Sección de configuración avanzada de Yoast SEO donde se establece la URL canónica
  • Rank Math: nació más tarde que Yoast, pero en poco tiempo (y por algunos fallos que cometió Yoast) le comió cuota de mercado y ahora son competidores directos en popularidad e instalaciones activas. Hace exactamente lo mismo y con una facilidad similar: editas la página o entrada, entras en «Configuración de SEO» e introduces la URL canónica que quieras.
Ajustes de SEO de Rank Math en WordPress con el campo de URL canónica

Existen otras formas de meter canonicals en WordPress: plugins de inserción de código como Code Snippets, editar a mano el header.php, o los bloques de código de maquetadores como Elementor o Divi. Sin embargo, esto en mi opinión es rizar el rizo. Si usas WordPress, el 99,99% de las veces vas a tener un plugin de SEO instalado, y si es así ya tienes una configuración mucho más sencilla y más difícil de romper.

Implementar canonicals de forma manual

Si no usas WordPress y quieres añadir las etiquetas canónicas a mano, puedes hacerlo directamente en el HTML de tus páginas. La etiqueta va dentro del <head> y tiene esta pinta:

<link rel="canonical" href="https://tusitio.com/mi-pagina/" />

Sustituyes esa URL por la que quieras marcar como principal, guardas y compruebas el resultado abriendo la página en el navegador y mirando el código fuente. Dos avisos por experiencia propia. El primero: usa siempre la URL absoluta, con https y dominio, igual que en hreflang. El segundo, y este pilla a mucha gente: cuidado con las comillas tipográficas. Si copias el código desde un documento de Word o desde un editor que te «embellece» las comillas, tendrás rel=»canonical» en lugar de rel="canonical" y el navegador no lo va a interpretar como una etiqueta válida.

Canonicals autorreferenciadas

Las canónicas autorreferenciadas son etiquetas que apuntan a la misma URL en la que se encuentran. Dicho de otra forma, la URL de la etiqueta es idéntica a la de la página actual. Si tienes una página en https://ejemplo.com/mi-pagina, se vería así:

<link rel="canonical" href="https://ejemplo.com/mi-pagina" />

Su función es indicar de forma explícita que la página actual es la fuente principal del contenido y que no es un duplicado de ninguna otra. Te invito a que eches un ojo a este vídeo en el que John Mueller comenta: «No es fundamental tener una etiqueta canónica autorreferenciada en una página, pero nos facilita elegir exactamente la URL que quieres que sea canónica».

Usos frecuentes de canonicals

Vamos a ver los casos en los que la etiqueta canónica te salva de verdad.

  • URLs con parámetros de seguimiento. Tienes un e-commerce y algunas fichas de producto arrastran parámetros en la URL, del tipo https://tudominio.com/producto/123?utm_source=newsletter. Para que Google no vea varias versiones del mismo contenido, la canonical apunta a la URL limpia: <link rel="canonical" href="https://tudominio.com/producto/123" />.
  • Navegación por filtros y facetas. El caso más gordo en tiendas online, porque cada combinación de talla, color y marca puede generar una URL nueva. Aquí la canonical es solo una parte de la solución y hay que decidir qué se indexa y qué no; lo cuento entero en mi guía de Facetaciones SEO.
  • El mismo post en varias categorías. Si tu CMS monta la URL con la categoría dentro, el mismo artículo puede vivir en /categoria-1/post/ y en /categoria-2/post/ con contenido idéntico. Eliges una como canónica y la otra la apunta a ella.
  • Duplicidades de dominio. Servir el mismo contenido con http y con https, o con www y sin www. Todas las variantes deben tener la canonical apuntando a la versión que hayas elegido, y lo ideal es que además haya una redirección 301. Si vas a cambiar de dominio o de estructura, en mi Migración SEO tienes el orden en el que conviene tocar estas cosas.
  • Versiones móviles en una URL aparte. Si todavía arrastras un m.tudominio.com, la configuración correcta es la contraria a la que mucha gente supone: la canonical de la versión móvil apunta a la de escritorio, y la de escritorio lleva un rel="alternate" con media señalando a la móvil. Dicho esto, en 2026 esta arquitectura es un vestigio: con indexación mobile-first, lo sensato es un diseño responsive con una sola URL.

Diferencias y relaciones entre hreflang y canonical

Ahora que ya sabes lo esencial sobre las dos etiquetas, toca entender cómo se diferencian y cómo pueden trabajar en armonía.

Aunque tienen roles distintos, se complementan perfectamente. Las hreflang le dicen a Google que esas páginas parecidas no son duplicados, son variantes para públicos distintos. Las canonical señalan cuál es la versión principal cuando el contenido sí es el mismo dentro de una misma versión de idioma. Juntas forman un equipo que mejora la experiencia del usuario y tu posicionamiento.

El truco está en saber cuándo usar cada una. Si tienes un sitio multilingüe o multipaís, usas hreflang para llevar a cada usuario a su contenido. Si tienes contenido muy similar o idéntico dentro del mismo idioma, ahí es donde entran las canonical. Y la jerarquía, que es lo que casi nadie tiene claro, es esta: la canonical manda sobre el hreflang. Si las dos se contradicen, gana la canonical y tus anotaciones de idioma se quedan en nada.

Evitando conflictos entre hreflang y canonical

Uno de los mayores retos al usar estas etiquetas es asegurarte de que no entren en conflicto. Es como organizar una fiesta: si al DJ (Google) y a tus invitados (los usuarios) les das instrucciones que se contradicen, la fiesta no sale como esperabas.

El conflicto clásico es este. Tienes la versión mexicana de una página, con su hreflang bien puesto, pero además le has metido una canonical que apunta a la versión española porque «total, es casi el mismo texto». Lo que le estás diciendo a Google con esa canonical es que la mexicana no debe indexarse. Y una URL que no se indexa no puede ser el destino de un hreflang, así que el grupo entero se cae. El usuario mexicano acabará viendo la página de España.

Para que no te pase, cuatro reglas:

  • Cada versión de idioma, canonical a sí misma. Es la regla de oro. Si señalas una página como la versión en inglés para Estados Unidos con hreflang, su canonical tiene que apuntar a ella misma y nunca a otra variante lingüística o regional.
  • El hreflang siempre apunta a URLs canónicas. Si la URL de destino tiene una canonical hacia otro sitio, esa anotación no vale.
  • Ni noindex ni bloqueo en robots.txt en las páginas que forman parte de un grupo hreflang. Si Google no puede rastrear o indexar la alternativa, no puede servirla.
  • Revísalo cada cierto tiempo. Estas etiquetas se rompen solas cuando alguien migra una sección, añade un idioma o cambia una URL, y no avisan.

Cómo comprobar que están bien puestas

Aquí hay una noticia que a mucha gente se le pasó: Search Console ya no revisa tus hreflang. El informe de segmentación internacional, que era donde se veían los errores de anotación, quedó descontinuado en septiembre de 2022. Google sigue leyendo y usando las etiquetas, pero dejó de contarte si están mal.

Así que hoy las opciones son estas. La inspección de URL de Search Console te dice qué canónica ha elegido Google para una página concreta, que es el dato que de verdad importa cuando sospechas de un conflicto. Y para ver el conjunto necesitas un rastreador: Screaming Frog tiene un informe específico de hreflang con las anotaciones no recíprocas y las que apuntan a URLs no canónicas, y Ahrefs te saca lo mismo desde Site Audit. Si vas a revisar un sitio de varios idiomas entero, hacerlo a mano no tiene ningún sentido: tira de MCP y pídele a tu agente favorito que lance el rastreo, cruce las anotaciones y te devuelva solo las que no cierran el círculo. Si prefieres que lo mire alguien de fuera, es justo lo que reviso en una Auditoría SEO.

Y si la canonical la inserta o la cambia JavaScript, revisa en Screaming Frog los filtros «Canonical solo en el HTML renderizado» y «Desajuste canónico» de la pestaña JavaScript. Te explico cómo activarla en el tutorial para ver qué parte de tu contenido carga JavaScript.

Preguntas frecuentes

¿Qué es exactamente la etiqueta hreflang?

La etiqueta hreflang es una anotación que le indica a Google qué versión de una página corresponde a cada combinación de idioma y país, para que sirva la correcta a cada usuario. No es una directiva de indexación ni una redirección: es una señal.

¿Es obligatorio poner x-default?

No, no es obligatorio poner x-default. Si no lo pones, tus versiones siguen funcionando entre ellas. Lo que pierdes es el control sobre qué ve un usuario cuyo idioma no está en tu lista, porque esa decisión pasa a tomarla Google.

¿Puede una canonical anular el hreflang?

Sí, una canonical puede anular el hreflang, y es el error más caro de los que se cometen con estas dos etiquetas. Si la canonical de una versión de idioma apunta a otra versión distinta, esa página deja de ser candidata a indexarse y la anotación hreflang que la señala se queda sin efecto.

¿Hace falta canonical autorreferenciada en todas las páginas?

No, no hace falta canonical autorreferenciada en todas las páginas: obligatoria no es, y así lo dice John Mueller. Recomendable sí: le quitas a Google la decisión de elegir por su cuenta, que es justo lo que quieres evitar en un sitio con muchas URLs parecidas.

¿Puedo usar solo el código de país, como hreflang="MX"?

No, no puedes usar solo el código de país, como hreflang="MX". El código de idioma es obligatorio y el de país es el opcional, nunca al revés. Lo correcto es es-MX. Y para Reino Unido, el código de país es GB y no UK.

Conclusión

Las etiquetas hreflang dirigen a cada usuario al contenido de su idioma y su región, y las canonical se aseguran de que los motores de búsqueda reconozcan cuál es la versión principal de tu contenido. Por separado son fáciles; juntas es donde aparecen los líos, y casi siempre por lo mismo: una canonical que apunta a donde no debe y tumba todo el grupo de idiomas.

Si te llevas una sola cosa de aquí, que sea esta: canonical a sí misma en cada versión de idioma, y hreflang recíproco entre todas. Con eso resuelto, el resto son detalles. Y recuerda que siempre tienes la información oficial en el Centro de Búsqueda de Google.

Si necesitas ayuda con esto o con cualquier otra gestión de SEO, escríbeme y te digo si te puedo ayudar. Solo tienes que pasarte por mi sección de contacto.