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.
Primero, conviene entender el contexto:
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.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.
hreflang si hay noindexDado 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.
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:
ob_start() para capturar el contenido del <head>.noindex, elimina las etiquetas hreflang con una expresión regular.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:
hreflang generada directamente en el HTML.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).
noindex: comprueba el HTML para confirmar.9999 si otro código sobreescribe después.hreflang: revisa el código fuente y ajusta la expresión regular si es necesario.Puedes aplicarlo de estas maneras:
functions.php de tu tema hijo.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
