На WordPress это типичная история для каталогов, блогов с фильтрами и любых страниц, где URL меняется из-за параметров: ?filter=, ?sort=, ?color=, ?price=. Проблема не в самих параметрах, а в том, что поисковик начинает видеть десятки почти одинаковых страниц, тратит краулинговый бюджет и иногда выбирает в индекс не ту версию.
Если у вас уже есть нормальные посадочные страницы, а фильтры нужны только для пользователей, их лучше закрыть от индексации точечно. Ниже — рабочие варианты: через noindex, через каноникал и через серверную логику для отдельных параметров.
Когда это действительно проблема
Сначала стоит убедиться, что речь именно о мусорных URL, а не о полезных страницах. Фильтры бывают разными: одни создают технические дубли, другие формируют полноценные посадочные страницы, которые стоит индексировать отдельно. Ошибка здесь одна из самых дорогих: закрыть всё подряд и потом потерять трафик на запросах, где фильтр — это уже смысловая страница.
Признаки, что фильтры пора закрывать
- в индексе есть страницы с параметрами, которые не несут отдельной ценности;
- в Search Console растёт число URL с
?sort=,?filter=,?page=и похожими параметрами; - одна и та же страница доступна в нескольких версиях: с фильтром, без фильтра, с сортировкой;
- в выдаче всплывают неканонические URL вместо основной страницы;
- серверные логи показывают много обходов однотипных параметрических адресов.
Что нужно проверить до правок
- какие параметры реально используются на сайте;
- есть ли у фильтров отдельный контент и поисковый спрос;
- не закрывает ли текущая тема или плагин уже часть таких URL;
- какой способ генерации фильтров используется: GET-параметры, AJAX, отдельные архивы, rewrite-правила.
Какой способ выбрать: noindex, canonical или запрет обхода
Для WordPress чаще всего достаточно noindex,follow на параметрических страницах и корректного canonical на основную версию. Но если фильтры генерируют слишком много мусора, иногда имеет смысл ограничить их ещё и на уровне сервера или robots.txt. Важно понимать компромисс: robots.txt не убирает URL из индекса, если на него уже есть ссылки, а noindex работает только когда поисковик может страницу обойти.
| Подход | Когда использовать | Минус |
|---|---|---|
noindex,follow | для параметрических страниц, которые должны открываться пользователю | нужно, чтобы поисковик мог зайти на страницу |
| canonical на основную страницу | для дублей одной и той же страницы | не всегда достаточно, если URL сильно различаются по содержанию |
| robots.txt / серверный запрет | для явно мусорных или опасных параметров | может не удалить уже известные URL из индекса |
Пошаговое решение через wp_head
Если фильтры формируются параметрами в URL, самый предсказуемый вариант — добавить условную мета-роботс-логику. Это не требует стороннего плагина и легко контролируется. Ниже пример для дочерней темы или небольшого mu-plugin.
<?php
add_action( 'wp_head', function () {
if ( is_admin() ) {
return;
}
$blocked_params = array( 'filter', 'sort', 'price', 'color', 'size' );
$has_blocked_param = false;
foreach ( $blocked_params as $param ) {
if ( isset( $_GET[ $param ] ) && $_GET[ $param ] !== '' ) {
$has_blocked_param = true;
break;
}
}
if ( $has_blocked_param ) {
echo '<meta name="robots" content="noindex,follow" />' . "\n";
}
}, 1 );Этот код закрывает от индексации страницы, где есть указанные параметры, но не мешает пользователю пользоваться фильтром. Для поисковика это сигнал: страницу не индексировать, но ссылки на ней можно обходить дальше.
Когда этого недостаточно
Если фильтр меняет не только URL, но и контент страницы настолько, что у каждой комбинации есть смысл, noindex может быть слишком грубым. Тогда лучше выделять ограниченный набор индексируемых посадочных страниц, а остальные комбинации закрывать. Например, индексировать только ?color=black на отдельной SEO-странице, а все остальные сочетания — нет.
Как добавить canonical на основную версию
Для дублей canonical часто полезнее, чем просто запрет индексации. Он помогает поисковику понять, какая версия страницы основная. В WordPress canonical обычно уже выводится ядром или SEO-плагином, но для параметрических URL его стоит уточнить вручную.
<?php
add_filter( 'get_canonical_url', function ( $canonical, $post ) {
if ( is_admin() ) {
return $canonical;
}
$blocked_params = array( 'filter', 'sort', 'price', 'color', 'size' );
foreach ( $blocked_params as $param ) {
if ( isset( $_GET[ $param ] ) && $_GET[ $param ] !== '' ) {
return get_permalink( $post );
}
}
return $canonical;
}, 10, 2 );Здесь canonical для страниц с параметрами принудительно указывает на чистый URL записи или страницы. Это особенно полезно, если фильтры добавляются к категории, архиву или посадочной странице.
Если фильтры создаёт плагин
Многие каталожные плагины уже умеют управлять SEO-логикой. Перед кодом проверьте настройки: иногда там есть отдельные опции для noindex, canonical, AJAX-фильтрации и исключения параметров из индекса. Это безопаснее, чем писать костыли поверх готового решения.
Если нужен более широкий технический аудит дублей, параметров и служебных страниц, в экосистеме WPShop есть Clearfy Pro: https://wpshop.ru/plugins/clearfy. Но использовать его стоит как инструмент для настройки, а не как замену пониманию того, какие URL вы закрываете.
Проверка результата после внедрения
После правок не ограничивайтесь просмотром исходника. Нужно проверить, что поисковик видит именно ту логику, которую вы задали.
Чек-лист проверки
- откройте URL с параметром, например
/catalog/?filter=black; - посмотрите исходный код страницы и убедитесь, что есть
<meta name="robots" content="noindex,follow" />; - проверьте canonical: он должен вести на чистую основную страницу;
- пройдитесь по нескольким комбинациям параметров, чтобы убедиться, что логика не срабатывает на лишних URL;
- в Search Console отправьте проверку URL и посмотрите, как страница определяется после обхода;
- через несколько обходов проверьте, уменьшается ли число параметрических URL в отчётах.
Если используете кэш, обязательно очистите его после внедрения. Иначе вы будете проверять старую версию HTML и решите, что код не работает.
Частые ошибки и как их исправить
Закрыли фильтры в robots.txt
Это частая ошибка. Если URL уже известен поисковику, запрет в robots.txt не гарантирует удаление из индекса. Для уже существующих дублей лучше noindex или canonical, а robots.txt использовать только для явного ограничения обхода.
Поставили noindex на все страницы с GET-параметрами
Так легко убить полезные страницы, например сортировку в каталоге, которую вы хотели оставить, или страницы с UTM, которые не должны влиять на индекс. Фильтровать нужно по конкретным параметрам, а не по факту наличия $_GET.
Canonical указывает на саму параметрическую страницу
Это бывает, если тема или SEO-плагин переопределяет canonical позже вашего кода. Проверьте приоритеты хуков и итоговый HTML. Иногда нужно отключить конфликтующую логику в плагине, а не добавлять ещё один фильтр поверх.
AJAX-фильтр меняет контент, но не URL
В этом случае поисковик видит одну страницу, а пользователь — разные состояния интерфейса. Если фильтр важен для SEO, ему нужен отдельный URL. Если нет — оставляйте AJAX и не пытайтесь индексировать каждую комбинацию.
Что делать с безопасностью и производительностью
Фильтры часто создают лишнюю нагрузку на базу и кэш, особенно если каждая комбинация параметров генерирует отдельную версию страницы. Если у вас высокий трафик, имеет смысл ограничить число индексируемых сочетаний и не плодить бесконечные URL. Это снижает нагрузку на обход и упрощает кэширование.
Ещё один практический момент: не передавайте в фильтры параметры, которые потом напрямую попадают в SQL или в шаблон без экранирования. Даже если это внутренний интерфейс, проверка и приведение типов должны быть на месте. Для параметров вроде price и page используйте явную валидацию, а не доверяйте строке из запроса.
<?php
$price = isset( $_GET['price'] ) ? (int) $_GET['price'] : 0;
$sort = isset( $_GET['sort'] ) ? sanitize_key( wp_unslash( $_GET['sort'] ) ) : '';Такой подход не решает SEO сам по себе, но убирает лишние риски, когда фильтрация строится на пользовательском вводе.
Когда лучше не закрывать фильтр полностью
Если параметрическая страница уже получает переходы из поиска, а контент на ней стабилен и полезен, не спешите ставить на неё noindex. Иногда правильнее сделать отдельную посадочную страницу с ЧПУ, а фильтр оставить как пользовательский инструмент. Это особенно актуально для страниц с устойчивым спросом: цвет, тип, бренд, город, формат услуги.
В таких случаях рабочая схема обычно такая: индексируемая посадочная страница с нормальным URL, а технический фильтр — только для навигации внутри каталога. Тогда поисковик получает чистую структуру, а пользователь — удобный интерфейс.