В WordPress дубли обычно появляются не из-за одной ошибки, а из-за набора мелочей: страницы с параметрами, архивы тегов, пагинация, версии с www и без, http и https, а иногда еще и отдельные шаблоны темы, которые выводят один и тот же контент по разным адресам. Если это не разрулить, поисковик начинает выбирать канонический URL сам, а это уже лотерея.
Ниже — рабочая схема: сначала находим источник дубля, потом решаем, где нужен canonical, а где правильнее поставить 301. Без магии и без попытки закрыть все подряд.
Как понять, что у вас именно дубли, а не просто просадка индексации
Симптомы обычно похожи: в поиске всплывают не те URL, в Search Console растет число страниц без трафика, а в выдаче можно увидеть несколько адресов с одинаковым title и почти одинаковым сниппетом. Отдельно настораживает ситуация, когда одна и та же статья доступна по нескольким путям: через архив рубрики, через тег, через поиск по сайту или через параметры сортировки.
Что проверить в первую очередь
- открывается ли одна и та же страница по
httpиhttps; - есть ли версии с
wwwи безwww; - не индексируются ли URL с параметрами вроде
?replytocom=,?utm_,?sort=; - не дублируют ли архивы категорий, тегов и авторов основной контент;
- не создает ли тема отдельные шаблоны для одной сущности с разными адресами.
Если сомневаетесь, откройте проблемную страницу и посмотрите исходный код. В <head> должен быть один явный canonical. Если их несколько или он указывает не туда — это уже техническая ошибка, а не «особенность SEO».
Диагностика: где искать дубли в WordPress
Самый надежный способ — идти от URL к источнику. Сначала смотрим, какие адреса реально отдают одинаковый контент, потом проверяем, кто их генерирует: ядро, плагин, тема или серверные правила.
Быстрая проверка через консоль
Если есть доступ к серверу, можно быстро сравнить заголовки и редиректы:
curl -I https://example.com/page-name/
curl -I http://example.com/page-name/
curl -I https://www.example.com/page-name/
curl -I https://example.com/page-name/?utm_source=testСмотрите на три вещи: код ответа, Location и наличие rel=canonical в HTML. Если разные версии URL отдают 200 без редиректа, значит поисковику оставили выбор. Это почти всегда лишнее.
Что смотреть в Search Console
В отчете по индексированию полезно искать не абстрактные «проблемы», а конкретные группы: дубли без выбранной пользователем canonical-страницы, альтернативные страницы с правильным canonical, страницы с параметрами, которые попали в индекс. Это помогает понять, где достаточно canonical, а где нужен редирект.
| Сценарий | Что делать | Компромисс |
|---|---|---|
| Одинаковый контент на двух постоянных URL | 301 редирект на основной адрес | Почти всегда лучший вариант |
| Похожая, но не идентичная страница | canonical на основную версию | Поисковик может проигнорировать подсказку |
| Параметры сортировки, UTM, фильтры | canonical + при необходимости noindex для служебных URL | Нужно аккуратно, чтобы не закрыть полезные страницы |
Пошаговое решение: canonical и 301 без лишних конфликтов
Логика простая: если URL больше не должен существовать как отдельная страница, ставим 301. Если страница нужна пользователю, но есть альтернативные адреса или служебные параметры, оставляем ее доступной и указываем canonical.
Шаг 1. Приведите сайт к одному базовому домену
Сначала выберите единственный вариант: https и либо www, либо без него. На уровне сервера это делается редиректом, а не через PHP. Для Apache пример выглядит так:
RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^ https://example.com%{REQUEST_URI} [L,R=301]На Nginx логика та же, только в конфигурации сервера. Важно не делать цепочку из двух-трех редиректов: сначала http на https, потом www на без www. Это лишняя задержка и лишний риск ошибок.
Шаг 2. Уберите дубли с параметрами
Если дубль создается параметрами, не надо редиректить все подряд. Например, ?utm_ — это служебные метки, их лучше игнорировать в canonical. А вот ?replytocom= или параметры сортировки могут требовать отдельного решения, если они плодят индексируемые URL.
Для своих шаблонов можно принудительно задать canonical в functions.php или в мини-плагине:
add_filter('wpseo_canonical', function ($canonical) {
if (is_singular()) {
$canonical = get_permalink();
}
return $canonical;
});Этот пример уместен только если у вас уже используется Yoast SEO. Если плагина нет, не нужно вставлять этот код «на всякий случай». Лучше работать через штатный rel=canonical темы или SEO-плагина, который уже отвечает за мета-теги.
Шаг 3. Настройте 301 для старых и лишних URL
Если у страницы есть новый адрес, старый должен отдавать 301. Для WordPress это можно сделать через template_redirect, если редирект зависит от логики сайта, а не от простого совпадения URL:
add_action('template_redirect', function () {
if (is_page('old-page')) {
wp_redirect(home_url('/new-page/'), 301);
exit;
}
});Для массовых правил лучше использовать серверный редирект или плагин редиректов. PHP-редиректы удобны для точечных случаев, но при большом количестве правил они добавляют нагрузку и сложнее в сопровождении.
Шаг 4. Проверьте архивы, пагинацию и служебные страницы
Архивы категорий и тегов не всегда надо закрывать. Иногда достаточно убедиться, что у них корректный canonical и нормальные title. Но если архив полностью повторяет контент основной страницы или служит только навигацией, его нужно либо доработать, либо убрать из индексации осознанно.
Пагинация — отдельная история. Страницы /page/2/, /page/3/ не должны каноникалиться на первую страницу, если они содержат уникальный список записей. Иначе поисковик может начать игнорировать их как дубли.
Как проверить, что решение сработало
Проверка должна быть не «страница открывается», а технической.
- основной URL отдает
200и один canonical на себя; - старый URL отдает
301на новый адрес; - версии с http/www не доступны как отдельные страницы;
- URL с параметрами не попадают в индекс как самостоятельные документы;
- в Search Console уменьшается число дублирующихся и альтернативных страниц;
- в исходном коде нет нескольких conflicting canonical.
Для быстрой проверки можно использовать такой набор:
curl -I https://example.com/old-page/
curl -I https://example.com/new-page/
curl -s https://example.com/new-page/ | grep -i canonicalЕсли canonical указывает на правильный URL, а старый адрес стабильно редиректит, базовая часть задачи решена. Дальше остается дождаться переобхода страниц поисковиком.
Частые ошибки и как их исправить
Ставят canonical на страницу, которая сама редиректит
Это лишняя путаница. Если URL должен исчезнуть, canonical ему не нужен — нужен 301. Canonical имеет смысл только для доступной страницы.
Редиректят все параметры подряд
Так легко сломать полезные сценарии: фильтры, сортировку, переходы из рекламы. Сначала разделите параметры на служебные и пользовательские, потом принимайте решение.
Делают несколько редиректов подряд
Типичный пример: http → www → без www → со слешем. В итоге страница открывается медленнее, а цепочка становится хрупкой. Нужен один финальный прыжок.
Оставляют дубли в sitemap
Если в карту сайта попадают старые или альтернативные URL, поисковик будет тратить обход на мусор. Проверьте, что в sitemap только канонические адреса.
Надеются, что canonical «все исправит»
Canonical — это подсказка, а не жесткая команда. Если дубли реально одинаковые и доступны по нескольким адресам, надежнее закрыть вопрос редиректом или убрать генерацию лишнего URL на уровне темы/плагина.
Практические советы по безопасности и производительности
Если редиректов много, не храните их в случайных кусках темы. Лучше вынести в отдельный мини-плагин или использовать проверенный плагин редиректов, чтобы не потерять правила при смене темы. Для крупных сайтов серверные редиректы обычно надежнее и быстрее, чем PHP-логика на каждом запросе.
Еще один момент: не ставьте плагины, которые одновременно обещают «SEO, кеш, оптимизацию и редиректы» без понятной схемы работы. Чем больше они вмешиваются в head и маршрутизацию, тем выше шанс конфликтов. Если нужен инструмент для чистки дублей и технических SEO-настроек, имеет смысл смотреть на решения вроде Clearfy Pro, но только после проверки, какие именно функции вам реально нужны и не дублируют ли они уже установленный SEO-плагин.
И последнее: после правок обязательно сделайте резервную копию конфигурации сервера, базы и текущих правил редиректов. Ошибка в одном шаблоне или одном regex может увести на 301 половину сайта.