Ситуация типовая: в индексе появляются страницы поиска, служебные архивы, тестовые разделы, дубли с параметрами или приватные материалы, которые не должны ранжироваться. В WordPress это можно решить без тяжелых SEO-плагинов, если понимать, что именно нужно закрыть: от поисковиков, от перехода по ссылкам или от сканирования роботом.
Ниже — рабочий сценарий для точечной настройки через noindex, nofollow и robots.txt, без выдуманных хуков и без ломания админки.
Когда проблема уже видна в индексе
Проверка начинается не с кода, а с поиска причины. Откройте Google Search Console или Яндекс.Вебмастер и посмотрите, какие URL попали в индекс. Обычно всплывают:
- страницы поиска вида
?s=; - архивы автора, даты, тегов и рубрик;
- страницы пагинации, если они не несут ценности;
- служебные URL с параметрами сортировки и фильтров;
- черновые или тестовые страницы, случайно опубликованные в публичном статусе.
Если URL уже в индексе, одного изменения robots.txt часто недостаточно. Робот может перестать обходить страницу, но старый URL останется в выдаче до следующей переоценки. Для удаления из индекса нужен именно noindex на самой странице или заголовок X-Robots-Tag.
Что выбрать: noindex, robots.txt или редирект
Эти инструменты решают разные задачи. Ошибка многих сайтов — закрывать всё подряд через robots.txt и ждать, что URL исчезнут из поиска. Это не всегда так.
| Подход | Когда использовать | Ограничение |
|---|---|---|
noindex | Страница доступна, но не должна быть в поиске | Робот должен иметь возможность увидеть тег |
robots.txt | Нужно ограничить обход, например технических разделов | Не гарантирует удаление уже проиндексированного URL |
| 301-редирект | Страница больше не нужна и есть замена | Подходит не для всех сценариев, особенно если контент уникален |
Если задача — убрать из индекса отдельную страницу, рубрику или архив, чаще всего нужен noindex. Если задача — не тратить краулинговый бюджет на мусорные URL, добавляют ещё и правила в robots.txt.
Диагностика: как понять, что именно закрывать
Перед правками проверьте три вещи:
- Страница реально доступна по HTTP 200, а не редиректит на другой URL.
- На ней нет уже установленного
noindexот темы или SEO-плагина. - Она не должна участвовать во внутренней перелинковке как важная посадочная.
Если страница — это, например, архив тегов без полезной нагрузки, её можно закрыть от индексации. Если это дубль карточки или устаревшая статья, лучше сделать 301 на актуальный URL. Если это технический endpoint, иногда достаточно запрета в robots.txt.
Пошаговое решение через код темы или мини-плагин
Самый безопасный путь — вынести логику в отдельный мини-плагин или в functions.php дочерней темы. Так вы не потеряете настройку при обновлении темы.
1. Добавляем noindex для отдельных типов страниц
Ниже пример, который ставит noindex, follow для поиска, архивов автора, тегов и страниц с пагинацией. При необходимости список можно сузить.
<?php
add_action('wp_head', function () {
if (is_admin()) {
return;
}
$noindex = false;
if (is_search() || is_author() || is_tag()) {
$noindex = true;
}
if (is_paged()) {
$noindex = true;
}
if ($noindex) {
echo '<meta name="robots" content="noindex, follow" />' . "\n";
}
}, 1);Этот вариант подходит, если у вас нет другого SEO-плагина, который уже управляет мета-тегами robots. Если плагин есть, не дублируйте правила в двух местах — получите конфликт и непредсказуемый результат.
2. Закрываем конкретные страницы по ID
Если нужно закрыть одну-две страницы, удобнее задать список ID. Это лучше, чем пытаться ловить их по шаблону URL.
<?php
add_action('wp_head', function () {
if (is_admin()) {
return;
}
$noindex_ids = array(12, 34, 56);
if (is_page($noindex_ids)) {
echo '<meta name="robots" content="noindex, nofollow" />' . "\n";
}
}, 1);Здесь я использую nofollow только для действительно закрытых страниц, где не нужно передавать вес по ссылкам. Для обычных служебных страниц чаще достаточно noindex, follow.
3. Добавляем X-Robots-Tag для файлов и нестандартных URL
Если URL не рендерит HTML-шаблон, а отдает файл или нестандартный ответ, удобнее использовать заголовок X-Robots-Tag. Это полезно для PDF, выгрузок, служебных страниц и некоторых endpoint-ов.
<?php
add_action('send_headers', function () {
if (is_admin()) {
return;
}
if (isset($_GET['download']) && $_GET['download'] === '1') {
header('X-Robots-Tag: noindex, nofollow', true);
}
});Такой подход лучше применять точечно. Не вешайте заголовок на весь сайт, иначе можно случайно закрыть важные страницы.
Как ограничить обход через robots.txt
robots.txt нужен не для удаления из индекса, а для ограничения обхода. Например, можно запретить технические пути, которые не должны сканироваться вообще.
User-agent: *
Disallow: /wp-admin/
Disallow: /wp-login.php
Disallow: /search/
Disallow: /?s=
Disallow: /*?replytocom=
Sitemap: https://example.com/sitemap_index.xmlОбратите внимание: строка Disallow: /?s= не является универсальной магией для всех поисковиков и всех вариантов URL. Для поискового мусора с параметрами лучше дополнительно ставить noindex или закрывать генерацию таких URL на уровне темы/плагина.
Проверка результата после внедрения
После правок не ограничивайтесь просмотром исходника. Проверьте результат в нескольких местах:
- откройте страницу в браузере и посмотрите исходный код на наличие
<meta name="robots" ...>; - проверьте заголовки через
curl -I https://example.com/your-url/; - в Search Console отправьте URL на повторную проверку;
- убедитесь, что страница не закрыта от обхода, если поисковику нужно увидеть
noindex; - посмотрите, не остался ли URL в sitemap.xml.
Пример проверки заголовков:
curl -I https://example.com/private-page/Если вы используете X-Robots-Tag, в ответе должен быть виден соответствующий заголовок. Если ставите мета-тег в wp_head, проверьте именно HTML-ответ, а не только заголовки.
Частые ошибки и как их исправить
Закрыли URL в robots.txt, но он остался в выдаче
Это нормальная ситуация. Если робот не может зайти на страницу, он может не увидеть noindex. Для уже проиндексированных URL сначала дайте доступ к странице, поставьте noindex, дождитесь переобхода, а уже потом при необходимости ограничивайте обход.
Ставят noindex и одновременно редиректят страницу
Если есть 301 на другой URL, поисковику обычно достаточно редиректа. Одновременная установка noindex на старой странице не всегда вредна, но часто просто лишняя. Выберите один сценарий: либо страница существует и закрыта от индекса, либо она заменена редиректом.
Дублируют правила в теме и SEO-плагине
Если у вас уже стоит плагин, который управляет robots-мета, не добавляйте второй источник правды в functions.php. В итоге можно получить конфликт: одна часть кода пишет index, follow, другая — noindex.
Закрывают важные архивы без проверки трафика
Архивы тегов и рубрик иногда дают переходы из поиска и внутренней навигации. Перед закрытием проверьте, не является ли страница полезной посадочной. Если сомневаетесь, лучше сначала убрать из меню, улучшить контент архива и только потом принимать решение.
Практические советы по безопасности и производительности
Если вы закрываете служебные URL, не забывайте про сопутствующие мелочи:
- не оставляйте в индексе тестовые поддомены и staging-версии;
- уберите их из sitemap и внутренних ссылок;
- не полагайтесь только на
noindexдля приватного контента — ограничьте доступ авторизацией или правами; - проверяйте, что правила не ломают REST API, админку и публичные страницы;
- если используете кэш, очистите его после изменения robots-логики.
Для сайтов с большим количеством дублей и технических страниц удобно держать отдельный список URL-правил в мини-плагине или использовать инструменты чистки дублей вроде Clearfy Pro, если вам нужен именно набор готовых SEO- и технических настроек. Но даже в этом случае полезно понимать, какие правила реально применяются и где они находятся.
Если задача сводится к нескольким страницам, код часто надежнее плагина: меньше лишней логики, проще аудит, легче отследить, почему конкретный URL закрыт от индексации.