Если на сайте появились десятки URL с одинаковым контентом, но разными параметрами в адресе, проблема обычно не в «плохом SEO», а в том, как WordPress и тема генерируют ссылки, фильтры и служебные страницы. Типичный пример: ?sort=price, ?utm_source=..., ?replytocom=..., страницы поиска, архивы тегов и пагинация. Часть таких URL должна оставаться доступной пользователю, но не обязана попадать в индекс.
Задача здесь не в том, чтобы без разбора поставить noindex на всё подряд. Нужно разделить сценарии: что должно индексироваться, что должно быть доступно, а что лучше склеить через canonical или закрыть от индексации точечно. Иначе легко потерять нужные страницы или получить хаос в отчётах поисковиков.
Как понять, что проблема именно в дублях от параметров
Сначала проверьте, какие URL реально создаются на сайте. В Google Search Console это видно по страницам с параметрами, а в логике самого сайта — по шаблонам ссылок в меню, фильтрах, хлебных крошках и внутренних ссылках. Если одна и та же сущность открывается по нескольким адресам, поисковик выбирает канонический вариант не всегда так, как вам нужно.
Признаки, которые стоит проверить вручную
- одинаковый title и H1 у URL с разными параметрами;
- страницы поиска вида
/search/...индексируются без пользы; - в выдаче появляются URL с
?replytocom=или UTM-параметрами; - фильтры в каталоге создают отдельные страницы без уникального контента;
- в отчётах много страниц с низким качеством и почти одинаковым текстом.
Если у вас уже есть статья про дубли страниц, не дублируйте решение механически. Здесь важен именно сценарий с параметрами и фильтрами: один URL должен быть основным, остальные — либо склеены, либо исключены из индекса, либо вообще не создаваться как отдельные страницы.
Что выбрать: canonical, noindex или запрет в robots.txt
У каждого инструмента своя задача. canonical подсказывает поисковику основной адрес. noindex говорит не включать страницу в индекс. robots.txt ограничивает обход, но не решает вопрос индексации уже известных URL. Поэтому не стоит закрывать всё через robots и ждать, что проблема исчезнет сама.
| Подход | Когда использовать | Плюс | Минус |
|---|---|---|---|
| canonical | Для дублей с тем же содержимым | Склеивает сигналы на основной URL | Не всегда игнорирует поисковик |
| noindex, follow | Для служебных и малополезных страниц | Страница не попадает в индекс | Нужно убедиться, что мета-тег реально отдается |
| robots.txt | Для снижения обхода мусорных URL | Сокращает нагрузку на обход | Не удаляет URL из индекса сам по себе |
Практически всегда рабочая схема такая: для страниц фильтров и поиска — noindex, follow или каноникал на основную категорию; для параметров сортировки и UTM — каноникал на чистый URL; для совсем мусорных адресов — не генерировать их в ссылках и дополнительно ограничить обход.
Пошаговая настройка canonical и noindex в WordPress
Если тема или SEO-плагин уже умеют ставить каноникал, сначала проверьте их настройки. Вручную код нужен только там, где стандартных опций не хватает. Ниже — рабочий вариант для дочерней темы или небольшого mu-plugin.
1. Убираем лишние параметры из canonical
Этот пример очищает UTM и часть служебных параметров, чтобы canonical указывал на чистый адрес. Он не трогает саму страницу, а только корректирует канонический URL.
<?php
add_filter('get_canonical_url', function ($canonical, $post) {
if (empty($canonical)) {
return $canonical;
}
$remove = array(
'utm_source',
'utm_medium',
'utm_campaign',
'utm_term',
'utm_content',
'replytocom',
);
$canonical = remove_query_arg($remove, $canonical);
return $canonical;
}, 10, 2);Это полезно, если ссылки с метками попадают в индекс или если тема сама строит canonical с параметрами. Но не используйте такой код вслепую на страницах, где параметр реально меняет контент, например на некоторых фильтрах каталога.
2. Ставим noindex для поиска и служебных страниц
Для внутренних поисковых страниц и похожих служебных URL чаще всего нужен noindex, follow. Так поисковик не индексирует саму страницу, но может пройти по ссылкам дальше.
<?php
add_filter('wp_robots', function (array $robots) {
if (is_search()) {
$robots['noindex'] = true;
$robots['follow'] = true;
}
if (isset($_GET['replytocom'])) {
$robots['noindex'] = true;
$robots['follow'] = true;
}
return $robots;
});Если вы используете SEO-плагин, проверьте, не дублирует ли он этот тег. Два разных набора robots-мета на одной странице — частая причина путаницы. В исходном коде должен быть один понятный вариант.
3. Закрываем от индексации страницы фильтров точечно
Для архивов с фильтрами логика зависит от того, создают ли они полезные посадочные страницы. Если фильтр просто меняет сортировку или добавляет технический параметр, индексировать его не нужно. Если же фильтр формирует полноценную посадочную страницу с уникальным спросом, лучше делать отдельный ЧПУ-адрес, а не параметр.
<?php
add_filter('wp_robots', function (array $robots) {
if (is_tax('product_cat') && !empty($_GET['sort'])) {
$robots['noindex'] = true;
$robots['follow'] = true;
}
return $robots;
});Здесь важно не переборщить: если параметр sort влияет только на порядок товаров или записей, noindex обычно оправдан. Но если это не сортировка, а отдельная смысловая выборка, лучше пересмотреть структуру URL.
Диагностика после внедрения: как проверить, что всё сработало
Проверка нужна не только в браузере, но и в исходном коде страницы. Откройте проблемный URL и убедитесь, что canonical ведёт на чистый адрес, а в <head> нет лишних robots-мета. Затем проверьте ответ сервера и индексируемость через инструменты поисковика.
- в исходнике страницы есть один canonical без мусорных параметров;
- для поиска и служебных страниц отдается
noindex, follow; - в Search Console URL с параметрами не растут как отдельные важные страницы;
- внутренние ссылки на сайт ведут на чистые адреса;
- страницы, которые должны индексироваться, не получили случайный noindex.
Для быстрой проверки удобно сравнить заголовки и HTML-ответ. Например, если страница отдает canonical на себя, а вы ожидали склейку, значит фильтр не сработал или его перебивает тема/плагин.
Частые ошибки и как их исправить
Ставят noindex на всё подряд
Так часто делают после первого всплеска дублей. В итоге из индекса исчезают полезные категории, пагинация или страницы, которые реально приводили трафик. Исправление простое: разделите типы URL и задайте правила отдельно для каждого сценария.
Пытаются решить проблему только robots.txt
Robots.txt полезен для экономии обхода, но не заменяет canonical и noindex. Если URL уже известен поисковику, запрет обхода не гарантирует его исчезновение из индекса. Для удаления из индекса нужен другой механизм.
Не учитывают плагины кэширования и SEO
Иногда код добавили правильно, но в кэше лежит старая версия head. После правок очистите кэш страницы, объектный кэш и CDN, если он есть. Иначе вы будете проверять не ту версию HTML.
Оставляют в ссылках UTM и replytocom внутри сайта
Если такие параметры попадают во внутренние ссылки, они начинают размножаться по всему сайту. Лучше исправить генерацию ссылок в теме, чем потом лечить последствия на уровне индексации.
Если фильтры генерирует плагин или тема
Когда параметры создаёт не ваш код, а плагин фильтрации, сначала ищите его встроенные настройки SEO. Многие решения позволяют отключить индексацию параметров, задать каноникал или скрыть технические страницы. Если такой опции нет, тогда уже имеет смысл вмешиваться через фильтры WordPress или дорабатывать шаблон вывода.
Если нужен более системный подход к чистке сайта, SEO-меткам и служебным страницам, иногда проще собрать это в одном месте, чем держать набор разрозненных правок. Из готовых инструментов для WordPress в таких задачах часто используют Clearfy Pro: https://wpshop.ru/plugins/clearfy. Но даже с плагином всё равно стоит проверить, какие именно URL он меняет и не конфликтует ли это с вашей темой.
Мини-чек-лист перед публикацией правок
- проверили, какие параметры реально создают дубль;
- для мусорных параметров настроили canonical на чистый URL;
- для поиска и служебных страниц включили noindex, follow;
- убрали внутренние ссылки с UTM и replytocom;
- очистили кэш и перепроверили исходный HTML;
- сравнили поведение на мобильной и десктопной версии, если шаблоны разные.
Если после внедрения в индекс всё равно попадают нежелательные URL, не добавляйте ещё один слой запретов наугад. Сначала найдите источник генерации ссылок: тема, плагин фильтра, виджет, меню или ручные ссылки в контенте. В WordPress именно источник дубля обычно важнее, чем способ его «прикрыть».