Cómo Implementar hreflang en Laravel para SEO Multilingüe
Guía para implementar hreflang en Laravel: configura locales y rutas, usa códigos ISO correctos, genera etiquetas dinámicas en Blade, añade sitemaps y valida en Search Console.
Si tienes un sitio web multilingüe en Laravel, implementar etiquetas hreflang es clave para que los motores de búsqueda muestren la versión correcta de tu contenido según el idioma y región del usuario. Esto evita problemas de contenido duplicado y mejora la experiencia de navegación. Aquí te resumo los pasos:
- Configura idiomas y rutas en Laravel: Ajusta
localeyfallback_localeenconfig/app.phpy usa un middleware para gestionar el idioma desde la URL. - Usa códigos ISO correctos: Asegúrate de usar
es-ES(guiones) en lugar dees_ES(guiones bajos) en las etiquetas hreflang. - Añade etiquetas hreflang dinámicas: Inclúyelas en la sección
<head>de tus plantillas Blade, generando URLs absolutas para cada idioma. - Genera sitemaps XML con hreflang: Herramientas como
spatie/laravel-sitemapfacilitan la creación de sitemaps con soporte para estas etiquetas. - Valida tu implementación: Usa Google Search Console y herramientas como Screaming Frog para detectar errores comunes.
Con esto, optimizas el SEO multilingüe de tu sitio en Laravel y aseguras que cada usuario acceda a la versión adecuada de tu contenido.
How to add hreflang tags to your website for multilingual SEO
Configurar tu proyecto Laravel para hreflang

Tabla comparativa de estándares ISO para códigos de idioma y región en hreflang
Antes de implementar hreflang, es fundamental preparar Laravel para manejar varios idiomas. Para ello, ajusta la configuración regional en el archivo config/app.php. Aquí encontrarás las opciones locale (idioma predeterminado) y fallback_locale (idioma de respaldo en caso de que falten traducciones). Si estás trabajando con Laravel 11 o versiones posteriores, ten en cuenta que el directorio lang no viene incluido por defecto. En este caso, deberás crearlo ejecutando el comando php artisan lang:publish.
Códigos de idioma y región: lo que necesitas saber
Los códigos de idioma y región siguen estándares internacionales específicos. Para las etiquetas hreflang, es obligatorio usar ISO 639-1 para el idioma (por ejemplo, es o en) y ISO 3166-1 Alpha 2 para la región (como ES o US). Es importante destacar que, aunque Laravel utiliza guiones bajos (por ejemplo, es_ES) para los directorios de traducción, las etiquetas hreflang requieren guiones (por ejemplo, es-ES). Este error de formato es común y puede hacer que los motores de búsqueda ignoren tus etiquetas.
| Estándar | Uso | Ejemplo |
|---|---|---|
| ISO 639-1 | Código de idioma (obligatorio para hreflang) | en, es, fr |
| ISO 3166-1 Alpha 2 | Código de región/país (opcional para hreflang) | US, GB, ES |
| ISO 15897 | Nomenclatura de directorios en Laravel | en_GB, es_ES |
| RFC 5646 | Atributo hreflang combinado (HTML) | en-US, es-ES |
Crear rutas multilingües en Laravel
Para manejar rutas en varios idiomas, agrúpalas utilizando un prefijo {locale}. Asegúrate de limitar el valor a dos letras mediante una expresión regular como ['locale' => '[a-zA-Z]{2}']. Además, implementa un middleware personalizado, como SetLocale, que detecte el idioma desde el primer segmento de la URL y lo configure con app()->setLocale($locale). Este middleware también puede guardar el idioma en una cookie o sesión. Para que todas las URLs generadas incluyan automáticamente el idioma, usa URL::defaults(['locale' => $locale]) dentro del middleware.
Paquetes de Laravel para sitios multilingües
Laravel cuenta con paquetes que facilitan la gestión de sitios multilingües. Por ejemplo:
mcamara/laravel-localization: Ideal para proyectos complejos, ya que gestiona prefijos de URL, traducción de segmentos de ruta y caché de rutas.spatie/laravel-translatable: Perfecto para manejar traducciones en modelos Eloquent, almacenándolas en una sola columna JSON. Nota: este paquete requiere MySQL 5.7 o superior debido al soporte necesario para columnas JSON.laravel-lang/lang: Útil para obtener traducciones predefinidas de mensajes internos de Laravel, como validaciones y autenticación.
El uso de estos paquetes, junto con rutas multilingües bien configuradas, asegura que tu sitio esté listo para implementar hreflang correctamente. Ahora que tienes la base, el siguiente paso es incluir las etiquetas hreflang en las plantillas Blade.
Añadir etiquetas hreflang a las plantillas Blade

Cuando ya tienes configuradas las rutas multilingües, el siguiente paso es incluir las etiquetas hreflang en las plantillas Blade. Estas etiquetas van en la sección <head> de tu HTML y deben generarse dinámicamente para cada idioma disponible. Es importante usar URLs absolutas, como https://ejemplo.com/es/pagina, ya que los motores de búsqueda necesitan este formato. Aquí te explicamos cómo hacerlo.
Insertar etiquetas hreflang en la sección <head>
Para agregar las etiquetas hreflang, abre tu plantilla base de Blade, que generalmente se encuentra en resources/views/layouts/app.blade.php. En la sección <head>, incluye etiquetas <link rel="alternate"> para cada idioma soportado. Cada página debe tener una etiqueta de autorreferencia apuntando a su propia URL, además de las etiquetas para los otros idiomas disponibles. Por ejemplo, si tu página en español está en /es/productos, debe incluir una etiqueta hreflang="es-ES" que apunte a esa misma URL.
También es útil añadir una etiqueta x-default que indique la versión predeterminada del sitio para usuarios cuyo idioma no coincida con ninguna de las versiones específicas. Una vez que tengas esta estructura básica, puedes optimizar el proceso generando estas etiquetas dinámicamente con un bucle.
Generar etiquetas hreflang dinámicamente
La manera más eficiente de crear estas etiquetas es utilizando un bucle @foreach en Blade. Este bucle puede recorrer un array de idiomas disponibles que defines previamente en config/app.php bajo una clave, por ejemplo: 'available_locales' => ['es', 'en', 'fr']. Luego, accedes a este array con config('app.available_locales') dentro de tu plantilla.
Dentro del bucle, utiliza los helpers de Laravel como request()->segments() para modificar los segmentos de la URL y generar versiones con diferentes prefijos de idioma. Para evitar que el código en Blade se vuelva demasiado complejo, puedes usar un View Composer en un Service Provider. Este método permite preparar un array con todas las URLs localizadas y compartirlo con las vistas, manteniendo el código más limpio.
Herramientas útiles de Laravel
En la implementación de etiquetas hreflang, algunos helpers de Laravel pueden ser especialmente útiles:
| Helper de Laravel | Uso práctico |
|---|---|
app()->getLocale() |
Identifica el idioma activo actual para la etiqueta de autorreferencia. |
request()->segments() |
Ayuda a reconstruir las URLs cambiando el prefijo de idioma. |
URL::defaults() |
Facilita la generación de URLs localizadas en toda la aplicación. |
Un error frecuente es usar guiones bajos (es_ES) en lugar de guiones (es-ES) en los valores de hreflang, lo que puede hacer que los motores de búsqueda ignoren las etiquetas. Además, las etiquetas deben ser bidireccionales: si la página en español enlaza a la versión en inglés, la versión en inglés debe enlazar de vuelta a la española. Esto asegura que todas las versiones de tu sitio estén correctamente conectadas y optimizadas para SEO en múltiples idiomas.
Incluir hreflang en los sitemaps XML
Además de insertar las etiquetas hreflang directamente en el HTML, también puedes incluirlas en tu sitemap XML. Tanto Google como Yandex admiten el uso de hreflang a través de sitemaps XML, aunque Bing y Baidu prefieren las etiquetas HTML. En el formato XML, se emplean entradas como <xhtml:link rel="alternate" hreflang="..." href="..." /> dentro de cada URL, indicando las versiones en diferentes idiomas disponibles.
Centralizar esta información en un único archivo facilita su mantenimiento y aligera el peso de tus páginas web. Cada entrada <url> en el sitemap debe enumerar todas las versiones de idioma, incluyendo una autorreferencia. Es importante que la implementación sea bidireccional: si la página en español enlaza con la versión en inglés, la versión en inglés debe enlazar de vuelta a la página en español.
Usar el paquete spatie/laravel-sitemap
Si trabajas con Laravel, puedes automatizar este proceso utilizando herramientas como el paquete spatie/laravel-sitemap. Este paquete simplifica considerablemente la creación de sitemaps con soporte para etiquetas hreflang. Para añadir versiones alternativas de idioma, puedes usar el método addAlternate() sobre un objeto Url. Este método requiere dos parámetros: la URL completa de la versión alternativa y el código de idioma correspondiente (por ejemplo, 'es', 'en', 'es-mx').
Tienes la opción de generar el sitemap manualmente o utilizar el generador automático con callbacks. En la creación manual, puedes encadenar addAlternate() directamente al definir cada URL:
use Spatie\Sitemap\Sitemap;
use Spatie\Sitemap\Tags\Url;
Sitemap::create()
->add(Url::create('/productos')
->setPriority(0.8)
->addAlternate('/products', 'en')
->addAlternate('/produits', 'fr'))
->writeToFile(public_path('sitemap.xml'));
El paquete se encarga de generar automáticamente las etiquetas <xhtml:link> en el XML final, siguiendo el formato correcto.
Añadir entradas <xhtml:link> para hreflang
Cuando configures correctamente el paquete, el sitemap XML incluirá todas las versiones de idioma dentro de cada entrada <url>. La estructura debe seguir este formato, utilizando siempre URLs absolutas:
<url>
<loc>https://ejemplo.com/es/productos</loc>
<xhtml:link rel="alternate" hreflang="es-ES" href="https://ejemplo.com/es/productos" />
<xhtml:link rel="alternate" hreflang="en" href="https://ejemplo.com/en/products" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://ejemplo.com/" />
</url>
Es fundamental incluir la etiqueta x-default para señalar la versión predeterminada, que se mostrará si el idioma del usuario no coincide con ninguna de las versiones disponibles. Además, todas las versiones deben enlazarse mutuamente, incluyendo la etiqueta x-default. Asegúrate de usar códigos ISO 639-1 para los idiomas e ISO 3166-1 Alpha 2 para las regiones opcionales, siempre en el formato correcto: primero el idioma y luego el país (por ejemplo, es-mx, no mx-es).
Una vez que hayas actualizado el sitemap, no olvides validarlo en Google Search Console para garantizar que todo esté configurado correctamente.
Probar y validar las etiquetas hreflang
Una vez que las etiquetas hreflang estén implementadas, el siguiente paso es asegurarte de que funcionan correctamente mediante pruebas y validaciones técnicas. Este proceso es crucial para evitar problemas de indexación y garantizar que las mejoras aplicadas en Laravel se reflejen de manera efectiva en el SEO multilingüe.
Verificar hreflang en Google Search Console

La herramienta ideal para supervisar tu implementación es el informe de Segmentación Internacional en Google Search Console. Dentro de este informe, accede a la sección "Idioma" para identificar errores como etiquetas sin retorno o códigos de idioma incorrectos. Este reporte organiza los problemas por versión de idioma y país, permitiéndote priorizar las correcciones según el volumen y la gravedad de los errores detectados.
Es importante recordar que Google necesita rastrear e indexar cada versión de idioma varias veces antes de validar completamente las etiquetas hreflang. Por lo tanto, espera unos días tras realizar cambios antes de evaluar los resultados. Si encuentras errores de "etiquetas sin retorno", esto indica que falta reciprocidad: si la página A apunta a la página B, la página B también debe apuntar de vuelta a la página A.
Rastrear tu sitio con Screaming Frog
Además de Google Search Console, es recomendable utilizar herramientas de rastreo especializadas para realizar una auditoría técnica más detallada. Herramientas como Screaming Frog, Sitebulb o Lumar pueden ayudarte a identificar problemas que podrían pasar desapercibidos, como:
- Enlaces rotos en las etiquetas hreflang.
- Páginas que devuelven errores 404 o redirecciones 301.
- URLs con etiquetas
noindex.
Screaming Frog, en particular, incluye una sección dedicada al SEO internacional, que permite verificar si todas las URLs alternativas están correctamente enlazadas y son indexables. Esto es especialmente útil en proyectos Laravel con miles de páginas, donde un error en la generación dinámica de rutas podría afectar a numerosas URLs al mismo tiempo.
Corregir errores comunes de hreflang
Algunos de los errores más habituales en la implementación de hreflang incluyen:
- Falta de etiquetas autorreferenciales: cada página debe incluir una etiqueta que apunte a sí misma.
- Códigos ISO incorrectos: por ejemplo, usar "uk" en lugar de "gb" para el Reino Unido.
- Uso incorrecto de guiones bajos: como "en_us" en lugar de "en-us".
Otro problema frecuente es apuntar las etiquetas hreflang a URLs no canónicas o que redirigen, lo que puede generar señales contradictorias para los motores de búsqueda. Además, no olvides incluir siempre la etiqueta x-default como opción de respaldo para usuarios cuyo idioma no coincida con ninguna versión específica.
"Hreflang tags without a reciprocal tag will be ignored" - John Mueller, Search Advocate, Google
Asegúrate de que todas las versiones de idioma están correctamente enlazadas entre sí de manera bidireccional. Esto es clave para que los motores de búsqueda interpreten correctamente las relaciones entre las páginas alternativas y mejoren la experiencia del usuario en un sitio multilingüe.
Conclusión
Implementar hreflang en Laravel es clave para optimizar el SEO en proyectos multilingües. Al establecer la relación entre diferentes versiones de idioma, evitas problemas como penalizaciones por contenido duplicado y aseguras que cada usuario acceda a la versión adecuada según su idioma y región. Esto no solo mejora la experiencia del usuario, sino que también puede aumentar el tiempo de permanencia en el sitio y reducir las tasas de rebote.
Para lograrlo, es esencial seguir ciertos pasos básicos: configurar rutas localizadas, gestionar los idiomas a través de middleware, generar etiquetas hreflang de forma dinámica y validar cuidadosamente la implementación. Además, no olvides incluir la etiqueta x-default como respaldo y asegurarte de que todas las versiones estén correctamente enlazadas entre sí.
La complejidad de este proceso subraya la importancia de automatizarlo siempre que sea posible. Como señala John Mueller de Google:
"TBH hreflang is one of the most complex aspects of SEO (if not the most complex one). Feels as easy as a meta-tag, but it gets really hard quickly."
En este sentido, herramientas como spatie/laravel-sitemap pueden ser de gran ayuda para crear y gestionar sitemaps XML, minimizando los errores manuales en proyectos con múltiples idiomas.
Es importante tener en cuenta que solo Google y Yandex soportan hreflang, mientras que motores como Bing, Baidu y Naver requieren el uso de etiquetas HTML Meta Language. Aunque hreflang no influye directamente en el posicionamiento, sí mejora el CTR y ofrece una experiencia más fluida para los usuarios.
Por último, asegúrate de mantener una monitorización constante y documentar claramente las pautas de publicación para tu equipo. Esto garantizará que cada nueva página y su traducción estén correctamente enlazadas desde el principio. Siguiendo estos pasos, tu sitio en Laravel estará preparado para ofrecer una experiencia personalizada a cada usuario, proteger la autoridad de tu dominio y ampliar su alcance a nivel internacional.
FAQs
¿Qué problemas puede causar el uso incorrecto de guiones en las etiquetas hreflang para el SEO?
El uso incorrecto de los guiones en las etiquetas hreflang, como optar por guiones bajos en lugar de guiones medios o emplear formatos no estándar, puede llevar a que motores de búsqueda como Google las ignoren por completo. Esto puede generar problemas como contenido duplicado y una menor visibilidad de las versiones locales de tu sitio web, afectando directamente tu estrategia de SEO.
Para evitar estos inconvenientes y lograr un buen rendimiento en SEO multilingüe, es clave seguir las normas específicas para los códigos de idioma y región en las etiquetas hreflang. Usar el formato correcto no solo optimiza la interpretación de tu contenido, sino que también asegura que las versiones locales de tu sitio alcancen a su público objetivo.
¿Qué herramientas ofrece Laravel para gestionar sitios web multilingües de forma sencilla?
Laravel ofrece un potente sistema de localización que simplifica la creación de sitios web multilingües. Puedes gestionar las traducciones mediante archivos ubicados en el directorio lang, establecer un idioma predeterminado en el archivo config/app.php y utilizar los métodos __() o trans() para mostrar textos traducidos en tu aplicación. Además, tienes la opción de personalizar archivos de idioma de paquetes si necesitas adaptaciones específicas.
Estas herramientas hacen que sea más sencillo gestionar las diferentes versiones lingüísticas de tu sitio, garantizando una experiencia de usuario uniforme y ayudando a mejorar el SEO en proyectos que requieren múltiples idiomas.
¿Por qué es crucial incluir la etiqueta x-default al usar hreflang?
La etiqueta x-default juega un papel clave al actuar como una página predeterminada que Google utiliza cuando no encuentra una coincidencia exacta de idioma o región. Esto asegura que los usuarios siempre tengan acceso a una versión funcional de la página, evitando problemas de indexación y facilitando una navegación más fluida.
También resulta útil para que los motores de búsqueda gestionen de manera eficiente las páginas multilingües, dirigiendo a los usuarios a la versión más apropiada cuando no se detecta una preferencia clara. Esto optimiza la manera en que el contenido llega a diferentes audiencias.