Фасетная навигация, сортировки, фильтры по параметрам и поисковые URL с query string часто создают в WordPress десятки и сотни дублей. Для пользователя это удобный инструмент, а для поисковика — лишние адреса с одинаковым или почти одинаковым контентом. Проблема обычно проявляется не сразу: сначала растёт число страниц в индексе, потом в отчётах появляются дубли заголовков, а затем часть важных URL начинает проигрывать по каннибализации.
Ниже разберём, как диагностировать источник дублей, что закрывать от индексации, а что оставлять доступным для обхода, и как проверить, что решение действительно сработало.
Как понять, что дубли уже есть
Сначала не трогайте код и robots.txt. Сначала посмотрите, какие URL реально попали в индекс и откуда они взялись. В WordPress дубли чаще всего появляются из-за:
- параметров фильтрации вроде
?color=red,?size=m; - сортировок вроде
?orderby=price; - страниц пагинации с параметрами;
- поисковых страниц вида
?s=...; - дублирующих архивов таксономий и тегов;
- параметров UTM, если они не отсечены на уровне SEO-плагина или сервера.
Что смотреть в первую очередь
- отчёт «Страницы» в Google Search Console;
- список URL с параметрами в логах сервера или аналитике;
site:example.comс параметрами в поиске;- исходный код страниц: есть ли на дублях
canonical,noindexи не ломается ли пагинация.
Если у вас уже есть SEO-плагин, проверьте, не создаёт ли он отдельные архивы для тегов, авторов, дат и медиа-вложений. В связке с фильтрами это часто даёт лишний слой дублей.
Что закрывать, а что не трогать
Не все параметры одинаково вредны. Ошибка многих сайтов — закрыть всё подряд в robots.txt, а потом обнаружить, что поисковик не может нормально пройти по важным страницам. Для фасетной навигации лучше разделять сценарии.
| Тип URL | Что делать | Комментарий |
|---|---|---|
| Фильтры с параметрами | noindex, follow или canonical на основную категорию | Если фильтр не несёт самостоятельного спроса |
| Сортировки | обычно canonical на базовую страницу | Индексировать сортировки почти всегда бессмысленно |
| Поиск по сайту | noindex | Поисковые выдачи редко нужны в индексе |
| UTM и служебные параметры | не индексировать, не плодить отдельные URL | Лучше чистить на уровне каноникализации |
| Страницы с уникальным спросом | оставить индексируемыми | Если фильтр реально отвечает на отдельный запрос |
Если фильтр создаёт полноценную посадочную страницу с уникальным текстом, хлебными крошками и стабильным спросом, её можно оставить в индексе. Но это уже не «технический параметр», а отдельная SEO-страница. Всё остальное лучше сводить к одной канонической версии.
Пошаговое решение: canonical, noindex и robots.txt
Самый безопасный путь — не блокировать всё в robots.txt, а сначала убрать дубли из индекса через noindex и canonical. Robots.txt нужен только там, где вы хотите ограничить обход, но не как основной инструмент борьбы с дублями.
1. Добавьте canonical для страниц с параметрами
Если у вас кастомная логика фильтров, можно принудительно указывать канонический URL на основную категорию или архив. Пример для темы или мини-плагина:
<?php
add_action('wp_head', function () {
if (is_admin()) {
return;
}
if (!empty($_GET) && (is_category() || is_tax() || is_post_type_archive())) {
$canonical = get_pagenum_link(1);
echo '<link rel="canonical" href="' . esc_url($canonical) . '" />' . "\n";
}
}, 1);Этот пример грубый и подходит не для всех сайтов. На практике лучше проверять конкретные параметры и типы архивов, чтобы не сломать каноникал для страниц пагинации.
2. Закройте служебные параметры от индексации
Если нужен точечный запрет для страниц поиска и фильтров, можно добавить meta robots через wp_head. Это не замена SEO-плагину, но рабочий вариант для кастомной темы:
<?php
add_action('wp_head', function () {
if (is_search() || isset($_GET['orderby']) || isset($_GET['filter']) || isset($_GET['s'])) {
echo '<meta name="robots" content="noindex,follow" />' . "\n";
}
}, 5);Важно: не ставьте noindex на всё подряд. Если у вас есть страницы пагинации, которые должны передавать вес дальше, follow обычно безопаснее, чем жёсткий запрет обхода.
3. Не используйте robots.txt как единственный барьер
Если вы закроете параметры в robots.txt, поисковик может перестать обходить URL, но уже найденные дубли могут ещё долго висеть в индексе. Кроме того, вы потеряете возможность передавать сигналы через canonical и noindex. В robots.txt имеет смысл закрывать только то, что точно не должно обходиться, например внутренние служебные пути, а не все URL с параметрами.
User-agent: *
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php
Disallow: /?s=
Disallow: /*?orderby=
Disallow: /*?filter=
Этот пример нужно адаптировать под ваш сайт. Слишком широкие правила могут задеть полезные страницы или не сработать так, как ожидается, в зависимости от структуры URL и сервера.
Если фильтры генерируются плагином
Когда фасетная навигация сделана плагином, лучше искать настройку индексации в самом плагине, а не лечить симптомы кодом. У многих решений есть опции для:
- отключения индексации параметров;
- генерации canonical;
- скрытия фильтров от поисковых роботов;
- управления URL для сортировок и пагинации.
Если плагин создаёт слишком много дублей и не умеет нормально управлять мета-тегами, иногда проще заменить его на более предсказуемое решение или перенести часть логики в таксономии и отдельные посадочные страницы.
Когда лучше использовать SEO-плагин
Если у вас уже стоит плагин уровня Clearfy Pro, часть задач можно закрыть без кастомного кода: убрать дубли архивов, отключить лишние типы страниц, почистить служебные URL и настроить технические мета-теги. Это полезно, когда дублей много и они идут не только от фильтров, но и от стандартных архивов WordPress.
Но даже в этом случае проверяйте результат вручную: плагин может скрыть проблему в интерфейсе, но не решить её на уровне конкретных URL.
Проверка результата после внедрения
После правок не ограничивайтесь открытием пары страниц в браузере. Проверьте цепочку целиком:
- у дублей появился
noindex,followили корректный canonical; - основная категория осталась индексируемой;
- пагинация не потеряла доступность;
- в Search Console уменьшается число URL с параметрами;
- в индексе не растут страницы поиска и сортировок.
Практический чек-лист:
- откройте URL с параметром и посмотрите исходный код;
- проверьте HTTP-ответ через
curl -Iили DevTools; - сравните canonical на основной странице и на дубле;
- убедитесь, что страница не закрыта случайно через
X-Robots-Tagна сервере; - посмотрите, не исчезли ли из индекса важные посадочные страницы.
curl -I "https://example.com/category/shoes/?orderby=price"
Если сервер или плагин отдаёт заголовок X-Robots-Tag: noindex, это тоже нужно учитывать. Иногда разработчик ставит meta robots в шаблоне, а на уровне nginx или Apache уже есть другое правило, которое перекрывает его.
Частые ошибки и как их исправить
Закрыли всё в robots.txt
Это частая ошибка. В результате поисковик перестаёт обходить URL, но дубли уже могут быть в индексе, а canonical и noindex не работают как надо. Исправление: вернуть обход нужных страниц, оставить robots.txt только для действительно служебных путей, а дубли убирать через canonical и meta robots.
Поставили canonical на главную вместо категории
Так делают, когда хотят «обнулить» все параметры. Но если дубль относится к категории, canonical должен указывать на её базовую версию, а не на главную. Иначе вы теряете тематическую релевантность и путаете поисковик.
Закрыли пагинацию вместе с фильтрами
Пагинация и фильтры — не одно и то же. Если закрыть страницы /page/2/ вместе с параметрами, можно ухудшить обход каталога и потерять часть внутренней перелинковки. Исправление: разделить правила для пагинации и для query string.
Оставили индексируемыми страницы поиска
Поиск по сайту часто даёт тонкие страницы с низкой ценностью. Если они индексируются, это почти всегда лишний шум. Исправление: добавить noindex,follow для is_search() и проверить, что шаблон поиска не создаёт отдельные канонические URL с параметрами.
Практика по безопасности и производительности
Чем больше параметров в URL, тем выше нагрузка на кеш и тем сложнее CDN и серверу держать стабильную выдачу. Если фильтры активно используются, полезно:
- нормализовать порядок параметров;
- не генерировать бесконечные комбинации фильтров;
- кешировать результаты фильтрации на уровне страницы или фрагментов;
- не отдавать одинаковый контент по разным URL без canonical;
- следить, чтобы служебные параметры не попадали в sitemap.
Если у вас есть доступ к теме или кастомному плагину, лучше централизовать логику в одном месте, а не размазывать её по шаблонам. Так проще отлаживать и безопаснее обновлять сайт.
Для сайтов, где техническая чистка уже давно нужна, иногда выгоднее сначала убрать дубли и лишние архивы, а потом уже настраивать фильтры. Иначе вы просто ускорите генерацию мусорных URL. В таких сценариях полезно проверить, не создаёт ли текущая тема лишние архивы, теги и медиа-страницы, и отключить их точечно.
Если нужен более системный подход к технической чистке WordPress, можно посмотреть в сторону инструментов, которые помогают убрать дубли и лишние служебные страницы без ручного редактирования каждого шаблона: Clearfy Pro.