Дубли в WordPress обычно появляются не из-за одной ошибки, а из-за набора мелких вещей: страницы с параметрами, архивы тегов, пагинация, версии со слэшем и без, HTTP/HTTPS, www/non-www, а иногда и одинаковые записи, доступные по нескольким URL. Если это не привести в порядок, поисковик тратит краулинговый бюджет на мусор, а в индексе начинают жить не те URL, которые вы хотите продвигать.
Ниже — рабочая схема: сначала находим источник дублей, потом выбираем, что закрывать canonical, а что — 301-редиректом, и в конце проверяем, что поисковик видит только один основной адрес.
Как понять, что у вас именно проблема с дублями
Симптомы обычно видны в Search Console и в логах обхода. Часто в индексе всплывают страницы с параметрами ?replytocom=, ?utm_, архивы с пагинацией, страницы категорий и тегов с одинаковыми title и description, а также дубли одной и той же записи по разным URL. Если сайт на кастомной теме, дубли нередко создаёт сам шаблон: например, выводит один и тот же контент в архиве и в отдельной странице без корректного canonical.
Что проверить в первую очередь
- есть ли в индексе URL с параметрами;
- открываются ли одна и та же страница с
wwwи без него; - доступны ли версии со слэшем и без слэша;
- не индексируются ли теги, архивы автора, даты и служебные страницы без пользы для поиска;
- не создаёт ли плагин кэширования или SEO-плагин собственные дубли мета-тегов.
Если в выдаче уже есть несколько вариантов одной страницы, сначала не трогайте всё подряд. Сначала определите, какой URL должен стать основным. Остальные варианты нужно либо перенаправить на него, либо пометить как альтернативные через rel="canonical".
Пошаговое решение: canonical, 301 и настройка WordPress
Логика простая: если две страницы по смыслу одинаковые, но одна должна остаться в индексе, ставим canonical на основную. Если старый URL больше не нужен пользователю и поисковику, делаем 301-редирект. Не путайте эти механики: canonical не убирает URL из обхода, а 301 реально переводит трафик и вес на новый адрес.
Шаг 1. Зафиксируйте основной формат URL
Проверьте настройки в Настройки → Постоянные ссылки. Для большинства сайтов важно, чтобы WordPress сам генерировал единый формат ссылок, а не жил в смеси вариантов. Если сайт уже давно работает, не меняйте структуру без карты редиректов.
Если нужно принудительно привести домен к одному варианту, это лучше делать на уровне сервера или через .htaccess/nginx, а не в шаблоне. Пример для Apache:
RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\.example\.ru$ [NC]
RewriteRule ^ https://example.ru%{REQUEST_URI} [L,R=301]Для Nginx логика похожая: один серверный блок должен быть каноническим, остальные — отдавать 301 на него.
Шаг 2. Уберите служебные и бесполезные архивы из индекса
Если у вас есть архивы тегов, дат или авторов, которые не несут самостоятельной ценности, их лучше закрыть от индексации на уровне SEO-плагина или шаблона. Но не путайте «закрыть от индексации» и «удалить страницу». Страница может оставаться доступной для пользователей, но не должна конкурировать с основным контентом.
Если нужен кодовый контроль, в шаблоне можно добавить canonical вручную для нестандартных страниц:
add_action('wp_head', function () {
if (is_page_template('templates/landing.php')) {
echo '<link rel="canonical" href="' . esc_url(home_url('/landing/')) . '" />' . "\n";
}
}, 1);Этот вариант полезен, когда одна и та же посадочная страница доступна по нескольким адресам из-за особенностей темы или конструктора.
Шаг 3. Настройте 301 для старых и лишних URL
Если у вас есть старые адреса после смены структуры, их нужно перенаправить. Для WordPress безопаснее использовать либо серверные правила, либо плагин редиректов, если объём небольшой. Не делайте массовые редиректы через PHP на каждом запросе — это лишняя нагрузка и риск циклов.
Пример точечного редиректа в functions.php для устаревшего URL:
add_action('template_redirect', function () {
if (is_page('old-landing')) {
wp_redirect(home_url('/new-landing/'), 301);
exit;
}
});Такой код подходит только для единичных случаев. Если редиректов много, лучше вести их в конфиге сервера или в специализированном плагине, чтобы не раздувать тему.
Сравнение подходов: что выбрать для конкретного дубля
| Ситуация | Что делать | Компромисс |
|---|---|---|
| Одинаковый контент на старом и новом URL | 301-редирект | Старый адрес перестаёт быть доступен напрямую |
| Похожие страницы, но одна должна быть основной | canonical | Дубли остаются в обходе, но не должны конкурировать |
| Служебный архив без ценности | noindex + при необходимости canonical | Страница остаётся доступной, но не индексируется |
| Параметры сортировки, фильтры, UTM | canonical на чистый URL | Нужно следить, чтобы не ломалась аналитика |
Проверка результата после внедрения
После правок не ограничивайтесь открытием страницы в браузере. Проверьте код ответа, canonical и цепочки редиректов. Если редирект ведёт через два-три шага, это уже повод упростить схему.
- откройте старый URL и убедитесь, что он отдаёт
301на нужный адрес; - посмотрите исходный код страницы и проверьте, что canonical указывает на основной URL;
- проверьте, что в индексе не осталось вариантов с
www, безwww, со слэшем и без него; - в Search Console отправьте на переобход важные страницы после массовых изменений;
- проверьте, нет ли в sitemap лишних URL, которые вы уже закрыли или перенаправили.
Для быстрой проверки из консоли удобно использовать curl:
curl -I https://example.ru/old-landing/
curl -s https://example.ru/new-landing/ | grep -i canonicalЕсли canonical не совпадает с целевым URL, значит проблема не в редиректе, а в шаблоне или SEO-плагине, который переопределяет мета-теги.
Частые ошибки и как их исправить
Ставят canonical и забывают про редирект
Это работает только частично. Если старый URL больше не нужен, canonical сам по себе не уберёт его из обхода. Для устаревших адресов нужен 301.
Делают 301 на главную для всех дублей
Такой подход ломает релевантность. Если страница была про конкретную тему, редирект должен вести на максимально близкий аналог, а не на главную.
Закрывают от индексации всё подряд
Если noindex поставить на полезные категории или страницы фильтров без анализа, можно случайно убрать из поиска рабочие точки входа. Сначала оцените, приносит ли архив трафик и есть ли у него самостоятельная ценность.
Оставляют в sitemap URL, которые уже редиректятся
Это частая ошибка после миграции. Карта сайта должна содержать только канонические и доступные URL. Иначе поисковик снова и снова будет ходить по старым адресам.
Практические советы по безопасности и производительности
Не встраивайте редиректы и логику canonical в тяжёлые хуки, которые срабатывают на каждом запросе без необходимости. Если правил много, держите их в серверной конфигурации или в отдельном слое, а не в шаблоне темы. Это проще сопровождать и легче откатывать.
Если используете SEO-плагин, проверьте, не дублирует ли он мета-теги, которые уже выводит тема. Два canonical на странице — плохой сигнал. Один из них поисковик может проигнорировать, но вы не всегда предскажете какой.
Для больших сайтов полезно периодически выгружать список URL из Search Console и сверять его с sitemap и реальными каноническими адресами. Это быстрее, чем искать проблему по одному URL вручную.
Если вам нужно системно чистить дубли, служебные архивы и лишние мета-страницы, в экосистеме WPShop есть Clearfy Pro: https://wpshop.ru/plugins/clearfy. Но даже с плагином важно понимать, что именно вы закрываете и почему.