Если на сайте появились десятки или сотни URL с параметрами вроде ?filter=, ?sort=, ?price= или любыми другими вариациями каталога, поисковик начинает тратить краулинговый бюджет на мусорные страницы. В результате в индексе оказываются дубли, а важные посадочные и статьи обходятся реже.
Ниже разберём, как закрыть такие страницы от индексации в WordPress без поломки навигации и как проверить, что решение действительно сработало.
Когда проблема уже видна в поиске и логах
Сначала стоит убедиться, что речь именно о дублях, а не о полезных страницах. Типичный сценарий: в Search Console растёт число URL с параметрами, в отчёте по страницам появляются варианты одной и той же категории, а в логах заметно, что бот регулярно ходит по фильтрам и сортировкам.
Что искать в первую очередь
- URL с параметрами, которые меняют только отображение списка, но не смысл страницы.
- Страницы, где контент почти не отличается от канонической категории или архива.
- Параметры сортировки, пагинации фильтров, внутреннего поиска по каталогу.
- Дубли в sitemap, если плагин или тема добавляют такие URL автоматически.
Если параметр влияет на уникальный коммерческий интент и у страницы есть смысл для индексации, закрывать её вслепую не стоит. Например, отдельные посадочные под популярные фильтры иногда полезнее оставить открытыми, но это уже отдельная SEO-логика.
Какой способ выбрать: плагин, код или robots.txt
Для WordPress есть три рабочих подхода. У каждого свои ограничения, и важно не смешивать их без понимания последствий.
| Способ | Когда подходит | Минус |
|---|---|---|
| SEO-плагин | Нужно быстро закрыть типовые архивы и параметры без кода | Не всегда удобно точечно управлять нестандартными параметрами |
| Код в теме или мини-плагине | Нужна точная логика для конкретных параметров | Требует аккуратной поддержки после обновлений |
robots.txt | Нужно ограничить обход, а не индексацию как таковую | Не гарантирует удаление уже известных URL из индекса |
Если задача именно убрать дубли из индекса, обычно надёжнее ставить noindex на проблемные URL и одновременно следить за каноникалами. robots.txt сам по себе для этого недостаточен: поисковик может знать URL, но не видеть страницу, а значит не всегда корректно обработает сигнал.
Пошаговое решение через noindex для параметров
Самый практичный вариант — добавить мета-тег robots на страницы с нежелательными параметрами. Это можно сделать через wp_head, если логика простая и параметры известны заранее.
<?php
add_action('wp_head', function () {
if (is_admin()) {
return;
}
$blocked_params = ['filter', 'sort', 'price', 'brand'];
foreach ($blocked_params as $param) {
if (isset($_GET[$param]) && $_GET[$param] !== '') {
echo '<meta name="robots" content="noindex,follow">' . "\n";
break;
}
}
});Этот вариант не запрещает обход ссылок на странице, но просит поисковик не индексировать сам URL. Для большинства фильтров и сортировок это именно то, что нужно.
Когда лучше добавить канонический URL
Если фильтр не должен иметь отдельную страницу в индексе, полезно явно указать каноническую версию без параметров. Это помогает поисковику понять, какая страница основная.
<?php
add_action('wp_head', function () {
if (is_admin()) {
return;
}
$blocked_params = ['filter', 'sort', 'price', 'brand'];
$has_blocked_param = false;
foreach ($blocked_params as $param) {
if (isset($_GET[$param]) && $_GET[$param] !== '') {
$has_blocked_param = true;
break;
}
}
if (!$has_blocked_param) {
return;
}
$canonical = home_url(add_query_arg([], $GLOBALS['wp']->request));
$canonical = strtok($canonical, '?');
echo '<link rel="canonical" href="' . esc_url($canonical) . '" />' . "\n";
});Здесь важный момент: каноникал должен вести на реальную чистую версию страницы, а не на случайно собранный URL. Если на сайте уже есть SEO-плагин, проверьте, не конфликтует ли он с вашим кодом и не выводит ли свой canonical одновременно.
Как закрыть только технические параметры, не трогая полезные страницы
На практике лучше не блокировать всё подряд. Например, параметр ?page=2 или пагинация архива — это не то же самое, что сортировка по цене. Если закрыть пагинацию бездумно, можно сломать обход больших разделов.
Ниже пример более точечной логики: закрываем только набор параметров, которые меняют выдачу без добавления уникального контента.
<?php
function wpinfo_should_noindex_filtered_url(): bool {
if (is_admin()) {
return false;
}
$params = [
'filter',
'sort',
'price',
'brand',
'color',
'size',
];
foreach ($params as $param) {
if (!empty($_GET[$param])) {
return true;
}
}
return false;
}
add_action('wp_head', function () {
if (wpinfo_should_noindex_filtered_url()) {
echo '<meta name="robots" content="noindex,follow">' . "\n";
}
});Если у вас фильтры строятся не через query string, а через красивые URL, например /catalog/color-red/, тогда проверять нужно уже is_tax(), is_post_type_archive() или конкретные rewrite-правила. В таком случае логика будет зависеть от структуры сайта.
Проверка результата после внедрения
После правки не ограничивайтесь визуальной проверкой страницы в браузере. Нужно убедиться, что поисковик видит именно те сигналы, которые вы добавили.
- Откройте URL с параметром и проверьте исходный код страницы.
- Убедитесь, что в
<head>есть<meta name="robots" content="noindex,follow">. - Проверьте, что canonical указывает на чистую версию URL.
- Посмотрите, не дублируется ли мета-тег из SEO-плагина.
- В Search Console отправьте проверку URL и отслеживайте статус индексации.
Если используете кэш, обязательно очистите его после изменения кода. Иначе в браузере и у бота может ещё какое-то время отдаваться старая версия страницы без нужных тегов.
Что считать нормальным результатом
Сразу исчезновение URL из индекса не гарантируется. Для уже проиндексированных страниц поисковику нужно время, чтобы переобойти их и обработать новые сигналы. Но вы должны увидеть, что:
- новые параметры перестают попадать в индекс;
- в отчётах уменьшается число дублей;
- бот реже тратит ресурсы на бесполезные вариации;
- основные категории и статьи обходятся стабильнее.
Частые ошибки и как их исправить
Закрыли в robots.txt, но дубли остались
Это частая ошибка. Запрет на обход не равен удалению из индекса. Если URL уже известен поисковику, он может продолжать показываться как отдельная страница без полноценной переоценки. Для дублей нужен noindex или корректный canonical, а не только Disallow.
Поставили noindex на всё подряд
Иногда под фильтры попадают и полезные страницы, которые реально приводят трафик. Перед массовым закрытием проверьте, какие параметры используются для посадочных страниц, и не смешивайте их с техническими сортировками.
Конфликт с SEO-плагином
Если плагин уже выводит canonical или управляет robots-мета, ваш код может создать дублирующиеся теги. В таком случае лучше либо настроить плагин, либо перенести логику в одно место. Два разных источника мета-тегов в <head> — плохая идея.
Кэш не обновился
После внедрения изменения часто не видны из-за серверного кэша, page cache или CDN. Очистите все уровни кэша и проверьте страницу в режиме инкогнито, а ещё лучше — через view-source: или curl.
Безопасность и поддержка решения
Если вы добавляете код вручную, не правьте functions.php активной темы без бэкапа. Лучше вынести логику в мини-плагин или в дочернюю тему, чтобы не потерять изменения при обновлении.
Для сайтов с большим количеством параметров удобнее держать список в одном месте и документировать, какие из них можно индексировать, а какие нет. Это снижает риск случайно закрыть важные URL после очередного релиза.
Если нужен более широкий набор инструментов для чистки дублей, технической оптимизации и управления SEO-сигналами в WordPress, можно посмотреть Clearfy Pro: https://wpshop.ru/plugins/clearfy. Но даже с плагином полезно понимать, какие именно URL вы закрываете и почему.
В итоге рабочая схема обычно выглядит так: определить проблемные параметры, поставить noindex,follow, при необходимости добавить canonical, очистить кэш и проверить результат в исходнике и Search Console. Это проще, чем потом разбирать индекс из десятков дублей, которые появились из-за одной лишней сортировки.