Elimină meta robots tag din wp_head

28 feb. 2014, 01:47:43
Vizualizări: 30.4K
Voturi: 7

Am nevoie să elimin doar această linie <meta name=robots content="noindex,follow"/> din wp_head dar nu pot găsi hook-ul potrivit pentru a-l folosi cu remove_action().

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

Practic, ceea ce vreau să realizez este să elimin doar această linie din header, dar doar pentru pagina de căutare. Deci în acest caz aș folosi ceva similar cu:

if ( is_search() ) { remove_action('wp_head', 'numele-actiunii-care-trebuie'); }
3
Comentarii

Te rog să plasezi răspunsul pe care l-ai descoperit într-un răspuns real la această întrebare, mai degrabă decât să răspunzi la întrebarea ta în întrebarea în sine.

bosco bosco
28 feb. 2014 05:34:24

Da, o voi face, dar stackexchange nu mă lasă să răspund la propria întrebare în decurs de 8 ore de la crearea ei. O voi actualiza mâine dimineață. Mulțumesc @boscho

elvismdev elvismdev
28 feb. 2014 05:39:03

Ah, nu știam de această restricție. Mulțumesc anticipat pentru mutarea ei ;)

bosco bosco
28 feb. 2014 05:39:43
Toate răspunsurile la întrebare 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;
}

cred că ar trebui să fie ok.. undeva în functions.php al temei tale și ar trebui să facă treaba.

18 aug. 2014 21:17:23
Comentarii

Aceasta nu a fost exact ceea ce se cerea în întrebare, dar este cea mai apropiată soluție. Oferă o modalitate de a modifica comanda robots a Yoast fără a hack-ui pluginul. În cazul meu, voiam să țintesc un șablon personalizat și am reușit să fac asta cu următoarele:

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

Aceasta ar putea fi modificată pentru a ținti pagina de căutare. Totuși, pluginul Yoast DEJA pune no-index pe Pagina de Căutare.

heytricia heytricia
11 dec. 2015 21:03:07

Mulțumesc! Aceasta a fost singura soluție care a funcționat! Snippet modificat:

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

Aceasta determină dacă URL-ul curent este o pagină paginată și elimină tagul robots. Dacă nu este, va afișa tagul canonic în schimb.

thamind thamind
23 feb. 2017 00:05:41
0

Pe baza comentariilor tale la celălalt răspuns, care sugerează că dorești în mod explicit să păstrezi opțiunea "Descurajează motoarele de căutare să indexeze acest site" activată, după o investigație mai amănunțită a codului sursă al WordPress (în special default-filters.php), cred că acesta este probabil ceea ce căutai de fapt:

add_action( 'posts_selection', 'indexSearchPage' );

function indexSearchPage() {
    // Asigură-te că incluzi prioritatea pentru acțiune, altfel nu va fi eliminată
    if( is_search() )
        remove_action( 'wp_head', 'noindex', 1 );
}

Folosesc hook-ul posts_selection deoarece este primul hook din rutina de încărcare a WordPress care are acces la tag-uri condiționale. Poți folosi acțiuni ulterioare până la și inclusiv wp_head, dar dacă folosești wp_head însuși, trebuie să adaugi acțiunea cu o prioritate mai mică decât 1, deoarece noindex este adăugat cu o prioritate de 1:

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

Alternativ, este posibil să păcălești WordPress să creadă condiționat că opțiunea "Descurajează motoarele de căutare să indexeze acest site" este dezactivată:

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

Am înțeles, ieșirea este controlată de plugin-ul WordPress SEO deoarece acesta este activat pe site, așa că a trebuit să modific puțin codul în fișierul pluginului class-frontend.php

Evident, nu prea îmi place această soluție improvizată, dar funcționează pentru moment, afișând meta-ul respectiv pe pagina de căutare așa cum doresc.

În fișierul class-frontend.php al plugin-ului a trebuit să înlocuiesc linia 552 cu aceasta:

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

Ar trebui să marchezi acest răspuns ca răspuns corect.

Sisir Sisir
29 iun. 2014 10:45:19

NOTĂ: Cu versiunea actuală a WordPress SEO, acest răspuns nu mai este valabil - liniile modificate în cadrul plugin-ului nu mai există. Vizitatorii acestei întrebări pot descoperi că al doilea răspuns al meu oferă soluții care nu necesită modificări ale plugin-ului. Dacă nu folosești WordPress SEO sau dorești să elimini indexarea de către motoarele de căutare de pe fiecare pagină, cea mai bună soluție la întrebarea pusă este să activezi "Descurajează motoarele de căutare să indexeze acest site".

bosco bosco
31 aug. 2014 03:14:05

pe cea mai recentă versiune a plugin-ului yoast

caută acest cod

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

se află la linia 693, te rog să editezi/ștergi codul $robots['index'] = 'noindex';

așa am rezolvat eu problema.

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

Vă recomand să debifați pur și simplu opțiunea "Descurajează motoarele de căutare să indexeze acest site" din Setări > Citire din panoul de control (acest lucru ar trebui să elimine meta-tagurile relevante pentru roboți din toate paginile site-ului dvs.), apoi să adăugați manual meta-tagul înapoi în header-ul temei folosind condiții, astfel:

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

Poate fi necesar să modificați condițiile pentru a obține efectul dorit, dar cred că înțelegeți ideea.

Dacă nu doriți să modificați tema, puteți atașa acest cod la acțiunea 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
Comentarii

Da, știu că se poate realiza în acest fel, dar aș dori să nu dezactivez toate meta tag-urile doar pentru o singură pagină. Site-ul folosește plugin-ul Yoast SEO care îmi oferă control complet și personalizare pentru SEO pe restul paginilor, cu excepția acestei pagini de căutare. De fapt, având în vedere acest lucru, ceea ce vreau să fac este să elimin meta tag-urile create de wp_head și apoi să le afișez din nou, dar cu nofollow în loc de follow. Ceva de genul str_replace('<meta name=robots content="noindex,follow"/>', '<meta name=robots content="noindex,nofollow"/>', wp_head());

elvismdev elvismdev
28 feb. 2014 03:17:10

Îmi pare rău - nu înțeleg ce încerci să realizezi. Soluția pe care am oferit-o va păstra tag-ul pe toate paginile, cu excepția paginii de rezultate ale căutării, exact cum ar face codul sugerat la finalul întrebării tale. De asemenea, nu sunt familiarizat cu plugin-ul Yoast SEO, așa că din păcate nu pot fi de mare ajutor.

bosco bosco
28 feb. 2014 03:22:49

Te rog să explici ce înțelegi prin "aș dori să nu dezactivez toate meta tag-urile doar pentru o singură pagină"

bosco bosco
28 feb. 2014 03:36:56

Dacă bifez opțiunea "Descurajează motoarele de căutare să indexeze acest site" va trebui să afișez manual meta-tag-ul pentru toate tipurile de pagini, articole, etichete. Plugin-ul Yoast SEO oferă o varietate de opțiuni pentru aceste pagini și nu vreau să pierd asta. Am nevoie doar să personalizez afișarea acestui meta-tag SEO în pagina de rezultate a căutării, doar acesta.

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

Este asta ceea ce cauți?

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

Te rog să explici acest răspuns și de ce crezi că ar rezolva problema.

s_ha_dum s_ha_dum
28 feb. 2014 03:26:33

@Yarr te-ai referit probabil la if ( is_search() ) { remove_action( 'wp_head', 'do_robots'); } în orice caz, am încercat și eu asta, dar nu elimină <meta name=robots content="noindex,follow"/>

elvismdev elvismdev
28 feb. 2014 03:32:22

Funcția do_robots() doar afișează fișierul robots.txt - nu are nicio legătură cu meta-tagurile.

bosco bosco
28 feb. 2014 04:30:28