Дубли в WordPress обычно появляются не из-за одной ошибки, а из-за набора мелких настроек: архивы категорий и тегов, пагинация, страницы автора, параметры сортировки, версии с www и без него, а иногда еще и технические URL от темы или плагина. В результате поисковик видит несколько адресов с почти одинаковым контентом и сам выбирает, какой считать основным. Это почти всегда хуже, чем явно задать правила.
Ниже разберем рабочий сценарий: как найти источник дублей, что закрывать от индексации, где ставить canonical и когда лучше не трогать URL, а менять структуру шаблонов.
Как понять, что у сайта есть проблема с дублями
Не стоит начинать с массового закрытия всего подряд. Сначала проверьте, какие именно страницы индексируются и какие URL повторяются. Для WordPress типичные сигналы такие:
- в индексе есть и записи, и их архивы по тегам, хотя теговые страницы почти пустые;
- одна и та же статья открывается с параметрами вроде
?replytocom=,?amp,?utm_*или сортировкой; - страницы пагинации дублируют заголовки и метаописания первой страницы архива;
- есть версии сайта с
wwwи без него, а также с разными слешами на конце; - в поиске всплывают страницы автора на сайте, где один автор и все записи уже доступны через рубрики.
Если у вас есть доступ к Google Search Console, откройте отчет по страницам и посмотрите, какие URL помечены как дубликат, выбранный пользователем не канонический или альтернативная страница с правильным каноническим тегом. Это не всегда ошибка, но хороший ориентир, где искать причину.
Быстрая диагностика через сайт и сервер
Проверка вручную тоже полезна. Откройте несколько URL одного и того же контента с разными параметрами и сравните HTML. Если на странице есть тег canonical, он должен указывать на одну основную версию. Если его нет или он меняется в зависимости от параметра, это уже повод править шаблон или SEO-настройки.
curl -I https://example.com/post-name/?utm_source=testВ ответе смотрите не только код 200, но и редиректы. Если параметр не должен влиять на контент, а URL не редиректится и еще и индексируется, поисковик получает лишний дубль.
Что именно нужно исправить в WordPress
Универсального переключателя нет: часть дублей закрывается настройками SEO-плагина, часть — правкой темы, часть — редиректами на уровне сервера. Правильный подход зависит от типа URL.
| Сценарий | Что делать | Компромисс |
|---|---|---|
| Теговые архивы почти пустые | Закрыть от индексации или удалить из карты сайта | Потеря трафика по редким тегам, если они реально используются |
| Параметры сортировки и фильтров | Ставить canonical на основную страницу или делать 301 для ненужных параметров | Нужно аккуратно проверить, не ломаются ли рабочие ссылки |
| Пагинация архивов | Оставить в индексе, но не дублировать title и description | Нельзя просто закрыть все страницы пагинации без анализа |
| Версии www / non-www | Выбрать один вариант и настроить 301 | Требуется единая настройка в CMS и на сервере |
1. Уберите технические дубли на уровне адресов
Если сайт доступен по нескольким вариантам домена, сначала зафиксируйте один основной. В WordPress это делается через Настройки → Общие, где URL WordPress и URL сайта должны совпадать с выбранным вариантом. После этого на сервере настройте редирект со второго варианта на основной.
Для Apache это обычно делается через .htaccess:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]Для Nginx логика та же, но конфиг будет другой. Важен не синтаксис, а принцип: один URL — один ответ 200, все остальные варианты — 301.
2. Настройте canonical для архивов и страниц с параметрами
Если SEO-плагин уже умеет выводить canonical, проверьте, не подменяет ли его тема. В норме canonical на странице с параметрами должен указывать на чистый адрес без лишних query string. Для записей и страниц canonical обычно совпадает с основным URL записи.
Когда нужно вручную поправить canonical в теме, используйте фильтр wpseo_canonical только если у вас действительно установлен Yoast SEO. Для универсального решения лучше не привязываться к конкретному плагину без необходимости. Если же вы пишете собственную тему или плагин, canonical можно вывести через rel_canonical() в <head> и не дублировать его вручную в шаблонах.
<?php
add_action( 'wp_head', function () {
if ( is_singular() ) {
rel_canonical();
}
}, 1 );Этот вариант не решает все типы дублей, но помогает не сломать базовую канонизацию, если тема ее случайно убрала.
3. Закройте от индексации пустые или слабые архивы
Теги, авторы и некоторые таксономии часто создают много страниц без самостоятельной ценности. Если архивы не несут отдельного смысла, их лучше либо закрыть от индексации, либо убрать из карты сайта. Здесь важно не путать noindex и disallow: если закрыть URL в robots.txt, поисковик может не увидеть canonical и другие сигналы. Для дублей это обычно плохой путь.
Практичнее использовать SEO-плагин и выставить noindex, follow для конкретных архивов. Тогда бот сможет пройти по ссылкам, но не будет считать архив самостоятельной посадочной страницей.
Пошаговое решение без лишнего риска
- Соберите список URL с одинаковым контентом: записи, архивы, параметры, страницы автора.
- Выберите основной URL для каждого кластера дублей.
- Настройте 301-редирект для технических вариантов адреса.
- Проверьте canonical на страницах с параметрами и в архивах.
- Закройте от индексации архивы, которые не должны ранжироваться.
- Обновите карту сайта и уберите из нее ненужные типы страниц.
- После изменений перепроверьте ответ сервера и HTML.
Если у вас много дублей из-за параметров, иногда удобнее поставить правило на уровне functions.php или небольшого плагина. Например, можно принудительно редиректить часть параметров, которые не должны менять содержимое страницы:
<?php
add_action( 'template_redirect', function () {
if ( is_admin() ) {
return;
}
$blocked = array( 'replytocom', 'sort', 'filter' );
foreach ( $blocked as $param ) {
if ( isset( $_GET[ $param ] ) ) {
wp_safe_redirect( remove_query_arg( $param ), 301 );
exit;
}
}
} );Это не универсальный рецепт. Перед внедрением проверьте, не используются ли эти параметры в реальной навигации сайта. Если параметр нужен для фильтрации каталога или поиска по сайту, редиректить его нельзя.
Как проверить, что решение сработало
После правок не ограничивайтесь визуальной проверкой. Нужны три уровня контроля: сервер, HTML и индекс.
- Откройте основной URL и альтернативный URL с параметром — второй должен либо редиректиться, либо иметь canonical на основной адрес.
- Проверьте исходный код страницы и убедитесь, что canonical не меняется от лишних query string.
- Посмотрите в Search Console, уменьшается ли число страниц с пометкой о дубликатах.
- Проверьте карту сайта: в ней не должно быть архивов, которые вы закрыли от индексации.
Для быстрой ручной проверки удобно сравнить заголовки и HTML через curl:
curl -I https://example.com/category/news/
curl -I https://example.com/category/news/?sort=popularЕсли второй URL отвечает 301 на первый, это хороший знак. Если оба отдают 200, но canonical одинаковый, ситуация тоже рабочая, хотя редирект часто надежнее для явно технических параметров.
Частые ошибки и почему они ломают индексацию
Закрыть все дубли через robots.txt
Это распространенная ошибка. Когда URL запрещен в robots.txt, поисковик может не увидеть canonical и не понять, что вы хотели считать основным. Для дублей лучше использовать редирект, canonical или noindex в зависимости от сценария.
Ставить noindex на все подряд
Если закрыть и записи, и архивы, и пагинацию без разбора, можно случайно убрать из индекса полезные страницы. Особенно это заметно на сайтах, где рубрики реально собирают трафик.
Оставлять дубли в карте сайта
Если страница закрыта от индексации, но продолжает попадать в sitemap.xml, вы посылаете поисковику противоречивые сигналы. Карта сайта должна содержать только те URL, которые вы действительно хотите индексировать.
Менять canonical на каждой странице вручную
Ручная правка в шаблонах быстро превращается в хаос: один шаблон обновили, другой забыли. Лучше вынести логику в тему или SEO-плагин и проверить, что она работает одинаково для всех типов записей.
Что еще стоит проверить для чистоты сайта
Если вы уже занялись дублями, заодно посмотрите на лишние страницы, которые часто создают шум в индексации: результаты внутреннего поиска, служебные страницы, старые вложения медиафайлов, страницы автора без контента. Для части из них достаточно отключить индексацию, для части — настроить редирект на родительскую запись или медиафайл.
На проектах, где много технического мусора, иногда помогает комплексная чистка через плагины вроде Clearfy Pro: он закрывает часть типовых дублей, убирает лишние элементы из head и помогает привести SEO-настройки к единому виду. Но даже такой инструмент не заменяет проверку конкретных URL — особенно если проблема сидит в теме или в кастомном коде.
Если после правок дубли не исчезают, ищите источник в шаблонах темы, в генерации архивов и в сторонних плагинах, которые создают собственные страницы без явной необходимости. В WordPress почти всегда можно найти, кто именно генерирует лишний URL, если сравнить HTML, заголовки ответа и карту сайта.