Parte 3 de 22

Canonical y hreflang: una página, una dirección

Canonical y hreflang: una página, una dirección

El contenido duplicado puede provocar ambigüedad de indexación en sitios multilingües y en páginas con parámetros. Dos mecanismos ayudan a gestionarlo.

Canonical señala la URL preferida

Indica a los buscadores qué URL es la preferida cuando varias direcciones sirven el mismo contenido (parámetros de seguimiento, barras finales, paginación):

export async function generateMetadata({ params }): Promise<Metadata> {
  return {
    alternates: {
      canonical: `/blog/${params.slug}`,
    },
  };
}

hreflang conecta las versiones de idioma

Indica a los buscadores qué versiones de idioma existen y ayuda a elegir la correcta. La forma de obtener las direcciones depende del modelo de contenido; el ejemplo supone que getLocalizedUrls() devuelve la URL real de cada versión:

export async function generateMetadata({ params }): Promise<Metadata> {
  const { lang } = params;
  const localizedUrls = await getLocalizedUrls(params);

  return {
    alternates: {
      canonical: localizedUrls[lang],
      languages: {
        ...localizedUrls,
        "x-default": localizedUrls.en,
      },
    },
  };
}

Errores de implementación habituales

  • hreflang debe ser recíproco. Si la página EN apunta a la versión PL, la página PL debe apuntar de vuelta a EN; si no, Google puede ignorar todo el grupo.
  • Cada página debe incluirse a sí misma en el mapa languages.
  • Slugs localizados: si la entrada en polaco vive bajo otro slug, hreflang debe apuntar a la URL localizada real, no al mecánico /pl/ + el mismo slug. Genere el mapa desde la fuente de contenido, no lo escriba a mano.
  • x-default atiende a los usuarios cuyo idioma no admite: diríjalo a la ubicación principal.
  • El canonical debe llevar a una página que devuelva 200 y sin noindex: un canonical a una URL que redirige se ignora.

Checklist:

  • Canonical autorreferente en cada página indexable
  • hreflang generado a partir de slugs localizados reales, recíproco en todas las direcciones
  • x-default presente
  • Parámetros de URL (utm, filtros, orden) canonicalizados a la dirección limpia

¿Prefiere que se lo haga otra persona?

Audito y corrijo el SEO técnico de webs en Next.js: indexación, velocidad, hreflang y visibilidad en IA.

Servicio de SEO técnico