TechLead
Lección 13 de 13
5 min de lectura
SEO

SEO internacional

Hreflang, sitios multilingües y geolocalización

SEO internacional

El SEO internacional ayuda a llegar a audiencias en distintos países e idiomas. Requiere implementación técnica y estrategia de contenido para mercados globales.

Estructuras de URL para sitios internacionales

ccTLDs (Country Code Top-Level Domains)

example.fr, example.de, example.co.uk

Señal geo más fuerte, pero más costoso y difícil de gestionar

Subdirectorios

example.com/fr/, example.com/de/

Recomendado: consolida autoridad y es fácil de gestionar

Subdominios

fr.example.com, de.example.com

Se tratan como sitios separados; cuesta compartir autoridad

Implementación de hreflang

Hreflang indica el idioma/región objetivo de una página:

<!-- In <head> of each page -->
<link rel="alternate" hreflang="en" href="https://example.com/page" />
<link rel="alternate" hreflang="es" href="https://example.com/es/page" />
<link rel="alternate" hreflang="fr" href="https://example.com/fr/page" />
<link rel="alternate" hreflang="de" href="https://example.com/de/page" />
<link rel="alternate" hreflang="x-default" href="https://example.com/page" />

<!-- Language + Region targeting -->
<link rel="alternate" hreflang="en-US" href="https://example.com/en-us/page" />
<link rel="alternate" hreflang="en-GB" href="https://example.com/en-gb/page" />
<link rel="alternate" hreflang="es-ES" href="https://example.com/es-es/page" />
<link rel="alternate" hreflang="es-MX" href="https://example.com/es-mx/page" />

Configuración i18n en Next.js

// next.config.js
module.exports = {
  i18n: {
    locales: ['en', 'es', 'fr', 'de'],
    defaultLocale: 'en',
    localeDetection: true,
  },
};

// app/[locale]/layout.tsx
export async function generateStaticParams() {
  return [
    { locale: 'en' },
    { locale: 'es' },
    { locale: 'fr' },
    { locale: 'de' },
  ];
}

// Generate hreflang in metadata
export async function generateMetadata({ params }) {
  const locales = ['en', 'es', 'fr', 'de'];
  const alternates = {
    languages: {},
  };

  locales.forEach(locale => {
    alternates.languages[locale] = `https://example.com/${locale}/page`;
  });

  return {
    alternates,
  };
}

Buenas prácticas de localización de contenido

Haz:

  • Traduce y localiza el contenido
  • Usa hablantes nativos para traducir
  • Localiza fechas, monedas y números
  • Investiga keywords por mercado
  • Considera diferencias culturales

No hagas:

  • Usar solo auto-traducción
  • Copiar keywords en inglés directamente
  • Ignorar motores de búsqueda locales
  • Olvidar idiomas de derecha a izquierda
  • Mezclar idiomas en la misma página

Errores comunes de hreflang

  • Faltan enlaces de retorno: Cada página debe enlazar a todas las versiones, incluida ella misma
  • Códigos de idioma incorrectos: Usa ISO 639-1 (en, es, fr, no english, spanish)
  • Falta x-default: Incluye siempre un fallback
  • URLs inconsistentes: Usa URLs absolutas de forma consistente
  • Canónicos en conflicto: Canonical y hreflang deben alinearse

Continuar aprendiendo