Дубли страниц в WordPress обычно появляются не из-за одной ошибки, а из-за набора мелких настроек: архивы тегов, пагинация, параметры в URL, страницы с одинаковым контентом, версии со слешем и без, HTTP/HTTPS, www/без www. В итоге поисковик видит несколько адресов с одним и тем же содержимым, а вы получаете размытый вес страниц и лишний мусор в индексе.
Ниже разберём, как найти источник дублей, что именно править в WordPress и как проверить, что canonical действительно работает, а не просто стоит в коде “для галочки”.
Когда проблема уже есть: как понять, что у сайта дубли
Симптомы обычно видны в Search Console, логах краулера или даже в обычной выдаче. Один и тот же пост открывается по нескольким адресам, а в индексе всплывают страницы с параметрами, архивы, пагинация и версии без нужной канонической ссылки.
Что проверить в первую очередь
- одинаковые заголовки и сниппеты у разных URL;
- страницы с параметрами
?replytocom=,?utm_,?ampили другими query string; - дубли главной:
http/https,www/non-www, со слешем и без; - архивы категорий, тегов, авторов и дат, если они повторяют основной контент;
- страницы пагинации, которые дублируют мета-данные первой страницы;
- страницы вложений медиафайлов, если они индексируются отдельно.
Если у вас есть доступ к краулеру, проверьте, какие URL он считает дублями по title, meta description и canonical. Если краулера нет, достаточно вручную открыть несколько вариантов одного и того же адреса и посмотреть исходный код.
Какой подход выбрать: canonical, редирект или noindex
Не все дубли лечатся одинаково. Иногда нужен редирект, иногда достаточно canonical, а иногда лучше закрыть от индексации архивы, которые не несут самостоятельной ценности.
| Сценарий | Что делать | Компромисс |
|---|---|---|
| Один и тот же контент доступен по разным URL | 301-редирект на основной адрес | Пользователь и бот всегда идут в одну точку |
| Похожий контент, но нужен доступ по нескольким адресам | rel=canonical | Поисковик сам выбирает основную версию, но сигнал не абсолютный |
| Архивы тегов, автора, дат не нужны в поиске | noindex,follow | Страницы остаются доступны, но не должны попадать в индекс |
Если проблема в технических дублях, сначала ставьте редирект. Если дубль нужен для навигации, но не должен конкурировать в выдаче, используйте canonical. Если страница вообще не должна ранжироваться, подключайте noindex, но не путайте его с canonical: это разные задачи.
Пошаговое решение: убираем дубли на уровне WordPress
1. Приведите сайт к одному базовому URL
Сначала проверьте Настройки → Общие: адрес WordPress и адрес сайта должны быть в одном формате. Если сайт работает на HTTPS, не оставляйте в настройках HTTP. Если основной вариант без www, не смешивайте его с версией с www.
На сервере или через конфиг хостинга настройте 301-редирект на один канонический вариант. Это лучше, чем пытаться лечить такие дубли только в SEO-плагине.
RewriteEngine On
RewriteCond %{HTTPS} !=on [OR]
RewriteCond %{HTTP_HOST} ^www\.example\.ru$ [NC]
RewriteRule ^ https://example.ru%{REQUEST_URI} [L,R=301]Этот пример нужно адаптировать под ваш домен и схему. Смысл простой: все варианты должны сходиться в один основной адрес.
2. Отключите индексацию лишних архивов, если они не нужны
Если у вас новостной или контентный сайт, архивы категорий могут быть полезны. Но теги, архивы дат и авторов часто создают дубли или почти дубли. В таком случае их лучше закрыть от индексации через SEO-плагин или кодом, если вы точно понимаете последствия.
Например, для архива автора можно добавить noindex через фильтр, если тема или плагин не дают удобной настройки:
add_filter('wp_robots', function ($robots) {
if (is_author() || is_date() || is_tag()) {
$robots['noindex'] = true;
$robots['follow'] = true;
}
return $robots;
});Это не удаляет страницу, а только просит поисковик не включать её в индекс. Для страниц, которые должны оставаться в выдаче, такой подход использовать не стоит.
3. Настройте canonical для страниц с параметрами
Если у вас есть URL с параметрами сортировки, фильтрации или меток кампаний, canonical должен указывать на чистую версию страницы. В большинстве случаев SEO-плагин делает это сам, но на кастомных шаблонах или в нестандартных архивах бывают сбои.
Проверить и при необходимости подменить canonical можно через фильтр wpseo_canonical в Yoast SEO или аналогичный механизм в другом плагине. Ниже пример для случая, когда нужно принудительно убрать query string:
add_filter('wpseo_canonical', function ($canonical) {
if (is_singular()) {
return get_permalink();
}
if (!empty($_SERVER['REQUEST_URI'])) {
$url = home_url(add_query_arg([], $GLOBALS['wp']->request));
return strtok($url, '?');
}
return $canonical;
});Если у вас не Yoast, не пытайтесь вставить этот код “наугад”. Сначала проверьте, какой SEO-плагин стоит и как он формирует canonical. Иначе можно получить конфликт разметки или двойной тег canonical.
4. Уберите дубли вложений и медиа-страниц
Отдельная частая проблема — страницы вложений изображений. WordPress может создавать отдельную страницу для медиафайла, и она часто пустая или почти пустая, но при этом индексируется. Для большинства сайтов это лишний дубль.
Практичное решение — редиректить attachment pages на сам файл или на родительскую запись. Если у вас SEO-плагин умеет это делать, используйте его настройку. Если нет, можно повесить редирект на шаблонный хук:
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);
} else {
wp_redirect(home_url('/'), 301);
}
exit;
}
});Такой редирект полезен, если медиа-страницы не несут самостоятельной ценности. Если у вас медиа-архив — отдельная часть проекта, решение нужно пересматривать.
Проверка результата после внедрения
После правок не ограничивайтесь открытием сайта в браузере. Нужно проверить и код ответа, и canonical, и то, как поисковик видит страницу.
- откройте старые URL с параметрами и убедитесь, что они редиректят на основной адрес;
- посмотрите исходный код страницы и найдите ровно один тег
rel="canonical"; - проверьте, что canonical указывает на чистый URL без лишних параметров;
- убедитесь, что страницы, закрытые через
noindex, действительно отдают нужный robots meta или HTTP-заголовок; - в Search Console отправьте на повторную проверку важные URL и посмотрите, исчезли ли дубли из отчётов.
Для быстрой технической проверки удобно использовать curl:
curl -I https://example.ru/page/?utm_source=testВ ответе должен быть 301 на канонический адрес, а не 200 с той же страницей. Если сервер отдаёт 200, значит проблема не решена на уровне маршрутизации.
Частые ошибки и как их исправить
Canonical стоит, но дубли всё равно индексируются
Это нормальная ситуация, если canonical только подсказывает, а не запрещает индексацию. Если дубль технический, нужен 301-редирект. Если страница должна остаться доступной, но не конкурировать в выдаче, добавьте noindex.
Редирект сделали, но он ведёт в цепочку
Часто это происходит, когда одновременно включены правила в .htaccess, настройки хостинга и SEO-плагина. В итоге URL проходит через два-три редиректа. Нужно оставить один источник истины и убрать дублирующиеся правила.
Закрыли от индексации всё подряд
Иногда после массовой настройки noindex исчезают и полезные страницы. Это особенно опасно для категорий, которые реально собирают трафик. Перед изменениями составьте список URL, которые должны остаться в индексе, и проверяйте их вручную.
Поставили canonical на главную для всех страниц
Так делать нельзя. Canonical должен указывать на эквивалентную страницу, а не на произвольный “главный” URL. Иначе поисковик может проигнорировать подсказку или начать путаться в релевантности.
Безопасность и производительность: что учесть до и после правок
Любые массовые изменения в редиректах и мета-тегах лучше вносить после бэкапа и на staging-копии. Ошибка в правиле редиректа легко может положить доступ к сайту или создать бесконечный цикл.
Если вы правите canonical и robots кодом, держите изменения в дочерней теме или в небольшом must-use плагине. Так они не потеряются при обновлении темы. Для производительности это тоже лучше: не нужно перегружать сайт тяжёлым универсальным плагином ради одной настройки.
Если нужен более широкий набор инструментов для технической чистки сайта, иногда удобнее использовать профильный плагин вроде Clearfy Pro: он помогает управлять дублями, служебными страницами и частью SEO-настроек без ручного кода. Но даже в этом случае проверка через исходный код и Search Console всё равно обязательна.
В итоге рабочая схема обычно выглядит так: технические дубли убираются редиректами, спорные архивы закрываются от индексации, а для допустимых альтернативных URL остаётся canonical. Если эти три уровня не смешивать, WordPress перестаёт плодить лишние адреса и становится заметно проще в поддержке.