Страницы отбора в WordPress — это типичный источник мусора в индексе: архивы с параметрами, результаты фильтров, страницы поиска, сортировки и служебные URL, которые полезны пользователю, но почти никогда не нужны поисковику. Проблема в том, что закрывать их «в лоб» через robots.txt или массовый noindex нельзя без проверки логики сайта: можно случайно убрать из обхода важные страницы, сломать canonical или оставить в индексе дубли с разными параметрами.
Ниже — рабочий сценарий для типового WordPress-сайта: как определить, какие URL действительно нужно закрыть, чем отличается noindex от disallow, как поставить мета-тег и canonical на уровне темы или плагина, и как проверить, что поисковик видит именно то, что вы задумали.
Какие страницы отбора обычно попадают в индекс
Под «страницами отбора» здесь я имею в виду не только поиск по сайту. В WordPress это часто:
- архивы с параметрами сортировки:
?orderby=,?order=; - страницы фильтров:
?color=red,?tag=,?price=; - результаты внутреннего поиска:
?s=; - страницы с UTM и другими маркетинговыми параметрами, если они индексируются как отдельные URL;
- служебные страницы, которые не несут самостоятельной ценности для поиска.
Если такие URL уже попали в индекс, обычно это видно по отчетам в Google Search Console, по оператору site: и по логам обхода. Но прежде чем что-то закрывать, нужно понять, какие из этих страниц реально должны оставаться доступными для пользователей и ботов.
Диагностика: что именно у вас дублируется
Сначала проверьте, какие URL создают дубли. Самый быстрый способ — открыть несколько типовых страниц отбора и посмотреть три вещи: статус ответа, canonical и мета robots. Если на странице фильтра стоит index,follow, а canonical указывает на саму себя, поисковик вполне может считать ее отдельной страницей.
Что смотреть в первую очередь
- есть ли у страницы уникальный контент или это только набор фильтров;
- меняется ли URL при каждом выборе параметра;
- отличается ли canonical от основного архива;
- не закрыта ли страница только в robots.txt, но при этом уже успела попасть в индекс;
- не генерирует ли тема или плагин отдельные страницы на каждый параметр.
Если вы видите, что страницы с параметрами индексируются, но не несут ценности, их лучше закрывать через noindex,follow и корректный canonical, а не через полный запрет в robots.txt. Robots.txt не удаляет URL из индекса, если он уже известен поисковику.
Что выбрать: noindex, canonical или robots.txt
У этих способов разная задача. Ошибка многих сайтов — использовать только один инструмент на все случаи. Это почти всегда приводит либо к лишним дублям, либо к потере обхода полезных страниц.
| Способ | Когда применять | Плюс | Минус |
|---|---|---|---|
noindex,follow | Для страниц отбора, поиска, сортировки | Страница доступна пользователю, но не должна ранжироваться | Нужно, чтобы бот мог ее обойти |
canonical | Когда есть основная версия страницы | Помогает склеить дубли | Не всегда игнорируется, если страница сильно отличается |
robots.txt | Для явного ограничения обхода служебных URL | Снижает нагрузку на обход | Не убирает уже известные URL из индекса |
Для страниц отбора чаще всего нужен именно noindex,follow плюс canonical на основную категорию или архив. Robots.txt имеет смысл только для совсем служебных адресов, которые не должны обходиться вообще.
Пошаговое решение через код темы или мини-плагин
Если у вас нет SEO-плагина, который уже умеет управлять мета-тегами, можно добавить логику в functions.php дочерней темы или вынести в небольшой mu-plugin. Это безопаснее, чем править шаблоны вручную по нескольким файлам.
1. Добавляем noindex для страниц поиска и параметров
Ниже пример, который ставит noindex,follow на страницы поиска и на URL с выбранными параметрами. Список параметров нужно адаптировать под ваш сайт: не закрывайте все подряд, если часть параметров влияет на полезный контент.
<?php
add_action('wp_head', function () {
if (is_admin()) {
return;
}
$noindex = false;
if (is_search()) {
$noindex = true;
}
$blocked_params = array('orderby', 'order', 'filter_color', 'filter_size', 'min_price', 'max_price');
foreach ($blocked_params as $param) {
if (isset($_GET[$param]) && $_GET[$param] !== '') {
$noindex = true;
break;
}
}
if ($noindex) {
echo '<meta name="robots" content="noindex,follow" />' . "\n";
}
}, 1);Этот код не трогает обычные записи и страницы. Он срабатывает только там, где есть явный поиск или параметры отбора. Если у вас уже подключен SEO-плагин, проверьте, не дублируете ли вы его мета-теги.
2. Проставляем canonical на основную страницу
Для страниц с параметрами canonical должен указывать на чистую версию архива или категории. Это особенно важно, если фильтр меняет только сортировку или внешний вид списка, но не смысл страницы.
<?php
add_filter('get_canonical_url', function ($canonical) {
if (is_search()) {
return home_url('/');
}
$params = array('orderby', 'order', 'filter_color', 'filter_size', 'min_price', 'max_price');
foreach ($params as $param) {
if (isset($_GET[$param]) && $_GET[$param] !== '') {
if (is_category() || is_tag() || is_tax()) {
return get_term_link(get_queried_object());
}
if (is_post_type_archive()) {
return get_post_type_archive_link(get_query_var('post_type'));
}
}
}
return $canonical;
});Здесь важно не подменять canonical на случайный URL. Он должен вести на реальную основную версию страницы, а не на главную без связи с контентом. Иначе поисковик может проигнорировать подсказку.
3. Если нужен robots.txt, добавляйте только точечные правила
Полностью закрывать параметры в robots.txt стоит осторожно. Если вы запретите обход страниц, которые уже в индексе, удаление может затянуться. Но для некоторых служебных URL это оправдано.
<?php
add_filter('robots_txt', function ($output, $public) {
$output .= "\nUser-agent: *\n";
$output .= "Disallow: /*?orderby=\n";
$output .= "Disallow: /*?order=\n";
$output .= "Disallow: /*?s=\n";
return $output;
}, 10, 2);Этот вариант подходит только если вы понимаете, что именно закрываете. Для поискового запроса ?s= robots.txt часто допустим, но для фильтров лучше сначала использовать noindex, чтобы бот мог увидеть директиву на самой странице.
Если используете SEO-плагин
Во многих проектах проще и надежнее настроить закрытие через SEO-плагин, чем писать собственную логику. Это особенно удобно, если нужно управлять мета-тегами для архивов, таксономий и поисковых страниц из админки, а не через код.
Например, в Clearfy Pro есть инструменты для технической чистки сайта и управления дублями. Но даже если вы используете плагин, все равно проверьте итоговый HTML: плагин может закрыть страницу, но canonical или шаблон темы могут продолжать генерировать конфликтующие сигналы.
Проверка результата после внедрения
После изменений не ограничивайтесь визуальной проверкой в браузере. Нужно убедиться, что поисковик видит именно те сигналы, которые вы задали.
Мини-чек-лист проверки
- откройте страницу отбора и проверьте исходный код на наличие
<meta name="robots" content="noindex,follow" />; - убедитесь, что canonical ведет на основную версию страницы;
- проверьте HTTP-статус: страница должна отдавать
200 OK, если она нужна пользователю; - посмотрите, не осталось ли второго canonical из SEO-плагина;
- проверьте URL в Google Search Console через проверку URL и запрос на индексирование, если страница должна быть удалена из индекса;
- сравните несколько вариантов URL с параметрами: они должны вести к одной логике индексации.
Если страница уже была в индексе, удаление может занять время. Это нормально. Важно не усугубить ситуацию новыми дублями, пока поисковик переобходит сайт.
Частые ошибки и как их исправить
Закрыли страницу в robots.txt, но она осталась в индексе
Это ожидаемое поведение. Если URL уже известен поисковику, запрет обхода не гарантирует удаление. В таком случае временно откройте страницу для обхода, поставьте noindex, дождитесь переобхода и только потом решайте, нужен ли robots.txt.
Поставили noindex на все страницы архива
Так часто ломают категории, которые реально приносят трафик. Закрывать нужно только те URL, которые создаются параметрами или не несут самостоятельной ценности. Базовые архивы категорий и тегов закрывать стоит только после анализа спроса и структуры сайта.
Canonical указывает на главную страницу без логики
Это плохая практика. Canonical должен быть максимально близок к исходной сущности. Если фильтр относится к категории, canonical должен вести на эту категорию, а не на главную.
SEO-плагин и тема ставят разные мета-теги
Если в исходном коде два meta robots или два canonical, поисковик может выбрать не тот вариант, который вы ожидаете. В этом случае отключите генерацию мета-тегов в одном из источников: либо в теме, либо в плагине.
Когда лучше не закрывать страницу полностью
Иногда страница отбора полезна как посадочная. Например, если у фильтра есть стабильный спрос, а URL формируется без хаотичных параметров и содержит осмысленный контент. В таком случае лучше не ставить blanket-правило на все параметры, а оставить индексируемыми только те комбинации, которые реально нужны.
Практически это означает: не закрывайте все URL с ? подряд. Начните с аудита, выделите проблемные параметры и только потом добавляйте правила. Иначе можно потерять полезные страницы, которые уже дают переходы из поиска.
Что проверить через неделю после изменений
Через несколько дней или недель, в зависимости от частоты обхода, снова откройте:
- исходный код проблемных страниц;
- отчет по индексированию в Search Console;
- выборку URL с параметрами через
site:и поиск по шаблону; - логи сервера, если нужно понять, продолжает ли бот ходить по закрытым URL.
Если количество дублей не уменьшается, обычно причина одна из трех: canonical не совпадает с реальной структурой, noindex не попадает в HTML, либо URL продолжают генерироваться внутренними ссылками в шаблоне или фильтре. В этом случае править нужно не только SEO-настройки, но и сам механизм вывода ссылок в теме или плагине.