Дубли в WordPress обычно появляются не из-за одной ошибки, а из-за набора мелочей: одинаковые записи доступны по разным URL, архивы индексируются вместе с основными страницами, а параметры в адресе создают новые версии контента. В итоге поисковик видит несколько страниц с одним и тем же смыслом и сам решает, какую оставить в индексе. Это почти всегда хуже, чем управляемая схема с одной основной страницей и понятными сигналами для роботов.
Ниже разберём не абстрактную теорию, а рабочий сценарий: как быстро найти дубли, что исправить в WordPress и как проверить, что после правок поисковый робот видит только нужные URL.
Как понять, что в WordPress есть дубли страниц
Симптомы обычно видны и без специальных инструментов. В Search Console появляются страницы с одинаковым заголовком, в выдаче всплывают версии с /page/2/, ?replytocom=, ?utm_ или альтернативные адреса архивов. Иногда проблема проявляется после установки SEO-плагина, когда в индекс попадают теги, авторские архивы, страницы поиска и пагинация.
Что проверить в первую очередь
- одна и та же запись открывается по нескольким URL;
- в индексе есть страницы категорий, тегов и архивов автора с тем же текстом, что и у записей;
- доступны версии с параметрами в URL;
- главная страница, архивы и пагинация дублируют друг друга по title и description;
- на сайте есть HTTP и HTTPS-версии, www и без www, если редиректы настроены не до конца.
Диагностика проблемы: где искать дубли
Начинать лучше не с кода, а с проверки реальных URL. Откройте несколько типичных страниц и сравните:
- канонический адрес в браузере;
- то, что возвращает сервер после редиректа;
- какой
rel="canonical"стоит в HTML; - не индексируется ли страница поиска или архив с параметрами.
Если у вас есть доступ к консоли, быстро проверить редиректы можно так:
curl -I https://example.com/sample-post/
curl -I https://example.com/sample-post/?utm_source=test
curl -I https://example.com/?replytocom=123В ответе смотрите на 301/302, заголовок Location и отсутствие неожиданных цепочек редиректов. Если одна и та же страница отвечает по нескольким адресам без переадресации, это уже источник дублей.
Что исправлять в WordPress в первую очередь
Самая частая ошибка — пытаться закрыть всё одним noindex. Это не решает дубли URL как таковые. Правильнее сначала убрать технические источники, потом настроить каноникал и только затем ограничивать индексацию второстепенных архивов.
1. Привести основные URL к одному виду
Проверьте, что сайт работает в одной схеме: HTTPS, один домен с www или без него, один вариант слэша на конце. Это базовая настройка, но именно она часто создаёт две версии одной страницы.
Если нужно принудительно отправлять все запросы на HTTPS и без www, используйте редирект на уровне сервера. Для Apache это обычно делается в .htaccess:
RewriteEngine On
RewriteCond %{HTTPS} !=on [OR]
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^ https://example.com%{REQUEST_URI} [L,R=301]Для Nginx логика та же, но правило пишется в конфиге сервера. Важно не делать редирект через PHP, если это можно решить на уровне веб-сервера: так меньше нагрузка и меньше шансов получить цепочку редиректов.
2. Убрать лишние архивы из индекса
Если на сайте нет смысла индексировать теги, архивы автора или страницы поиска, их лучше закрыть в SEO-плагине или кодом. Это не про «спрятать сайт», а про сокращение количества слабых и повторяющихся страниц.
Пример для robots.txt здесь не всегда достаточен: поисковик может видеть URL, но не знать, что вы хотите исключить его из индекса. Надёжнее использовать noindex на конкретных типах архивов через SEO-плагин или фильтры темы, если вы пишете своё решение.
3. Настроить canonical для страниц с параметрами
Если на сайте есть фильтры, UTM-метки, пагинация или служебные параметры, canonical должен указывать на чистую основную страницу. В WordPress это часто делает SEO-плагин, но полезно понимать, что именно должно происходить.
Ниже пример, как можно принудительно задать canonical для отдельных страниц, если стандартной логики не хватает:
add_filter('wpseo_canonical', function ($canonical) {
if (is_search()) {
return home_url('/');
}
if (is_singular()) {
return get_permalink();
}
return $canonical;
});Это пример для Yoast SEO. Если у вас другой плагин, фильтр будет отличаться, но принцип тот же: canonical должен вести на одну основную версию страницы, а не на URL с параметрами.
Сравнение подходов: плагин, код или серверный редирект
| Подход | Когда подходит | Плюсы | Минусы |
|---|---|---|---|
| SEO-плагин | Нужно быстро закрыть архивы, задать canonical, управлять мета-тегами | Меньше кода, проще поддержка | Не всегда удобно для точечных исключений |
| Код в теме или плагине | Нужна нестандартная логика для отдельных типов страниц | Гибкость, точный контроль | Требует тестирования после обновлений |
| Редирект на сервере | Нужно убрать дубли домена, протокола, www | Быстро и надёжно | Ошибки в конфиге могут сломать доступ к сайту |
Пошаговое решение без лишнего риска
Если нужно навести порядок без большой переделки, действуйте по порядку:
- Зафиксируйте основной вариант домена: HTTPS, www или без www.
- Проверьте, не создаёт ли тема отдельные архивы, которые дублируют записи.
- Закройте от индексации страницы поиска, служебные архивы и пустые таксономии.
- Проверьте canonical на записях, страницах и пагинации.
- Уберите параметры, которые не должны создавать отдельные версии контента.
- Сделайте 301-редиректы со старых и альтернативных URL на канонические.
Если нужно убрать дубли для страниц вложений медиафайлов, это тоже лучше делать через редирект на родительскую запись или сам файл, в зависимости от структуры сайта. Пустые attachment-страницы часто индексируются без пользы и создают ещё один слой дублей.
Проверка результата после внедрения
После правок не ограничивайтесь открытием страницы в браузере. Проверьте несколько уровней:
- HTTP-ответ: основной URL должен отдавать
200, старый —301на нужный адрес; - canonical: в HTML должен быть один канонический URL без параметров;
- индексация: в Search Console старые варианты должны постепенно уходить из отчёта как дубли или исключённые страницы;
- поиск по сайту: в выдаче не должны оставаться версии с параметрами и альтернативными путями.
Проверить canonical можно прямо из исходника страницы:
curl -s https://example.com/sample-post/ | grep -i canonicalЕсли вы используете SEO-плагин, откройте несколько типов страниц вручную: запись, категория, тег, поиск, пагинация. Ошибка часто проявляется только на одном типе, а не на всём сайте сразу.
Частые ошибки и как их исправить
Редирект сделан через 302 вместо 301
Временный редирект не передаёт сигнал о постоянном переносе URL. Для борьбы с дублями нужен именно 301, иначе поисковик может продолжать считать старый адрес рабочим.
Canonical указывает на URL с параметрами
Так бывает, если шаблон темы или плагин подставляет текущий адрес без очистки параметров. В результате поисковик видит несколько почти одинаковых страниц, но не получает чёткой подсказки, какую оставить.
Закрыли страницу в robots.txt, но не убрали из индекса
Disallow не равен noindex. Если URL уже известен поисковику, он может продолжать учитывать его как отдельную страницу. Для удаления дублей этого недостаточно.
Сделали слишком много редиректов подряд
Цепочки вида http → https → www → без www → / замедляют обход и иногда ломают часть ссылок. Лучше свести всё к одному шагу.
Отключили архивы, но забыли про внутренние ссылки
Если в меню, хлебных крошках или блоках темы остались ссылки на закрытые страницы, они всё равно будут активно обходиться. После изменений проверьте навигацию и шаблоны вывода.
Практические советы по безопасности и производительности
Когда вы чистите дубли, не создавайте новую проблему в виде тяжёлых фильтров и лишних запросов к базе. Если решение реализовано кодом, держите его в мини-плагине или в mu-plugins, а не в файле темы: так оно не пропадёт после обновления шаблона.
Для массовых правок canonical, архивов и служебных страниц удобнее использовать проверенный SEO-инструмент. Если нужен плагин для очистки дублей, служебных мета-тегов и лишних архивов, можно посмотреть Clearfy Pro: https://wpshop.ru/plugins/clearfy. Но даже с плагином важно понимать, какие URL вы закрываете и почему.
И ещё один практический момент: после массовых редиректов очистите кеш страницы и, если он есть, объектный кеш. Иначе вы можете проверять уже старый HTML и решить, что canonical не изменился.
Если коротко, рабочая схема для дублей в WordPress выглядит так: один основной URL, корректный 301 с альтернативных адресов, canonical без параметров, закрытые от индексации служебные архивы и проверка в Search Console. Это скучная настройка, но именно она обычно даёт предсказуемый результат без побочных эффектов.