Дубли в WordPress обычно появляются не из-за одной ошибки, а из-за набора мелких настроек: архивы тегов дублируют рубрики, страницы с параметрами создают копии контента, а тема или плагин выводят один и тот же блок на нескольких URL. В итоге поисковик видит несколько почти одинаковых страниц и выбирает не ту, которую вы хотели продвигать.
Ниже разберём, как быстро найти такие дубли, чем их отличить друг от друга и что делать: закрыть от индексации, поставить canonical или удалить совсем.
Как понять, что у вас именно дубли, а не просто похожие страницы
Сначала полезно отделить технические дубли от нормальных страниц с похожей темой. Например, карточки услуг в одной категории могут быть похожи по структуре, но это не дубль. Дубль — это когда у двух URL совпадает основной смысл и почти весь HTML-контент, а различия сводятся к параметрам, сортировке, пагинации или служебным архивам.
Типичные источники дублей в WordPress
- страницы с GET-параметрами вроде
?replytocom=,?utm_,?sort=; - архивы тегов, авторов, дат, которые повторяют контент рубрик;
- страницы пагинации, если на них выводится тот же текстовый блок без уникального контекста;
- версии с www и без www, http и https, если редиректы настроены криво;
- дубли из-за плагинов кэширования, которые отдают разные URL с одинаковым содержимым;
- одна и та же запись в нескольких таксономиях с одинаковыми SEO-шаблонами.
Диагностика: где искать проблему
Начните с простого списка URL, которые уже попали в индекс или подозрительно похожи друг на друга. Для этого удобно смотреть Search Console, карту сайта, а также результаты поиска по сайту через site:example.com. Если у вас есть доступ к серверу, дополнительно проверьте логику редиректов и canonical в исходном коде.
С практической точки зрения полезно проверить три вещи:
- какой URL отдает код 200;
- какой URL указан в
<link rel="canonical">; - нет ли у дубля индексации через robots.txt, meta robots или sitemap.
Если canonical указывает на одну страницу, а в индексе живут другие версии, значит проблема либо в слабом сигнале canonical, либо в том, что поисковик видит эти страницы как самостоятельные.
Быстрая проверка через PHP
Если нужно пройтись по набору URL и посмотреть canonical, можно временно использовать простой скрипт в отдельном файле на сервере или в тестовой среде. Он не заменяет полноценный аудит, но помогает быстро увидеть расхождения.
<?php
$urls = [
'https://example.com/page/',
'https://example.com/page/?utm_source=test',
'https://example.com/category/news/'
];
foreach ($urls as $url) {
$context = stream_context_create([
'http' => [
'method' => 'GET',
'header' => "User-Agent: Mozilla/5.0\r\n",
'timeout' => 10,
],
'ssl' => [
'verify_peer' => false,
'verify_peer_name' => false,
],
]);
$html = @file_get_contents($url, false, $context);
if ($html === false) {
echo $url . " - fetch error\n";
continue;
}
preg_match('/<link[^>]+rel=["\']canonical["\'][^>]+href=["\']([^"\']+)["\']/i', $html, $m);
$canonical = $m[1] ?? 'not found';
echo $url . " => " . $canonical . "\n";
}
Что делать с дублями: сравнение подходов
Не все дубли нужно удалять физически. Иногда правильнее оставить страницу доступной, но убрать её из индекса или склеить сигнал на основную версию.
| Подход | Когда применять | Плюсы | Минусы |
|---|---|---|---|
| 301 редирект | Страница не нужна и у неё есть явный аналог | Передаёт часть сигналов, убирает дубль из обхода | Нужно аккуратно выбрать целевой URL |
| canonical | Страница полезна пользователю, но не должна конкурировать в поиске | Сохраняет доступность, не ломает UX | Не всегда срабатывает как жёсткое правило |
| noindex | Архивы, фильтры, служебные страницы | Просто внедрить | Страница остаётся в обходе, сигнал не склеивается так же надёжно, как редирект |
Пошаговое решение: как убрать дубли безопасно
1. Закройте служебные параметры от индексации
Если дубли создают параметры сортировки, трекинга или комментариев, лучше не плодить отдельные страницы. Для таких URL обычно достаточно canonical на чистую версию и, если нужно, noindex через SEO-плагин или код темы.
Пример: убираем из canonical параметры utm_* и replytocom, чтобы поисковик не считал их отдельными страницами.
<?php
add_filter('get_canonical_url', function ($canonical, $post) {
if (!$canonical) {
return $canonical;
}
$parts = wp_parse_url($canonical);
if (empty($parts['query'])) {
return $canonical;
}
parse_str($parts['query'], $query);
foreach (array_keys($query) as $key) {
if (str_starts_with($key, 'utm_') || $key === 'replytocom') {
unset($query[$key]);
}
}
$base = $parts['scheme'] . '://' . $parts['host'] . ($parts['path'] ?? '');
$new_query = http_build_query($query);
return $new_query ? $base . '?' . $new_query : $base;
}, 10, 2);
2. Поставьте 301 редирект на явные копии
Если у вас есть старые URL, которые полностью повторяют новый адрес, лучше сделать редирект. Это относится к переименованным страницам, старым структурам рубрик и дублям с разными окончаниями слэша, если сервер не приводит их к одному виду сам.
<?php
add_action('template_redirect', function () {
if (!is_page('old-about')) {
return;
}
wp_redirect(home_url('/about/'), 301);
exit;
});
Для массовых правил лучше использовать конфигурацию сервера или плагин редиректов, а не держать десятки условий в теме.
3. Уберите лишние архивы из индекса
Если архивы тегов, авторов или дат не дают ценности и повторяют рубрики, их лучше закрыть от индексации. Это особенно актуально для сайтов, где теги создавались без структуры и теперь дублируют навигацию.
В robots.txt это не решает проблему полностью, потому что запрет на обход не равен удалению из индекса. Надёжнее использовать noindex для самих архивов и при необходимости отключить их генерацию в SEO-плагине или теме.
4. Проверьте шаблоны title, description и canonical
Частая ошибка — одинаковые SEO-шаблоны для рубрик, тегов и страниц. Тогда даже разные URL выглядят для поисковика как однотипные копии. Убедитесь, что у основных страниц есть уникальные title, а canonical не указывает на неверный архив или главную.
Проверка результата после внедрения
После правок не стоит сразу считать задачу закрытой. Сначала проверьте, что:
- дубли отдают 301, если вы выбрали редирект;
- у страниц с параметрами canonical указывает на чистый URL;
- служебные архивы не попадают в sitemap;
- в исходном коде нет нескольких conflicting canonical;
- в Search Console снижается число страниц с одинаковым или похожим контентом.
Технически удобно проверить ответ сервера через curl:
curl -I 'https://example.com/page/?utm_source=test'
В ответе вы должны увидеть либо 301 с корректным Location, либо обычный 200 без лишней индексации и с canonical на чистую страницу.
Частые ошибки и как их исправить
Редирект ведёт на нерелевантную страницу
Такое бывает, когда все старые URL отправляют на главную. Для пользователя это выглядит как потеря контекста, а для поисковика — как слабый сигнал замены. Исправление простое: редирект должен вести на ближайший аналог по смыслу, а не на общий раздел.
Canonical и noindex стоят одновременно без понимания логики
Если страница закрыта от индексации, canonical на неё или с неё может не дать ожидаемого эффекта. Сначала решите, нужна ли страница в поиске. Если нет — noindex или 301. Если нужна, но не должна конкурировать — canonical на основную версию.
Дубли создаёт кэш или CDN
Иногда одна и та же страница доступна по разным путям из-за настроек кэша, языка, параметров или HTTP/HTTPS. В этом случае править нужно не только WordPress, но и сервер, CDN и правила редиректов.
Архивы закрыли в robots.txt и забыли про sitemap
Если URL остаются в карте сайта, поисковик всё равно будет их находить. Для технически чистого результата уберите такие страницы из sitemap и задайте им корректный статус индексации.
Что проверить в безопасности и производительности
Удаление дублей полезно не только для SEO. Меньше мусорных URL — меньше лишних обходов, меньше нагрузки на сервер и меньше шансов, что кто-то будет массово дергать страницы с параметрами. Если на сайте есть публичные фильтры, ограничьте их количество и не давайте им создавать бесконечные комбинации URL.
Если вы вносите правки кодом, держите их в дочерней теме или в небольшом mu-plugin, а не в файлах основной темы. Так изменения не потеряются при обновлении. Перед массовыми редиректами обязательно сделайте бэкап и проверьте несколько URL вручную в браузере и через curl.
Для сайтов, где дубли появляются из-за слабой технической гигиены, полезно дополнительно пройтись по базе и удалить устаревшие архивы, пустые теги и неиспользуемые таксономии. Если нужен более широкий набор инструментов для чистки дублей и технических настроек, можно посмотреть Clearfy Pro: https://wpshop.ru/plugins/clearfy.
Главное правило здесь простое: сначала определите, какой URL должен быть основным, потом либо склейте сигналы, либо уберите копию из индекса, либо удалите её полностью. Без этого WordPress быстро превращает даже аккуратный сайт в набор почти одинаковых страниц.