technical

Usa hreflang para SEO internacional

MetricSpot cuenta las etiquetas <link rel=alternate hreflang>. Le dicen a Google qué URL sirve cada idioma o región para que la correcta posicione en cada mercado.

Qué comprueba esta auditoría

Analiza cada etiqueta <link rel="alternate" hreflang="…" href="…"> en el <head> de la página (y en el sitemap XML, si existe). La comprobación falla cuando:

  • La página tiene hermanas localizadas (otras URLs sirviendo el mismo contenido en un idioma distinto) pero no hay declaraciones hreflang.
  • Los valores de hreflang no son etiquetas BCP 47 válidas (en, en-US, es, de-AT, zh-Hant-TW).
  • La red de hreflang está rota: A apunta a B, pero B no apunta a A.
  • Falta x-default (recomendado como fallback internacional).

Por qué importa

Google decide qué URL mostrar para una búsqueda cruzando el idioma y la región del usuario con la red de hreflang. Sin esto, pasan tres cosas:

  • La URL equivocada posiciona. Un usuario de EE. UU. buscando en inglés ve tu página en español (o al revés) porque Google eligió la URL con más autoridad, no la del locale del usuario.
  • Penalizaciones por contenido duplicado. Dos URLs con contenido casi idéntico (mismo producto, copia traducida) compiten entre sí. Google descarta una para evitar duplicados, a veces la incorrecta.
  • Bajada de CTR. Aunque el usuario aterrice en la página correcta, un snippet en inglés para un usuario en español reduce el clic. Hreflang permite a Google mostrar el snippet localizado.

Hreflang es metadato sin opinión: no influye en el ranking, solo encamina la URL correcta al usuario correcto.

Cómo solucionarlo

Cada página de una red multilingüe debe:

  • Listar todas las demás variantes de sí misma, incluyéndose.
  • Estar listada por todas las demás variantes.
  • Incluir x-default para el idioma/región genérico.

Ejemplo: inglés (default de EE. UU.), español, alemán y x-default. En la página en inglés:

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

Las mismas cuatro etiquetas deben aparecer en la página en español, en la alemana y en cualquier otra variante. Las cuatro páginas declaran la red entera, incluyéndose a sí mismas.

Astro:

---
const locales = ["en", "es", "de"] as const;
const path = Astro.url.pathname.replace(/^\/(es|de)\//, "/");
---
{locales.map(loc => (
  <link rel="alternate" hreflang={loc}
    href={`${Astro.site}${loc === "en" ? "" : loc + "/"}${path.slice(1)}`} />
))}
<link rel="alternate" hreflang="x-default" href={`${Astro.site}${path.slice(1)}`} />

Next.js:

// app/[locale]/page.tsx
export async function generateMetadata({ params }: { params: { locale: string }}) {
  const path = "/"; // o la ruta de tu route
  return {
    alternates: {
      canonical: `https://example.com${path}`,
      languages: {
        en: `https://example.com${path}`,
        es: `https://example.com/es${path}`,
        de: `https://example.com/de${path}`,
        "x-default": `https://example.com${path}`,
      },
    },
  };
}

WordPress — Polylang y WPML emiten hreflang automáticamente una vez que enlazas cada traducción. WordPress Multisite necesita el plugin HREFLang Tags Lite o equivalente.

Hreflang en el sitemap — para sitios con miles de URLs localizadas, declarar hreflang en el sitemap es más limpio que hacerlo en el HTML de cada página:

<url>
  <loc>https://example.com/</loc>
  <xhtml:link rel="alternate" hreflang="en" href="https://example.com/"/>
  <xhtml:link rel="alternate" hreflang="es" href="https://example.com/es/"/>
  <xhtml:link rel="alternate" hreflang="de" href="https://example.com/de/"/>
  <xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/"/>
</url>

Pruébalo. Google Search Console → Insights → International Targeting marca los enlaces de retorno faltantes y las etiquetas inválidas. Ejecuta hreflang.org o el validador de hreflang de Merkle para una comprobación puntual.

Preguntas frecuentes

¿en vs en-US vs en-GB?

Usa la etiqueta más amplia que encaje. en cubre a todos los hablantes de inglés; en-US apunta específicamente al inglés de EE. UU. Si sirves el mismo contenido a usuarios de Reino Unido y de Estados Unidos, declara en una sola vez, no en-US y en-GB por separado, lo que diluye la señal y añade mantenimiento.

¿Necesito hreflang si mi sitio es monolingüe?

No. Hreflang solo es útil cuando tienes URLs en idiomas alternativos. Un sitio monolingüe necesita <html lang="…"> (ver Declarar el idioma de la página) pero no hreflang.

¿Para qué sirve x-default?

Es el comodín. Cuando el idioma del usuario no coincide con ningún hreflang declarado, Google lo manda a la URL x-default. Típicamente es la home en inglés o una página selectora de idioma.

Fuentes

Última actualización 2026-05-11