Дубли в WordPress обычно появляются не из-за одной ошибки, а из-за набора мелочей: архивы тегов, пагинация, страницы вложений, параметры ?replytocom, версии с www и без, HTTP и HTTPS, а иногда — из-за плагинов, которые создают собственные точки входа в один и тот же контент. В итоге поисковик видит несколько адресов с одинаковой или почти одинаковой страницей, а вы получаете размытие веса и лишние URL в индексе.
Ниже — рабочий сценарий: как сначала найти источник дублей, потом убрать их без лишних потерь и проверить, что после правок сайт не начал отдавать мусор в индекс.
Что именно считать дублем в WordPress
Не каждый похожий URL — проблема. Для начала отделите технические дубли от нормальных страниц. Технический дубль — это когда один и тот же контент доступен по разным адресам, а поисковику не объяснено, какой из них основной.
Типовые источники дублей
- страницы записей с параметрами вроде
?replytocom=; - архивы категорий, тегов, авторов и дат, если они не нужны для индексации;
- страницы вложений медиафайлов;
- версии сайта с
wwwи без него; - HTTP и HTTPS одновременно;
- страницы пагинации, если они дублируют мета-данные и заголовки;
- дубли из-за фильтров, сортировок и UTM-параметров, если они индексируются;
- одинаковые материалы, доступные и через рубрику, и через произвольную таксономию без каноникализации.
Диагностика: где искать проблему
Сначала не трогайте код. Снимите карту проблемы: какие URL уже попали в индекс, какие страницы имеют одинаковые title и description, и какие адреса поисковик считает основными.
Проверка через Search Console и краулер
В Google Search Console откройте отчёты по страницам и исключённым URL. Ищите признаки вроде «другая страница с каноническим тегом», «дубликат, Google выбрал другой канонический URL», «просканировано, но не проиндексировано». Если таких URL много, проблема почти всегда в шаблонах или настройках архивации.
Для быстрой локальной проверки удобно пройтись по сайту краулером вроде Screaming Frog или аналогом. Смотрите:
- одинаковые
<title>иmeta descriptionна разных URL; - отсутствие или конфликт
rel="canonical"; - страницы с кодом 200, которые должны были бы редиректить;
- архивы и вложения, которые отдают индексируемые страницы без пользы.
Быстрая проверка в браузере и через исходник
Откройте несколько подозрительных URL и посмотрите исходный код страницы. Если у дублей одинаковый canonical указывает на другой адрес — это нормально. Если canonical отсутствует, ведёт сам на себя на нескольких версиях одного и того же материала или подставляется неверно, это уже источник путаницы.
<link rel="canonical" href="https://example.com/post-slug/" />Как убрать дубли: рабочая схема
Лучше идти по слоям: сначала каноникал и редиректы, потом закрытие ненужных архивов, затем чистка параметров и вложений. Не пытайтесь сразу «запретить всё» через robots.txt: это часто оставляет дубли в индексе без возможности нормально переобходить их и понимать, что с ними делать.
1. Приведите сайт к одной основной версии
Если сайт доступен по нескольким вариантам домена или протокола, оставьте один канонический вариант и настройте 301-редирект со всех остальных. Это базовая вещь, но именно она часто создаёт половину дублей.
<?php
// Пример для functions.php или mu-plugin.
add_action('template_redirect', function () {
if (is_admin() || wp_doing_ajax()) {
return;
}
$host = $_SERVER['HTTP_HOST'] ?? '';
$uri = $_SERVER['REQUEST_URI'] ?? '/';
$target_host = 'example.com';
$is_https = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off');
if ($host !== $target_host || !$is_https) {
$url = 'https://' . $target_host . $uri;
wp_redirect($url, 301);
exit;
}
});Этот пример нужно адаптировать под ваш сервер и текущую схему домена. Если редиректы уже настроены на уровне nginx или Apache, не дублируйте логику в PHP.
2. Закройте страницы вложений и лишние архивы
Страницы вложений часто индексируются как пустые страницы с картинкой или файлом. Если они не нужны как отдельные посадочные, лучше редиректить их на сам файл или на родительскую запись. Для архивов тегов, дат и авторов решение зависит от структуры сайта: иногда их стоит оставить, иногда — закрыть от индексации и убрать из карты сайта.
<?php
// Редирект страниц вложений на родительскую запись, если она есть.
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;
}
}
});
// Отключение индексации архивов авторов и дат.
add_filter('wp_robots', function ($robots) {
if (is_author() || is_date()) {
$robots['noindex'] = true;
$robots['follow'] = true;
}
return $robots;
});Если у вас уже стоит SEO-плагин, проверьте, не конфликтует ли он с этим фильтром. Два источника для robots-мета часто дают непредсказуемый результат.
3. Уберите дубли от параметров и комментариев
Параметр ?replytocom может плодить отдельные URL для одной и той же записи. Если комментарии не критичны для SEO и вам не нужны отдельные ссылки на ответы, можно отключить этот механизм на уровне фильтра.
<?php
add_filter('comment_reply_link', function ($link) {
return preg_replace('/([?&])replytocom=\d+/', '', $link);
});Если дубли создают UTM-метки или другие параметры сортировки, не закрывайте их массово через robots.txt. Лучше настроить canonical на чистый URL и, где возможно, 301-редирект для очевидно лишних вариантов.
4. Настройте canonical для шаблонов, где WordPress ошибается
В большинстве случаев WordPress и SEO-плагин сами ставят canonical корректно. Но если у вас кастомные шаблоны, фильтры контента или нестандартные архивы, проверьте, что canonical указывает на единственный основной URL.
| Подход | Когда подходит | Минус |
|---|---|---|
| 301-редирект | Версии домена, HTTP/HTTPS, лишние URL | Нужно аккуратно тестировать, чтобы не сломать входящие ссылки |
| canonical | Похожие страницы, фильтры, пагинация | Не убирает URL из обхода полностью |
| noindex | Архивы, которые не нужны в поиске | Страница остаётся доступной, но не должна ранжироваться |
Пошаговая настройка без лишнего риска
- Соберите список дублей из Search Console и краулера.
- Приведите сайт к одной версии домена и протокола.
- Настройте 301 для вложений, если они не нужны отдельно.
- Закройте от индексации архивы, которые не несут ценности.
- Проверьте canonical на шаблонах записей, архивов и страниц пагинации.
- Обновите карту сайта и отправьте её на переобход.
Как проверить, что решение сработало
Проверка должна быть не «страница открывается», а «поисковик видит один основной URL». Смотрите на три уровня.
- HTTP-статус. Лишние версии должны отдавать 301, а не 200.
- Canonical. На странице должен быть один понятный основной адрес.
- Индекс. В Search Console количество дублей и исключённых URL должно постепенно снижаться, а основные страницы — оставаться доступными.
Для быстрой проверки можно использовать curl:
curl -I https://example.com/page/?replytocom=12Если вместо 200 вы видите 301 на чистый URL — это хороший знак. Затем откройте конечный адрес и проверьте canonical в исходнике.
Частые ошибки и как их исправить
Закрыли дубли в robots.txt, но не поставили редирект
Так делать можно только в редких случаях. Если URL уже в индексе, robots.txt не гарантирует его исчезновение. Для явного дубля нужен 301 или canonical, а не только запрет обхода.
Поставили noindex на все архивы подряд
Это часто ломает полезные страницы категорий. Сначала оцените, какие архивы реально приводят трафик и помогают навигации. Закрывайте только те, которые не несут самостоятельной ценности.
Смешали логику темы и SEO-плагина
Если тема уже выводит canonical, а SEO-плагин делает то же самое, в HTML может появиться несколько canonical-тегов. Это нужно исправлять в одном месте: либо отключить вывод в теме, либо убрать конфликтующий фильтр.
Редиректы зациклились
Часто это происходит, когда в коде не учли HTTPS, www или слэш в конце URL. Проверяйте цепочку редиректов перед выкладкой на боевой сайт.
Практические советы по безопасности и производительности
Чем меньше самописной логики в functions.php, тем проще поддержка. Если правки нужны надолго, лучше вынести их в маленький mu-plugin, чтобы они не зависели от темы. А перед массовыми изменениями сделайте бэкап базы и файлов: редиректы и noindex легко откатить, но ошибки в шаблонах могут затронуть весь сайт.
Если на сайте уже много технических дублей, полезно сначала навести порядок в SEO-настройках и архивах, а потом уже трогать контент. В ряде проектов быстрее всего это делается через связку SEO-плагина и инструмента для чистки дублей, например Clearfy Pro, но только если вы понимаете, какие именно типы страниц он отключает и как это влияет на индексацию.
Главная идея простая: не пытайтесь «лечить дубли» одной галочкой. Сначала найдите источник, потом выберите правильный механизм — редирект, canonical или noindex — и только после этого проверяйте, как сайт ведёт себя в поиске.