Eliminar la etiqueta hreflang
en páginas de WordPress que contienen la meta etiqueta noindex
puede parecer una contradicción innecesaria para muchos desarrolladores, pero algunos responsables de SEO prefieren mantener un control absoluto sobre lo que los motores de búsqueda interpretan. Aunque ambas etiquetas no son incompatibles entre sí, es posible aplicar una solución técnica eficaz para quien desee suprimir la referencia de idioma en páginas que no deben ser indexadas.
¿Por qué eliminar hreflang en páginas noindex?
Primero, conviene entender el contexto:
- La etiqueta
hreflang
es una indicación que informa a los motores de búsqueda del idioma y la región de una URL, facilitando la identificación de versiones traducidas de un mismo contenido. - La meta etiqueta
noindex
es una directriz explícita para que una URL no sea indexada por los motores de búsqueda.
En principio, ambas pueden coexistir sin generar conflictos. Google y otros buscadores interpretan correctamente este escenario y no suelen penalizarlo. Sin embargo, hay quien prefiere evitar confusiones, mantener un código limpio o seguir lineamientos estrictos de SEO.
Enfoque técnico: detectar y eliminar hreflang
si hay noindex
Dado que los plugins de SEO y multilenguaje no suelen comunicarse entre sí de forma nativa, la única manera fiable de eliminar las etiquetas hreflang
en presencia de noindex
es interceptando la salida HTML y modificándola.
✅ Opción 1: Solución para WPML (plugin multilenguaje)
Este código elimina las etiquetas hreflang
solo si la página contiene la etiqueta noindex
y WPML está activo:
// Inicia el buffer si WPML está activo add_action('wp_head', function () { if (!function_exists('wpml_get_active_languages')) { return; } ob_start(); }, 0); // Finaliza el buffer y filtra hreflang si hay noindex add_action('wp_head', function () { $content = ob_get_contents(); if (strpos($content, 'noindex') !== false) { $content = preg_replace('/<link rel="alternate" hreflang="[^"]+" href="[^"]+" \/>/', '', $content); } ob_clean(); echo $content; ob_end_flush(); }, 1000);
Qué hace este código:
- Verifica si WPML está activo.
- Usa
ob_start()
para capturar el contenido del<head>
. - Si detecta
noindex
, elimina las etiquetashreflang
con una expresión regular. - Finalmente, imprime el HTML filtrado.
✅ Opción 2: Solución universal (funciona sin WPML)
Si no usas WPML, esta versión genérica es más adecuada:
// Inicia el buffer add_action('wp_head', function () { ob_start(); }, 0); // Elimina hreflang si hay noindex add_action('wp_head', function () { $content = ob_get_contents(); if (strpos($content, 'noindex') !== false) { $content = preg_replace('/<link rel="alternate" hreflang="[^"]+" href="[^"]+" \/>[\r\n]*/', '', $content); } ob_clean(); echo $content; ob_end_flush(); }, 1000);
Ventajas:
- No depende de ningún plugin.
- Funciona en cualquier tipo de página.
- Compatible con cualquier etiqueta
hreflang
generada directamente en el HTML.
🧪 Alternativa con JavaScript
Si los métodos en PHP fallan —por ejemplo, debido al orden en que se inyecta el contenido o por cachés—, una solución de cliente es eliminar los elementos con JavaScript:
add_action('wp_footer', function () { ?> <script> (function() { const robotsMeta = document.querySelector('meta[name="robots"][content*="noindex"]'); if (robotsMeta) { document.querySelectorAll('link[rel="alternate"][hreflang]').forEach(link => link.remove()); } })(); </script> <?php });
Importante: esta opción no evita que los buscadores vean las etiquetas hreflang
, ya que el script se ejecuta tras cargar el HTML. Solo se recomienda como último recurso visual o si se quiere ocultar el contenido para usuarios (no para rastreadores).
¿Cuándo puede no funcionar el código?
- Caché activada: asegúrate de vaciar todas las cachés del sitio antes de verificar.
- La página no tiene realmente
noindex
: comprueba el HTML para confirmar. - Prioridad incorrecta: podrías subir la prioridad a
9999
si otro código sobreescribe después. - Formato distinto de
hreflang
: revisa el código fuente y ajusta la expresión regular si es necesario.
¿Dónde insertar este código?
Puedes aplicarlo de estas maneras:
- En el archivo
functions.php
de tu tema hijo. - Mediante un plugin de fragmentos como Code Snippets.
- Creando tu propio plugin personalizado.
Conclusión
Eliminar las etiquetas hreflang
en URLs con meta noindex
no es obligatorio ni necesariamente recomendable, pero es viable y factible si forma parte de tu estrategia SEO o de una petición concreta del cliente. WordPress ofrece la flexibilidad suficiente para llevarlo a cabo, ya sea mediante un enfoque basado en PHP, compatible con cualquier plugin, o incluso con soluciones en JavaScript.
Y como buena práctica: prueba siempre en un entorno de staging antes de aplicar este tipo de cambios en producción.
Fuente: AyudaWP