Дубли в WordPress обычно появляются не из-за одной ошибки, а из-за набора мелких настроек: архивы тегов, страницы автора, параметры ?replytocom, пагинация, версии с http/https, www/non-www, а иногда и из-за темы или плагина, который создаёт отдельные URL для одного и того же контента. Проблема в том, что поисковик видит несколько страниц с одинаковым или почти одинаковым содержимым и начинает выбирать каноническую версию сам. Это не всегда та версия, которую вы хотите.
Как понять, что дубли уже есть
Первый сигнал — в Search Console растут страницы с одинаковыми заголовками, а в индексе появляются URL, которые вы не планировали продвигать. Второй сигнал — в выдаче всплывают не основные страницы, а архивы, вложения или параметры сортировки. Третий — у страниц с нормальным контентом проседает видимость без явной причины.
Что проверить в первую очередь
- одинаковые title и meta description у разных URL;
- страницы вложений медиафайлов;
- архивы тегов, авторов и дат, если они не нужны для поиска;
- дубли из-за слеша в конце URL и редиректов;
- параметры вида
?utm_,?replytocom,?amp, если они индексируются; - страницы пагинации, которые повторяют основной текст почти без изменений.
Диагностика: где искать источник дублей
Начинать лучше не с удаления, а с карты источников. В WordPress дубли часто создаются на уровне шаблона, а не контента. Например, тема может выводить отдельные архивы для рубрик и тегов, а плагин SEO — не закрывать их от индексации. В результате один и тот же материал доступен по нескольким путям.
Проверка URL вручную
Откройте несколько вариантов одной и той же страницы и сравните, куда они ведут после редиректов. Если сайт доступен и по http, и по https, или с www и без него, это надо исправлять на уровне сервера и WordPress, а не только в SEO-плагине.
// Быстрая проверка канонического URL внутри шаблона или временного mu-plugin
add_action('template_redirect', function () {
if (is_singular()) {
global $wp;
$current = home_url(add_query_arg([], $wp->request));
error_log('Current: ' . $current);
error_log('Permalink: ' . get_permalink());
}
});
Этот код не решает проблему сам по себе, но помогает увидеть, совпадает ли фактический адрес с каноническим permalink. Для проверки используйте только на тестовом стенде или временно, потому что лог быстро засоряется.
Пошаговое решение без риска для SEO
Логика простая: сначала оставляем одну основную версию страницы, потом закрываем второстепенные, затем ставим редиректы там, где это безопасно. Не удаляйте всё подряд — часть дублей нужна для навигации и может быть полезна пользователю, но не должна конкурировать в индексе с основным контентом.
Шаг 1. Настройте канонический URL
Если вы используете SEO-плагин, проверьте, что на основных страницах выводится корректный rel="canonical". Для записей, страниц и ключевых архивов он должен указывать на единственную предпочтительную версию. Если каноникал уже есть, но ведёт на параметризованный URL, это ошибка шаблона или фильтра.
// Пример: принудительно задаём canonical для конкретной страницы
add_filter('wpseo_canonical', function ($canonical) {
if (is_page(123)) {
return home_url('/usluga/');
}
return $canonical;
});
Фильтр выше относится к Yoast SEO. Если у вас другой SEO-плагин, логика та же, но хук будет другим. Не переносите код вслепую между плагинами.
Шаг 2. Закройте ненужные архивы от индексации
Если теги, архивы автора или даты не дают поисковому трафику, их лучше закрыть. Это не значит удалять страницы из сайта — достаточно убрать их из индекса и не создавать конкуренцию основным материалам.
| Вариант | Что даёт | Компромисс |
|---|---|---|
| Плагин SEO | Быстрая настройка noindex и canonical | Зависимость от интерфейса и настроек темы |
| Код в теме или mu-plugin | Точный контроль над отдельными типами страниц | Нужно поддерживать код при обновлениях |
| Редиректы на сервере | Убирают лишние URL до загрузки WordPress | Требуют аккуратной настройки и тестов |
Шаг 3. Уберите страницы вложений
Страницы вложений часто создают пустые или почти пустые URL, которые индексируются как отдельные документы. Если они не нужны как самостоятельные страницы, их лучше редиректить на сам файл или на родительскую запись.
add_action('template_redirect', function () {
if (is_attachment()) {
$parent = wp_get_post_parent_id(get_the_ID());
if ($parent) {
wp_redirect(get_permalink($parent), 301);
exit;
}
wp_redirect(home_url('/'), 301);
exit;
}
});
Это рабочая схема для большинства сайтов. Если у вас медиафайлы используются как отдельные посадочные страницы, редирект делать не нужно.
Шаг 4. Сведите параметры к одной версии
Параметры сортировки, фильтров и трекинга часто плодят дубли. Для аналитики utm_ обычно не проблема, но если в индексе появляются страницы с параметрами, проверьте robots, canonical и внутренние ссылки. Особенно это важно для страниц поиска по сайту и архивов с фильтрами.
Проверка результата после внедрения
После правок не ориентируйтесь только на визуальный осмотр. Нужно проверить фактические сигналы для поисковика: редиректы, canonical, robots meta и статус индексации.
Чек-лист проверки
- основной URL отдаёт
200 OK; - дублирующий URL отдаёт
301на нужную страницу или закрыт от индексации; - в исходном коде у страницы один canonical;
- внутренние ссылки ведут на каноническую версию;
- в Search Console нет роста дублей по выбранному шаблону URL;
- страницы вложений и архивы не конкурируют с основными материалами.
Для быстрой технической проверки удобно смотреть заголовки ответа:
curl -I https://example.com/stranica/
curl -I https://example.com/stranica/?replytocom=1
Если второй URL не редиректит или возвращает отдельную индексируемую страницу, проблема ещё не закрыта.
Частые ошибки и как их исправить
Ставят noindex вместо редиректа
Noindex убирает страницу из индекса, но не решает проблему дубля в навигации и ссылочной структуре. Если есть очевидная каноническая версия, лучше делать 301-редирект.
Закрывают всё подряд в robots.txt
Это грубая ошибка. Robots.txt не удаляет URL из индекса, если на них уже есть ссылки. Кроме того, можно случайно закрыть полезные страницы пагинации или медиа.
Оставляют дубли в меню и хлебных крошках
Даже если canonical настроен, внутренние ссылки должны вести на одну версию. Иначе поисковик и пользователи продолжают ходить по разным адресам, а вес страниц размазывается.
Не проверяют тему и плагины после обновления
После обновления темы или SEO-плагина каноникал, meta robots и шаблоны архивов могут измениться. Это особенно заметно, если часть логики была вынесена в functions.php без комментариев и тестов.
Что сделать для безопасности и производительности
Если вы решаете проблему кодом, выносите изменения в mu-plugin или отдельный мини-плагин, а не в активную тему. Так правки не потеряются при смене темы. Перед массовыми редиректами обязательно сделайте резервную копию базы и списка URL, чтобы можно было откатить изменения.
Не ставьте тяжёлые плагины ради одной задачи, если можно обойтись точечной настройкой. Но если нужен удобный контроль над дублями, архивами и техническими мета-тегами, лучше использовать один нормальный SEO-инструмент, чем несколько конфликтующих расширений. В экосистеме WPShop для этой задачи органично подходит Clearfy Pro: он помогает с чисткой сайта, дублями и техническими настройками, но сам по себе не отменяет необходимость проверить каноникал и редиректы вручную.
Если вы работаете с большим сайтом, после исправления дублей полезно пересканировать внутренние ссылки и проверить, не осталось ли старых URL в контенте, меню и виджетах. Иначе поисковик продолжит видеть две версии одной страницы, даже если одна из них уже закрыта.