Если в индексе появляются одинаковые страницы с разными URL, проблема обычно не в контенте, а в параметрах запроса, фильтрах, сортировках и служебных страницах поиска. Для WordPress это типичный сценарий: один и тот же материал доступен как обычная запись, как версия с ?utm_, как результат поиска, как страница с параметром сортировки или как архив с фильтром плагина.
Ниже разберём, как быстро найти такие дубли, чем их закрывать и как проверить, что сайт не потерял нужные страницы из индекса.
Как понять, что у вас именно дубли URL, а не проблема индексации
Сначала стоит отделить дубли от обычной задержки обхода. Если страница открывается по нескольким адресам и при этом контент совпадает, поисковик видит несколько кандидатов на индексацию. Это особенно заметно, когда:
- в URL есть параметры
?sort=,?filter=,?page=,?utm_; - поиск по сайту отдаёт индексируемые страницы вида
/search/...; - архивы тегов, авторов или дат дублируют основной контент;
- плагин фильтрации строит отдельные URL для каждого сочетания опций;
- одна и та же запись доступна с разными слешами, регистром или через http/https.
Быстрая диагностика вручную
Проверьте несколько адресов одной и той же страницы:
https://example.com/post-name/?utm_source=test<br>https://example.com/post-name/?sort=price<br>https://example.com/search/query/<br>https://example.com/tag/keyword/Если контент совпадает, а title, canonical или robots отличаются не так, как вы ожидаете, это уже повод править правила индексации.
Полезно посмотреть:
- какой URL указан в
<link rel="canonical">; - не закрыта ли страница случайно через
noindex; - не создаёт ли плагин SEO или фильтрации отдельный индексируемый URL для каждого параметра.
Что закрывать, а что оставлять в индексе
Не все страницы с параметрами нужно рубить под корень. Иногда параметр полезен для пользователя, но не должен становиться отдельной страницей в поиске. В таких случаях обычно достаточно canonical на основную версию. Если же URL вообще не несёт самостоятельной ценности, лучше добавить noindex,follow или запретить его генерацию на уровне шаблона.
| Сценарий | Что делать | Компромисс |
|---|---|---|
| UTM-метки и служебные параметры | Canonical на чистый URL | Не ломает аналитику |
| Поиск по сайту | noindex,follow | Страница доступна пользователю, но не индексируется |
| Фильтры каталога или архива | Canonical на базовый архив или noindex | Зависит от того, есть ли спрос на фильтрованные страницы |
| Технические параметры сортировки | Удалить из индекса и не строить ссылки без необходимости | Лучше решать на уровне шаблона и плагина |
Пошаговое решение: canonical, meta robots и правила для параметров
1. Уберите мусорные параметры из ссылок, где это возможно
Если вы сами добавляете UTM или сортировку в внутренние ссылки, это лучше исправить в шаблоне или в логике генерации ссылок. Чем меньше лишних параметров в навигации, тем меньше дублей появится.
Для внешних меток это не всегда возможно, поэтому нужен второй слой защиты — canonical.
2. Добавьте canonical для страниц с параметрами
Если страница открыта с параметрами, но её основа та же, canonical должен указывать на чистый URL. В WordPress это можно сделать через фильтр wpseo_canonical, если у вас используется Yoast SEO, или через собственный вывод в wp_head, если вы контролируете шаблон.
Пример для темы или мини-плагина: canonical для страниц с UTM и сортировкой возвращает базовый адрес без query string.
<?php<br>add_action('wp_head', function () {<br> if (is_admin()) {<br> return;<br> }<br><br> if (empty($_SERVER['REQUEST_URI'])) {<br> return;<br> }<br><br> $url = home_url(add_query_arg([], $GLOBALS['wp']->request ?? ''));<br> $path = strtok($_SERVER['REQUEST_URI'], '?');<br> $canonical = home_url(untrailingslashit($path));<br><br> if (!empty($_GET)) {<br> echo '<link rel="canonical" href="' . esc_url($canonical) . '" />' . "\n";<br> }<br>}, 1);Это упрощённый вариант. В реальном проекте лучше не дублировать canonical, если SEO-плагин уже выводит его сам. Иначе можно получить два тега canonical на странице.
3. Закройте поиск и служебные страницы от индексации
Страницы поиска обычно не должны конкурировать с основным контентом. Для них безопаснее использовать noindex,follow. В WordPress это можно сделать через wp_robots:
<?php<br>add_filter('wp_robots', function (array $robots) {<br> if (is_search()) {<br> $robots['noindex'] = true;<br> $robots['follow'] = true;<br> }<br><br> return $robots;<br>});Если у вас отдельные архивы тегов или авторов дают дубли, подход тот же: закрывайте только те типы архивов, которые не несут самостоятельной ценности.
4. Для параметров фильтрации используйте whitelist
Если фильтр строит десятки комбинаций URL, не стоит пытаться закрывать их по одному. Лучше ограничить набор допустимых параметров и не создавать индексируемые ссылки на лишние комбинации. На уровне обработки запроса можно проверять параметры и редиректить мусорные варианты на базовую страницу.
<?php<br>add_action('template_redirect', function () {<br> if (is_admin() || wp_doing_ajax()) {<br> return;<br> }<br><br> $allowed = ['sort', 'filter'];<br> $query_keys = array_keys($_GET);<br> $extra = array_diff($query_keys, $allowed, ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content']);<br><br> if (!empty($extra) && is_singular()) {<br> wp_safe_redirect(get_permalink(), 301);<br> exit;<br> }<br>});Этот пример не универсален, но показывает логику: если параметр не нужен для отдельной страницы, не давайте ему жить как самостоятельному URL.
Проверка результата после внедрения
После правок не ограничивайтесь открытием страницы в браузере. Нужно проверить три вещи: canonical, robots и ответ сервера на старые URL.
- Откройте страницу с параметром и посмотрите исходный код: canonical должен вести на чистый URL.
- Проверьте, что для поиска и нежелательных архивов есть
noindex. - Убедитесь, что мусорные параметры не создают отдельные 200-страницы без необходимости.
- Проверьте старые адреса в Search Console и в логах обхода, если они доступны.
Если вы делали редирект, ответ должен быть 301 на основную страницу. Если вы оставили страницу доступной, но закрыли от индексации, код ответа должен оставаться 200, а в robots должна быть директива noindex.
Частые ошибки и как их исправить
Canonical указывает на саму себя с параметрами
Это частая ошибка, когда canonical собирается из текущего URL без очистки query string. В итоге поисковик видит не канонический адрес, а ещё одну версию дубля. Исправление простое: canonical должен строиться от базового URL без параметров.
Одновременно стоит редирект и noindex
Если вы отдаёте 301 на основную страницу, noindex на исходной странице уже не нужен. Для поисковика важнее редирект, а лишняя комбинация только усложняет диагностику.
Закрыли важные страницы фильтрации
Иногда фильтрованные страницы реально нужны для поиска и трафика. Если у них есть спрос и уникальная ценность, не закрывайте их автоматически. Сначала проверьте, есть ли у таких страниц отдельный контент, заголовок и стабильный спрос в аналитике.
Получилось два canonical на одной странице
Это бывает, когда SEO-плагин уже выводит canonical, а вы добавили свой код в wp_head. Оставьте только один источник правды: либо плагин, либо тема/мини-плагин.
Что делать для безопасности и производительности
Чем меньше лишних URL генерирует сайт, тем проще ему жить под нагрузкой. Это не только про SEO, но и про сервер: меньше обхода мусорных страниц, меньше бесполезных запросов к базе, меньше шансов, что фильтр начнёт плодить сотни вариантов.
Если у вас сложная структура архивов и фильтров, имеет смысл вынести часть правил в отдельный SEO-плагин или использовать набор инструментов для чистки дублей и служебных страниц. Например, Clearfy Pro часто используют именно для таких задач, когда нужно централизованно управлять дублями, мета-тегами и техническими настройками: Clearfy Pro.
Но даже с плагином полезно держать ручную проверку: плагин не знает, какие фильтры у вас реально нужны, а какие только создают шум в индексе.
Мини-чек-лист перед публикацией правок
- canonical на параметрических страницах ведёт на чистый URL;
- поиск и служебные архивы закрыты через
noindex,followтам, где это уместно; - лишние параметры не создают отдельные индексируемые страницы;
- нет двух canonical на одной странице;
- старые дубли либо редиректятся 301, либо корректно закрыты от индексации;
- в Search Console не растёт число мусорных URL после изменений.
Если после внедрения правила начали ломать нужные страницы, откатите только последний слой: сначала редиректы, затем robots, затем canonical. Так проще понять, где именно была ошибка в логике.