Дубли в WordPress обычно появляются не из-за одной ошибки, а из-за набора мелочей: архивы тегов, пагинация, параметры в URL, версии с www и без, http/https, страницы автора, вложения медиафайлов, а иногда и из-за темы или SEO-плагина. В результате поисковик видит несколько адресов с одинаковым или почти одинаковым содержимым, а сайт сам распыляет внутренний вес.
Ниже — рабочий порядок: сначала находим источник дублей, потом решаем, что закрывать, что склеивать редиректом, а что оставлять как есть. Без «магического» удаления всего подряд.
Как понять, что проблема именно в дублях
Самый частый симптом — в индексе оказываются страницы, которые вы не планировали продвигать: архивы с параметрами, вложения изображений, страницы поиска, пагинация категорий, дубли записей с разными URL. Но ориентироваться только на отчёт в панели вебмастера недостаточно: сначала нужно посмотреть, какие URL реально генерирует сайт.
Что проверить в первую очередь
- одинаковый контент доступен по нескольким адресам;
- главная открывается и с
www, и без него; - сайт отвечает и по
http, и поhttps; - в индексе есть страницы вложений вида
/image-name/; - архивы тегов и авторов дублируют смысл категорий;
- страницы с параметрами
?replytocom=,?amp,?utm_или сортировкой попадают в индекс; - пагинация категорий создаёт много слабых страниц без уникальной ценности.
Если у вас установлен SEO-плагин, проверьте, не создаёт ли он отдельные архивы, каноникалы или мета-теги, которые конфликтуют с темой. На практике именно конфликт темы и SEO-настроек часто даёт дубли, а не сам WordPress.
Диагностика: где WordPress создаёт лишние URL
Начните с простого списка. Откройте сайт в браузере и проверьте несколько типовых адресов: главную, запись, категорию, тег, страницу автора, вложение изображения, поиск. Если один и тот же контент доступен по разным URL, это уже повод для правки.
Удобно сверить и серверные ответы. Например, если у вас есть доступ к консоли, проверьте редиректы и код ответа:
curl -I https://example.com/sample-post/
curl -I https://www.example.com/sample-post/
curl -I http://example.com/sample-post/
Ищите не только 200 OK, но и цепочки редиректов. Если канонический адрес не один, WordPress и поисковик будут расходиться в понимании главной версии страницы.
Ещё один полезный тест — посмотреть исходный код страницы и найти rel="canonical". Если каноникал указывает не туда, куда должен, сначала исправляйте его, а уже потом думайте о закрытии дублей.
Что делать: рабочая схема без лишнего риска
Для разных типов дублей нужен разный подход. Не все страницы надо удалять. Часть лучше закрыть от индексации, часть — склеить 301-редиректом, часть — оставить, но правильно настроить canonical.
| Сценарий | Что делать | Комментарий |
|---|---|---|
| http и https | 301-редирект на одну схему | Это базовая нормализация адресов |
| www и без www | 301-редирект на один вариант | Выберите один хост и придерживайтесь его везде |
| Вложения изображений | Редирект на файл или родительскую запись | Если отдельная страница вложения не нужна, её лучше не индексировать |
| Теги и авторы | Оставить, закрыть или доработать | Зависит от структуры сайта и объёма контента |
| Параметры URL | Canonical, noindex или редирект | Решение зависит от того, нужен ли параметр пользователю |
1. Нормализуйте главный домен и протокол
Это первый слой. Если у сайта есть доступные версии с www и без него, а также по http и https, поисковик может воспринимать их как разные страницы. В идеале все варианты должны вести на один канонический адрес через 301.
На уровне сервера это обычно настраивается в nginx или Apache. В WordPress не стоит пытаться чинить это только кодом темы — редирект должен срабатывать раньше, чем загрузится PHP.
2. Отключите индексацию вложений и пустых архивов
Страницы вложений часто бесполезны для поиска: на них почти нет контента, зато они плодят адреса. Если отдельные страницы медиа вам не нужны, перенаправляйте их на файл или на родительскую запись. Для архивов тегов и авторов решение зависит от структуры сайта: если архивы реально полезны и содержат уникальные подборки, их можно оставить; если это пустые страницы ради количества, лучше закрыть.
Если вы используете Clearfy Pro, часть таких задач можно закрыть настройками без кода: убрать лишние архивы, очистить дубли и отключить технические сущности, которые не должны участвовать в индексации. Это не отменяет проверки canonical и редиректов, но сокращает ручную работу.
3. Склейте параметры, которые не должны создавать новые страницы
Параметры вроде ?replytocom= или служебные UTM не должны порождать отдельные страницы в индексе. Если параметр нужен только для аналитики, поисковику он не интересен. Если параметр влияет на контент, тогда нужен отдельный разбор: иногда лучше оставить параметр, но задать canonical на чистый URL.
Пример безопасного редиректа для вложений через template_redirect:
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;
});
Этот вариант не ломает сайт и не требует отдельного плагина. Он просто убирает бесполезные страницы вложений из пользовательского и поискового пути.
Когда лучше noindex, а когда 301
Это ключевой вопрос. Если страница не должна существовать как отдельный адрес, используйте 301-редирект. Если страница полезна пользователю, но не нужна в поиске, применяйте noindex. Если страница должна остаться, но есть её альтернативная версия, задайте canonical.
Простой ориентир:
- 301 — когда есть явная замена страницы;
- noindex — когда страница нужна на сайте, но не в выдаче;
- canonical — когда есть дубль, но вы хотите сохранить доступность обеих версий для пользователя;
- ничего не делать — только если страница реально уникальна и полезна.
Проверка после внедрения
После правок не ограничивайтесь визуальной проверкой. Нужно убедиться, что поисковый робот видит именно ту структуру, которую вы задумали.
Чек-лист проверки
- главный домен открывается только в одном варианте;
- http и альтернативный хост отдают 301 на канонический адрес;
- страницы вложений больше не доступны как отдельные документы;
- в исходном коде у ключевых страниц правильный
canonical; - страницы, закрытые от индексации, действительно отдают
noindex; - внутренние ссылки ведут на чистые URL без лишних параметров;
- в sitemap нет мусорных адресов, которые вы не хотите индексировать.
Для точечной проверки откройте несколько URL через curl -I и сравните заголовки. Если вы меняли canonical, проверьте исходный код страницы. Если вы настраивали редиректы, убедитесь, что нет цепочек из двух-трёх переходов.
curl -I https://example.com/image-name/
curl -I https://example.com/?replytocom=12
curl -I https://example.com/category/sample/
Если страница отдаёт 200 там, где вы ожидали 301 или noindex, значит правило не сработало или его перебивает другой плагин.
Частые ошибки и как их исправить
Ставят noindex вместо редиректа
Это частая путаница. Если есть две версии одной и той же страницы, noindex не решает проблему дубля, он лишь просит поисковик не индексировать одну из версий. Пользователь и робот всё равно могут ходить по обеим. Для явных дублей нужен 301.
Закрывают в robots.txt то, что надо склеить
Если просто закрыть URL в robots.txt, поисковик может не увидеть canonical и не понять, куда склеивать адреса. Для дублей это часто плохая идея. Сначала редирект или canonical, потом уже точечное ограничение обхода, если оно действительно нужно.
Ломают архивы без проверки темы
Некоторые темы используют архивы авторов, категорий и тегов в навигации и хлебных крошках. Если отключить их без проверки, можно получить битые ссылки или пустые разделы. Сначала посмотрите, где архивы используются в шаблонах.
Оставляют параметры в внутренних ссылках
Если в меню, кнопках или блоках контента гуляют ссылки с UTM или служебными параметрами, вы сами создаёте дубли. Внутренние ссылки должны быть чистыми. Параметры — только для внешних кампаний или технически оправданных сценариев.
Практические советы по безопасности и производительности
Чем больше правил редиректа и фильтров вы добавляете, тем важнее не перегрузить сайт. Не вешайте тяжёлую логику на каждый запрос, если можно решить вопрос на уровне сервера или через SEO-плагин. Код в functions.php подходит для точечных задач, но не для сложной матрицы редиректов на сотни URL.
Если редиректов много, держите их в одном месте и документируйте причину каждого правила. Это помогает не сломать сайт при следующем обновлении темы или плагина. И не забывайте делать резервную копию перед массовыми изменениями: ошибка в редиректах может быстро превратить нормальную индексацию в цепочку 404.
Для сайтов с большим количеством технических дублей полезно сначала навести порядок в шаблонах и настройках, а уже потом заниматься точечными правками. Иногда достаточно убрать лишние архивы, отключить страницы вложений и привести canonical к одному стандарту, чтобы проблема заметно сократилась без сложного кода.