# General Translation Knowledge Base: ¿Qué es hreflang y cómo se configura?
URL: https://generaltranslation.com/es/kb/what-is-hreflang.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: Hreflang le indica a Google qué URL son versiones de la misma página en otros idiomas o regiones, para que pueda mostrar la adecuada en los resultados de búsqueda. Agrégalo con etiquetas link de HTML, cabeceras HTTP Link o un mapa del sitio, asegúrate de que todos los enlaces sean recíprocos y usa códigos válidos como en-GB, no en-UK.
Category: SEO multilingüe
Last updated: 2026-10-20
Authors: Kevin Wu, Jackie Chen
Published: 2026-10-20

Hreflang solo funciona si cada idioma ya tiene su propia URL, porque relaciona unas URL con otras. Si todavía no has elegido esa estructura, empieza por [subdirectorios, subdominios o dominios de país](/kb/multilingual-url-structure) y luego vuelve para añadir las anotaciones.

## Qué hace y qué no hace hreflang

Hreflang agrupa las URL de una misma página en un clúster y etiqueta cada una con un idioma y, opcionalmente, una región. Si un hablante de alemán hace una búsqueda que coincide con tu página de precios en inglés, Google puede mostrarle en su lugar la URL en alemán del mismo clúster. La [guía de versiones localizadas](https://developers.google.com/search/docs/specialty/international/localized-versions) de Google indica que puede encontrar versiones alternativas sin anotaciones, pero recomienda declararlas explícitamente.

Es fácil esperar de hreflang más de lo que realmente ofrece:

* **No es una redirección.** Hreflang ayuda a Google a elegir qué URL aparece en los resultados de búsqueda, pero no garantiza un resultado concreto. El visitante que hace clic llega a esa URL, y lo que ocurra a partir de ahí lo decide tu servidor (lo explicamos en [cómo debe un sitio elegir el idioma que sirve](/kb/locale-routing-seo)).
* **No detecta el idioma.** Google afirma que no utiliza ni hreflang ni el atributo HTML `lang` para detectar el idioma de una página, sino que lo determina a partir del contenido con sus propios algoritmos.
* **No soluciona las páginas sin traducir.** Google solo trata las versiones localizadas como duplicados cuando el contenido principal sigue sin traducir. Si traduces únicamente la navegación y el pie de página, obtienes una página que hreflang puede etiquetar, pero no diferenciar.

## ¿Cómo se añade hreflang?

Google considera equivalentes el HTML, las cabeceras HTTP y los mapas del sitio, y afirma que usar más de uno no aporta ninguna ventaja en la Búsqueda. Elige el que mejor se adapte a la forma en que está construido tu sitio.

### Elementos link de HTML

Coloca un `<link rel="alternate">` por cada versión, incluida la página actual, dentro del `<head>`. El conjunto es el mismo en todas las versiones. Las URL deben ser absolutas (`https://example.com/de/preise`, no `/de/preise`).

```html
<!-- Lo mismo en el <head> de /en/pricing, /de/preise y /fr/tarifs -->
<link rel="alternate" hreflang="en" href="https://example.com/en/pricing" />
<link rel="alternate" hreflang="de" href="https://example.com/de/preise" />
<link rel="alternate" hreflang="fr" href="https://example.com/fr/tarifs" />
<link rel="alternate" hreflang="x-default" href="https://example.com/en/pricing" />
```

No combines hreflang con otros atributos, como `media`, en un mismo `<link>`, y revisa el HTML renderizado: un enlace que acabe fuera de un `<head>` bien formado no se tiene en cuenta.

### Cabeceras HTTP Link

Para archivos sin `<head>`, como los PDF, devuelve el mismo clúster en una cabecera de respuesta `Link`. Cada URL va entre corchetes angulares y las entradas se separan con comas.

```http
Link: <https://example.com/en/guide.pdf>; rel="alternate"; hreflang="en",
      <https://example.com/de/leitfaden.pdf>; rel="alternate"; hreflang="de",
      <https://example.com/fr/guide.pdf>; rel="alternate"; hreflang="fr"
```

### Mapa del sitio XML

Un mapa del sitio mantiene las anotaciones fuera de tus páginas. Declara el espacio de nombres `xhtml`, asigna a cada URL su propia entrada `<url>` y, dentro de cada una, enumera todas las versiones, incluida la propia. Según Google, estas entradas hijas no cuentan para el límite de URL del mapa del sitio.

```xml
<?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://example.com/en/pricing</loc>
    <xhtml:link rel="alternate" hreflang="en" href="https://example.com/en/pricing"/>
    <xhtml:link rel="alternate" hreflang="de" href="https://example.com/de/preise"/>
    <xhtml:link rel="alternate" hreflang="fr" href="https://example.com/fr/tarifs"/>
    <xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/en/pricing"/>
  </url>
  <url>
    <loc>https://example.com/de/preise</loc>
    <xhtml:link rel="alternate" hreflang="en" href="https://example.com/en/pricing"/>
    <xhtml:link rel="alternate" hreflang="de" href="https://example.com/de/preise"/>
    <xhtml:link rel="alternate" hreflang="fr" href="https://example.com/fr/tarifs"/>
    <xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/en/pricing"/>
  </url>
  <url>
    <loc>https://example.com/fr/tarifs</loc>
    <xhtml:link rel="alternate" hreflang="en" href="https://example.com/en/pricing"/>
    <xhtml:link rel="alternate" hreflang="de" href="https://example.com/de/preise"/>
    <xhtml:link rel="alternate" hreflang="fr" href="https://example.com/fr/tarifs"/>
    <xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/en/pricing"/>
  </url>
</urlset>
```

Coloca el mapa del sitio en la raíz del sitio cuando sus entradas de páginas abarquen varias carpetas por configuración regional. La [guía sobre mapas del sitio](https://developers.google.com/search/docs/crawling-indexing/sitemaps/build-sitemap) de Google explica el ámbito por directorio y las opciones de envío entre sitios; las URL alternativas de hreflang pueden apuntar a otros dominios.

## Las reglas que comparten todos los métodos

* **Usa el mismo conjunto completo siempre que sea viable, incluida la propia página.** Tres versiones de idioma implican tres entradas en cada página. Si mantener un conjunto completo resulta difícil, Google puede procesar grupos recíprocos más pequeños; da prioridad a los enlaces de retorno entre las versiones nuevas y la versión original o principal.
* **Los enlaces deben ser recíprocos.** Si la página X incluye la página Y, pero Y no incluye a X, Google ignora el par. Así se evita que otro sitio se haga pasar por tu versión en alemán.
* **Opcionalmente, añade `x-default`.** Indica un contenido alternativo para los idiomas sin coincidencia, como un selector de idioma o una versión en el idioma predeterminado. No es necesario para que hreflang funcione. Procura que el contenido alternativo sea relevante para la página, en lugar de redirigir todas las páginas internas a la página de inicio.
* **Los códigos constan de un idioma y, opcionalmente, una región.** El idioma sigue ISO 639-1 (`de`), la región sigue ISO 3166-1 alpha-2 (`de-CH`) y no se distingue entre mayúsculas y minúsculas. Una región sola no es válida, y un código de país en la posición del idioma significa otra cosa: `be` es bielorruso, no Bélgica.
* **Se admiten sistemas de escritura.** Google acepta subetiquetas de sistema de escritura ISO 15924 como `zh-Hans` y `zh-Hant`, opcionalmente con una región (`zh-Hans-US`). Con `zh-TW`, deduce el chino tradicional a partir de la región.
* **Ofrece a las variantes regionales un contenido alternativo solo con el idioma.** Si tienes páginas `en-IE`, `en-CA` y `en-AU`, añade una página `en` (puede ser una de las tres) para los hablantes de inglés del resto del mundo.

Algunos códigos de configuración regional válidos fallan igualmente en este caso. `es-419` (español de Latinoamérica) es una etiqueta BCP 47 correcta, pero el hreflang de Google solo admite regiones ISO 3166-1, así que anota esa página como `es` o con países concretos, como `es-MX` y `es-AR`.

## ¿Deben las páginas con hreflang usar URL canónicas autorreferenciales?

Cuando se trata de páginas traducidas distintas, lo habitual es que la URL canónica preferida apunte a la propia página. La [guía de Google sobre URL duplicadas](https://developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls) recomienda que, al usar hreflang, la URL canónica esté en el mismo idioma o, si no existe ninguna en ese idioma, que se use el mejor sustituto disponible. Evita que todas las páginas traducidas apunten a la versión en inglés.

Las páginas regionales de un mismo idioma requieren una decisión aparte. Si `en-US` y `en-GB` son duplicadas, puedes elegir una URL canónica preferida en inglés y usar hreflang para indicar la segmentación regional. Mantén la coherencia entre las señales de URL canónica y de hreflang, y comprueba en Search Console qué URL canónica ha seleccionado Google. Declarar una URL canónica es una señal fuerte, pero no una garantía.

```html
<!-- En el <head> de https://example.com/de/preise -->
<link rel="canonical" href="https://example.com/de/preise" />
<link rel="alternate" hreflang="en" href="https://example.com/en/pricing" />
<link rel="alternate" hreflang="de" href="https://example.com/de/preise" />
<link rel="alternate" hreflang="fr" href="https://example.com/fr/tarifs" />
```

Dos detalles relacionados de la misma página: Google ignora los enlaces `rel="canonical"` que llevan un atributo `hreflang`, así que mantén ambos tipos de enlace por separado; además, al elegir la URL canónica, da preferencia a las URL que forman parte de un clúster de hreflang. Usa la URL canónica de cada versión del clúster, nunca una variante con parámetros de seguimiento.

## ¿Cuáles son los errores más comunes de hreflang?

* **Faltan enlaces de retorno.** Encabeza la lista de errores comunes de Google. Suele ocurrir porque la plantilla de una configuración regional omite el bloque, o porque se añadió un nuevo idioma a algunas páginas pero no a otras.
* **Códigos no válidos.** Google ignora los códigos de región reservados, como `UK` y `EU`, por lo que la región de `en-UK` no tiene ningún efecto; usa `en-GB`. Tampoco se reconocen las regiones no admitidas, como `419` en `es-419`.
* **URL relativas o con protocolos mixtos.** Las versiones alternativas deben ser URL absolutas, y Google desaconseja incluir URL `http://` en hreflang cuando el sitio usa HTTPS.
* **Versiones alternativas que no llevan directamente a la página indexable deseada.** Usa la URL canónica final, no una redirección ni una página de error. Una página con `noindex` queda excluida de la Búsqueda, así que no puede ser el resultado que quieres que muestre Google. Además del código de estado, comprueba el contenido de destino y sus enlaces de retorno.
* **Páginas en las que solo está traducida la plantilla.** Hreflang no puede diferenciarlas, y según Google, el contenido repetido empeora la experiencia de búsqueda.

## ¿Cómo se comprueba que hreflang funciona?

El informe de segmentación internacional de Search Console ya no existe: Google [lo retiró](https://support.google.com/webmasters/answer/12474899) junto con la opción de segmentación por país, aunque afirma que sigue admitiendo y utilizando hreflang. En su lugar, realiza estas comprobaciones:

* **Revisa una página concreta.** Descarga el HTML y confirma que la página se incluye a sí misma y a todas sus páginas hermanas:

  ```bash
  curl -s https://example.com/de/preise | grep -o '<link[^>]*hreflang[^>]*>'
  ```

* **Prueba una página publicada.** La guía de Google remite a dos herramientas de terceros que no mantiene: el [comprobador de etiquetas hreflang de Merkle](https://technicalseo.com/seo-tools/hreflang/) para analizar una sola URL y el [generador de hreflang de Aleyda Solis](https://www.aleydasolis.com/english/international-seo-tools/hreflang-tags-generator/) para crear etiquetas.

* **Rastrea todo el sitio.** Un rastreador comprueba la reciprocidad en todas las páginas. La [auditoría de hreflang de Screaming Frog](https://www.screamingfrog.co.uk/seo-spider/tutorials/how-to-audit-hreflang/) detecta enlaces de retorno ausentes, versiones alternativas que no devuelven 200 o que tienen `noindex`, códigos no válidos y versiones alternativas que no son la URL canónica.

* **Valida el mapa del sitio.** Ejecuta `xmllint --noout sitemap.xml` para detectar XML mal formado antes de que lo haga Google.

## Configuración de hreflang con General Translation

`gt-next` de General Translation asigna a cada idioma su propia URL mediante [`createNextMiddleware`](/docs/react/nextjs/reference/functions/create-next-middleware), el requisito previo para hreflang. Si usas slugs localizados con su opción `pathConfig`, como `/fr/a-propos`, cada ruta localizada es el `href` que incluyes en el clúster.

Las anotaciones en sí se quedan en tu aplicación. Next.js genera las etiquetas `<link rel="alternate" hreflang>` a partir de `metadata.alternates.languages`, y en [¿Cómo configuro el SEO para una aplicación de Next.js multilingüe?](/kb/multilingual-nextjs-seo) encontrarás una función auxiliar que devuelve la URL canónica y todas las versiones alternativas en una sola llamada. Usa las configuraciones regionales definidas como candidatas y luego incluye solo las versiones de cada página que realmente hayas publicado.

Si enrutas una configuración regional con un alias, como `/cn` para chino, la [guía de SEO para alias de configuración regional](/docs/react/nextjs/locale-alias-seo) usa [`resolveCanonicalLocale`](/docs/react/nextjs/reference/functions/resolve-canonical-locale) para que hreflang use el código BCP 47 `zh` mientras la URL mantiene `/cn`.

## Puntos clave

* Hreflang asigna URL a idiomas y regiones en los resultados de búsqueda. No redirige a los visitantes ni le indica a Google en qué idioma está una página.
* Usa un solo método (`<link>` en HTML, la cabecera HTTP `Link` para PDF o `xhtml:link` en el mapa del sitio); Google los considera equivalentes.
* Procura tener un conjunto completo de URL equivalentes con autorreferencias y enlaces recíprocos. Los grupos recíprocos más pequeños también se pueden procesar; `x-default` es opcional.
* Los códigos son ISO 639-1 más, opcionalmente, una región ISO 3166-1 alfa-2 o un sistema de escritura ISO 15924: `en-GB`, no `en-UK`; `es-MX`, no `es-419`.
* Usa URL canónicas coherentes, normalmente autorreferenciadas en el caso de traducciones distintas. Trata por separado las páginas regionales duplicadas en un mismo idioma y comprueba los enlaces de retorno con un rastreador.

## Related questions

- [¿Cómo configuro el SEO de una aplicación de Next.js multilingüe?](https://generaltranslation.com/es/kb/multilingual-nextjs-seo.mdx): Asigna a cada idioma su propia URL con prefijo, como /en/about y /es/about, y luego publica html lang, una URL canónica autorreferente, versiones alternativas hreflang con x-default, un título y una descripción traducidos, y una entrada en el mapa del sitio para cada idioma publicado. Marca con noindex las versiones no publicadas. gt-next de General Translation dirige cada idioma a su propia URL y traduce los títulos con getGT.
- [Subdirectorio vs. subdominio vs. ccTLD para SEO multilingüe](https://generaltranslation.com/es/kb/multilingual-url-structure.mdx): Usa subdirectorios como example.com/de/ cuando un mismo producto comparte sitio y proceso de lanzamiento. Solo un ccTLD indica un país, los subdominios permiten un alojamiento independiente, Google desaconseja los parámetros ?lang= y trata los dominios personalizados como .io y .ai como genéricos.
- [Redirecciones de idioma y SEO: ¿URL, cookie o Accept-Language?](https://generaltranslation.com/es/kb/locale-routing-seo.mdx): Deja que la URL determine el idioma de cada página que quieras indexar, porque Googlebot no envía la cabecera Accept-Language y rastrea sobre todo desde direcciones de EE. UU. Recurre a la preferencia guardada en una cookie y, en su defecto, a Accept-Language solo para decidir adónde redirige una raíz neutral como /, mediante una redirección temporal 302 o 307.
- [Buenas prácticas para el selector de idioma: UX, SEO y accesibilidad](https://generaltranslation.com/es/kb/language-switcher.mdx): Escribe el nombre de cada idioma en ese mismo idioma, como Deutsch o 日本語, y no uses banderas, que representan países. Enlaza cada opción a la misma página en ese idioma mediante un enlace rastreable, guarda la elección en una cookie y nunca redirijas automáticamente una URL localizada.
- [Lista de comprobación de pruebas de localización para aplicaciones multilingües](https://generaltranslation.com/es/kb/multilingual-app-launch-checklist.mdx): Prueba nueve aspectos en cada configuración regional compatible en una compilación de producción: recorridos completos, incluidos los estados de error y los correos electrónicos; cambio de idioma; plurales; moneda y zonas horarias; expansión del texto; diseño right-to-left; accesibilidad; entrega de traducciones; y URL de idioma rastreables. Asigna a cada comprobación un criterio de aprobación explícito.

## Previous and next questions

- Previous question: [¿Qué es el formato de mensajes ICU?](https://generaltranslation.com/es/kb/icu-message-format.mdx)
- Next question: [¿Qué es la pseudolocalización?](https://generaltranslation.com/es/kb/pseudo-localization.mdx)

## Sitemap

See the [Knowledge Base sitemap](https://generaltranslation.com/es/kb/sitemap.md) for every article.
