Дубли в WordPress чаще всего появляются не из-за «плохого SEO», а из-за нормальной работы темы, архивов и фильтров. Пагинация, сортировка, параметры в URL, страницы поиска и служебные варианты одной и той же выборки могут создавать десятки адресов с почти одинаковым содержимым. Для поисковика это шум, для сайта — лишняя индексация и размывание веса.
Ниже разберём именно практический сценарий: как найти такие дубли, что закрывать от индексации, что оставлять, и как не сломать навигацию и фильтрацию на сайте.
Когда проблема действительно есть
Сначала стоит убедиться, что речь не о нормальной пагинации, а о дублях, которые не несут самостоятельной ценности. Типичные признаки:
- в индексе есть страницы вида
/page/2/,/page/3/, хотя они повторяют список записей без уникального контента; - URL с параметрами
?sort=,?filter=,?orderby=создают отдельные страницы в поиске; - один и тот же архив доступен по нескольким адресам: с
wwwи без, с конечным слешем и без него, через категории и теги одновременно; - в Search Console растёт число «Просканировано, но не проиндексировано» для страниц, которые не должны конкурировать друг с другом;
- в логах или аналитике видно много заходов на URL с параметрами, но они не дают трафика и не конвертируют.
Что не стоит считать дублем
Пагинация архива сама по себе не всегда проблема. Если на второй и следующих страницах есть уникальные записи, а не повтор первого экрана, закрывать их от индексации бездумно не нужно. То же касается фильтров, если они реально создают полезные посадочные страницы и вы готовы их поддерживать как отдельные URL.
Диагностика: где именно рождаются дубли
Удобнее идти от источника. В WordPress дубли обычно создают три слоя: тема, плагины и правила индексации.
Проверьте архивы и пагинацию
Откройте несколько страниц категории, тега или блога:
/category/news//category/news/page/2//tag/some-tag/
Если title, canonical и основной контент у них одинаковые или почти одинаковые, это кандидат на доработку. Особенно часто проблема встречается в темах, где пагинация выводит тот же шаблон без изменения мета-данных.
Проверьте параметры в URL
Фильтры и сортировки обычно добавляют параметры к адресу. Например:
https://example.com/blog/?sort=popularhttps://example.com/catalog/?filter_color=red&orderby=dateЕсли такие страницы индексируются, поисковик начинает воспринимать их как отдельные документы, хотя это просто варианты одной выборки.
Посмотрите, что уже делает SEO-плагин
Если у вас установлен SEO-плагин, проверьте:
- какой canonical он ставит на страницы с параметрами;
- не закрывает ли он пагинацию слишком агрессивно;
- не добавляет ли в sitemap URL, которые вы не хотите индексировать;
- не конфликтует ли его логика с настройками темы.
Если плагин уже умеет убрать часть дублей, не нужно дублировать это кодом в теме. Сначала проверьте результат в HTML и в ответах сервера.
Что делать: рабочая схема без лишних рисков
Для большинства сайтов безопаснее не удалять страницы физически, а управлять индексацией и canonical. Это сохраняет навигацию для пользователей и убирает лишний шум для поиска.
| Подход | Когда подходит | Минус |
|---|---|---|
| SEO-плагин | Нужно быстро закрыть стандартные архивы и параметры | Не всегда гибко для нестандартных фильтров |
| Код в теме/плагине | Есть свои параметры, кастомные архивы, особые правила | Нужно тестировать после обновлений |
| Комбинированный вариант | Часть дублей закрывает плагин, часть — код | Важно не задвоить логику |
1. Закройте от индексации служебные параметры
Если у вас есть параметры, которые меняют только сортировку или внешний вид, но не создают отдельную ценность, их лучше исключить из индексации. В WordPress это можно сделать через wp_robots, если нужно добавить noindex для конкретных условий.
<?php
add_filter('wp_robots', function ($robots) {
if (is_search() || is_paged()) {
$robots['noindex'] = true;
$robots['nofollow'] = true;
}
if (!empty($_GET['sort']) || !empty($_GET['orderby']) || !empty($_GET['filter_color'])) {
$robots['noindex'] = true;
$robots['nofollow'] = true;
}
return $robots;
});Этот пример рабочий, но применять его нужно аккуратно. Если у вас есть страницы с параметрами, которые должны индексироваться, не закрывайте их по шаблону «всё, что содержит GET-параметр».
2. Нормализуйте canonical для страниц с параметрами
Если URL с параметрами не должен быть отдельной страницей, canonical должен указывать на чистую версию адреса. В большинстве случаев это делает SEO-плагин, но если нужно точечно поправить поведение, можно использовать фильтр wpseo_canonical в Yoast SEO или аналогичный механизм в другом плагине. Если вы не привязаны к конкретному плагину, проще не вмешиваться в canonical вручную без необходимости.
Практически полезнее убрать сами параметры из ссылок в шаблоне, если они не нужны пользователю. Например, сортировку можно оставить только на клиентской стороне или в интерфейсе, но не генерировать отдельные индексируемые URL.
3. Уберите лишние URL из sitemap
Если в sitemap попадают архивы, которые вы не хотите продвигать, их нужно исключить на уровне SEO-плагина или генератора карты сайта. Для кастомных типов записей и таксономий это особенно важно: иногда карта сайта продолжает отдавать старые разделы даже после изменения логики шаблона.
Если вы используете собственную генерацию sitemap, проверьте, что туда не попадают:
- страницы поиска;
- архивы с параметрами;
- технические URL сортировки;
- дубли категорий и тегов, если они не нужны для индексации.
Если дубли создаёт ваш код фильтрации
Часто проблема не в WordPress как таковом, а в том, как реализован фильтр. Например, когда фильтрация категорий или меток строится через GET-параметры и каждый вариант получает отдельный URL без canonical и noindex.
Ниже пример, как можно обработать параметры безопаснее: оставить фильтрацию для пользователя, но не плодить индексируемые страницы.
<?php
add_action('template_redirect', function () {
if (is_admin()) {
return;
}
$has_filter = !empty($_GET['filter_color']) || !empty($_GET['filter_size']);
if ($has_filter) {
add_filter('wp_robots', function ($robots) {
$robots['noindex'] = true;
$robots['nofollow'] = true;
return $robots;
});
}
});Такой подход подходит для страниц, где фильтр нужен только как инструмент навигации. Если же фильтр формирует полноценные посадочные страницы, лучше делать их отдельными ЧПУ-адресами и наполнять уникальным контентом, а не оставлять в виде параметров.
Пошаговая настройка: что сделать на сайте
- Соберите список URL с параметрами из Search Console, логов или аналитики.
- Разделите их на полезные и технические.
- Для технических вариантов добавьте
noindexи проверьте canonical. - Исключите такие URL из sitemap.
- Проверьте шаблоны архива, чтобы title и description не повторялись на всех страницах пагинации.
- Если фильтр генерирует мусорные URL, измените логику генерации ссылок.
Проверка результата после внедрения
После правок не ограничивайтесь визуальной проверкой. Нужны минимум три проверки.
- Исходный код страницы. Убедитесь, что на технических URL есть
noindexи корректный canonical. - XML sitemap. Проверьте, что лишние URL исчезли из карты сайта.
- Search Console. Посмотрите, уменьшается ли число дублей и служебных страниц в отчётах об индексировании.
Если у вас есть доступ к серверным логам, полезно посмотреть, продолжают ли поисковые боты активно ходить по старым параметрическим URL. Если да, значит, где-то остались внутренние ссылки или sitemap всё ещё отдаёт лишние адреса.
Частые ошибки и как их исправить
Ставят noindex на всё подряд
Иногда закрывают от индексации и пагинацию, и полезные фильтры, и даже нормальные архивы. В результате сайт теряет страницы, которые могли бы приносить трафик. Исправление простое: сначала определите, какие URL реально дублируют друг друга, а какие являются самостоятельными посадочными.
Удаляют страницы физически вместо настройки индексации
Если удалить URL, на который уже ведут внутренние ссылки, получите 404 или цепочки редиректов. Для дублей чаще нужен не delete, а canonical, noindex и корректная карта сайта.
Не проверяют тему после обновления
После обновления темы или плагина шаблон архива может снова начать выводить лишние параметры или менять canonical. Поэтому после обновлений стоит быстро перепроверить несколько типовых URL вручную.
Оставляют в sitemap всё, что генерируется автоматически
Автоматическая генерация карты сайта удобна, но не должна быть слепой. Если в sitemap попадают URL с сортировкой и фильтрами, поисковик будет тратить обход на мусорные страницы.
Практические советы по безопасности и производительности
Чем меньше лишних URL вы отдаёте поисковым роботам, тем меньше бесполезной нагрузки на сайт. Это не даст магического ускорения, но сократит число запросов к страницам, которые не должны индексироваться.
- не генерируйте отдельные страницы под каждый параметр, если они не нужны как посадочные;
- не храните логику фильтрации только в JS без серверной валидации, если параметры влияют на выборку;
- проверяйте, не создаёт ли плагин фильтрации бесконечные комбинации URL;
- следите, чтобы редиректы не образовывали цепочки из нескольких шагов;
- если используете SEO-плагин вроде Clearfy Pro, проверьте его настройки для дублей, sitemap и служебных страниц, но не включайте всё подряд без теста.
Если после правок вы видите, что нужные страницы перестали индексироваться, откатите только последний слой изменений: сначала код, потом настройки плагина, затем шаблоны темы. Так проще понять, где именно сломалась логика.
В итоге задача сводится не к «удалить все дубли», а к тому, чтобы оставить поисковику только те URL, которые действительно должны конкурировать за индекс. Для WordPress это обычно решается комбинацией настройки canonical, noindex для технических вариантов и аккуратной фильтрации ссылок в теме.