Дубли в WordPress обычно появляются не из-за одной ошибки, а из-за набора мелких настроек: архивы тегов, пагинация, страницы вложений, параметры URL, версии с и без слэша, HTTP и HTTPS, www и без www. На живом сайте это быстро превращается в лишние URL в индексе, размывание веса и путаницу в отчётах Search Console.
Ниже — рабочий сценарий: как сначала найти источник дублей, потом убрать его на уровне настроек, редиректов и мета-тегов, а затем проверить, что проблема действительно закрыта.
Как понять, что у вас именно дубли, а не просто много страниц
Симптомы обычно видны в нескольких местах сразу. В индексе появляются URL с параметрами, в поиске всплывают страницы вложений вместо записей, а в отчётах краулинга — одинаковые title и description на разных адресах. Если сайт небольшой, это заметно вручную. На среднем и крупном проекте без диагностики легко лечить не ту причину.
Что проверить в первую очередь
- поисковую выдачу по оператору
site:example.ruи сравнение подозрительных URL; - отчёт «Страницы» в Google Search Console или аналог в Яндекс.Вебмастере;
- наличие архивов тегов, авторов, дат и вложений;
- URL с параметрами сортировки, фильтрации, UTM и служебными переменными;
- разные версии одного адреса:
/page/2/,?amp,?replytocom,/attachment/.
Диагностика: откуда в WordPress берутся дубли
Самый полезный подход — не гадать, а разложить проблему по типам URL. Тогда становится ясно, что закрывать редиректом, что — noindex, а что — просто отключать в настройках темы или плагина.
| Источник дубля | Как выглядит | Что делать |
|---|---|---|
| Архивы таксономий | Одинаковый контент в тегах и рубриках | Оставить только нужные архивы, остальные закрыть от индексации |
| Страницы вложений | Отдельный URL для изображения | Сделать редирект на родительскую запись или отключить индексацию |
| Параметры в URL | ?sort=, ?filter=, ?replytocom= | Нормализовать URL и при необходимости закрыть от индексации |
| Версии домена | HTTP/HTTPS, www/без www | Настроить один канонический вариант и 301-редирект |
| Пагинация и архивы | /page/2/, /author/, /date/ | Проверить, нужны ли они в индексе вообще |
Если у вас уже стоит SEO-плагин, сначала посмотрите его настройки. Часто проблема не в том, что WordPress «плохо индексируется», а в том, что включены лишние архивы или не настроены канонические URL.
Пошаговое решение: что отключать, что редиректить, а что оставлять
1. Уберите лишние архивы и страницы вложений
Если сайт не использует архивы авторов или дат как отдельную точку входа, их лучше закрыть от индексации. Для вложений безопаснее не оставлять отдельную страницу-обёртку, а вести пользователя сразу к исходной записи.
Пример редиректа страниц вложений на родительскую запись:
<?php
add_action('template_redirect', function () {
if (!is_attachment()) {
return;
}
$parent_id = wp_get_post_parent_id(get_queried_object_id());
if ($parent_id) {
wp_safe_redirect(get_permalink($parent_id), 301);
exit;
}
wp_safe_redirect(home_url('/'), 301);
exit;
});Это не решает все дубли на сайте, но убирает один из самых частых источников мусора в индексе.
2. Нормализуйте домен и протокол
Один и тот же сайт не должен открываться по четырём разным адресам. Проверьте, что в Настройки > Общие указан один вариант домена, а сервер отдаёт 301 на каноническую версию.
Если редирект нужен на уровне WordPress, используйте его аккуратно — лучше один раз на уровне веб-сервера, но для небольших проектов допустим и такой вариант:
<?php
add_action('template_redirect', function () {
$host = $_SERVER['HTTP_HOST'] ?? '';
$uri = $_SERVER['REQUEST_URI'] ?? '/';
$target_host = 'example.ru';
$is_https = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off');
if ($host !== $target_host || !$is_https) {
wp_safe_redirect('https://' . $target_host . $uri, 301);
exit;
}
});Перед внедрением проверьте, нет ли за прокси или CDN отдельной логики HTTPS. Иначе можно получить цикл редиректов.
3. Закройте служебные параметры URL
Параметры вроде ?replytocom= и некоторых вариантов фильтрации часто создают дубли без пользы для поиска. Если параметр не нужен для индексации, его лучше не пускать в канонические страницы.
Для replytocom можно убрать его из ссылок на комментарии, если тема или плагин его добавляет. Для параметров фильтров и сортировки настраивайте канонический URL и, при необходимости, noindex,follow на страницах с параметрами.
4. Настройте канонические URL там, где контент похожий, но не идентичный
Не все похожие страницы нужно удалять. Иногда это нормальные страницы пагинации, архивы или фильтры каталога. В таком случае задача не в удалении, а в указании основной версии.
Если вы пишете свой шаблон или плагин, можно добавить канонический тег вручную для нестандартных страниц:
<?php
add_action('wp_head', function () {
if (is_singular()) {
echo '<link rel="canonical" href="' . esc_url(get_permalink()) . '" />' . "\n";
}
}, 1);В обычной теме это часто уже делает SEO-плагин. Тогда вручную дублировать тег не нужно, иначе можно получить конфликт каноникалей.
Когда лучше использовать плагин, а когда — код
Если задача типовая, проще закрыть её в SEO-плагине: отключить архивы, настроить robots, убрать страницы вложений, задать canonical. Код нужен там, где у вас нестандартная логика темы, самописные фильтры или конфликт нескольких плагинов.
| Подход | Плюсы | Минусы |
|---|---|---|
| Плагин | Быстро, меньше риска сломать шаблон | Ограничен интерфейсом и возможностями плагина |
| Код в теме/плагине | Точный контроль, можно учесть бизнес-логику | Нужна проверка на обновления и конфликты |
| Серверный редирект | Быстро и надёжно для домена и протокола | Не решает проблемы canonical и архивов |
Если нужен именно набор инструментов для чистки дублей и технического SEO, уместно смотреть в сторону решений вроде Clearfy Pro: там проще централизованно отключать лишние архивы, служебные элементы и часть мусорных страниц. Но даже с плагином полезно понимать, что именно вы закрываете и почему.
Проверка результата после внедрения
После изменений не ограничивайтесь открытием главной страницы в браузере. Проверьте несколько уровней сразу.
- Откройте несколько старых URL вручную и убедитесь, что они отдают 301 на нужный адрес.
- Проверьте исходный код страницы: есть ли один корректный
canonical. - Посмотрите, не появились ли цепочки редиректов.
- Сравните список индексируемых URL в Search Console до и после.
- Проверьте, не пропали ли из индекса важные страницы вместе с мусорными.
Для быстрой проверки редиректа удобно использовать:
curl -I https://example.ru/old-url/В ответе должен быть 301 и новый Location. Если вместо этого видите 200, значит редирект не сработал. Если видите несколько последовательных переходов, нужно упростить схему.
Частые ошибки и как их исправить
Ставят noindex на всё подряд
Иногда после обнаружения дублей закрывают от индексации и архивы, и рубрики, и пагинацию, и даже основные записи. В результате сайт теряет полезные страницы. Сначала отделите мусор от полезных разделов, потом закрывайте только лишнее.
Дублируют canonical вручную и через плагин
Если SEO-плагин уже выводит canonical, а тема добавляет второй тег, поисковик может получить противоречивые сигналы. Оставьте один источник каноникалей.
Редиректят всё на главную
Это грубая ошибка. Если старая страница имела тематический аналог, редирект должен вести на максимально близкий адрес, а не на главную. Иначе теряется релевантность и ухудшается поведение пользователей.
Не проверяют вложения и медиа-страницы
На многих сайтах именно страницы вложений создают длинный хвост дублей. Особенно это заметно, если изображения массово вставляются в записи и затем индексируются отдельно.
Практические советы по безопасности и производительности
Любой редирект или фильтр лучше выносить в дочернюю тему или небольшой mu-plugin, а не править ядро темы. Так вы не потеряете изменения после обновления.
Если сайт большой, не пытайтесь массово менять URL без плана. Сначала выгрузите список проблемных адресов, затем настройте редиректы, и только после этого меняйте robots или canonical. Иначе можно получить временную просадку трафика из-за резкой смены сигналов.
Ещё один практический момент: не плодите тяжёлые проверки в template_redirect без необходимости. Если правило можно решить на уровне nginx или Apache, серверный редирект будет дешевле для производительности, чем обработка через WordPress на каждом запросе.
Если у вас уже есть SEO-плагин, проверьте, не дублирует ли он функции темы. Часто проблема с дублями возникает именно из-за конфликта между темой, плагином и ручными правками в шаблонах.