Удалить мета-тег robots из wp_head

28 февр. 2014 г., 01:47:43
Просмотры: 30.4K
Голосов: 7

Мне нужно удалить только эту строку <meta name=robots content="noindex,follow"/> из wp_head, но не могу найти правильный хук для использования с remove_action().

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

В основном, я хочу удалить только эту строку из заголовка, но только для страницы поиска. В этом случае я бы использовал что-то подобное:

if ( is_search() ) { remove_action('wp_head', 'whatever-the-action-name-is'); }
3
Комментарии

Пожалуйста, разместите найденный ответ в качестве ответа на этот вопрос, а не отвечайте на свой вопрос в самом вопросе.

bosco bosco
28 февр. 2014 г. 05:34:24

Да, я это сделаю, но stackexchange не позволяет мне отвечать на свой собственный вопрос в течение 8 часов после его создания. Я обновлю его завтра утром. Спасибо @boscho

elvismdev elvismdev
28 февр. 2014 г. 05:39:03

А, я не знал об этом ограничении. Заранее спасибо за перенос ;)

bosco bosco
28 февр. 2014 г. 05:39:43
Все ответы на вопрос 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;
}

Должно сработать... Добавьте этот код в файл functions.php вашей темы, и всё будет работать как надо.

18 авг. 2014 г. 21:17:23
Комментарии

Это решение не совсем точно соответствует заданному вопросу, но оно наиболее близкое. Оно позволяет изменять robots-директиву Yoast без взлома плагина. В моем случае мне нужно было применить это к кастомному шаблону, и я смог сделать это следующим образом:

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

Это можно модифицировать для страницы поиска. Однако плагин Yoast УЖЕ не индексирует страницу поиска.

heytricia heytricia
11 дек. 2015 г. 21:03:07

Спасибо! Это единственное решение, которое сработало! Модифицированный сниппет:

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

Этот код определяет, является ли текущий URL страницей с пагинацией, и удаляет тег robots. Если это не так, вместо него будет выводиться канонический тег.

thamind thamind
23 февр. 2017 г. 00:05:41
0

Судя по вашим комментариям к другому моему ответу, где вы явно выражаете желание оставить включенной опцию "Запретить индексацию сайта поисковыми системами", после более тщательного изучения исходного кода WordPress (в частности default-filters.php), я думаю, что, вероятно, вы искали именно это:

add_action( 'posts_selection', 'indexSearchPage' );

function indexSearchPage() {
    // Обязательно укажите приоритет для действия, иначе оно не будет удалено
    if( is_search() )
        remove_action( 'wp_head', 'noindex', 1 );
}

Я использую хук posts_selection, так как это первый хук в процедуре загрузки WordPress, который имеет доступ к условным тегам. Вы можете использовать более поздние действия вплоть до wp_head, но если вы используете сам wp_head, вам нужно добавить действие с приоритетом меньше 1, поскольку noindex добавляется с приоритетом 1:

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

Альтернативно, можно условно обмануть WordPress, заставив его думать, что опция "Запретить индексацию сайта поисковыми системами" отключена:

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 февр. 2014 г. 04:09:27
3

Я понял, вывод контролируется плагином WordPress SEO, так как он активирован на сайте, поэтому мне пришлось немного поковыряться в файле плагина class-frontend.php.

Конечно, мне не очень нравится такое грязное решение, но пока оно работает, выводя этот метатег на странице поиска, как я и хотел.

В файле плагина class-frontend.php мне пришлось заменить строку 552 на это:

if ( is_search() ) { $robots['follow'] = 'nofollow'; } else { $robots['follow'] = 'follow'; }
28 февр. 2014 г. 15:12:37
Комментарии

Вы должны отметить этот ответ как правильный.

Sisir Sisir
29 июн. 2014 г. 10:45:19

ПРИМЕЧАНИЕ: В текущей версии WordPress SEO этот ответ больше не действителен - измененные строки в плагине больше не существуют. Посетители этого вопроса могут обнаружить, что мой второй ответ предлагает решения, которые не требуют взлома плагина. Если вы не используете WordPress SEO или хотите убрать индексацию поисковыми системами со всех страниц, лучшее решение для поставленного вопроса - включить опцию "Запретить поисковым системам индексировать этот сайт".

bosco bosco
31 авг. 2014 г. 03:14:05

в последней версии плагина Yoast

найдите этот код

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

он находится на строке 693, отредактируйте/удалите код $robots['index'] = 'noindex';

так я исправил свою проблему.

Godwin Alex Ogbonda Godwin Alex Ogbonda
11 мар. 2019 г. 06:22:42
4

Я бы рекомендовал просто снять галочку с пункта "Запретить поисковым системам индексировать этот сайт" в разделе Настройки > Чтение в админ-панели (это должно убрать мета-теги для роботов со всех страниц сайта), а затем вручную добавить мета-тег обратно в шапку вашей темы с помощью условных выражений, например так:

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

Возможно, вам придется изменить условия для достижения желаемого эффекта, но, думаю, основная идея понятна.

Если вы не хотите изменять свою тему, можно подключить этот код через хук wp_head:

add_action( 'wp_head', 'noRobots' );

function noRobots() {
    if( ! is_search() )
        echo( '<meta name="robots" content="noindex,nofollow" />' );
}
28 февр. 2014 г. 03:07:10
Комментарии

Да, я знаю, что это можно сделать таким образом, но я бы не хотел отключать все метатеги сразу для одной страницы. Сайт использует плагин Yoast SEO, который дает мне полный контроль и настройку SEO для всех остальных страниц, кроме этой страницы поиска. Фактически, имея это, я хочу удалить метатеги, созданные wp_head, а затем вывести те же самые, но с атрибутом nofollow вместо follow. Что-то вроде str_replace('<meta name=robots content="noindex,follow"/>', '<meta name=robots content="noindex,nofollow"/>', wp_head());

elvismdev elvismdev
28 февр. 2014 г. 03:17:10

Извините - я не понимаю, чего вы пытаетесь достичь. Решение, которое я предложил, оставит тег на всех страницах, кроме страницы результатов поиска, так же, как и предложенный код в конце вашего вопроса. Я также не знаком с плагином Yoast SEO, поэтому, боюсь, не смогу быть полезным.

bosco bosco
28 февр. 2014 г. 03:22:49

Пожалуйста, объясните, что вы имеете в виду под фразой "я бы не хотел отключать все метатеги сразу для одной страницы"

bosco bosco
28 февр. 2014 г. 03:36:56

Если я отмечу "Запретить поисковым системам индексировать этот сайт", мне придется вручную выводить мета-тег для всех типов страниц, записей, тегов. Плагин Yoast SEO предоставляет множество опций для этих страниц, и я не хочу терять их. Мне нужно просто настроить вывод этого SEO мета-тега на странице результатов поиска, только его одного.

elvismdev elvismdev
28 февр. 2014 г. 03:43:41
3
-2

Это то, что вы ищете?

if ( is_search() ) {
    remove_action( 'do_robots', 'do_robots');
}
28 февр. 2014 г. 03:23:12
Комментарии

Пожалуйста, объясните этот ответ и почему вы считаете, что он должен решить проблему.

s_ha_dum s_ha_dum
28 февр. 2014 г. 03:26:33

@Yarr вы, вероятно, имели в виду if ( is_search() ) { remove_action( 'wp_head', 'do_robots'); } в любом случае я попробовал это, но тег <meta name=robots content="noindex,follow"/> не удаляется

elvismdev elvismdev
28 февр. 2014 г. 03:32:22

Функция do_robots() просто отображает файл robots.txt - она не имеет отношения к мета-тегам.

bosco bosco
28 февр. 2014 г. 04:30:28