Дубли в WordPress обычно появляются не из-за одной ошибки, а из-за набора мелких настроек: архивы тегов, страницы пагинации, параметры в URL, версии с www и без, http и https, а иногда и одинаковый контент в записях, рубриках и страницах. Если не разложить проблему по типам, легко начать массово ставить noindex туда, где нужен редирект, или наоборот — склеить то, что должно оставаться отдельной страницей.
Ниже — рабочая схема, которая помогает сначала диагностировать источник дублей, а потом выбрать правильное действие: canonical, noindex, 301-редирект или правку шаблона/плагина.
Как понять, что у вас именно дубли, а не просто похожие страницы
Сначала нужно отличить технические дубли от контентных. Технический дубль — это когда один и тот же материал доступен по разным URL. Контентный — когда разные URL ведут на очень похожие страницы, например, архивы тегов с одинаковыми записями или страницы фильтров, которые почти не отличаются друг от друга.
Что проверить в первую очередь
- открывается ли одна и та же страница по
httpиhttps; - есть ли версия с
wwwи безwww; - не создают ли плагины SEO, фильтров или кэша отдельные URL с параметрами;
- не индексируются ли архивы тегов, авторов, дат и страниц поиска;
- не дублируется ли контент в категориях, рубриках и на статических страницах.
Если у вас есть доступ к Search Console, посмотрите отчеты по страницам с дубликатами и каноническими URL. Если доступа нет, можно быстро проверить руками: откройте несколько подозрительных адресов и сравните исходный код. Важно смотреть не только на визуально одинаковый текст, но и на <link rel="canonical">.
Диагностика: где WordPress чаще всего плодит дубли
В типовом проекте источники дублей повторяются. Это удобно: не нужно искать проблему вслепую, достаточно пройтись по нескольким зонам риска.
Архивы таксономий и служебные страницы
Теги, авторы, даты и страницы поиска часто не несут самостоятельной ценности для поиска, но при этом индексируются. Если на сайте много коротких записей или шаблонных описаний, поисковик может считать такие страницы дублями или почти дублями.
Параметры в URL
UTM-метки, сортировки, фильтры, пагинация и внутренние параметры плагинов могут создавать десятки URL с одним и тем же контентом. Для пользователя это один и тот же материал, для поисковика — разные адреса.
Ошибки темы и плагинов
Иногда дубль появляется не в настройках SEO, а в коде темы. Например, шаблон выводит один и тот же блок контента и на странице записи, и в отдельном кастомном шаблоне архива. Или плагин добавляет собственную страницу-обертку вокруг уже существующего материала.
Что делать: выбрать правильный способ для каждого типа дубля
Не все дубли лечатся одинаково. Если страница должна существовать, но поисковику нужно показать основную версию, используйте canonical. Если страница не должна попадать в индекс, но нужна пользователю, ставьте noindex. Если URL вообще лишний, делайте 301-редирект на основной адрес.
| Сценарий | Что делать | Компромисс |
|---|---|---|
| http/https, www/без www | 301-редирект на одну каноническую версию | Нужно проверить SSL и настройки сервера |
| Параметры сортировки, UTM, фильтры | canonical на основную страницу или noindex,follow | Не всегда подходит для страниц с реальной ценностью |
| Архивы тегов, авторов, дат | noindex или отключение индексации | Можно потерять полезный трафик, если архивы хорошо проработаны |
| Полный дубль одной записи | 301-редирект на основной URL | Нужно сохранить внутренние ссылки и аналитику |
Пошаговое решение без лишних правок
Шаг 1. Зафиксируйте основную версию сайта
Проверьте, что сайт открывается только по одной схеме и одному хосту. Для WordPress это обычно настраивается в Настройки → Общие, где адрес WordPress и адрес сайта должны совпадать с выбранной канонической версией.
Если есть серверный доступ, редирект лучше делать на уровне веб-сервера. Для Apache это может выглядеть так:
RewriteEngine On
RewriteCond %{HTTPS} !=on [OR]
RewriteCond %{HTTP_HOST} !^www\.example\.ru$ [NC]
RewriteRule ^ https://www.example.ru%{REQUEST_URI} [L,R=301]Для Nginx логика та же: одна каноническая версия, остальные варианты — в 301. Это базовый слой, без которого дальнейшая чистка дублей будет неполной.
Шаг 2. Настройте canonical там, где страница должна остаться доступной
Если у вас есть страницы с параметрами, но основной контент один и тот же, canonical должен указывать на чистый URL без параметров. В большинстве SEO-плагинов это настраивается автоматически, но важно проверить результат вручную в исходном коде.
Если нужно принудительно задать canonical в теме или плагине, можно использовать фильтр wpseo_canonical в Yoast SEO или аналогичный механизм вашего SEO-плагина. Но делать это стоит только если вы точно понимаете, какой URL должен считаться основным.
add_filter( 'wpseo_canonical', function( $canonical ) {
if ( is_search() ) {
return home_url( '/' );
}
return $canonical;
} );Этот пример не универсален для всех сайтов. Он показывает принцип: для служебных страниц canonical должен вести на основную релевантную страницу, а не оставаться случайным.
Шаг 3. Закройте от индексации служебные архивы
Если архивы тегов, авторов или дат не дают трафика и не несут самостоятельной ценности, их лучше закрыть от индексации. Это можно сделать через SEO-плагин или кодом. В коде удобнее действовать точечно.
add_filter( 'wp_robots', function( array $robots ) {
if ( is_tag() || is_author() || is_date() || is_search() ) {
$robots['noindex'] = true;
$robots['follow'] = true;
}
return $robots;
} );Такой подход не ломает навигацию для пользователей и не отрезает поисковику переходы по ссылкам. Но он не заменяет редирект там, где URL вообще не должен существовать.
Шаг 4. Уберите лишние URL через 301-редирект
Если у вас есть старые адреса, дубли записей или страницы, которые были заменены новым материалом, нужен именно редирект. Это особенно важно после миграции сайта, смены структуры ссылок или удаления старых разделов.
Для WordPress проще всего использовать редирект на уровне сервера или через проверенный плагин редиректов. В коде можно сделать точечный редирект по шаблону:
add_action( 'template_redirect', function() {
if ( is_page( 123 ) ) {
wp_redirect( home_url( '/novaya-stranitsa/' ), 301 );
exit;
}
} );Здесь важно не превращать код в свалку из десятков условий. Если редиректов много, лучше хранить их централизованно, а не в functions.php.
Как проверить, что решение сработало
Проверка нужна не только после внедрения, но и через несколько дней, когда поисковый робот переобойдет страницы. Сразу после правок смотрите техническую сторону: статус ответа, canonical и robots.
- откройте основной URL и убедитесь, что он отдает
200 OK; - проверьте старый URL — он должен отдавать
301на нужный адрес; - посмотрите исходный код и найдите корректный
canonical; - убедитесь, что служебные страницы получили
noindex, если это было задумано; - в Search Console проверьте, не растет ли число страниц с пометкой «дубликат».
Если используете командную строку, быстро проверить редирект можно так:
curl -I https://example.ru/staryy-url/В ответе должен быть код 301 и заголовок Location с новым адресом. Если вместо этого вы видите 200, редирект не сработал или его перебивает кэш/плагин.
Частые ошибки и как их исправить
Ставят noindex вместо редиректа
Это частая ошибка: страницу закрывают от индексации, но оставляют доступной по старому адресу. В итоге дубль продолжает жить, а поисковик просто перестает его показывать. Если URL устарел, нужен 301, а не только noindex.
Делают canonical на нерелевантную страницу
Иногда canonical указывает на главную или на случайную категорию. Для поисковика это сигнал, что страница не самостоятельная, и он может проигнорировать такой тег. Canonical должен вести на максимально близкую по смыслу основную версию.
Оставляют доступными параметры фильтров
Если фильтры создают тысячи комбинаций URL, а каждая из них индексируется, проблема будет возвращаться. В таком случае нужно либо ограничивать индексацию параметров, либо пересматривать логику фильтрации, либо закрывать часть комбинаций на уровне шаблона.
Редиректят все подряд на главную
Это плохая практика. Массовый редирект на главную ломает релевантность, историю ссылок и поведение пользователей. Перенаправляйте на ближайший аналогичный материал, а не на универсальную страницу.
Безопасность и производительность: что не стоит делать
Чем больше редиректов и условий вы добавляете в тему, тем выше риск конфликтов после обновления. Если задача типовая, лучше использовать SEO-плагин или серверную конфигурацию. Если задача точечная — код должен быть минимальным и понятным.
Не размещайте редиректы и правила индексации в случайных файлах темы, если тема часто обновляется. Для кастомной логики безопаснее использовать дочернюю тему или небольшой собственный плагин. Так вы не потеряете настройки при обновлении.
Если нужен инструмент для чистки дублей, служебных страниц и лишних SEO-элементов, можно посмотреть Clearfy Pro. Но даже с плагином полезно понимать, что именно он меняет: robots, архивы, canonical и служебные URL — это разные задачи, и автоматическая настройка не всегда подходит без проверки.
В проектах с большим количеством контента не забывайте про кэш. После правок canonical, robots и редиректов очистите кэш страниц, объектный кэш и, если используется CDN, его тоже. Иначе вы будете проверять старую версию шаблона и думать, что исправление не работает.
Если нужно, я могу подготовить отдельную статью с разбором конкретно про дубли от параметров ?replytocom, пагинации и фильтров в WordPress — это уже отдельный сценарий с другой логикой исправления.