Ситуация типовая: сайт уже в индексе, а в поиске всплывают страницы, которые не должны туда попадать — служебные разделы, внутренние архивы, результаты поиска, страницы с дублями или тестовые материалы. В WordPress это можно решить без отдельного SEO-плагина, если задача точечная и вы понимаете, что именно нужно закрыть.
Ниже разберём, как запретить индексацию отдельных страниц в WordPress без плагинов, чем отличается noindex от запрета в robots.txt, как проверить результат и где чаще всего ошибаются.
Когда проблема действительно в индексации, а не в каноникале
Перед правкой кода стоит убедиться, что поисковик видит именно ту страницу, которую вы хотите закрыть. Иногда проблема не в индексации как таковой, а в дубле URL: с параметрами, со слешем и без, с пагинацией, с UTM-метками или с неправильным canonical.
Что проверить в первую очередь
- страница реально доступна по HTTP 200, а не редиректит на другой URL;
- в исходном коде нет уже установленного
noindexот темы или плагина; - canonical указывает на нужную версию страницы;
- URL не закрыт в
robots.txtраньше, чем вы добавили мета-тег — это мешает переобходу и обновлению сигнала.
Если страница уже в индексе, а вы просто добавили запрет в robots.txt, поисковик может ещё долго хранить старую версию. Для удаления из индекса обычно надёжнее использовать noindex на самой странице, а не только блокировку обхода.
Диагностика: какие страницы закрывать, а какие нет
Не стоит массово ставить noindex на всё подряд. Для WordPress обычно закрывают:
- страницы поиска по сайту;
- архивы авторов на небольших сайтах, где они дублируют контент;
- служебные страницы вроде корзины, оформления заказа, личного кабинета — если это не противоречит задаче;
- страницы с параметрами фильтров и сортировки;
- тестовые, черновые или внутренние страницы, которые случайно стали публичными.
А вот закрывать от индексации главную, важные категории или полезные посадочные страницы обычно не нужно: это уже не техническая чистка, а риск потерять трафик.
Пошаговое решение без плагинов
Есть два рабочих подхода: точечно добавить мета-тег noindex в <head> или управлять индексированием через HTTP-заголовок для отдельных типов ответов. Для большинства WordPress-сайтов достаточно первого варианта.
Вариант 1. Добавить noindex для конкретных страниц через wp_head
Этот способ подходит, если нужно закрыть от индексации отдельные страницы по ID, шаблону или типу записи. Код лучше добавить в дочернюю тему или в небольшой mu-plugin, чтобы он не потерялся при обновлении темы.
<?php
add_action( 'wp_head', 'wppuzzle_noindex_specific_pages', 1 );
function wppuzzle_noindex_specific_pages() {
if ( is_admin() ) {
return;
}
$noindex = false;
// Пример: закрыть страницу поиска.
if ( is_search() ) {
$noindex = true;
}
// Пример: закрыть конкретные страницы по ID.
if ( is_page( array( 12, 34, 56 ) ) ) {
$noindex = true;
}
// Пример: закрыть архив автора на небольшом сайте.
if ( is_author() ) {
$noindex = true;
}
if ( $noindex ) {
echo '<meta name="robots" content="noindex,follow" />' . "\n";
}
}
Здесь важно использовать follow, если вы не хотите ломать внутреннюю перелинковку. Поисковик увидит запрет на индексацию страницы, но сможет переходить по ссылкам дальше.
Вариант 2. Закрыть архивы и служебные страницы через условные теги
Если задача шире и нужно закрыть не одну страницу, а целый тип контента, можно опираться на условные теги WordPress. Это удобно для архивов автора, поиска, дат и некоторых таксономий.
<?php
add_action( 'wp_head', 'wppuzzle_noindex_archives', 1 );
function wppuzzle_noindex_archives() {
if ( is_admin() ) {
return;
}
if ( is_search() || is_author() || is_date() ) {
echo '<meta name="robots" content="noindex,follow" />' . "\n";
}
}
Если у вас архивы категорий полезны для SEO, не закрывайте их автоматически. Для категорий и тегов решение нужно принимать отдельно, а не по шаблону.
Вариант 3. Закрыть страницу через wp_robots в современных версиях WordPress
В актуальных версиях WordPress есть фильтр wp_robots, который позволяет корректно добавить директивы robots без ручной печати HTML в head. Это более аккуратный вариант, если вы хотите работать в рамках штатного API.
<?php
add_filter( 'wp_robots', 'wppuzzle_add_noindex_to_specific_pages' );
function wppuzzle_add_noindex_to_specific_pages( array $robots ) : array {
if ( is_search() || is_author() ) {
$robots['noindex'] = true;
$robots['follow'] = true;
}
return $robots;
}
Плюс этого подхода в том, что он лучше сочетается с другими настройками темы и плагинов, которые тоже работают через robots-правила.
Что выбрать: код, robots.txt или SEO-плагин
| Подход | Когда подходит | Минус |
|---|---|---|
Код через wp_head или wp_robots | Точечные страницы, архивы, служебные URL | Нужно поддерживать код вручную |
robots.txt | Ограничить обход, снизить нагрузку на мусорные URL | Не гарантирует удаление уже проиндексированной страницы |
| SEO-плагин | Когда нужно управлять большим числом правил из админки | Дополнительная нагрузка и риск конфликтов настроек |
Если задача локальная, код обычно проще и надёжнее. Если на сайте много типов контента и правила часто меняются редакторами, удобнее использовать SEO-плагин. Например, в Clearfy Pro есть инструменты для чистки сайта и управления техническими настройками, но ставить его только ради одного noindex не обязательно.
Как проверить, что запрет индексации сработал
После внедрения не ограничивайтесь визуальной проверкой страницы в браузере. Нужно убедиться, что поисковый робот увидит именно тот сигнал, который вы ожидали.
Проверка в исходном коде
Откройте страницу и найдите в <head> строку вида:
<meta name="robots" content="noindex,follow" />Если тег не появился, проверьте, что код подключён в активной теме или mu-plugin, а условие is_page() или is_search() действительно срабатывает на нужном URL.
Проверка через curl
Иногда удобнее смотреть ответ сервера напрямую, особенно если есть кэш или CDN.
curl -I https://example.com/sample-page/Если вы используете HTTP-заголовок X-Robots-Tag для PDF, изображений или других файлов, проверяйте именно заголовки ответа. Для обычных HTML-страниц чаще достаточно мета-тега.
Проверка в поисковой консоли
После переобхода страницы поисковик должен увидеть новый сигнал. Если страница всё ещё в индексе, это не всегда ошибка: иногда нужно время на обновление. Но если в исходнике нет noindex, а в консоли он не определяется, значит правило не сработало или его перехватывает другой плагин.
Частые ошибки и как их исправить
- Ставят
Disallowвrobots.txtвместоnoindex. Это не удаляет уже проиндексированную страницу. Для удаления нужен сигнал на самой странице. - Закрывают важные категории и архивы по шаблону. В результате теряется полезная перелинковка и часть страниц выпадает из поиска.
- Добавляют код в родительскую тему. После обновления изменения исчезают. Используйте дочернюю тему или mu-plugin.
- Не проверяют конфликт с SEO-плагином. Если плагин уже выводит свои robots-метки, можно получить дубли или противоречивые директивы.
- Сразу ставят
noindex,nofollow. Для большинства страниц это слишком жёстко. Обычно безопаснее оставитьfollow.
Практические советы по безопасности и производительности
Если вы закрываете от индексации много URL, не превращайте это в хаотичный набор условий в functions.php. Лучше вынести логику в отдельный мини-плагин или mu-plugin и явно описать, какие типы страниц закрываются и почему.
Для больших сайтов полезно:
- вести список URL и шаблонов, которые должны быть закрыты;
- проверять, не создаёт ли тема новые архивы после обновления;
- следить, чтобы кэш не отдавал старую версию страницы без
noindex; - не блокировать в
robots.txtто, что нужно удалить из индекса быстро.
Если задача выходит за рамки точечной правки и нужно регулярно чистить дубли, служебные страницы и технический мусор, иногда проще собрать это в отдельный набор настроек через специализированный плагин. Но для одного-двух сценариев код остаётся самым прозрачным вариантом: вы точно знаете, что и где меняется.
Рабочий ориентир простой: если страница должна исчезнуть из поиска, сначала добавьте ей корректный noindex, затем проверьте исходный код и только потом трогайте robots.txt. Так меньше шансов случайно закрыть нужный контент и сложнее получить ситуацию, когда URL всё ещё висит в индексе, но уже недоступен для переобхода.