Если в отчётах поисковых систем всплывают дубли, а в логах видно, что одна и та же страница доступна по нескольким адресам, проблема часто не в контенте, а в маршрутизации. В WordPress это обычно происходит из-за архивов автора, вложений, пагинации, параметров ?replytocom, а иногда — из-за неверных редиректов в теме, плагине или на уровне сервера.
Ниже разберём, как найти источник дублей, что можно исправить кодом, а что лучше закрыть настройками или редиректом. Без лишней теории — только рабочие шаги.
Как понять, что дубли появились именно из-за переадресации
Сначала нужно отличить настоящий дубль контента от технического дубля URL. Для SEO это разные истории: в первом случае у вас несколько страниц с одинаковым текстом, во втором — одна и та же страница открывается по разным адресам.
Типичные признаки
- в Google Search Console растёт число страниц с пометкой о дубликате, выбранной канонической странице или альтернативной странице с правильным каноническим URL;
- одна запись открывается и по
/post-name/, и по/post-name/?utm_source=..., и по адресу сreplytocom; - архивы автора, даты и вложений индексируются, хотя не несут самостоятельной ценности;
- после смены структуры ссылок старые адреса ведут на цепочку редиректов, а не на один конечный URL.
Что проверить в первую очередь
Откройте несколько подозрительных URL и посмотрите код ответа. Если страница отдаёт 200 OK по нескольким адресам, это дубль. Если есть 301 или 302, но цепочка длинная, поисковик всё равно может тратить краулинговый бюджет впустую.
curl -I https://example.com/sample-post/?replytocom=123Полезно сравнить конечный адрес после редиректа и канонический тег в HTML. Если они расходятся, сначала исправляют именно это.
Какие источники дублей встречаются в WordPress чаще всего
В реальных проектах проблема обычно складывается из нескольких мелких причин. По отдельности они не выглядят критично, но вместе создают шум в индексации.
| Источник | Как выглядит | Что делать |
|---|---|---|
| Архивы автора | /author/name/ | Оставить только если авторские страницы реально полезны; иначе закрыть от индексации или убрать из карты сайта |
| Страницы вложений | /image-name/ вместо медиафайла | Редиректить на файл или на родительскую запись |
| Параметры комментариев | ?replytocom=... | Отключить генерацию ссылок с параметром и при необходимости редиректить |
| Пагинация архивов | /page/2/, /page/3/ | Проверить каноникал и индексацию, не закрывать без причины |
| Старые URL после смены структуры | цепочки 301 | Свести к одному редиректу на финальный адрес |
Пошаговое решение: как убрать дубли без потери полезных страниц
Шаг 1. Найдите проблемные URL
Соберите список адресов из Search Console, логов сервера или краулера вроде Screaming Frog. Ищите не только страницы с одинаковым текстом, но и URL с параметрами, дубли архивов и старые адреса после миграции.
Если сайт небольшой, можно быстро проверить структуру вручную: главная, записи, архивы автора, вложения, пагинация, страницы тегов. На больших сайтах лучше идти от отчёта по индексированию и логов.
Шаг 2. Уберите лишние архивы из индекса
Если архивы автора не несут пользы, их обычно закрывают от индексации и исключают из карты сайта. Это можно сделать через SEO-плагин или кодом. Важно не путать noindex и редирект: если страница нужна пользователю, но не поисковику, чаще подходит noindex, follow.
add_filter( 'wp_robots', function( array $robots ) {
if ( is_author() || is_attachment() ) {
$robots['noindex'] = true;
$robots['follow'] = true;
}
return $robots;
} );Этот вариант не удаляет страницу из сайта, а только подсказывает роботам не индексировать её. Но для вложений часто лучше не ограничиваться мета-тегом, а сделать редирект.
Шаг 3. Перенаправьте страницы вложений на полезный URL
Если у медиафайла есть родительская запись, логичнее вести пользователя туда. Если родителя нет — на сам файл или на страницу архива медиа, в зависимости от структуры сайта. Для большинства контентных проектов безопаснее редиректить вложения на родительскую запись.
add_action( 'template_redirect', function() {
if ( is_attachment() ) {
$parent_id = get_post_field( 'post_parent', get_queried_object_id() );
if ( $parent_id ) {
wp_safe_redirect( get_permalink( $parent_id ), 301 );
exit;
}
}
} );Этот код стоит добавлять в дочернюю тему или в небольшой mu-plugin, а не в файл основной темы, если она регулярно обновляется.
Шаг 4. Уберите цепочки редиректов
Если старый URL сначала ведёт на промежуточный адрес, а потом ещё раз редиректится, это нужно сократить. Ищите правила в .htaccess, конфигурации nginx, SEO-плагинах и в коде темы. Частая ошибка — одновременно настроить редирект в плагине и в сервере.
Хорошая практика — один редирект с устаревшего адреса сразу на конечный канонический URL.
Шаг 5. Проверьте канонический тег
Даже если редиректы настроены правильно, канонический URL должен совпадать с конечным адресом страницы. Иначе поисковик может считать, что вы сами не уверены в основном варианте.
add_filter( 'wpseo_canonical', function( $canonical ) {
if ( is_attachment() ) {
$parent_id = get_post_field( 'post_parent', get_queried_object_id() );
if ( $parent_id ) {
return get_permalink( $parent_id );
}
}
return $canonical;
} );Этот пример относится к Yoast SEO. Если у вас другой SEO-плагин, проверьте его документацию: фильтры у всех разные, и не стоит подменять их наугад.
Когда лучше использовать плагин, а когда код
Если задача типовая — например, убрать архивы автора из индекса или настроить редирект вложений — удобнее решить её в SEO-плагине. Если проблема специфическая и связана с темой, кастомным типом записей или нестандартной логикой, надёжнее код.
| Подход | Плюсы | Минусы |
|---|---|---|
| Плагин | быстро, без правки кода, удобно для редактора | зависимость от интерфейса и обновлений, иногда меньше контроля |
| Код | точечное поведение, можно версионировать в Git | нужна аккуратность, легко сломать логику при обновлении темы |
| Серверные правила | быстро и эффективно для редиректов | сложнее сопровождать, выше риск ошибки в конфиге |
Если нужен аккуратный набор SEO-настроек и чистка технических дублей, в некоторых проектах удобно использовать Clearfy Pro: он закрывает часть типовых задач без ручной правки шаблонов. Но если проблема нестандартная, код всё равно придётся проверять отдельно. Ссылка для ориентира: Clearfy Pro.
Проверка результата после внедрения
После изменений не ограничивайтесь открытием страницы в браузере. Нужно проверить и HTTP-ответ, и каноникал, и индексацию.
- проверьте, что старые URL отдают один
301и сразу ведут на финальный адрес; - убедитесь, что вложения больше не открываются как отдельные контентные страницы;
- посмотрите исходный код страницы: канонический URL должен указывать на нужный адрес;
- в Search Console отправьте на переобход несколько проблемных URL и отследите статус через несколько дней;
- проверьте карту сайта: в ней не должно быть страниц, которые вы намеренно закрыли от индексации.
Для быстрой локальной проверки удобно сравнить заголовки ответа:
curl -I https://example.com/old-url/
curl -I https://example.com/new-url/Если на старом адресе вы видите 301, а на новом — 200, это хороший знак. Если есть цепочка из нескольких редиректов, её стоит сократить.
Частые ошибки и как их исправить
Закрыли страницу от индексации, но не убрали из карты сайта
Такой конфликт часто сбивает поисковик с толку. Если URL не должен индексироваться, уберите его из sitemap и проверьте, что SEO-плагин не добавляет его обратно автоматически.
Сделали редирект на главную
Это плохой универсальный ответ. Для вложений и старых материалов лучше вести на ближайший релевантный URL, а не на главную страницу. Иначе теряется смысл перехода и ухудшается поведение пользователей.
Оставили несколько источников редиректов
Когда одно и то же правило есть в .htaccess, в плагине и в PHP-коде, отладка становится мучительной. Оставьте один источник истины: либо сервер, либо плагин, либо код темы.
Поменяли каноникал, но не проверили пагинацию
На архивных страницах пагинация должна вести себя предсказуемо. Если вы бездумно назначите всем страницам один и тот же canonical, можно ухудшить индексацию полезных страниц архива.
Безопасность и производительность: что не стоит делать
Не добавляйте редиректы в шаблоны без проверки условий. Ошибка в template_redirect может привести к бесконечному циклу или поломке админки. Для постоянных правил лучше использовать mu-plugin или отдельный мини-плагин, чтобы не потерять логику при смене темы.
Если сайт большой, не проверяйте все URL вручную через браузер. Используйте логи, краулер и выборочную проверку. Это быстрее и меньше нагружает сервер. А ещё не стоит массово ставить noindex на всё подряд: иногда проблема не в индексации, а в плохой внутренней перелинковке или неверных редиректах.
Если после чистки дублей вы видите, что технических страниц всё ещё много, имеет смысл отдельно пройтись по дублям, архивам и служебным URL. На проектах, где нужен более широкий набор SEO- и технических настроек, часть задач можно закрыть через инструменты вроде Clearfy Pro, но только после проверки, что его правила не конфликтуют с текущими редиректами и SEO-плагином.
Короткий чек-лист перед публикацией изменений
- проверены проблемные URL и источник дубля;
- настроен один понятный редирект для старых адресов;
- вложения и архивы автора обработаны отдельно;
- канонический URL совпадает с конечным адресом;
- технические страницы не попадают в sitemap;
- нет цепочек редиректов и циклов;
- изменения протестированы через
curl -Iили аналогичный инструмент.
Если пройтись по этим пунктам последовательно, дубли из переадресации обычно удаётся убрать без потери полезных страниц и без лишнего вмешательства в контент.