Rimuovere il tag meta robots da wp_head
Ho bisogno di rimuovere solo questa riga <meta name=robots content="noindex,follow"/>
da wp_head
ma non riesco a trovare l'hook giusto da utilizzare con remove_action()
.
<meta name=robots content="noindex,follow"/>
In pratica, quello che voglio ottenere è rimuovere solo questa riga dall'header ma esclusivamente per la pagina di ricerca. Quindi in questo caso userei qualcosa di simile 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;
}
questo dovrebbe andare bene credo.. da inserire nel file functions.php del tuo tema e dovrebbe fare al caso tuo.

Questa non era esattamente la risposta corretta alla domanda posta, ma è la soluzione più vicina. Fornisce un modo per modificare il comando robot di Yoast senza dover modificare il plugin. Nel mio caso, volevo puntare a un template personalizzato e sono riuscito a farlo con il seguente codice:
add_filter('wpseo_robots', 'confPageNoIndex', 999);
function confPageNoIndex($string= "") {
if (is_page_template( 'page-confirmation.php') ) {
$string= "no-index,no-follow";
}
return $string;
}
Questo potrebbe essere modificato per puntare alla pagina di ricerca. Tuttavia, il plugin Yoast GIÀ imposta come no-index la pagina di ricerca.

Grazie! Questa è stata l'unica soluzione che ha funzionato! Snippet modificato:
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;
}
Questo determina se l'URL corrente è una pagina paginata e rimuove il tag robots. Se non lo è, mostrerà invece il tag canonical.

In base ai tuoi commenti sulla mia altra risposta che implicano che desideri esplicitamente mantenere attivata l'opzione "Scoraggia i motori di ricerca dall'indicizzare questo sito", dopo un'indagine più approfondita del codice sorgente di WordPress core (in particolare default-filters.php), penso che questo sia probabilmente quello che cercavi:
add_action( 'posts_selection', 'indexSearchPage' );
function indexSearchPage() {
// Assicurati di includere la priorità per l'azione altrimenti non verrà rimossa
if( is_search() )
remove_action( 'wp_head', 'noindex', 1 );
}
Utilizzo l'hook posts_selection
poiché è il primo hook nella routine di caricamento di WordPress che ha accesso ai tag condizionali. Puoi utilizzare azioni successive fino a e incluso wp_head
, ma se usi wp_head
stesso devi aggiungere l'azione con una priorità inferiore a 1
poiché noindex
viene aggiunto con una priorità di 1
:
add_action( 'wp_head', 'indexSearchPage', -1 );
In alternativa, è possibile ingannare condizionalmente WordPress facendogli credere che "Scoraggia i motori di ricerca dall'indicizzare questo sito" sia disabilitato:
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' );
}
}

Ho capito, l'output è controllato dal plugin WordPress SEO poiché è abilitato nel sito, quindi ho dovuto inserire un piccolo hardcoding nel file del plugin class-frontend.php
Ovviamente, non mi piace molto questa soluzione approssimativa, ma per ora funziona emettendo quel meta nella pagina di ricerca come desidero.
Nel file del plugin class-frontend.php ho dovuto sostituire la riga 552 con questo
if ( is_search() ) { $robots['follow'] = 'nofollow'; } else { $robots['follow'] = 'follow'; }

NOTA: Con l'attuale versione di WordPress SEO questa risposta non è più valida - le righe modificate all'interno del plugin non esistono più. I visitatori di questa domanda potrebbero trovare che la mia seconda risposta fornisca soluzioni che non richiedono modifiche al plugin. Se non stai utilizzando WordPress SEO o desideri rimuovere l'indicizzazione dai motori di ricerca da ogni pagina, la soluzione migliore alla domanda posta è abilitare "Scoraggia i motori di ricerca dall'indicizzare questo sito".

Consiglierei semplicemente di deselezionare la casella "Sconsiglia ai motori di ricerca di indicizzare questo sito" da Impostazioni > Lettura
nella dashboard (questo dovrebbe rimuovere i meta-tag relativi ai robot da tutte le pagine del tuo sito), quindi aggiungere manualmente il meta-tag all'header del tuo tema utilizzando delle condizioni, in questo modo:
if( ! is_search() )
echo( '<meta name="robots" content="noindex,nofollow" />' );
Potresti dover modificare le condizioni per ottenere l'effetto desiderato, ma credo che tu abbia capito l'idea.
Se non vuoi modificare il tuo tema, potresti collegarlo all'hook di azione wp_head
:
add_action( 'wp_head', 'noRobots' );
function noRobots() {
if( ! is_search() )
echo( '<meta name="robots" content="noindex,nofollow" />' );
}

Sì, so che si può fare in questo modo, ma vorrei non disabilitarli tutti in una sola pagina, il sito utilizza il plugin Yoast SEO che mi dà pieno controllo e personalizzazione per la SEO in tutte le altre pagine, tranne questa pagina di ricerca. Infatti, avendo questo, quello che voglio fare è rimuovere il meta creato da wp_head e poi emetterlo di nuovo ma con nofollow invece di follow. Qualcosa come str_replace('<meta name=robots content="noindex,follow"/>', '<meta name=robots content="noindex,nofollow"/>', wp_head());

Mi dispiace - non capisco cosa stai cercando di ottenere. La soluzione che ho fornito manterrà il tag su tutte le pagine tranne quella dei risultati di ricerca, proprio come il codice suggerito in fondo alla tua domanda farebbe. Inoltre non ho familiarità con il plugin Yoast SEO, quindi temo di non poter essere di grande aiuto.

Per favore, spiega cosa intendi con "vorrei non disabilitarli tutti in una sola pagina"

Se seleziono "Scoraggia i motori di ricerca dall'indicizzare questo sito" dovrò generare manualmente il meta-tag per tutti i tipi di pagine, articoli, tag. Il plugin Yoast SEO offre una serie di opzioni per queste pagine e non voglio perderle. Ho solo bisogno di personalizzare l'output di questo meta-tag SEO nella pagina dei risultati di ricerca, solo questa.

Per favore spiega questa risposta e perché pensi che dovrebbe risolvere il problema.

@Yarr intendevi if ( is_search() ) { remove_action( 'wp_head', 'do_robots');
}
in ogni caso ho provato questo, ma non rimuove <meta name=robots content="noindex,follow"/>

La funzione do_robots() mostra solo il file robots.txt - non ha alcuna rilevanza per i meta-tag.
