Дубли страниц в WordPress обычно появляются не из-за одной ошибки, а из-за набора мелких настроек: архивы тегов, страницы автора, пагинация, параметры ?replytocom, версии с www и без, HTTP/HTTPS, а иногда и дубли из-за плагинов SEO или фильтров темы. Проблема не в самом наличии нескольких URL, а в том, что поисковик начинает выбирать не ту версию страницы, тратить краулинговый бюджет и путать сигналы ранжирования.
Если сайт уже индексируется, удалять дубли «в лоб» опасно. Сначала нужно понять, какие URL реально отдают контент, какие должны остаться в индексе, а какие надо склеить или закрыть от обхода. Ниже — рабочий сценарий без вымышленных инструментов и без лишней магии.
Как понять, что у вас именно дубли, а не просто похожие страницы
Начинать стоит с диагностики. В WordPress один и тот же материал может быть доступен по разным адресам, и не все они одинаково вредны. Например, архив категории и отдельная запись — это не дубль в строгом смысле, а разные страницы. А вот запись по /post-name/ и по /category/post-name/, если тема или плагин случайно генерирует оба варианта, уже создают проблему.
Что проверить в первую очередь
- открывается ли одна и та же страница по
httpиhttps; - есть ли доступ к сайту с
wwwи безwww; - не индексируются ли служебные параметры URL, например
?replytocom; - не создают ли архивы тегов, авторов и дат почти одинаковые страницы;
- не дублируются ли страницы пагинации и главные архивы;
- не генерирует ли тема отдельные шаблоны для одного и того же контента.
Самый быстрый способ — взять несколько подозрительных URL и сравнить заголовки ответа, canonical и статус-код. Если одна и та же страница доступна по разным адресам, но canonical указывает только на одну версию, это уже хороший знак. Если canonical отсутствует или указывает на разные адреса, проблема почти наверняка в настройках темы или SEO-плагина.
Пошаговое решение: от нормализации URL до удаления дублей
Ниже порядок, который обычно работает на живом сайте. Не стоит сразу удалять архивы или закрывать всё подряд в noindex. Сначала нужно привести к одному виду основные версии адресов, потом убрать служебные дубли, и только после этого трогать структуру индексации.
1. Зафиксируйте основную версию домена
В Настройки → Общие проверьте, что адрес WordPress и адрес сайта совпадают по протоколу и версии домена. Если сайт должен работать на HTTPS без www, не оставляйте в настройках старый адрес. Это не решит все дубли, но уберёт базовую путаницу.
На уровне сервера или .htaccess настройте один канонический вариант. Для Apache это может выглядеть так:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} !=on [OR]
RewriteCond %{HTTP_HOST} ^www\.example\.ru$ [NC]
RewriteRule ^ https://example.ru%{REQUEST_URI} [L,R=301]
</IfModule>Если у вас Nginx, редирект лучше делать в конфигурации сервера, а не через PHP. Это быстрее и надёжнее, чем ловить запросы в template_redirect.
2. Уберите служебные параметры, которые плодят копии
На некоторых сайтах комментарии с ?replytocom создают отдельные URL, которые поисковик может обходить как самостоятельные страницы. Если такие адреса уже попали в индекс, их нужно склеить с основной страницей.
Для этого можно добавить редирект на уровне WordPress, если серверный вариант недоступен:
add_action('template_redirect', function () {
if (isset($_GET['replytocom'])) {
$url = remove_query_arg('replytocom');
wp_safe_redirect($url, 301);
exit;
}
});Этот код не должен жить в случайном сниппете без теста. Проверьте, что он не ломает пагинацию комментариев и не редиректит лишние параметры.
3. Настройте canonical для архивов и записей
Если SEO-плагин уже выводит canonical, не дублируйте его вручную в теме. Двойной canonical — частая ошибка, особенно после правок в header.php. Для записи canonical должен указывать на основную версию страницы, а для архивов — на сам архив, а не на первую запись внутри него.
Если нужно принудительно поправить canonical для конкретного типа страниц, используйте фильтр, который уже есть в WordPress или в SEO-плагине. Например, в Yoast SEO есть фильтр wpseo_canonical, но применять его стоит только точечно, а не для всего сайта. Для универсального решения лучше сначала проверить настройки плагина, а не писать свой слой поверх него.
4. Закройте от индексации страницы, которые не несут самостоятельной ценности
Обычно это архивы тегов, авторов, дат и внутренний поиск. Но здесь важно не путать noindex и удаление из индекса. Если страница уже ранжируется и приносит трафик, сначала оцените её пользу. Иногда архив автора нужен, если сайт редакционный и у автора есть отдельная ценность.
| Подход | Когда использовать | Минус |
|---|---|---|
| Редирект 301 | Для явных дублей URL | Нужно аккуратно проверить цепочки |
| Canonical | Для похожих версий одной страницы | Не всегда убирает URL из индекса быстро |
| Noindex | Для служебных архивов и поиска | Страница остаётся доступной для обхода |
Что делать с дублями, которые создаёт тема или плагин
Иногда источник проблемы не в контенте, а в шаблоне. Например, тема может выводить один и тот же блок в карточке записи и в архиве, а SEO-плагин — добавлять свой canonical, Open Graph и schema одновременно с темой. В результате поисковик видит несколько сигналов для одного URL.
Диагностика здесь простая: временно переключите тему на стандартную, отключите SEO-плагин на тестовой копии и посмотрите, исчезает ли дубль. Если да, значит, проблема в шаблоне или в конфликте плагинов. Если нет, ищите на уровне сервера или структуры URL.
Проверка через код темы
Иногда в header.php вручную добавляют canonical, хотя WordPress или SEO-плагин уже выводит его автоматически. Это надо убрать. Дублирующийся тег выглядит безобидно, но для поисковика это лишний шум.
<!-- Плохая практика: вручную дублировать canonical без проверки -->
<link rel="canonical" href="https://example.ru/sample-page/" />Если canonical нужен только для конкретного шаблона, лучше использовать фильтр или условие, а не вставлять его в общий header для всех страниц.
Как проверить, что решение сработало
После правок нельзя ограничиваться визуальной проверкой в браузере. Нужно убедиться, что URL действительно отдают нужные ответы и что поисковик видит одну основную версию.
- откройте основной URL и его альтернативы через
curl -Iили любой HTTP-инспектор; - проверьте, что альтернативные версии возвращают
301, а не200; - посмотрите исходный код страницы и убедитесь, что canonical один;
- в Google Search Console проверьте, как индексируется конкретный URL;
- пройдитесь по sitemap и убедитесь, что в нём только канонические адреса.
Пример быстрой проверки через консоль:
curl -I https://example.ru/page/
curl -I https://www.example.ru/page/
curl -I http://example.ru/page/Если все альтернативы ведут на один адрес с 301, а canonical совпадает с итоговым URL, базовая часть задачи решена. Дальше остаётся дождаться переобхода страниц и проверить, как поисковик пересобирает индекс.
Частые ошибки и как их исправить
Редирект в цикле
Обычно появляется, когда в .htaccess или настройках Nginx смешали правила для HTTPS и www. Исправление простое: оставить одно правило, протестировать его отдельно и не дублировать логику в WordPress.
Canonical указывает не туда
Это бывает после миграции сайта или смены домена. Проверьте, не остались ли старые адреса в базе, настройках SEO-плагина и шаблонах темы. Если canonical ведёт на несуществующий URL, поисковик может игнорировать его.
Страница закрыта в noindex, но всё равно лезет в индекс
Так бывает, если страница доступна по множеству URL и на неё ведут внутренние ссылки. В таком случае сначала склейте дубли, а уже потом закрывайте страницу от индексации. Иначе поисковик будет продолжать обходить альтернативные адреса.
Удалили архивы, а трафик просел
Не все архивы бесполезны. Если теговые или авторские страницы собирали переходы, их нельзя просто отключить без анализа. Сначала посмотрите, какие из них получают показы и клики, и только потом решайте, оставлять их, улучшать или закрывать.
Практические советы по безопасности и производительности
Любые правки редиректов и canonical лучше вносить сначала на staging-копии. На боевом сайте ошибка в одном правиле может положить весь трафик. Перед изменениями сделайте резервную копию конфигурации сервера и базы.
Если дубли создаются из-за тяжёлой темы или набора SEO-надстроек, не пытайтесь лечить это десятком фильтров. Иногда быстрее и чище убрать лишний функционал, чем поддерживать сложную цепочку костылей. Для сайтов, где много технического мусора, полезно отдельно проверить дубли мета-тегов, архивов и служебных страниц — например, через Clearfy Pro, если нужен именно инструмент для чистки дублей и SEO-оптимизации, но только после проверки, какие именно настройки он меняет.
Ещё один практический момент: не закрывайте важные страницы через robots.txt, если хотите убрать их из индекса. Запрет на обход не равен удалению из поиска. Для уже проиндексированных дублей обычно нужны редирект, canonical или noindex в зависимости от сценария.
Если у вас сложная структура сайта, начните с малого: нормализуйте домен, уберите служебные параметры, проверьте canonical, затем уже переходите к архивам и шаблонам. Так проще отследить, на каком шаге проблема исчезла или, наоборот, появилась снова.