Eliminar etiqueta meta robots de wp_head

28 feb 2014, 01:47:43
Vistas: 30.4K
Votos: 7

Necesito eliminar solo esta línea <meta name=robots content="noindex,follow"/> de wp_head pero no puedo encontrar el hook correcto para usarlo con remove_action().

<meta name=robots content="noindex,follow"/>

Básicamente lo que quiero lograr es eliminar solo esta línea del encabezado pero únicamente para la página de búsqueda. Así que en este caso usaría algo similar a:

if ( is_search() ) { remove_action('wp_head', 'whatever-the-action-name-is'); }
3
Comentarios

Por favor, coloca la respuesta que descubriste en una respuesta real a esta pregunta en lugar de responder tu pregunta en la propia pregunta.

bosco bosco
28 feb 2014 05:34:24

Sí, lo haré, pero stackexchange no me permite responder mi propia pregunta hasta pasadas 8 horas desde su creación. Lo actualizaré mañana por la mañana. Gracias @boscho

elvismdev elvismdev
28 feb 2014 05:39:03

Ah, no estaba al tanto de esa restricción. Gracias de antemano por moverlo ;)

bosco bosco
28 feb 2014 05:39:43
Todas las respuestas a la pregunta 5
2
add_filter('wpseo_robots', 'yoast_no_home_noindex', 999);
function yoast_no_home_noindex($string= "") {
    if (is_home() || is_front_page()) {
        $string= "index,follow";
    }
    return $string;
}

esto debería funcionar bien... en algún lugar de tu archivo functions.php del tema y debería hacer el truco.

18 ago 2014 21:17:23
Comentarios

Esta no era exactamente la solución correcta para la pregunta planteada, pero es la más cercana. Proporciona una manera de modificar el comando de robots de Yoast sin necesidad de hackear el plugin. En mi caso, quería apuntar a una plantilla personalizada y pude hacerlo con lo siguiente:

add_filter('wpseo_robots', 'confPageNoIndex', 999); function confPageNoIndex($string= "") { if (is_page_template( 'page-confirmation.php') ) { $string= "no-index,no-follow"; } return $string; }

Esto podría modificarse para apuntar a la página de búsqueda. Sin embargo, el plugin de Yoast YA establece no-index para la Página de Búsqueda.

heytricia heytricia
11 dic 2015 21:03:07

¡Gracias! ¡Esta fue la única solución que funcionó! Fragmento modificado:

add_filter('wpseo_robots', 'yoast_no_home_noindex', 999); function yoast_no_home_noindex($string= "") { if( is_paged() ) { $string= ""; } else { $Path = strtok($_SERVER["REQUEST_URI"],'?'); $URI="https://" . $_SERVER['HTTP_HOST'] .$Path; echo "<link rel=\"canonical\" href=\"" . $URI . "\">\n"; } return $string; }

Esto determina si la URL actual es una página paginada y elimina la etiqueta de robots. Si no lo es, mostrará la etiqueta canónica en su lugar.

thamind thamind
23 feb 2017 00:05:41
0

Basándome en tus comentarios en mi otra respuesta, que implican que explícitamente deseas mantener activada la opción "Desalentar a los motores de búsqueda de indexar este sitio", después de una investigación más exhaustiva del código fuente de WordPress (específicamente default-filters.php), creo que esto es probablemente lo que buscabas desde el principio:

add_action( 'posts_selection', 'indexSearchPage' );

function indexSearchPage() {
    // Asegúrate de incluir la prioridad para la acción o no se eliminará
    if( is_search() )
        remove_action( 'wp_head', 'noindex', 1 );
}

Utilizo el hook de acción posts_selection ya que es el primer hook en la rutina de carga de WordPress que tiene acceso a las etiquetas condicionales. Puedes usar acciones posteriores hasta e incluyendo wp_head, pero si usas wp_head mismo, necesitas agregar la acción con una prioridad menor a 1, ya que noindex se agrega con una prioridad de 1:

add_action( 'wp_head', 'indexSearchPage', -1 );

Alternativamente, es posible engañar condicionalmente a WordPress para que piense que "Desalentar a los motores de búsqueda de indexar este sitio" está desactivado:

add_action( 'posts_selection', 'indexSearchPage' );

function indexSearchPage() {
    if( is_search() ) {
        $alloptions = wp_load_alloptions();
        $alloptions[ 'blog_public' ] = '1';
        wp_cache_set( 'alloptions', $alloptions, 'options' );
        wp_cache_set( 'blog_public', '1', 'options' );
    }
}
28 feb 2014 04:09:27
3

Lo tengo, la salida es controlada por el plugin WordPress SEO ya que está activado en el sitio, así que tuve que hacer un pequeño código hardcodeado en el archivo del plugin class-frontend.php

Obviamente, no me gusta mucho esta solución temporal pero funciona por ahora mostrando ese meta en la página de búsqueda como yo quería.

En el archivo class-frontend.php del plugin tuve que reemplazar la línea 552 por esto

if ( is_search() ) { $robots['follow'] = 'nofollow'; } else { $robots['follow'] = 'follow'; }
28 feb 2014 15:12:37
Comentarios

Deberías marcar esta respuesta como la correcta.

Sisir Sisir
29 jun 2014 10:45:19

NOTA: Con la versión actual de WordPress SEO esta respuesta ya no es válida - las líneas modificadas dentro del plugin ya no existen. Los visitantes de esta pregunta pueden encontrar que mi segunda respuesta ofrece soluciones que no requieren modificaciones en el plugin. Si no usas WordPress SEO o deseas eliminar la indexación en motores de búsqueda de todas las páginas, la mejor solución a la pregunta planteada es activar "Desalentar a los motores de búsqueda de indexar este sitio".

bosco bosco
31 ago 2014 03:14:05

en la última versión del plugin yoast

busca este código

else { if ( is_search() || is_404() ) { $robots['index'] = 'noindex'; }

está en la línea 693, edita/elimina el código $robots['index'] = 'noindex';

así es como solucioné el mío.

Godwin Alex Ogbonda Godwin Alex Ogbonda
11 mar 2019 06:22:42
4

Recomendaría simplemente desmarcar la opción "Desalentar a los motores de búsqueda de indexar este sitio" en Ajustes > Lectura del panel de control (esto debería eliminar las metaetiquetas relevantes para robots de todas las páginas de tu sitio), y luego agregar manualmente la metaetiqueta al encabezado de tu tema usando condicionales, así:

if( ! is_search() )
    echo( '<meta name="robots" content="noindex,nofollow" />' );

Puede que necesites modificar las condiciones para lograr el efecto deseado, pero creo que captas la idea.

Si prefieres no modificar tu tema, podrías enlazarlo al gancho de acción wp_head:

add_action( 'wp_head', 'noRobots' );

function noRobots() {
    if( ! is_search() )
        echo( '<meta name="robots" content="noindex,nofollow" />' );
}
28 feb 2014 03:07:10
Comentarios

Sí, sé que esto se puede lograr de esta manera, pero me gustaría no desactivarlos todos con solo una página. El sitio está usando el plugin Yoast SEO que me da control total y personalización para SEO en el resto de las páginas, excepto esta página de búsqueda. De hecho, teniendo esto, lo que quiero hacer es eliminar el meta creado por wp_head y luego mostrarlo igual pero con nofollow en lugar de follow. Algo como str_replace('<meta name=robots content="noindex,follow"/>', '<meta name=robots content="noindex,nofollow"/>', wp_head());

elvismdev elvismdev
28 feb 2014 03:17:10

Lo siento, no entiendo lo que intentas lograr. La solución que proporcioné mantendrá la etiqueta en todas las páginas excepto en la página de resultados de búsqueda, tal como lo haría el código sugerido al final de tu pregunta. Tampoco estoy familiarizado con el plugin Yoast SEO, así que me temo que no puedo ser de mucha ayuda.

bosco bosco
28 feb 2014 03:22:49

Por favor, explica a qué te refieres con: "Me gustaría no desactivarlos todos con solo una página"

bosco bosco
28 feb 2014 03:36:56

Si marco "Desalentar a los motores de búsqueda de indexar este sitio" tendré que generar manualmente la metaetiqueta para todo tipo de páginas, publicaciones y etiquetas. El plugin Yoast SEO ofrece un conjunto de opciones para estas páginas y no quiero perder eso. Solo necesito personalizar la salida de esta metaetiqueta SEO en la página de resultados de búsqueda, solo esta.

elvismdev elvismdev
28 feb 2014 03:43:41
3
-2

¿Es esto lo que estás buscando?

if ( is_search() ) {
    remove_action( 'do_robots', 'do_robots');
}
28 feb 2014 03:23:12
Comentarios

Por favor explica esta respuesta y por qué crees que debería resolver el problema.

s_ha_dum s_ha_dum
28 feb 2014 03:26:33

@Yarr te refieres a if ( is_search() ) { remove_action( 'wp_head', 'do_robots'); } de cualquier modo acabo de probar esto, pero no elimina <meta name=robots content="noindex,follow"/>

elvismdev elvismdev
28 feb 2014 03:32:22

La función do_robots() solo muestra el archivo robots.txt - no tiene ninguna relación con las meta-etiquetas.

bosco bosco
28 feb 2014 04:30:28