В WordPress дубли обычно появляются не из-за одной ошибки, а из-за набора мелких настроек: архивы категорий, теги, авторы, даты, пагинация, страницы вложений, параметры в URL и разные версии одной и той же записи. Если это не контролировать, поисковик тратит краулинговый бюджет на мусорные страницы, а в индексе остаются не те URL, которые вы хотели продвигать.
Ниже — рабочая схема: сначала быстро диагностируем, какие дубли реально есть на сайте, затем закрываем лишнее на уровне SEO-плагина или кода, и после этого проверяем результат в индексе и в ответах сервера.
Какие дубли в WordPress встречаются чаще всего
На практике проблема почти всегда упирается в один из этих сценариев:
- одна и та же запись доступна по нескольким адресам из-за категорий, меток или пагинации;
- архивы тегов и авторов создают тонкие страницы без ценности;
- страницы вложений индексируются отдельно от родительской записи;
- URL с параметрами вроде
?replytocom=,?amp,?utm_*или сортировками плодят копии; - страницы поиска по сайту и внутренние фильтры попадают в индекс;
- дубли появляются после миграции, когда старые адреса и новые версии доступны одновременно.
Что смотреть в первую очередь
Не начинайте с массового закрытия всего подряд. Сначала проверьте, какие URL уже индексируются и откуда они берутся. Для этого полезны:
- отчёт Страницы в Google Search Console;
- поиск
site:example.ruпо ключевым разделам; - краулер вроде Screaming Frog или Sitebulb;
- логика внутренних ссылок: где WordPress сам генерирует архивы и пагинацию.
Диагностика проблемы: как понять, что это именно дубли
Если в индексе много похожих страниц, но трафик не растёт, проверьте не только title и description, а именно канонический URL и статус ответа. Частая ошибка — страница выглядит как дубль, но на деле отдаёт 200 OK и не имеет noindex или корректного canonical.
Быстрый чек вручную:
curl -I https://example.ru/tag/seo/
curl -I https://example.ru/author/admin/
curl -I https://example.ru/sample-post/attachment/image-name/Если страница должна быть закрыта, но отвечает 200 OK и не содержит noindex, поисковик может продолжать её обходить и индексировать.
Что считать нормой, а что нет
| Тип URL | Обычно нужен в индексе | Что делать |
|---|---|---|
| Записи и важные страницы | Да | Оставить индексируемыми |
| Категории с трафиком | Иногда | Проверить контент и спрос, не закрывать автоматически |
| Теги, авторы, даты | Чаще нет | Закрыть или убрать из индекса по ситуации |
| Страницы вложений | Почти никогда | Редирект на родительскую запись или noindex |
| Поиск по сайту | Нет | Закрыть от индексации |
Пошаговое решение: как закрыть дубли в WordPress
1. Настройте архивы в SEO-плагине
Если у вас установлен SEO-плагин, начните с него. В большинстве случаев достаточно отключить индексацию тегов, архивов авторов и дат, если они не несут самостоятельной ценности. Но не закрывайте категории вслепую: у некоторых сайтов именно категории дают основной органический трафик.
Если нужен более широкий набор инструментов для чистки дублей, служебных страниц и технических настроек, можно посмотреть в сторону Clearfy Pro: https://wpshop.ru/plugins/clearfy. Но даже с плагином важно понимать, что именно вы закрываете и зачем.
2. Закройте служебные страницы через noindex и canonical
Если плагин не покрывает нужный сценарий, можно добавить точечную логику в functions.php дочерней темы или в небольшой mu-plugin. Ниже пример: закрываем поиск, архивы тегов и страницы вложений, а вложения редиректим на родителя, если он есть.
<?php
add_action('template_redirect', function () {
if (is_attachment()) {
$parent = wp_get_post_parent_id(get_queried_object_id());
if ($parent) {
wp_safe_redirect(get_permalink($parent), 301);
exit;
}
}
});
add_filter('wp_robots', function (array $robots) {
if (is_search() || is_tag() || is_attachment()) {
$robots['noindex'] = true;
$robots['nofollow'] = true;
}
return $robots;
});Этот вариант не заменяет SEO-настройки плагина, а дополняет их. Он полезен, когда нужно закрыть только часть архивов или когда в проекте есть кастомная логика.
3. Уберите дубли от параметров URL
Параметры в URL часто появляются из-за шаринга, комментариев, фильтров или аналитики. Не все из них надо закрывать одинаково. UTM-метки обычно не проблема, если canonical указывает на чистый URL. А вот внутренние параметры сортировки, фильтрации и технические хвосты лучше не пускать в индекс.
Если у вас есть кастомные параметры, их можно нормализовать на уровне канонического URL. Пример для простого случая:
<?php
add_filter('get_canonical_url', function ($canonical, $post) {
if (is_string($canonical)) {
$canonical = remove_query_arg(array('replytocom', 'sort', 'filter'), $canonical);
}
return $canonical;
}, 10, 2);Здесь важно не переусердствовать. Нельзя бездумно вырезать все параметры подряд, если часть из них реально влияет на содержимое страницы.
4. Проверьте архивы тегов, авторов и дат
Если на сайте один автор или теги используются как декоративные метки, такие архивы обычно не дают пользы. Их можно закрыть от индексации и убрать из карты сайта. Но если у вас новостной проект или контентная команда, архивы авторов и дат могут быть полезны — тогда решение надо принимать по данным, а не по шаблону.
Практический критерий простой: если архив содержит мало уникального текста, слабую внутреннюю перелинковку и не получает входящих ссылок, индексировать его обычно нет смысла.
Проверка результата после внедрения
После изменений не ограничивайтесь открытием страницы в браузере. Проверьте три вещи: код ответа, robots-мета и canonical.
- для закрытых страниц должен быть корректный
noindexили редирект; - canonical должен вести на основную версию URL;
- в sitemap не должно быть служебных страниц, которые вы закрыли;
- внутренние ссылки должны вести на чистые URL без лишних параметров.
Проверка через curl:
curl -s https://example.ru/tag/seo/ | grep -i robots
curl -s https://example.ru/sample-post/ | grep -i canonicalЕсли используете Search Console, отправьте на переобход несколько страниц, которые изменили. Для закрытых URL нормально, если они ещё какое-то время остаются в отчётах — индекс не обновляется мгновенно.
Частые ошибки и как их исправить
Закрыли всё подряд, включая полезные категории
Это самая дорогая ошибка. Категории часто собирают трафик по информационным запросам. Если закрыть их автоматически, можно потерять посадочные страницы, которые уже работают. Сначала смотрите статистику и только потом меняйте индексируемость.
Поставили noindex, но оставили страницу в sitemap
Так поисковик получает противоречивые сигналы. Страница одновременно объявлена важной в карте сайта и закрыта от индексации. Лучше убрать её из sitemap, если она не должна индексироваться.
Сделали редирект на все вложения без проверки родителя
Если у вложения нет родительской записи, редирект на главную может быть слишком грубым. Иногда лучше отдать 404/410 для удалённого медиафайла, чем отправлять пользователя и робота на нерелевантную страницу.
Использовали canonical вместо реального закрытия
Canonical — это подсказка, а не жёсткий запрет. Для некоторых дублей этого достаточно, но если страница не должна существовать в индексе вообще, нужен noindex или редирект.
Безопасность и производительность: что не сломать по пути
Любые правки в functions.php лучше делать в дочерней теме или через отдельный mu-plugin. Иначе при обновлении темы вы потеряете изменения. Перед внедрением проверьте, нет ли уже похожей логики в SEO-плагине, чтобы не получить двойной noindex или конфликт canonical.
Если сайт большой, не добавляйте тяжёлые проверки на каждый запрос. Простые условия вроде is_tag() и is_search() безопасны. А вот сложные запросы к базе в фильтрах robots и canonical лучше не делать без необходимости.
Когда лучше решать это плагином, а когда кодом
| Подход | Плюсы | Минусы |
|---|---|---|
| SEO-плагин | Быстро, удобно для редактора | Меньше гибкости, иногда много лишних настроек |
| Код в теме или mu-plugin | Точечный контроль, можно учесть логику проекта | Нужен разработчик и контроль обновлений |
| Комбинированный вариант | Обычно самый практичный | Нужно следить, чтобы настройки не конфликтовали |
Для небольшого сайта чаще хватает настроек SEO-плагина. Для проекта с нестандартными архивами, фильтрами и мультиязычностью лучше комбинировать плагин и код. Именно так проще избежать ситуации, когда часть дублей закрыта, а часть продолжает плодиться из-за шаблона темы или кастомной таксономии.
Мини-чек-лист перед публикацией изменений
- Проверили, какие архивы реально дают трафик.
- Закрыли только лишние типы страниц, а не весь сайт целиком.
- Убрали закрытые URL из sitemap.
- Проверили canonical и robots на нескольких типах страниц.
- Убедились, что вложения и параметры URL не создают новые копии.
- Отправили важные URL на переобход в Search Console.
Если после правок в индексе всё ещё остаются старые адреса, это не всегда ошибка. Сначала проверьте, не ведут ли на них внутренние ссылки, нет ли внешних ссылок и не отдаются ли они с кодом 200 OK. В WordPress именно такие мелочи чаще всего и удерживают дубли в поиске.