Дубли в WordPress обычно появляются не из-за одной ошибки, а из-за набора мелочей: один и тот же контент доступен по разным URL, архивы индексируются вместе с основными страницами, теги и категории дублируют смысл, а пагинация и параметры сортировки плодят лишние адреса. Если это не контролировать, поисковик начинает тратить обход на мусорные страницы, а в отчётах Search Console появляются странные канонические URL и страницы с одинаковыми заголовками.
Ниже разберём рабочий сценарий: как быстро найти источник дублей, что можно закрыть настройками, а что лучше исправлять кодом. Без лишней теории — только то, что реально помогает на типичном сайте на WordPress.
Как понять, что у вас именно дубли, а не обычная просадка трафика
Сначала стоит убедиться, что проблема действительно в URL-структуре. На практике дубли часто проявляются так:
- в поиске видны несколько версий одной страницы: с
wwwи без, сhttpиhttps, со слэшем и без; - в индексе есть архивы тегов, авторов, дат и страниц пагинации, которые повторяют основной контент;
- одна и та же запись открывается с параметрами вроде
?replytocom=,?utm_,?ampили сортировкой; - в HTML у нескольких страниц совпадают title и description, хотя URL разные;
- в Search Console растёт число «Просканировано, но не проиндексировано» или «Другая страница с правильным каноническим тегом».
Что проверить в первую очередь
Откройте несколько подозрительных URL и сравните три вещи: адрес в браузере, канонический URL в исходном коде и заголовок ответа сервера. Если canonical указывает на другую страницу, это не всегда ошибка — иногда так и задумано. Но если каноникал ведёт на неочевидную версию, а в индексе уже есть обе страницы, значит, WordPress или тема отдают поисковику лишние варианты.
Для быстрой диагностики полезно посмотреть, какие URL реально доступны. Например, если одна и та же запись открывается и по /post-name/, и по /category/news/post-name/, это уже не косметика, а архитектурная проблема.
Какие дубли WordPress создаёт чаще всего
В типовом проекте источники повторов почти всегда одни и те же. Ниже — короткая таблица, чтобы не искать вслепую.
| Источник | Что происходит | Что делать |
|---|---|---|
| Архивы тегов и категорий | Один и тот же текст попадает в несколько таксономий | Оставить только полезные архивы, остальные закрыть от индексации или убрать |
| Пагинация архивов | Страницы /page/2/, /page/3/ повторяют список записей | Оставить для обхода, но не плодить лишние мета-данные и дубли title |
| Параметры в URL | Сортировка, фильтры, UTM, replytocom создают новые адреса | Нормализовать каноникал и при необходимости закрыть лишние параметры |
| Авторские и датированные архивы | Повторяют ленту материалов без добавочной ценности | Отключить или noindex, если они не нужны для навигации |
| Версии с www / без www | Один сайт доступен по двум хостам | Сделать 301 на единственный вариант |
Пошаговое решение: как убрать дубли на уровне WordPress
Шаг 1. Приведите сайт к одной канонической версии
Если сайт отвечает и на www, и без него, сначала настройте редирект на уровне сервера или хостинга. Это базовая вещь, но без неё остальные меры работают хуже. В WordPress уже должен быть один вариант адреса в Настройки → Общие — WordPress Address и Site Address должны совпадать по схеме и хосту.
Если нужен быстрый контроль на уровне PHP, можно добавить принудительный редирект в functions.php темы или в собственный мини-плагин. Это не замена серверной настройке, но рабочий страховочный слой:
<?php
add_action('template_redirect', function () {
if (is_admin() || wp_doing_ajax()) {
return;
}
$canonical_host = 'example.com';
$current_host = wp_parse_url(home_url(), PHP_URL_HOST);
if ($current_host !== $canonical_host) {
$scheme = is_ssl() ? 'https' : 'http';
$uri = $_SERVER['REQUEST_URI'] ?? '/';
wp_redirect($scheme . '://' . $canonical_host . $uri, 301);
exit;
}
});На практике этот код нужен редко, если редирект уже настроен на сервере. Но он помогает, когда сайт переезжал, а старые адреса ещё живут в конфигурации.
Шаг 2. Уберите лишние архивы, если они не несут пользы
Авторские архивы, архивы дат и часть архивов тегов часто создают страницы с почти одинаковым набором записей. Если они не нужны посетителям, их лучше закрыть от индексации или отключить совсем. Здесь важно не путать «не индексировать» и «удалить из сайта»: навигация может остаться, а поисковику достаточно не показывать эти страницы как самостоятельные посадочные.
Если вы работаете с кодом, можно убрать архивы автора и даты через фильтры:
<?php
add_action('init', function () {
// Убираем архивы автора и даты из маршрутизации.
remove_action('wp_head', 'wp_generator');
});
add_filter('author_link', function ($link) {
return home_url('/');
});Но чаще правильнее не ломать ссылки, а просто закрыть ненужные архивы в SEO-плагине. Если на сайте уже используется Clearfy Pro, в нём удобно отключать технические дубли и лишние архивы без правки темы. Это не обязательный инструмент, но для типового проекта он экономит время, если задача именно в чистке дублей.
Шаг 3. Нормализуйте canonical для записей и страниц
WordPress сам выводит canonical для записей и страниц, но тема или SEO-плагин могут вмешаться. Если у вас есть шаблоны, которые создают альтернативные представления контента, проверьте, что canonical указывает на основную версию.
Для нестандартной логики можно переопределить canonical через фильтр wpseo_canonical, если используется Yoast SEO, или через собственную генерацию в теме. Но не стоит делать это без причины: сначала убедитесь, что проблема не в дублирующемся шаблоне.
Пример для случая, когда нужно принудительно убрать параметры из canonical:
<?php
add_filter('get_canonical_url', function ($canonical, $post) {
if (empty($canonical)) {
return $canonical;
}
$parts = wp_parse_url($canonical);
if (empty($parts['scheme']) || empty($parts['host'])) {
return $canonical;
}
return $parts['scheme'] . '://' . $parts['host'] . ($parts['path'] ?? '/');
}, 10, 2);Это не универсальная панацея. Если у страницы есть важные параметры, например в мультиязычном или фильтруемом каталоге, убирать их из canonical нужно очень аккуратно.
Шаг 4. Закройте мусорные параметры в URL
Параметры вроде replytocom, UTM-меток и некоторых сортировок часто создают технические дубли. Для UTM обычно достаточно canonical на чистый URL, а вот replytocom на комментариях может плодить десятки адресов на одну запись.
Если параметр не нужен для индексации, можно убрать его редиректом:
<?php
add_action('template_redirect', function () {
if (empty($_GET['replytocom'])) {
return;
}
$url = remove_query_arg('replytocom');
wp_safe_redirect($url, 301);
exit;
});Для UTM-меток я бы не делал массовый редирект на всех сайтах без анализа аналитики. Иногда лучше оставить параметры для маркетинга, но следить, чтобы canonical указывал на чистую страницу.
Когда достаточно плагина, а когда нужен код
Если задача — убрать стандартные дубли WordPress без сложной логики, плагин часто быстрее и безопаснее. Если же дубли появляются из-за кастомной темы, фильтров, нестандартных архивов или параметров в URL, без кода не обойтись.
| Подход | Плюсы | Минусы |
|---|---|---|
| Плагин SEO/чистки | Быстро, меньше риска сломать шаблон | Не решает нестандартные сценарии |
| Код в теме/плагине | Точный контроль, можно убрать конкретный дубль | Нужна проверка после обновлений |
| Настройка сервера | Лучше для редиректов и канонизации хоста | Требует доступа к конфигу и аккуратности |
Если у сайта много технических дублей из-за архивов, меток и лишних служебных страниц, имеет смысл сначала пройтись по настройкам SEO-плагина, а уже потом дописывать точечные фильтры. Так меньше шансов получить конфликт между темой и плагином.
Как проверить, что решение сработало
После правок не ограничивайтесь открытием страницы в браузере. Проверка должна быть технической.
- Откройте проблемный URL и убедитесь, что он отдаёт
301или остаётся единственной версией без параметров. - Посмотрите исходный код страницы и проверьте тег
rel="canonical". - Сравните заголовок страницы и title в HTML — они не должны дублировать разные URL с одинаковым смыслом.
- Проверьте, что в
site:example.comне растёт число мусорных адресов, хотя этот метод сам по себе неточный. - В Search Console откройте отчёт по страницам и посмотрите, исчезают ли альтернативные URL из индекса.
Если есть доступ к консоли, можно быстро проверить редирект:
curl -I https://example.com/page/?replytocom=12В ответе должен быть либо 301 на чистый URL, либо как минимум canonical на основную страницу без параметров. Если вместо этого вы видите 200 OK и отдельную индексируемую страницу, значит, дубль всё ещё жив.
Частые ошибки и как их исправить
Редирект сделали, но canonical остался старым
Это бывает, когда редирект настроен на сервере, а тема или SEO-плагин продолжают выводить старый canonical. Проверяйте оба уровня: ответ сервера и HTML. Если они расходятся, поисковик может дольше переобходить сайт и держать старую версию в индексе.
Закрыли архивы, но сломали навигацию
Иногда разработчики путают noindex и удаление шаблона. В результате архив исчезает из поиска, но по нему всё ещё нельзя нормально перейти из меню или хлебных крошек. Если архив нужен пользователю, не удаляйте его полностью — ограничьтесь noindex или сокращением количества таких страниц.
Удалили параметры URL, а аналитика перестала собираться
Если вы массово режете UTM или другие query string, сначала проверьте, не завязаны ли на них отчёты, пиксели и внешние интеграции. Для SEO обычно достаточно canonical и нормального редиректа только для технических параметров, а маркетинговые метки лучше не ломать без согласования.
Сделали всё в functions.php и забыли про обновления темы
Если код лежит прямо в теме, при смене шаблона он исчезнет. Для таких правок лучше использовать дочернюю тему или небольшой mu-plugin. Это особенно важно, если вы убираете дубли не один раз, а поддерживаете сайт постоянно.
Практические советы по безопасности и производительности
Чем больше технических дублей, тем больше лишних обходов и тем выше шанс, что поисковый робот будет тратить бюджет на бесполезные URL. Поэтому полезно не только закрывать дубли, но и не создавать новые:
- не плодите теги ради каждого материала, если они не используются как навигация;
- не выводите в индекс страницы фильтров и сортировок без отдельной SEO-логики;
- не ставьте несколько SEO-плагинов одновременно — они часто конфликтуют в canonical и meta robots;
- проверяйте, что редиректы не создают цепочки из двух-трёх переходов;
- не отключайте архивы и таксономии «вслепую» — сначала посмотрите, как они используются в меню и внутренней перелинковке.
Если нужен более системный подход к чистке технических дублей, архивов и служебных страниц, проще один раз настроить это в связке SEO-плагина и точечных правок, чем потом вручную вычищать индекс. На небольших и средних сайтах это обычно даёт более предсказуемый результат, чем попытка решить всё одним редиректом.
Главный критерий здесь простой: после правок у каждой важной страницы должен быть один понятный URL, один canonical и одна логика индексации. Всё остальное — уже детали реализации.