Verificación de hreflang

Escribe la dirección de una página que existe en varios idiomas. Leemos sus líneas hreflang, validamos cada código y luego visitamos cada versión alternativa para ver si responde, si puede indexarse y si nombra a esta página a cambio.

Las anotaciones se leen página por página, así que indica la dirección de la página en sí, no solo el dominio. La página de inicio es una buena primera prueba.

O prueba www.mozilla.org/en-US/, wordpress.org

Una lista de gemelas, repetida en cada gemela

Cuando la misma página existe en inglés, alemán y japonés, un buscador ve tres páginas distintas. Con hreflang le dices que son una sola página en tres versiones, para que un lector de Berlín reciba la dirección en alemán y no la inglesa. Cada versión lleva la lista completa de versiones, ella misma incluida:

<link rel="alternate" hreflang="en" href="https://www.example.com/en/pricing/">
<link rel="alternate" hreflang="de" href="https://www.example.com/de/preise/">
<link rel="alternate" hreflang="ja" href="https://www.example.com/ja/pricing/">
<link rel="alternate" hreflang="x-default" href="https://www.example.com/en/pricing/">

La lista puede estar en tres sitios: en el <head> de la página, en una cabecera de respuesta Link o en el sitemap XML. Esta verificación lee los dos primeros. No lee sitemaps, así que una página sin anotación aquí puede estar cubierta allí.

Hreflang cambia qué versión se muestra. No cambia lo bien que se posiciona la página. Los buscadores lo tratan como una pista y lo descartan en cuanto parece incoherente, por eso los pequeños errores salen tan caros.

Cómo es un código válido

Un valor es un idioma, seguido opcionalmente de una escritura y un país, unidos con guiones. Las mayúsculas no importan.

ParteNormaEjemplos
Idioma (obligatorio)ISO 639-1, dos letrasen, de, ja, pt
Escritura (opcional)ISO 15924, cuatro letraszh-Hans, zh-Hant, sr-Latn
País (opcional)ISO 3166-1, dos letrasen-GB, pt-BR, zh-Hant-TW

El país nunca va solo y nunca va primero. Estos son los errores que nombra esta verificación, con la corrección cuando solo hay una posible:

  • en-UK: el código ISO del Reino Unido es GB.
  • en_US: un guion bajo, como lo escriben las configuraciones regionales del software. Hreflang quiere en-US.
  • es-LA: se lee como español de Laos. Google no lee ningún código para Latinoamérica, así que usa es o una línea por país.
  • jp, cn, cz, dk: códigos de país usados como idiomas. Los idiomas son ja, zh, cs, da.
  • en-EU, es-419, códigos de tres letras como eng y códigos en desuso como iw para el hebreo.

La tabla de resultados deletrea cada código con palabras. Así se detectan los errores que ninguna regla puede detectar, como uk, que es un código perfectamente válido y significa ucraniano.

Qué se comprueba en la propia página

  • Direcciones. Cada línea necesita una dirección completa, con esquema y host. Las relativas se señalan.
  • Duplicados y conflictos. La misma línea dos veces no hace daño y se señala como observación. Un código asignado a dos direcciones distintas es un error, porque nadie puede saber cuál es la página de esa lengua.
  • Autorreferencia. La página debe aparecer en su propia lista, con su dirección exacta. Basta con que falte una barra final para romper la coincidencia.
  • x-default. La versión para los lectores cuyo idioma no figura en la lista. Es opcional, así que omitirla da una nota y no cuenta como fallo.
  • Canonical. Hreflang solo funciona entre páginas canónicas. Una página en alemán cuyo canonical nombra la página en inglés le dice a los buscadores que se olviden de la alemana, y sus líneas hreflang se van con ella.
  • El atributo lang. Si <html lang> dice sv mientras la página se lista a sí misma como se, una de las dos cosas está mal.
  • Posición. Las líneas que acaban fuera del <head>, a menudo porque un elemento suelto cierra el head antes de tiempo, las ignora Google y aquí se marcan.

Enlaces de retorno, la mitad que suele fallar

Una anotación solo cuenta si las dos páginas están de acuerdo. Si la página en inglés dice “mi versión en alemán está allí” y la página en alemán no dice “mi versión en inglés está aquí”, la pareja se descarta. Por eso, una vez leída tu página, nuestro servidor solicita cada alternativa una vez, sin seguir redirecciones, y para cada una informa de:

Estado
Debe responder 200. Una redirección significa que la línea nombra una dirección que no es la final. Un error significa que la versión ya no existe. Se acepta un x-default que redirige, porque es justo lo que hace un selector de idioma.
Indexable
Sin noindex en una etiqueta meta robots ni en una cabecera X-Robots-Tag.
Canonical a sí misma
Su canonical, si tiene uno, debe ser su propia dirección.
Enlaza de vuelta
Su propio bloque debe listar tu página, con el mismo código que tu página usa para sí misma.

Cuando las correcciones son mecánicas (un código mal escrito, una dirección relativa, una línea repetida, una línea que falta para la propia página), el resultado termina con un bloque corregido que puedes pegar. Las líneas que requieren una decisión tuya se quedan como están, marcadas con un comentario.

Una verificación visita como máximo 35 alternativas y se detiene a los treinta segundos más o menos. La tabla marca las que se saltó. No vemos las anotaciones escritas con JavaScript, y un sitio que redirige a los visitantes según su ubicación puede mostrar a nuestro servidor algo distinto de lo que recibe un rastreador.

Preguntas frecuentes

¿Necesito hreflang si mi sitio está en un solo idioma?

No. Hreflang enlaza entre sí versiones de la misma página. Con una sola versión no hay nada que enlazar, y la verificación informa de “sin anotaciones” como un resultado neutro.

¿Qué es x-default y es obligatorio?

Es la línea para todos los que no cubren tus otras líneas, como un lector cuyo idioma no ofreces. Suele apuntar a la versión en inglés o a una página donde el visitante elige idioma. Se recomienda, no es obligatorio.

¿Debo usar solo el código de idioma o añadir el país?

Usa solo el idioma (de) cuando una página sirve a todos los hablantes de ese idioma. Añade el país (de-AT, de-CH) solo cuando publiques páginas distintas por país, por ejemplo por los precios o los envíos. Puedes combinar ambos, con líneas de país para las páginas específicas y una línea de idioma simple como la general.

¿Qué significa “sin enlace de retorno”?

Tu página nombra otra versión, pero esa versión no nombra tu página en su propio bloque hreflang. Los buscadores ignoran las anotaciones de un solo sentido. Para arreglarlo, publica la misma lista completa en todas las versiones, idealmente desde una única fuente compartida.

¿Puede hreflang apuntar a otro dominio?

Sí. example.com y example.de pueden ser versiones una de otra, siempre que cada una liste a la otra y a sí misma. Las reglas son las mismas que dentro de un dominio.

¿Hreflang sustituye a la etiqueta canonical?

No. Hacen trabajos distintos y deben coincidir. El canonical dice qué dirección representa a una página entre sus duplicados, y hreflang dice qué otras páginas son sus traducciones. Cada versión de idioma debería ser canonical de sí misma.