WordPress Hosting

hreflang noindex

Eliminar la etiqueta hreflang de URLs con la meta tag noindex

Aunque no me dedico al SEO son muchas las ocasiones en que, supongo que por mi experiencia de muchos años en esto de Internet, me piden ayuda con temas de posicionamiento, ya sea en mentorías online como mis clientes de mantenimiento web.

Normalmente me suelen pedir ayuda para mejorar la configuración del plugin de SEO, o recomendaciones sobre cómo optimizar sus contenidos de cara a un mejor posicionamiento en buscadores, pero de vez en cuando surgen peticiones que se salen un poco de madre, que van más allá.

Este es el caso de la petición de uno de mis clientes del servicio de mantenimiento, en concreto de su responsable de SEO, pues quería una configuración concreta y no daba con la tecla para poder llegar a su objetivo.

Su objetivo ya lo has leído en el título de esta entrada del blog: quería eliminar la etiqueta hreflang que añaden los plugins de multilenguaje al código fuente de las URLs de WordPress, pero solo en los casos en los que se hubiese decidido no indexar esas URLs.

Aplicar noindex a las URLs es fácil, eso te lo facilita cualquier plugin de SEO, y algunos como SEOPress, que es el que yo uso, te permiten además hacerlo fácilmente de manera totalmente precisa, en cada tipo de URL. Hasta ahí bien, y de hecho es interesante tener una estrategia clara en este sentido, porque no hace falta indexar todas y cada una de las miles de URLs que se generan en una web WordPress, y te pongo algunos ejemplos cuestionables:

  • Archivos por fechas – URLs del tipo midominio.com/2025/ o midominio.com/2025/11/ o incluso midominio.com/2025/11/06/.
  • Paginación de archivos – URLs del tipo midominio.com/loquesea/page/2/.

El problema está en que los plugins de multilenguaje, siendo WPML el más popular, no tienen en principio manera de interactuar con estas decisiones de SEO, y añaden la etiqueta hreflang correspondiente al idioma a la cabecera de cada contenido que se genera en WordPress, incluidos archivos de todo tipo (autor, taxonomías, fechas, etc.), páginas, entradas, productos, a todo.

¿Es un problema la etiqueta hreflang en URLs con noindex?

hreflang

En realidad no, no lo es. Es más, la etiqueta hreflang funciona más como un canonical, como una etiqueta que referencia URLs entre sí, en su caso para indicar que hay copias traducidas de la URL que se está viendo en otros idiomas, y que la misma URL que estás visitando es traducción de otra URL de la web.

Y eso es genial para los rastreadores de los motores de búsqueda, porque les ayuda a encontrar versiones multilingües de un mismo contenido sin salir del mismo sitio web, y eso es oro puro para los buscadores.

Por otra parte, la etiqueta hreflang también es una ayuda estupenda para la accesibilidad de contenidos, permitiendo identificar desde la cabecera de la URL que se visita en qué idioma está el contenido de la misma.

Te cuento todo esto para dejar claro que la etiqueta hreflang tiene utilidad en muchas maneras, no es algo que se use únicamente para posicionar en los buscadores contenido en varios idiomas, aunque ayude, por lo mismo que acabo de contarte.

Pero, por el mismo motivo, no es incompatible con la tag meta noindex, una etiqueta HTML específica que indica a los motores de búsqueda que no debe añadirse la URL a los índices del buscador.

Podríamos resumirlo, para no enrollarme más, que me conozco, en lo siguiente:

  • La tag meta noindex es y funciona como una directriz para los motores de búsqueda, que les indica que no indexen una URL, y la aceptan como tal, no indexando las URLs que contengan esta meta.
  • La etiqueta hreflang es una referencia canonical que ayuda a la accesibilidad, rastreabilidad, e incluso indexado de una URL, en su contexto, pero no es una directriz, es únicamente una referencia.

De todo esto se puede extraer la conclusión de que no es incompatible la coexistencia de la etiqueta hreflang y la tag meta noindex, cada una tiene un sentido y propósito.

A modo práctico, nada me hace llegar a la conclusión de que si decides aplicar la tag meta noindex a una URL, por el hecho de que también tenga una tag hreflang los motores de búsqueda no vayan a obedecer a la directriz de noindex.

Más resumido: en mi opinión es innecesario eliminar la etiqueta hreflang de URLs con la meta tag noindex.

Por si lo quieres más claro:

Las páginas con la directiva noindex pueden contener etiquetas hreflang sin que esto afecte al posicionamiento de la página en los motores de búsqueda
  • La etiqueta hreflang es una etiqueta HTML que indica a los buscadores el idioma y la región de una página.
  • La directiva noindex es una regla que impide que los buscadores indexen contenido. 

Cómo eliminar la etiqueta hreflang si una URL tiene la meta tag noindex

programador

A pesar de todo lo anterior, como yo soy muy bien mandado y además me encanta investigar y descubrir cosas nuevas, me puse a la acción… a dar solución a lo que me habían pedido. A fin de cuentas ¿qué sabré yo que no me dedico al SEO, verdad? Si el responsable de SEO quiere quitar las tags hreflang de las URLs noindex quién soy yo para cuestionar sus motivos.

Hay muchas maneras de abordar este problema, pero son tantas las posibles maneras y momentos en los que los plugins de SEO pueden añadir la meta tag noindex que el único método fiable de conseguir quitar la tag hreflang si una URL ya tiene la tag meta noindex es aplicando un buffer que haga lo siguiente:

  1. Detectar si la meta tag noindex está presente en las cabeceras HTML de la página (en lugar de depender de claves meta específicas del plugin SEO que esté activo).
  2. Si se detecta noindex, eliminará las etiquetas hreflang generadas.
  3. Funcionará para cualquier tipo de página (individual, archivo, etc.) sin depender de configuraciones específicas del plugin SEO.

Antes de llegar a esta solución estuve probando todo tipo de funciones, usando los filtros de los plugins de SEO, pero son muy poco específicos y no funcionaba nada que dependiese de funciones internas de los plugins de SEO, así que tuve que optar por este enfoque más radical de atacar directamente al HTML generado.

De todos modos, por si tienes curiosidad, aquí tienes unas URLs de referencia que revisé antes de llegar a esta solución:

Eliminar la tag hreflang si una URL tiene la meta noindex usando WPML

El código que consigue esto, si usas el plugin de multilenguaje WPML, el estándar actualmente, es este:

/* Forzar la eliminación de las tags hreflang de WPML de urls con la meta tag noindex usando el buffer de salida */
add_action('wp_head', function () {
// Comprobamos si WPML esta activo
if (!function_exists('wpml_get_active_languages')) {
return;
}

// Empieza el buffer de salida
ob_start();
}, 0);

add_action('wp_head', function () {
// Obtenemos el contenido del buffer
$content = ob_get_contents();

// Comprobamos si está presente la tag meta noindex
if (strpos($content, 'noindex') !== false) {
// Eliminarmos las tags hreflang filtrando el contenido
$content = preg_replace('/<link rel="alternate" hreflang="[^"]+" href="[^"]+" \/>/', '', $content);
}

// Vaciamos el buffer
ob_clean();

// Salida del contenido modificado
echo $content;

// Fin del buffer
ob_end_flush();
}, 1000);

Qué hace este código:

  1. Detección dinámica de noindex:
    • Usa ob_start() para capturar todo el contenido generado durante la acción wp_head, que incluye las etiquetas meta como <meta name="robots" content="noindex">.
    • Busca la cadena noindex en las cabeceras capturadas usando strpos(). Esto es independiente del plugin SEO, ya que verifica directamente la salida HTML.
    • Limpia el búfer (ob_clean()) para evitar duplicar contenido, pero permite que el resto de wp_head se ejecute normalmente.
  2. Eliminación de hreflang:
    • Si se detecta noindex, elimina las etiquetas hreflang de WPML desenganchando la acción wpml_head_langs y filtrando wpml_alternate_hreflang para devolver false.
  3. Compatibilidad universal:
    • Funciona para cualquier página (individual, archivo, categoría, etiqueta, etc.) porque no depende de claves meta específicas ni de configuraciones de plugins SEO.
    • Solo funciona si WPML está activo, evitando errores si el plugin no está instalado.

Por si tienes curiosidad, en mi caso, este código funcionó perfectamente para lo que me habían pedido.

¿Y si no funciona o no uso WPML?

Eliminar la tag hreflang si una URL tiene la meta noindex si NO utilizas WPML

Si el código anterior no te ha funcionado, bien porque no uses el plugin WPML o por el motivo que sea, el siguiente código es a prueba de bombas:

/* Forzar la eliminación de tags hreflang de urls con la meta tag noindex usando el buffer de salida */
add_action('wp_head', function () {
// Empieza el buffer de salida para capturar el contenido de <head>
ob_start();
}, 0);

add_action('wp_head', function () {
// Obtenemos el contenido del buffer
$content = ob_get_contents();

// Comprobamos si noindex está presente en las cabeceras
if (strpos($content, 'noindex') !== false) {
// Quitamos todas las tags hreflang usando regex
$content = preg_replace('/<link rel="alternate" hreflang="[^"]+" href="[^"]+" \/>[\r\n]*/', '', $content);
}

// Vaciamos el buffer
ob_clean();

// Salida del contenido modificado
echo $content;

// Fin del buffer
ob_end_flush();
}, 1000);

Qué hace este código:

  1. Captura el contenido:
    • Inicia el almacenamiento en buffer (ob_start()) al comienzo de wp_head para capturar todo el contenido generado en el <head>.
  2. Detección de noindex:
    • Busca la cadena noindex en el contenido capturado (esto detecta <meta name="robots" content="noindex"> o similares, independientemente del plugin SEO).
  3. Eliminación de hreflang:
    • Si se encuentra noindex, usa una expresión regular (preg_replace) para eliminar todas las etiquetas <link rel="alternate" hreflang="..." href="..."> del contenido.
    • La regex también elimina saltos de línea adicionales para mantener el código limpio.
  4. Salida modificada:
    • Limpia el búfer (ob_clean()), imprime el contenido modificado (echo $content), y finaliza el almacenamiento en búfer (ob_end_flush()).
  5. Independencia de plugins:
    • No hace suposiciones sobre WPML ni otros plugins. Funciona directamente con la salida HTML, por lo que es compatible con cualquier método que genere hreflang o noindex.

¿Y si no me funciona ninguno de estos códigos?

Puede ser que no funcionen los códigos basados en PHP por varios motivos, como por ejemplo que las etiquetas hreflang se añadan dinámicamente o después de wp_head.

Si se te atasca la cosa, podemos usar JavaScript como alternativa. Este enfoque elimina completamente las etiquetas hreflang del DOM si se detecta noindex. Ahora bien, es más limpio usar PHP porque evita saltos del navegador y actúa directamente en el servidor, pero si falló falló.

El código sería el siguiente:

<?php
/* JavaScript para eliminar tags hreflang de urls con meta tag noindex */
add_action('wp_footer', function () {
?>
<script>
(function() {
// Comprobamos si existe la meta noindex
const robotsMeta = document.querySelector('meta[name="robots"][content*="noindex"]');
if (robotsMeta) {
// Quitamos todas las tags hreflang
const hreflangLinks = document.querySelectorAll('link[rel="alternate"][hreflang]');
hreflangLinks.forEach(link => link.remove());
}
})();
</script>
<?php
});

Hay otras posibles causas de que no te funcionen los códigos que hemos visto:

  • Alguna de las cachés activas no te deja ver el código fuente en tiempo real sino una versión antigua – Vacía todas las cachés (todas) antes de probar si ha funcionado un código.
  • La página donde estás probando no tiene noindex – Elige una URL que sí tenga la tag noindex.
  • Prioridad de wp_head – Si otro plugin o el tema está modificando el contenido de wp_head después de tu código podría interferir y hacer que no funcione. El código usa una prioridad alta (1000), pero podemos aumentarla si es necesario (por ejemplo, 9999).
  • Errores en la expresión regular – Si has usado alguno de los códigos en PHP (no JavaScript) y las etiquetas hreflang tienen un formato inusual (por ejemplo, espacios adicionales o atributos diferentes), la expresión regular (regex) podría no coincidir. Si fuera el caso revisa la etiqueta hreflang en el código fuente de la página (por ejemplo, <link rel="alternate" hreflang="es" href="https://midominio.com/es/...">) y revisa cómo está formada por si hay que cambiar la expresión regular.

¿Cómo añado estos códigos?

Si tienes claro que realmente quieres eliminar las tags hreflang de URLs noindex (mira arriba antes de tomar esta decisión), los pasos para añadir el código que vayas a utilizar es el siguiente:

  1. Elige el código a probar entre los 3 propuestos.
  2. Añade el código de una de estas maneras, como te sientas más cómodo:
  3. Prueba si te funciona, revisando el código fuente de la URL noindex a la que quieras quitar la tag hreflang.
Compartir en redes
Resumir con IA

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en las estrellas para valorarlo!

Promedio de puntuación 5 / 5. Total de votos: 10

¡Todavía no hay votos! Sé el primero en valorar este contenido.

Ya que has encontrado útil este contenido...

¡Sígueme en las redes sociales!

¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!



Sobre el autor

2 comentarios en “Eliminar la etiqueta hreflang de URLs con la meta tag noindex”

  1. Saludos, Fernando:

    Pues sería interesante saber para qué se supone que quiere eso… Yo creo que no tienen ningún sentido, pero me gustaría qué interés oculto tenía.

    Saludos.

Los comentarios están cerrados.

Scroll al inicio