Дубли в WordPress редко выглядят как одна очевидная ошибка. Чаще это набор одинаковых страниц, которые открываются по разным URL: с www и без него, с http и https, с параметрами ?replytocom=, архивами тегов, пагинацией, страницами вложений и служебными версиями контента. В результате поисковик тратит краулинговый бюджет не туда, а в индексе появляются лишние адреса.
Ниже — рабочий сценарий: как найти источник дублей, что закрывать редиректом, что — noindex, а что лучше вообще не генерировать.
Как понять, что проблема именно в дублях
Первый признак — в поиске или в отчётах вебмастеров видно несколько URL с одинаковым заголовком и почти одинаковым сниппетом. Второй — одна и та же запись открывается по нескольким адресам, а канонический URL не совпадает с тем, который вы считаете основным.
Что проверить в первую очередь
- одинаковые страницы доступны по
httpиhttps; - сайт открывается с
wwwи без него; - есть архивы категорий, тегов, авторов, дат, которые дублируют друг друга по смыслу;
- в индексе есть страницы вложений с пустым или почти пустым содержимым;
- URL с параметрами сортировки, поиска или комментариев попадают в индекс;
- одинаковые записи доступны через несколько таксономий и архивов.
Если у вас установлен доступ к Google Search Console или Яндекс.Вебмастеру, откройте отчёт по страницам в индексе и сравните URL с одинаковым title. Это самый быстрый способ увидеть, где WordPress плодит лишние адреса.
Диагностика: откуда WordPress берёт дубли
Удобнее идти от источника к следствию. Сначала проверьте настройки сайта, потом шаблоны и только после этого — плагины.
1. Базовые настройки адресов
В Настройки → Общие адрес WordPress и адрес сайта должны быть согласованы: один протокол, один вариант домена. Если сайт живёт на https://example.ru, а часть ссылок генерируется как http://www.example.ru, это уже повод для редиректов и пересборки внутренних ссылок.
2. Архивы и служебные страницы
WordPress по умолчанию создаёт архивы по авторам, датам, тегам, категориям, вложениям и поиску. Не все из них нужны в индексе. Например, страницы вложений часто повторяют медиафайл без полезного текста, а архивы дат редко дают уникальную ценность.
3. Параметры в URL
Параметры вроде ?replytocom=, ?utm_, ?sort= и похожие могут создавать десятки адресов для одной и той же страницы. Если они не нужны для логики сайта, их лучше не индексировать и не оставлять в обходе.
Пошаговое решение без лишнего риска
Ниже — порядок, который обычно даёт предсказуемый результат и не ломает сайт.
Шаг 1. Выберите один основной вариант URL
Сначала зафиксируйте канонический формат: https, один домен, один слэш на конце, если это принято на сайте. После этого настройте 301-редирект со всех альтернативных вариантов.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\.example\.ru$ [NC]
RewriteRule ^(.*)$ https://example.ru/$1 [L,R=301]
</IfModule>Это базовый пример для Apache. Если у вас Nginx, редирект настраивается в конфиге сервера, а не в .htaccess.
Шаг 2. Отключите индексацию ненужных архивов
Если архивы тегов, авторов или дат не несут самостоятельной ценности, их лучше закрыть от индексации через SEO-плагин или код. Важно: не путайте noindex и редирект. noindex оставляет страницу доступной для пользователей, но просит поисковик не хранить её в выдаче.
Пример через фильтр WordPress для архивов автора и дат:
add_filter('wp_robots', function ($robots) {
if (is_author() || is_date()) {
$robots['noindex'] = true;
$robots['follow'] = true;
}
return $robots;
});Такой подход уместен, если вы хотите оставить архивы доступными, но не тащить их в индекс. Если архивы вообще не нужны, лучше закрыть их на уровне SEO-настроек или шаблона.
Шаг 3. Уберите дубли страниц вложений
Страницы вложений почти всегда бесполезны как отдельные посадочные. Практичнее редиректить их на сам файл или на родительскую запись.
add_action('template_redirect', function () {
if (is_attachment()) {
$parent = wp_get_post_parent_id(get_the_ID());
if ($parent) {
wp_redirect(get_permalink($parent), 301);
exit;
}
$file = wp_get_attachment_url(get_the_ID());
if ($file) {
wp_redirect($file, 301);
exit;
}
}
});Это не универсальная магия: если вложение используется как отдельная страница по дизайну, такой редирект делать не стоит. Но для обычного блога это один из самых полезных шагов.
Шаг 4. Закройте параметрические URL
Если на сайте есть URL с параметрами, которые не должны индексироваться, добавьте каноникал на чистую версию страницы. В WordPress это обычно делает SEO-плагин, но в простых случаях можно проверить, что <link rel="canonical"> указывает на основной адрес.
Для страниц с комментариями и похожими параметрами иногда достаточно отключить их генерацию в теме или плагине, чтобы не плодить адреса в обходе.
Шаг 5. Проверьте внутренние ссылки
Даже если редиректы настроены, внутренние ссылки должны сразу вести на правильный URL. Иначе поисковик и пользователи будут постоянно проходить через лишний редирект.
Проверьте меню, хлебные крошки, ссылки в контенте, блоки «похожие записи» и ссылки в футере. Если часть ссылок генерируется вручную, исправьте их в шаблонах или через поиск и замену в базе после резервной копии.
Что выбрать: редирект, noindex или удаление
| Ситуация | Что делать | Комментарий |
|---|---|---|
| http/https, www/без www | 301-редирект | Это один и тот же адрес, нужен один канонический вариант |
| Страницы вложений | 301-редирект | Если вложение не должно жить отдельно |
| Архивы дат, авторов, тегов | noindex или отключение | Зависит от структуры сайта и ценности архива |
| URL с мусорными параметрами | каноникал + ограничение генерации | Если параметр не нужен для контента |
| Полностью лишняя страница | удаление + 410/301 | Если есть замена — редирект, если нет — 410 уместен |
Проверка результата после внедрения
После правок не полагайтесь на ощущение «вроде стало лучше». Проверьте результат по фактам.
- откройте старые URL и убедитесь, что они отдают
301на нужный адрес; - посмотрите исходный код страницы и проверьте
rel="canonical"; - проверьте мета-роботы на архивных страницах;
- сравните отчёты индексации до и после;
- пройдитесь краулером по сайту и найдите дубли title, H1 и URL.
Для быстрой ручной проверки удобно использовать curl:
curl -I https://example.ru/staryj-url/
curl -I https://example.ru/wp-content/uploads/2024/01/image.jpgВ ответе важно увидеть ожидаемый код: 301 для редиректа, 200 для страницы, которая должна оставаться доступной, и отсутствие цепочек из нескольких переадресаций.
Частые ошибки и как их исправить
Редирект сделан, но дубли остаются в индексе
Это нормально в короткой перспективе: поисковик не удаляет старые URL мгновенно. Проверьте, что старые адреса действительно отдают 301, а не 302 или цепочку редиректов.
Закрыли страницу через noindex, но она всё равно сканируется
noindex не запрещает обход. Если страница не нужна вообще, используйте редирект или удаление. Если нужна пользователю, но не нужна в выдаче, noindex подходит.
Сломались вложения или архивы в теме
Часто причина в том, что редирект добавили слишком широко. Например, перенаправили все архивы на главную, хотя часть из них использовалась в навигации. Сначала проверьте шаблон и логику темы, потом меняйте правила.
Появились цепочки редиректов
Обычно это следствие нескольких слоёв: плагин редиректит одно, сервер — другое, а тема генерирует третье. Оставьте один источник истины: либо сервер, либо SEO-плагин, либо код в теме/му-плагине.
Практические советы по производительности и безопасности
Если дублей много, не пытайтесь править всё вручную через админку. Сначала сделайте резервную копию базы и файлов, потом меняйте правила на тестовой копии сайта. Это особенно важно, если вы планируете массовый поиск и замену URL в контенте.
Для технической чистки удобно использовать инструменты, которые помогают убрать дубли мета-данных, архивов и служебных страниц. Например, в Clearfy Pro есть набор функций для SEO-чистки и отключения лишнего технического мусора; если вы уже используете такой плагин, проверьте, не дублирует ли он ваши ручные правила. Ссылка на продукт должна быть только как ориентир: Clearfy Pro.
Главный принцип простой: сначала убираем источник дубля, потом настраиваем индексацию, и только потом проверяем, как это отражается в поиске. Если сделать наоборот, можно получить красивую настройку на бумаге и хаос в индексе.