Дубли в WordPress обычно появляются не из-за одной ошибки, а из-за набора мелочей: одна и та же запись доступна по нескольким URL, архивы индексируются вместе с канонической страницей, а параметры в адресе создают новые версии контента. В итоге поисковик видит несколько почти одинаковых страниц и сам выбирает, какую считать основной. Это почти всегда хуже, чем явно задать правила.
Ниже разберём практический сценарий: как найти дубли, что именно закрывать от индексации, когда ставить редирект 301, а когда достаточно canonical. Без лишней теории — только то, что можно проверить на живом сайте.
Как понять, что у сайта есть дубли
Проблема часто заметна не в админке, а в поисковой выдаче и логах. Один и тот же материал может открываться по адресам с /category/, через архив автора, через пагинацию, с UTM-параметрами или с разными вариантами слэша. Если сайт старый, к этому добавляются версии http/https и www/non-www.
Признаки, которые стоит проверить в первую очередь
- в поиске индексируется не каноническая страница, а архив или вложенный URL;
- в
site:-поиске видны одинаковые заголовки на разных адресах; - в Google Search Console растёт число страниц, но не растёт трафик;
- одна и та же запись доступна по нескольким вариантам URL;
- внутренние ссылки ведут на разные версии одного и того же материала.
Быстрая диагностика через браузер и консоль
Откройте подозрительную страницу и сравните адреса вручную. Если у записи есть несколько вариантов, проверьте код ответа и canonical. Это можно сделать через DevTools или командой curl:
curl -I https://example.com/sample-post/В ответе важно увидеть один основной адрес и отсутствие лишних цепочек редиректов. Если страница открывается по нескольким URL без перенаправления, это уже кандидат на исправление.
Какие дубли в WordPress встречаются чаще всего
Не все дубли лечатся одинаково. Одни нужно склеивать редиректом, другие — закрывать от индексации, третьи — просто привести к одному формату ссылок.
| Сценарий | Что делать | Компромисс |
|---|---|---|
| http и https, www и non-www | 301-редирект на один вариант | Нужно проверить сервер и настройки сайта |
| Параметры сортировки, UTM, фильтры | canonical или noindex для служебных страниц | Не всё можно закрыть одним правилом |
| Архивы автора, даты, теги | Оставить только если они реально нужны для поиска | Архивы могут давать полезный трафик, но часто плодят дубли |
| Страницы вложений медиа | Редирект на файл или родительскую запись | Зависит от структуры сайта |
Пошаговое решение: как убрать дубли без поломки сайта
Шаг 1. Приведите сайт к одному базовому адресу
Сначала убедитесь, что WordPress и сервер используют один и тот же домен и протокол. В Настройки → Общие проверьте Адрес WordPress (URL) и Адрес сайта (URL). Они должны совпадать по схеме и домену.
Если сайт работает на Apache, базовый редирект обычно настраивают через .htaccess. Для Nginx логика та же, но правило пишется в конфиге сервера. Пример для перенаправления на HTTPS и без www:
RewriteEngine On
RewriteCond %{HTTPS} !=on [OR]
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^ https://example.com%{REQUEST_URI} [L,R=301]Это не решает все дубли, но убирает базовую путаницу между версиями сайта.
Шаг 2. Закройте от индексации служебные архивы, если они не нужны
Если архивы автора, даты или теги не дают трафик и только дублируют контент, их лучше не индексировать. Делать это можно через SEO-плагин или кодом. Если нужен точечный контроль без лишних зависимостей, можно добавить noindex для архивов автора и дат:
add_action('wp_head', function () {
if (is_author() || is_date()) {
echo '<meta name="robots" content="noindex,follow" />' . "\n";
}
});Этот вариант рабочий, но его нужно использовать аккуратно: если архивы уже приносят трафик, не закрывайте их вслепую. Сначала проверьте статистику и поисковые запросы.
Шаг 3. Склейте одинаковые страницы редиректом 301
Если страница доступна по двум адресам, canonical не всегда достаточно. Когда есть явный дубль, лучше отправить старый URL на основной через 301. Это относится к переехавшим материалам, страницам вложений и старым форматам ссылок.
Пример редиректа старой страницы на новую через template_redirect:
add_action('template_redirect', function () {
if (is_page('old-page')) {
wp_redirect(home_url('/new-page/'), 301);
exit;
}
});Для массовых правил лучше использовать серверный редирект, а не PHP-хук. Так меньше нагрузка и меньше шансов получить лишний цикл обработки WordPress.
Шаг 4. Проверьте canonical на шаблонах
Если у вас кастомная тема или сильно модифицированные шаблоны, canonical может выводиться неправильно или дублироваться. В стандартном WordPress этот тег обычно формируется автоматически, но после вмешательства в head его легко сломать.
Проверьте исходный код страницы: canonical должен указывать на одну основную версию URL. Если он ведёт на архив, параметризированный адрес или другой домен, это нужно исправлять в шаблоне или в SEO-плагине.
Проверка результата после внедрения
После правок не ограничивайтесь открытием страницы в браузере. Нужно проверить три вещи: код ответа, canonical и индексируемость.
- основной URL отдаёт
200; - старые версии отдают
301на нужный адрес; - в исходном коде canonical указывает на основную страницу;
- служебные архивы не попадают в индекс без необходимости;
- внутренние ссылки в меню, хлебных крошках и карточках ведут на один вариант URL.
Для быстрой проверки редиректа удобно использовать:
curl -I https://example.com/old-page/Если всё настроено правильно, вы увидите 301 Moved Permanently и заголовок Location с нужным адресом. Затем проверьте конечный URL тем же способом и убедитесь, что он отдаёт 200.
Частые ошибки и как их исправить
Редирект ведёт в цепочку
Типичная ошибка — сначала редирект с http на https, потом с www на без www, потом ещё один редирект из старого slug в новый. В итоге пользователь и робот проходят через несколько шагов. Решение — свести всё к одному правилу на сервере и убрать лишние промежуточные перенаправления.
Закрыли от индексации нужную страницу
Иногда под раздачу попадают не архивы, а реальные посадочные страницы. Это случается, если правило написано слишком широко, например по шаблону URL или по условию, которое совпадает с несколькими типами страниц. Перед выкладкой всегда проверяйте, какие шаблоны затронуты.
Canonical и редирект противоречат друг другу
Если canonical указывает на один адрес, а сервер редиректит на другой, поисковик получает смешанный сигнал. В норме canonical должен подтверждать уже выбранную основную версию, а не спорить с ней.
Плагины SEO и кэш вмешиваются одновременно
После изменения canonical или robots иногда остаётся старый HTML из кэша. Очистите кэш плагина, серверный кэш и CDN, если он есть. Иначе вы будете проверять не актуальную версию страницы.
Что можно автоматизировать, а что лучше не трогать кодом
Если сайт небольшой, часть задач можно закрыть вручную через SEO-плагин. Но когда дублей много, удобнее держать правила в коде или на сервере. При этом не стоит кодом переписывать всё подряд: массовые редиректы, правила для архивов и canonical лучше сначала протестировать на staging-копии.
Если нужен инструмент для чистки дублей, технических мета-тегов и служебных страниц, можно посмотреть в сторону Clearfy Pro. Но даже с плагином важно понимать, какие именно URL вы закрываете и почему.
Практический чек-лист перед публикацией правок
- проверен основной домен и протокол;
- настроен 301-редирект для старых и дубль-URL;
- canonical указывает на основную страницу;
- архивы автора, даты и теги оценены отдельно, а не отключены автоматически;
- очищен кэш сайта, сервера и CDN;
- проверены ответы
200и301черезcurlили DevTools; - в Search Console отправлена проверка важных страниц.
Если после правок страницы всё ещё дублируются в индексе, не ищите проблему только в WordPress. Часто источник — серверные правила, старые ссылки в контенте или внешние ссылки на неканонические адреса. В таких случаях помогает не очередной плагин, а последовательная проверка всей цепочки URL от входа до индекса.