Eliminar etiqueta meta robots de wp_head
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'); }
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.

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.

¡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.

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' );
}
}

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'; }

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".

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" />' );
}

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());

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.

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

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.

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

@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"/>

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