Дубли в WordPress обычно появляются не из-за одной ошибки, а из-за набора мелочей: архивы тегов и рубрик, страницы пагинации, версии с параметрами, вложенные URL медиафайлов, а иногда и одинаковые записи, доступные по нескольким адресам. На небольшом сайте это выглядит как «мусор в индексе», на большом — как распыление веса и лишняя нагрузка на обход.
Ниже — рабочий сценарий: как сначала найти источник дублей, потом убрать лишние URL без поломки сайта, и как проверить, что после правок поисковики видят именно ту версию страниц, которую вы хотите оставить.
Как понять, что у вас именно проблема дублей
Симптомы обычно видны в Search Console, логах обхода и в самом поиске. Но прежде чем что-то закрывать, нужно понять, какие именно дубли есть: контентные, технические или URL-дубли.
Что проверить в первую очередь
- одна и та же страница открывается с разными URL: со слешем и без, с
?utm=,?replytocom=,/amp/, если AMP вообще используется; - в индексе есть архивы тегов, авторов, дат, хотя они не несут самостоятельной ценности;
- медиафайлы доступны как отдельные страницы вложений и дублируют контент записи;
- одна запись доступна через несколько таксономий и хлебных крошек, но canonical указывает не туда;
- в выдаче всплывают страницы пагинации вместо основной категории.
Если у вас есть доступ к Search Console, откройте отчёт по страницам и посмотрите, какие URL помечены как дубликат, выбранная пользователем canonical отличается или альтернативная страница с правильным canonical. Это самый быстрый способ отделить реальные дубли от нормального поведения поисковика.
Диагностика: где WordPress чаще всего создаёт лишние URL
В WordPress дубли часто рождаются на уровне шаблонов и настроек, а не в контенте. Поэтому смотреть нужно не только на записи, но и на то, как тема и плагины формируют ссылки.
Типовые источники дублей
| Источник | Что происходит | Что делать |
|---|---|---|
| Архивы тегов и авторов | Создают десятки слабых страниц с повторяющимися сниппетами | Оставить только если они реально нужны, иначе закрыть от индексации |
| Страницы вложений | Медиафайл получает отдельную страницу с почти пустым содержимым | Редиректить на сам файл или на родительскую запись |
| Параметры URL | Одна страница доступна с разными query-параметрами | Нормализовать canonical и не индексировать мусорные параметры |
| Пагинация архивов | В индекс попадают страницы 2, 3, 4 и далее без смысла | Оставить только если они нужны пользователю и имеют уникальную ценность |
| Дубли записей | Одна и та же запись доступна через несколько адресов | Проверить permalink, canonical и редиректы |
Если сайт уже давно работает, полезно дополнительно посмотреть серверные логи: повторяющиеся запросы к одному и тому же контенту с разными параметрами часто видны именно там. Это помогает не гадать, а закрывать конкретный источник.
Пошаговое решение: что закрывать, а что оставлять
Не все дубли нужно удалять. Часть из них лучше оставить доступными, но указать поисковику правильную основную версию. Для WordPress это обычно сочетание noindex, canonical и редиректов.
Шаг 1. Уберите индексирование слабых архивов
Если теги, авторы или даты не дают трафик и не несут навигационной пользы, их лучше закрыть от индексации. Делать это можно через SEO-плагин или кодом. Если у вас уже есть инструмент для технической чистки, например Clearfy Pro, проверьте, не дублирует ли он настройки SEO-плагина — двойная логика здесь только мешает.
Пример через wp_robots для архивов тегов и авторов:
<?php
add_filter('wp_robots', function ($robots) {
if (is_tag() || is_author() || is_date()) {
$robots['noindex'] = true;
$robots['nofollow'] = true;
}
return $robots;
});Этот вариант рабочий, но применять его стоит только если вы понимаете, что именно закрываете. На новостном сайте архивы дат могут быть полезны, а на корпоративном блоге — почти всегда нет.
Шаг 2. Отключите страницы вложений
Страницы attachment — частая причина мусора в индексе. Если они не используются как отдельные посадочные страницы, их лучше редиректить на родительскую запись или на сам файл.
<?php
add_action('template_redirect', function () {
if (is_attachment()) {
$parent_id = wp_get_post_parent_id(get_queried_object_id());
if ($parent_id) {
wp_redirect(get_permalink($parent_id), 301);
exit;
}
wp_redirect(home_url('/'), 301);
exit;
}
});Это простой и предсказуемый вариант. Если у вас медиаконтент важен для SEO, не применяйте редирект вслепую: сначала проверьте, не используются ли attachment-страницы в выдаче и внутренних ссылках.
Шаг 3. Нормализуйте canonical
Если одна и та же запись доступна по нескольким адресам, canonical должен указывать на один основной URL. В большинстве тем WordPress это уже работает, но после кастомных шаблонов, фильтров и плагинов бывают сбои.
Проверить и при необходимости поправить canonical можно через фильтр wpseo_canonical в Yoast SEO или аналогичный механизм вашего SEO-плагина. Если плагина нет, лучше не городить самодельную реализацию без необходимости: сначала проверьте, не ломает ли canonical тема.
Шаг 4. Уберите лишние параметры из индекса
Параметры сортировки, фильтрации и трекинга часто создают тысячи URL без уникального контента. Если они не нужны для SEO, не давайте им индексироваться. Для некоторых параметров достаточно запретить индексацию на уровне robots.txt, но это не заменяет canonical и не решает проблему полностью.
Практичнее всего оставить такие URL доступными для пользователей, но не считать их отдельными страницами. Если параметр создаёт полноценную копию контента, нужен редирект или серверная нормализация.
Когда лучше редирект, а когда noindex
Это ключевой вопрос. Ошибка здесь приводит либо к потере нужных страниц, либо к тому, что мусор продолжает жить в индексе.
| Подход | Когда использовать | Минус |
|---|---|---|
| 301 редирект | Если страница не нужна и у неё есть очевидная замена | Нужно аккуратно проверить внутренние ссылки и цепочки |
| noindex | Если страница нужна пользователю, но не должна ранжироваться | Страница остаётся в обходе, пока поисковик не переобойдёт её |
| canonical | Если есть несколько технических версий одного контента | Не гарантирует мгновенное исключение дубля из индекса |
На практике для WordPress чаще всего работает связка: attachment — редирект, архивы тегов — noindex, параметры URL — canonical или редирект, если параметр создаёт полноценный дубль.
Проверка результата после внедрения
После правок не ограничивайтесь открытием страницы в браузере. Нужно проверить, что поисковый робот видит нужный код ответа, canonical и robots-мета.
Что проверить вручную
- основной URL отдаёт
200 OK; - страницы, которые вы закрывали, отдают
noindexили301в зависимости от выбранной схемы; - canonical указывает на основную версию без лишних параметров;
- внутренние ссылки ведут на один и тот же адрес, а не на смесь URL с параметрами и без;
- в Search Console исчезают новые сообщения о дубликатах, а старые постепенно уходят после переобхода.
Проверить код ответа можно через curl:
curl -I https://example.com/sample-post/
curl -I https://example.com/sample-post/?utm_source=testВ первом случае вы должны увидеть 200. Во втором — либо тот же 200 с правильным canonical и без индексации, либо 301, если вы решили жёстко нормализовать URL.
Если используете браузерные расширения для SEO-проверки, не полагайтесь только на них: они показывают HTML, но не всегда корректно отражают цепочку редиректов и серверные ответы.
Частые ошибки и как их исправить
Закрыли от индексации всё подряд
Самая частая ошибка — убрать из индекса и полезные архивы, и страницы, которые реально приводят трафик. Перед изменениями посмотрите статистику по посадочным страницам. Если архив рубрики даёт переходы, не трогайте его без причины.
Поставили noindex, но оставили внутренние ссылки на дубль
Поисковик всё равно будет обходить URL, если на него активно ссылается сайт. Поэтому после закрытия дубля проверьте меню, хлебные крошки, блоки «похожие записи», виджеты и шаблоны.
Сделали редирект на главную без логики
Редирект всех дублей на главную — плохая практика. Если у страницы есть родитель или очевидная замена, редирект должен вести туда. Иначе вы теряете релевантность и создаёте странные пользовательские сценарии.
Не учли плагин, который переписывает canonical
SEO-плагины, кэш-плагины и плагины для медиа иногда вмешиваются в head. Если после правок canonical не меняется, проверьте, кто именно его выводит. В таких случаях полезно временно отключить конфликтующий плагин на тестовой копии сайта и сравнить HTML.
Практические советы по безопасности и производительности
Чистка дублей полезна не только для SEO. Чем меньше лишних URL и архивов, тем меньше бесполезных запросов к базе и тем проще кэшировать сайт.
- Не правьте canonical и редиректы прямо на боевом сайте без бэкапа.
- Если меняете логику через
functions.php, лучше вынести код в небольшой mu-plugin, чтобы он не потерялся при смене темы. - После массовых редиректов проверьте цепочки: один лишний прыжок на больших сайтах заметно ухудшает обход.
- Если используете кэш-плагин, очистите кэш после изменений, иначе вы будете проверять старую версию HTML.
Для сайтов с большим количеством архивов и технических страниц иногда удобнее сначала навести порядок через SEO/cleanup-плагин, а уже потом точечно добивать кодом то, что не закрывается настройками. Но автоматические инструменты не отменяют ручную проверку: они часто закрывают больше, чем нужно.
Если после внедрения изменений дубли всё ещё появляются, ищите не в одном месте, а по цепочке: шаблон темы, SEO-плагин, кэш, редиректы сервера, внутренние ссылки, параметры URL. В WordPress дубли почти всегда возникают на стыке нескольких слоёв, и именно там их нужно разбирать.