Служебные страницы вроде результатов фильтрации, сортировки, поиска по параметрам и страниц возврата часто попадают в индекс раньше, чем это замечают. В итоге в Search Console появляются дубли, а поисковик тратит краулинговый бюджет на мусорные URL. На небольших сайтах это обычно не критично, но на контентных проектах и каталогах проблема быстро разрастается.
Ниже — рабочая схема, которая не сводится к одному совету «поставьте noindex». Для разных типов страниц нужен разный подход: где-то достаточно мета-тега, где-то лучше отдать заголовок X-Robots-Tag, а где-то вообще убрать URL из внутренних ссылок и каноникализации.
Какие URL обычно нужно закрывать
Сначала стоит понять, что именно вы хотите исключить из индекса. Ошибка многих сайтов в том, что они закрывают слишком много или, наоборот, оставляют открытыми страницы, которые генерируют тысячи комбинаций.
Типичные кандидаты на noindex
- страницы поиска по сайту с параметром
?s=; - страницы фильтров и сортировки с GET-параметрами;
- служебные страницы возврата, если они создаются отдельным URL;
- страницы с пагинацией, если это не основной контентный раздел;
- дубли архивов по тегам, датам и авторам, если они не несут ценности.
Если речь о фильтрах в каталоге, сначала проверьте, не создают ли они отдельные индексируемые URL с уникальными title и canonical на самих себя. Именно такие страницы чаще всего попадают в индекс и начинают конкурировать с основными посадочными.
Диагностика проблемы в WordPress
Перед правками полезно посмотреть, как именно сейчас ведут себя проблемные адреса. Не все страницы нужно закрывать одинаково: иногда достаточно запретить индексацию, иногда нужно ещё убрать их из sitemap и внутренних ссылок.
Что проверить вручную
- Откройте проблемный URL в браузере и посмотрите исходный код.
- Найдите
<meta name="robots"иcanonical. - Проверьте ответ сервера через
curl -Iили DevTools. - Посмотрите, есть ли этот URL в XML-sitemap.
- Проверьте, не ведут ли на него внутренние ссылки из меню, хлебных крошек или блоков фильтрации.
curl -I "https://example.com/?s=test"Если в ответе нет X-Robots-Tag, а в HTML отсутствует noindex, поисковик будет ориентироваться на остальные сигналы: canonical, ссылки и sitemap. Это не всегда плохо, но для мусорных параметров обычно недостаточно.
Пошаговое решение без лишней магии
Ниже — базовый вариант для темы или небольшого плагина. Он закрывает от индексации поисковые страницы, некоторые служебные параметры и добавляет noindex, follow только там, где это оправдано.
1. Добавить robots-мета для нужных шаблонов
<?php
add_filter('wp_robots', function( array $robots ) {
if ( is_search() ) {
$robots['noindex'] = true;
$robots['follow'] = true;
}
if ( is_paged() && ! is_home() ) {
// Для архивов с пагинацией это спорно: применяйте только если страницы не нужны в индексе.
$robots['noindex'] = true;
$robots['follow'] = true;
}
return $robots;
});Фильтр wp_robots есть в актуальных версиях WordPress и подходит для управления robots-мета без прямого вывода тега в шаблоне. Это безопаснее, чем править header.php вручную.
2. Закрыть параметры через X-Robots-Tag на уровне ответа
Если фильтр создаётся GET-параметрами, а URL не имеет отдельного шаблона, удобнее отдать заголовок на уровне ответа. Так вы не зависите от темы и не рискуете забыть о новых шаблонах.
<?php
add_action('send_headers', function() {
if ( is_admin() ) {
return;
}
$uri = $_SERVER['REQUEST_URI'] ?? '';
if ( str_contains($uri, '?filter=') || str_contains($uri, '&sort=') ) {
header('X-Robots-Tag: noindex, follow', true);
}
});Здесь важно не переусердствовать. Не стоит закрывать всё подряд по наличию вопросительного знака в URL: на многих сайтах UTM-метки и служебные параметры используются легитимно. Лучше перечислить конкретные паттерны.
3. Убрать мусорные URL из sitemap и внутренних ссылок
Если URL не должен индексироваться, он не должен активно раздаваться по сайту. Иначе поисковик всё равно будет его обходить, даже при noindex.
- исключите служебные страницы из XML-sitemap;
- не добавляйте фильтры в хлебные крошки;
- не ставьте на них каноникал на самих себя, если это дубль;
- не выводите ссылки на параметры в блоках «похожие» и «популярные»;
- если используется AJAX-фильтрация, проверьте, не меняется ли URL без необходимости.
Сравнение подходов: плагин, код или сервер
| Подход | Когда подходит | Плюс | Компромисс |
|---|---|---|---|
| SEO-плагин | Нужно быстро закрыть типовые архивы и страницы | Меньше кода | Не всегда удобно для точечных параметров |
| Код в теме или mu-plugin | Есть конкретные фильтры и служебные URL | Точный контроль | Нужно сопровождение при смене темы |
| Заголовок на сервере | URL формируются параметрами и не зависят от шаблона | Работает независимо от темы | Нужна аккуратная логика, чтобы не задеть нужные страницы |
Если на сайте уже используется SEO-плагин, сначала проверьте его настройки. Например, в некоторых случаях проще закрыть архивы и параметры через интерфейс, а код оставить только для нестандартных URL. Для чистки дублей и служебных страниц иногда достаточно аккуратной настройки Clearfy Pro, если он уже стоит в проекте: https://wpshop.ru/plugins/clearfy.
Как проверить, что решение сработало
После внедрения не ограничивайтесь просмотром HTML. Проверка должна быть в нескольких слоях: ответ сервера, исходный код, sitemap и поведение в Search Console.
Чек-лист проверки
- в исходном коде есть
noindexили в ответе сервера естьX-Robots-Tag; - canonical указывает на нужную основную страницу, а не на фильтр;
- служебный URL исчез из sitemap;
- страница не получает новые внутренние ссылки;
- в Search Console статус URL меняется после переобхода.
Для быстрой проверки можно снова использовать curl -I и посмотреть заголовки. Если вы закрывали страницу через wp_robots, откройте её в браузере и проверьте исходный код. Если закрывали через send_headers, убедитесь, что заголовок действительно отдается только на нужных URL.
curl -I "https://example.com/?filter=color:red"Частые ошибки и как их исправить
Закрыли важные страницы вместе с фильтрами
Это случается, когда логика слишком широкая: например, в noindex попадают все архивы или все URL с параметрами. Исправление простое: сузьте условие до конкретных шаблонов и проверьте, не затронуты ли посадочные страницы.
Оставили страницу в sitemap
Если URL продолжает попадать в sitemap, поисковик будет возвращаться к нему снова и снова. Уберите его из генерации карты сайта, иначе закрытие будет работать медленно и неочевидно.
Поставили noindex, но не убрали внутренние ссылки
Такой URL всё равно будет активно обходиться. Для фильтров и служебных страниц это лишняя нагрузка. Лучше убрать ссылку из навигации, чем надеяться только на robots-мета.
Использовали noindex на страницах, которые должны ранжироваться
Иногда под раздачу попадают категории, теги или пагинация основного раздела. Перед изменениями проверьте, какие страницы реально приносят трафик. Если сомневаетесь, сначала закройте только самые очевидные мусорные URL.
Практические советы по безопасности и производительности
Логика закрытия от индексации не должна тормозить сайт. Не делайте тяжёлые запросы к базе на каждом хите, если можно обойтись проверкой шаблона или URL-паттерна. Для сложных правил лучше вынести код в mu-plugin, чтобы он не зависел от темы.
Если у вас много параметров фильтрации, полезно вести список разрешённых и запрещённых паттернов в одном месте. Это проще сопровождать, чем разбрасывать условия по шаблонам. И ещё один практический момент: не используйте noindex как замену нормальной архитектуре ссылок. Если URL не должен жить в индексе, лучше не создавать его без необходимости.
Для проектов, где много дублей из-за архивов, тегов и параметров, имеет смысл отдельно проверить настройки SEO-слоя и чистки дублей. Но даже тогда финальное решение лучше держать под контролем в коде или в понятной админке, а не в наборе случайных исключений.