В WordPress дубли появляются не только из-за архивов. Чаще всего это разные URL для одной и той же страницы: с параметрами, со слешем и без, через пагинацию, с UTM, через поиск по сайту, а иногда и из-за темы или плагина, который генерирует отдельные версии контента. Проблема не в самом факте существования дубля, а в том, что поисковик начинает выбирать не ту страницу для индексации или тратит краулинговый бюджет на мусорные адреса.
Ниже разберём, как быстро диагностировать источник дублей, что можно исправить кодом, а что лучше закрыть настройками, и как проверить, что после правок сайт действительно стал чище.
Как понять, что у вас именно дубли, а не обычные страницы
Симптомы обычно видны в Search Console, логах сервера или при ручной проверке выдачи. Если одна и та же статья открывается по нескольким адресам, а в индексе всплывают версии с параметрами, это уже не косметическая проблема. Типичный пример: /post/, /post/?utm_source=..., /post/page/2/, /tag/post/ и даже /amp/, если AMP подключён отдельно.
Быстрая диагностика
- Откройте страницу с разными параметрами и проверьте, меняется ли
canonical. - Посмотрите отчёт «Страницы» в Google Search Console на предмет «дубли, Google выбрал другой канонический URL».
- Проверьте исходный код: есть ли у дублей
noindexили они отдаются как полноценные индексируемые страницы. - Сравните ответы сервера для вариантов URL с
curl -Iили через DevTools.
curl -I https://example.com/post/?utm_source=test
curl -I https://example.com/post/page/2/
Если оба адреса отдают 200 OK и не редиректят на канонический URL, поисковик видит две разные страницы. Это уже повод править логику генерации URL, а не только мета-теги.
Откуда в WordPress берутся дубли
Чаще всего источник один из следующих:
- параметры в URL: UTM, сортировка, фильтры, внутренний поиск;
- архивы таксономий, которые дублируют смысл записей;
- страницы пагинации, если они не нужны для индексации;
- страницы вложений, которые повторяют медиа без пользы;
- версии со слешем и без слеша, www и без www;
- шаблоны темы, которые выводят одинаковый контент в нескольких местах.
Если сайт уже давно работает, дубли часто накапливаются незаметно. Их не видно в админке, но они хорошо видны в карте сайта, в отчётах краулинга и в логах обхода.
Что исправлять кодом, а что — настройками
Не все дубли нужно закрывать одинаково. Если страница полезна пользователю и должна быть доступна, но не обязана индексироваться, используйте noindex или корректный canonical. Если адрес технический и не должен существовать как отдельная сущность, лучше делать редирект или отдавать 404/410 в зависимости от сценария.
| Подход | Когда применять | Плюсы | Минусы |
|---|---|---|---|
| Редирект 301 | Одинаковый контент на лишнем URL | Собирает сигнал в один адрес | Нужно аккуратно не сломать логику фильтров и поиска |
noindex | Страница полезна пользователю, но не нужна в поиске | Просто внедрить | Не убирает сам дубль из обхода сразу |
canonical | Есть несколько вариантов одной страницы | Помогает поисковику выбрать основной URL | Не заменяет редирект, если URL технически лишний |
Пошаговое решение: убираем дубли параметров и вложений
Если проблема в параметрах URL, сначала определите, какие из них реально нужны. Например, utm_* для аналитики не должны создавать отдельные индексируемые страницы. В большинстве случаев достаточно сохранить их для трекинга, но не давать поисковику считать их отдельными URL.
1. Приведите канонический URL к одной версии
WordPress сам умеет ставить canonical, но тема или SEO-плагин могут вмешиваться. Если у вас нестандартная логика, можно явно поправить canonical для страниц с параметрами:
add_filter('get_canonical_url', function ($canonical, $post) {
if (is_admin() || ! $canonical) {
return $canonical;
}
if (! empty($_GET) && is_singular()) {
return get_permalink($post);
}
return $canonical;
}, 10, 2);
Этот пример не удаляет параметры из адресной строки браузера, а только подсказывает поисковику основной URL. Для UTM этого обычно достаточно.
2. Закройте технические страницы от индексации
Страницы поиска по сайту, авторские архивы, вложения и пустые таксономии часто не дают ценности в поиске. Их лучше закрывать точечно, а не глобально для всего сайта.
add_action('wp_head', function () {
if (is_search() || is_attachment()) {
echo '<meta name="robots" content="noindex,follow" />' . "\n";
}
});
Если у вас уже стоит SEO-плагин, сначала проверьте, не делает ли он это сам. Дублирующие правила в теме и плагине часто дают неожиданный результат: один выводит index, другой — noindex, и вы потом ищете причину в кэше.
3. Уберите страницы вложений в медиафайлы
Страницы вложений нередко создают тонкие дубли: заголовок изображения, пустой контент и ссылка на сам файл. Если такие страницы не нужны, перенаправляйте их на родительскую запись или сам файл.
add_action('template_redirect', function () {
if (! is_attachment()) {
return;
}
$parent = wp_get_post_parent_id(get_queried_object_id());
if ($parent) {
wp_redirect(get_permalink($parent), 301);
exit;
}
wp_redirect(home_url('/'), 301);
exit;
});
Это рабочий базовый вариант. Если у вас медиа используется как отдельные посадочные страницы, такой редирект делать нельзя — сначала проверьте, есть ли у вложений реальный трафик и входящие ссылки.
Как проверить, что решение сработало
После правок не ограничивайтесь визуальной проверкой в браузере. Нужно посмотреть, как сервер отвечает на разные варианты URL и что видит поисковик.
- Проверьте
canonicalв исходном коде основной страницы и дублей. - Убедитесь, что технические страницы отдают
noindexили редиректятся. - Сравните статус-коды: лишние URL должны вести себя предсказуемо.
- Переобойдите страницы через Google Search Console и посмотрите, исчезли ли сообщения о дубликатах.
- Если есть кэш, очистите его на уровне плагина, сервера и CDN.
Для быстрой проверки удобно открыть исходный код и найти строку с rel="canonical". Если canonical указывает на нужный адрес, но в индексе всё равно остаётся дубль, значит проблема может быть в старых сигналах, внутренних ссылках или карте сайта.
Частые ошибки и как их исправить
Ставят noindex вместо редиректа
Если URL технически лишний и не нужен пользователю, noindex — слабое решение. Страница всё равно будет обходиться, а сигналов на сайте станет больше. В таких случаях лучше 301-редирект.
Закрывают слишком много страниц
Иногда под noindex попадают полезные архивы, пагинация или страницы фильтров, которые реально приводят трафик. Перед массовым закрытием проверьте статистику и внутренние ссылки.
Дублируют правила в теме и SEO-плагине
Если canonical и robots-мета генерируются в двух местах, итоговый HTML может быть противоречивым. Оставьте один источник правды: либо тема, либо плагин.
Не чистят кэш после изменений
Это банальная, но частая причина ложных выводов. После правок очистите кэш страниц, объектов и CDN, иначе вы будете смотреть на старую версию HTML.
Практические советы по безопасности и производительности
Когда вы правите логику дублей кодом, не вставляйте всё в functions.php без проверки. Лучше вынести изменения в мини-плагин или mu-plugin, чтобы они не пропали после смены темы.
Если сайт большой, не пытайтесь решать всё одной глобальной регуляркой на каждый запрос. Сначала отфильтруйте только нужные типы страниц: поиск, вложения, архивы, параметры. Так вы не создадите лишнюю нагрузку и не сломаете нормальные URL.
Для чистки дублей и технических хвостов на сайте иногда удобнее использовать профильные инструменты вроде Clearfy Pro, если вам нужен набор готовых настроек для удаления дублей, чистки служебных страниц и контроля индексации: https://wpshop.ru/plugins/clearfy. Но даже в этом случае полезно понимать, что именно он меняет в HTML и какие URL закрывает.
Мини-чек-лист перед публикацией правок
- Проверен основной canonical на целевых страницах.
- Технические URL либо редиректятся, либо закрыты от индексации.
- Страницы вложений не создают пустые дубли.
- Кэш очищен на всех уровнях.
- Внутренние ссылки ведут на канонические адреса.
- В sitemap нет лишних URL с параметрами и технических страниц.
Если после внедрения дубли всё ещё появляются, ищите источник не только в WordPress, но и в теме, плагинах фильтрации, CDN и правилах сервера. В большинстве случаев проблема не в одном месте, а в цепочке из двух-трёх мелких ошибок.