Дубли в WordPress обычно появляются не из-за одной ошибки, а из-за набора мелких причин: доступ к одной и той же странице по разным URL, архивы тегов и категорий с одинаковым контентом, страницы с параметрами сортировки, версии с www и без него, HTTP и HTTPS, а иногда — из-за темы, которая выводит один и тот же блок в нескольких шаблонах. Если это не разрулить, поисковик сам выберет «главную» версию, но не всегда ту, которую вы ожидали.
Ниже — рабочая схема: сначала находим источник дубля, затем выбираем, что делать с каждой группой URL, и только после этого правим шаблоны, редиректы и canonical.
Как понять, что у вас именно дубли, а не просто похожие страницы
Проблема часто выглядит как падение трафика на отдельные URL, странные страницы в индексе или одинаковые сниппеты в выдаче. Но прежде чем править код, стоит проверить, какие именно адреса поисковик считает отдельными страницами.
Что смотреть в первую очередь
- один и тот же контент доступен по разным адресам:
/post/,/post,?amp,?utm_*; - страница открывается и по HTTP, и по HTTPS;
- есть версии с
wwwи без него; - архивы категорий, тегов и автора повторяют друг друга почти дословно;
- страницы пагинации индексируются как отдельные сущности без необходимости;
- фильтры и сортировки создают десятки URL с одинаковым текстом.
Быстрая диагностика без лишних инструментов
Для начала проверьте заголовки и HTML нескольких подозрительных URL. Если на разных адресах возвращается один и тот же контент без явного указания канонической версии, это уже повод для правки.
curl -I https://example.com/page/curl -s https://example.com/page/ | grep -i canonicalЕсли canonical отсутствует, ведёт не туда или на каждой версии отличается без причины, поисковик получает противоречивый сигнал.
Какие дубли WordPress встречаются чаще всего
В WordPress дубли редко возникают случайно. Обычно источник можно отнести к одной из нескольких групп. Это удобно, потому что для каждой группы решение разное.
| Источник дубля | Что делать | Компромисс |
|---|---|---|
| HTTP/HTTPS, www/без www | 301 на единственный вариант | Нужно проверить сертификат и настройки сервера |
| Архивы тегов и категорий | Оставить только полезные архивы, остальные закрыть или объединить | Может снизиться число входных страниц |
| Параметры сортировки и фильтров | canonical на базовую страницу или 301 для мусорных параметров | Не все параметры можно смело редиректить |
| Пагинация | Не склеивать всё в одну страницу, а корректно настроить canonical | Нужна аккуратность, чтобы не сломать навигацию |
Пошаговое решение: от редиректов до canonical
1. Зафиксируйте единственную основную версию сайта
Сначала выберите один канонический формат домена: HTTPS, с www или без него. Всё остальное должно уходить на него через 301 редирект. Это базовая гигиена, без которой дальше нет смысла разбирать дубли страниц.
Если у вас Apache, редирект можно сделать в .htaccess:
RewriteEngine On
RewriteCond %{HTTPS} !=on [OR]
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^ https://example.com%{REQUEST_URI} [L,R=301]Для Nginx логика та же, только на уровне конфигурации сервера. Если не уверены, лучше не дублировать правила в нескольких местах: один редирект на сервере, а не ещё один в WordPress.
2. Добавьте canonical там, где контент повторяется частично
Canonical нужен не для маскировки проблем, а для явного указания основной версии страницы. Это особенно полезно для архивов, пагинации и страниц с параметрами, которые не меняют смысл контента.
В теме или дочерней теме можно добавить свой canonical через wp_head, если стандартного вывода недостаточно:
add_action('wp_head', function () {
if (is_singular()) {
echo '<link rel="canonical" href="' . esc_url(get_permalink()) . '" />' . "\n";
}
}, 1);Но если тема уже выводит canonical через wp_head, не дублируйте тег. Сначала проверьте исходный код страницы. Два canonical на одной странице — частая ошибка, которая только путает поисковик.
3. Уберите лишние архивы и таксономии
Если у вас есть теги, которые дублируют категории, или архивы автора, которые не несут самостоятельной пользы, их лучше либо закрыть от индексации, либо вообще не выводить в структуре сайта. Здесь важно не путать «удалить из меню» и «убрать из индекса» — это разные задачи.
Для таксономий можно точечно управлять мета-robots через фильтр:
add_filter('wp_robots', function ($robots) {
if (is_tag() || is_author()) {
$robots['noindex'] = true;
$robots['follow'] = true;
}
return $robots;
});Это не заменяет canonical, но помогает, когда архивы реально не нужны в поиске. Если архив полезен пользователю и имеет уникальный текст, закрывать его только потому, что «так проще», не стоит.
4. Срежьте мусорные параметры и служебные URL
Частая причина дублей — URL с параметрами сортировки, фильтрации, UTM-метками и служебными переключателями. Не все параметры надо редиректить: UTM обычно не ломают индексацию сами по себе, но могут плодить копии в аналитике и логах. А вот параметры, которые меняют только вид страницы, часто лучше убирать из индекса.
Если параметр точно не нужен для отдельной страницы, можно перенаправлять его на чистый URL:
add_action('template_redirect', function () {
if (empty($_GET['sort']) && empty($_GET['filter'])) {
return;
}
$allowed = ['sort'];
foreach (array_keys($_GET) as $key) {
if (!in_array($key, $allowed, true)) {
wp_safe_redirect(remove_query_arg(array_keys($_GET)), 301);
exit;
}
}
});Этот пример намеренно простой: в реальном проекте список разрешённых параметров надо составлять вручную. Не редиректите всё подряд, иначе можно сломать поиск по сайту, фильтры и страницы с формами.
Как проверить, что дубли действительно убраны
После правок не ограничивайтесь визуальной проверкой в браузере. Нужно убедиться, что сервер отдаёт правильный код ответа, canonical указывает на нужный URL, а старые адреса не остаются доступными по 200 OK.
- откройте старый URL и проверьте, что он отдаёт
301на нужную страницу; - посмотрите исходный код и убедитесь, что canonical один и он корректный;
- проверьте, что страницы с параметрами не индексируются как отдельные основные URL;
- сравните заголовки ответа для HTTP и HTTPS;
- проверьте карту сайта: в ней должны быть только канонические адреса.
Полезная быстрая проверка через командную строку:
curl -I https://example.com/old-page/
curl -I https://example.com/page/?sort=ascЕсли старый адрес всё ещё отдаёт 200, редирект не сработал. Если canonical указывает на саму страницу с параметром, а не на чистую версию, поисковик может продолжить считать её отдельной.
Частые ошибки и как их исправить
Два canonical на одной странице
Обычно это происходит, когда canonical выводит и тема, и SEO-плагин, а разработчик добавляет ещё один вручную. В результате в HTML несколько одинаковых тегов, и поисковик получает конфликтующий сигнал. Решение простое: оставьте один источник.
Редирект на не ту версию URL
Иногда редирект ведёт на главную вместо целевой страницы, особенно если правило написано слишком общо. Это уже не борьба с дублями, а потеря релевантности. Проверяйте, что сохраняется путь и нужные параметры, если они действительно важны.
Закрыли архивы, но не убрали ссылки на них
Если архивы больше не нужны, их стоит убрать не только из индекса, но и из навигации, хлебных крошек и внутренних блоков. Иначе вы продолжите создавать лишние переходы и обходы краулером.
Склеили всё canonical, но не исправили источник дубля
Canonical — это сигнал, а не панацея. Если у вас есть доступные по 200 копии одной страницы, лучше сначала убрать причину: редирект, настройку шаблона, лишний архив или параметр. Иначе проблема останется в обходе, логах и аналитике.
Что делать для безопасности и производительности
Когда вы чистите дубли, легко случайно создать лишнюю нагрузку: дополнительные проверки в template_redirect, сложные условия в wp_head, лишние запросы к базе. Поэтому любые правила лучше делать максимально короткими и без тяжёлых вычислений.
- не проверяйте в каждом запросе сложные SQL-условия, если можно обойтись настройкой сервера;
- не добавляйте редиректы в несколько плагинов сразу;
- не закрывайте от индексации всё подряд, если страница полезна пользователю;
- проверяйте, не ломают ли правила REST API, AJAX и служебные эндпоинты;
- после изменений очистите кеш страницы и, если используется, объектный кеш.
Если нужен более системный подход к чистке дублей, служебных архивов и SEO-мусора, в экосистеме WPShop есть Clearfy Pro: https://wpshop.ru/plugins/clearfy. Но даже с плагином полезно понимать, какие именно URL вы убираете и почему.
Самый надёжный критерий успеха здесь простой: у каждой страницы должен быть один понятный канонический адрес, а все альтернативные версии должны либо редиректить на него, либо явно указывать на него через canonical. Если это выполнено, дубли перестают расползаться по индексу и по внутренней структуре сайта.