Дубли в WordPress редко выглядят как одна очевидная ошибка. Чаще это набор похожих URL: страница доступна со слэшем и без него, архивы тегов повторяют контент рубрик, у записей есть версии с параметрами, а иногда в индекс попадают служебные страницы темы или плагина. В результате поисковик видит несколько адресов с одинаковым или почти одинаковым содержимым и сам выбирает, что считать основной страницей. Это не всегда выбирается правильно.
Если задача не в «идеальной SEO-теории», а в том, чтобы быстро и безопасно убрать лишние версии URL, действовать нужно по порядку: сначала найти источник дубля, потом выбрать способ склейки, а уже затем проверить, что поисковый робот видит только один канонический адрес.
Как понять, что у вас именно проблема дублей
Симптомы обычно довольно приземлённые. В Search Console одна и та же страница может быть отмечена как «другая каноническая страница», в отчёте по индексированию появляются URL с параметрами, а в выдаче всплывают не те адреса, которые вы считаете основными. Иногда проблема заметна даже без инструментов: если открыть запись по нескольким путям, HTML-код и контент совпадают, а URL отличается только технической деталью.
Что проверить в первую очередь
- доступна ли одна и та же страница по
/pageи/page/; - есть ли версии с
?amp,?replytocom,?utm_*или другими параметрами; - не индексируются ли архивы тегов, авторов, дат, если они дублируют основной контент;
- не создаёт ли тема отдельные шаблоны для одного и того же материала;
- не ведут ли внутренние ссылки на разные варианты одного URL.
Для быстрой диагностики удобно посмотреть заголовки ответа и канонический URL. Если страница отдаёт 200 OK на нескольких адресах, а canonical указывает на другой путь, это уже сигнал, что склейка настроена не до конца или работает только частично.
Что выбрать: canonical, 301 редирект или noindex
Не все дубли нужно решать одинаково. Если у вас есть технические копии одной и той же страницы, правильнее сделать 301 редирект на основной URL. Если это страницы, которые должны открываться для пользователя, но поисковику нужно подсказать предпочтительный адрес, используйте canonical. Если архив не нужен в поиске вообще, можно закрыть его от индексации, но это не заменяет редирект и не убирает сам дубль из сайта.
| Подход | Когда использовать | Плюс | Минус |
|---|---|---|---|
| 301 редирект | Технические копии, старые URL, дубли без ценности | Жёстко склеивает адреса | Нужно аккуратно настроить, чтобы не сломать ссылки |
| canonical | Похожие страницы, параметры, фильтры, архивы | Не мешает пользователю | Поисковик может проигнорировать, если сигнал слабый |
| noindex | Архивы, служебные страницы, которые не должны ранжироваться | Просто убрать из индекса | Не решает проблему дубля на уровне обхода |
Пошаговое решение: убираем дубли без лишнего риска
Шаг 1. Нормализуйте основной формат URL
Сначала выберите один вариант для сайта: со слэшем на конце или без него, с www или без www, HTTP или HTTPS. В WordPress это задаётся в Настройки → Общие, но если сайт уже давно в работе, менять адреса нужно только после проверки редиректов и внутренних ссылок. Иначе вы получите цепочки перенаправлений и лишнюю нагрузку на сервер.
Если нужно принудительно привести все варианты к одному адресу на уровне .htaccess, используйте редирект только один раз, без каскада правил:
RewriteEngine On
RewriteCond %{HTTPS} !=on [OR]
RewriteCond %{HTTP_HOST} ^www\.example\.ru$ [NC]
RewriteRule ^ https://example.ru%{REQUEST_URI} [L,R=301]Это базовый пример для Apache. На Nginx логика та же, но правило пишется в конфигурации сервера, а не в .htaccess.
Шаг 2. Закройте технические дубли редиректом
Если у вас есть старые адреса, которые больше не должны существовать, 301 редирект — лучший вариант. Для WordPress это можно сделать через сервер или через код, если нужен точечный контроль.
add_action('template_redirect', function () {
if (is_page('old-page')) {
wp_redirect(home_url('/new-page/'), 301);
exit;
}
});Такой вариант подходит для единичных случаев. Если редиректов много, лучше не раздувать functions.php, а вынести правила в серверную конфигурацию или использовать надёжный инструмент управления редиректами.
Шаг 3. Добавьте canonical там, где дубль нужен для пользователя
Canonical полезен для страниц с параметрами, сортировкой, пагинацией и похожими архивами. В WordPress у большинства нормальных SEO-плагинов canonical уже есть, но его стоит проверить вручную, особенно если тема или кастомный шаблон выводят свой <head>.
Если нужно задать canonical вручную для отдельного шаблона, можно использовать фильтр wpseo_canonical в Yoast SEO или аналогичный механизм в вашем SEO-плагине. Но если вы не уверены в конкретном плагине, безопаснее не писать привязку к чужому API, а проверить, не дублируется ли тег в теме. Два canonical на странице — типичная ошибка, после которой поисковик может игнорировать оба.
Шаг 4. Уберите лишние архивы из индекса
Если теговые, авторские или датированные архивы не несут самостоятельной ценности, их лучше закрыть от индексации. Это особенно актуально для небольших сайтов, где архивы просто повторяют записи.
Вариант через код для авторских архивов:
add_action('template_redirect', function () {
if (is_author()) {
wp_redirect(home_url('/'), 301);
exit;
}
});Но такой подход подходит не всем. Если на сайте есть редакция и авторские страницы реально нужны, лучше оставить их открытыми, но добавить уникальный текст, фото и нормальную структуру, а не просто закрывать всё подряд.
Как проверить, что решение сработало
После правок не ограничивайтесь открытием страницы в браузере. Нужно проверить цепочку ответа сервера, canonical и статус индексации. Иначе можно решить, что всё исправлено, хотя поисковик всё ещё видит старую версию.
- проверьте, что старый URL отдаёт
301, а не200; - убедитесь, что конечный адрес открывается без дополнительного редиректа;
- посмотрите исходный код страницы и найдите один canonical;
- сравните внутренние ссылки в меню, хлебных крошках и контенте;
- в Search Console отправьте проверку URL и посмотрите, какой адрес выбран каноническим.
Для быстрой проверки с консоли можно использовать curl:
curl -I https://example.ru/old-page/В ответе должен быть виден 301 Moved Permanently и новый Location. Если вместо этого приходит 200 OK, редирект не сработал или правило стоит не в том месте.
Частые ошибки и как их исправить
Два canonical на одной странице
Такое часто случается, когда canonical добавляет SEO-плагин, а тема вручную выводит ещё один тег в <head>. Исправление простое: оставьте только один источник. Обычно правильнее доверить canonical плагину или ядру WordPress, а из темы убрать самодельную логику.
Редирект на редирект
Если старый URL сначала ведёт на промежуточный адрес, а потом на конечный, вы теряете время обхода и создаёте лишнюю нагрузку. Проверьте цепочку и сведите её к одному шагу.
Закрыли архив noindex, но не убрали дубль
Noindex не мешает роботу обходить страницу. Если архив технический и не нужен, лучше сделать 301 на более полезный раздел или убрать ссылку на него из навигации.
Параметры URL продолжают индексироваться
Если у вас есть фильтры, сортировка или UTM-метки, canonical должен указывать на чистый URL без параметров. Но для некоторых страниц это не всегда достаточно: если параметры создают отдельные, бессмысленные комбинации, их нужно ограничивать на уровне генерации ссылок и шаблонов.
Практические советы по безопасности и производительности
Чем меньше лишних URL генерирует сайт, тем проще ему жить. Это не только про SEO, но и про нагрузку. Каждый дубль — это лишний обход, лишний кэш-ключ и лишняя точка для ошибок в шаблоне.
Если вы чистите сайт от дублей системно, имеет смысл проверить и другие источники мусора: неиспользуемые архивы, лишние таксономии, служебные страницы плагинов, повторяющиеся блоки в шапке и подвале. Для такой работы часто используют инструменты вроде Clearfy Pro, если нужен набор точечных настроек для удаления дублей и чистки WordPress, но сам принцип остаётся тем же: сначала понять, что именно создаёт лишний URL, потом убрать источник, а не только симптом.
Полезный рабочий чек-лист после внедрения:
- внутренние ссылки ведут только на основной URL;
- старые адреса отдают 301, а не 200;
- canonical на странице один и он совпадает с основным адресом;
- служебные архивы либо закрыты, либо имеют смысловую ценность;
- в Search Console нет массового роста дублей после переобхода.
Если после правок дубли не исчезают, не стоит сразу менять всё подряд. Сначала найдите конкретный URL, который поисковик считает основным, и сравните его с тем, что вы считаете правильным. В WordPress проблема почти всегда в одном из трёх мест: тема, плагин или серверное правило. Когда источник найден, решение обычно оказывается намного проще, чем кажется по отчётам индексации.