Дубли страниц в WordPress обычно появляются не из-за одной ошибки, а из-за набора мелких настроек: одинаковый контент доступен по разным URL, архивы дублируют записи, а параметры в адресе создают новые версии страниц для поисковиков. Если это не контролировать, в индексе копятся лишние URL, а сигналы ранжирования размазываются.
Ниже разберём, как быстро понять источник дублей, что исправлять в первую очередь и как проверить, что после правок поисковик видит только нужные адреса.
Как понять, что у сайта есть проблема с дублями
Первый признак — в поиске показываются не те страницы или одна и та же страница открывается по нескольким адресам. В WordPress это часто выглядит так:
- страница доступна с
wwwи без него; - URL открывается и с
http, и сhttps; - одна запись доступна через архив рубрики, тег, автора и отдельный URL записи;
- страницы пагинации и сортировки создают лишние версии;
- в адресе есть параметры вроде
?utm_source=,?replytocom=,?ampили служебные query string.
Проверка не требует сложных инструментов. Откройте несколько типовых URL и сравните:
- главную страницу с разными вариантами домена;
- одну запись через прямую ссылку и через архив категории;
- страницу с параметрами в адресе;
- архивы автора, тегов и дат, если они не нужны для поиска.
Если на каждом варианте контент одинаковый, а сервер отдаёт код 200, у вас уже есть кандидат на дубль. Для поиска по сайту полезно посмотреть отчёты Google Search Console: разделы с дублированными страницами, выбранным пользователем canonical и страницами, исключёнными из индекса.
Что исправлять в первую очередь
Не стоит сразу лезть в код. Сначала уберите самые частые источники дублей на уровне настроек и структуры сайта. Это быстрее и безопаснее, чем массово править шаблоны.
1. Привести сайт к одному основному домену
Если сайт открывается и с www, и без него, поисковик может считать это двумя разными хостами. Нужен один канонический вариант и 301-редирект со второго.
Проверьте, что в Настройки → Общие оба адреса сайта совпадают с выбранным вариантом. Если сервер или CDN не делают редирект автоматически, настройте его на уровне веб-сервера.
2. Закрыть лишние архивы
Архивы авторов, дат и тегов часто дублируют контент, особенно на небольших сайтах. Если они не несут ценности для поиска, их лучше отключить от индексации или убрать из sitemap. Для этого удобно использовать SEO-плагин или настройки темы, но важно не смешивать индексацию и доступность: страница может быть доступна пользователю, но закрыта для робота.
3. Проверить пагинацию и сортировку
Страницы /page/2/, /page/3/ — это не дубль в чистом виде, если они нужны для навигации. Проблема начинается, когда на них повторяется один и тот же блок контента без уникальной структуры, а canonical указывает не туда. С сортировкой и фильтрами ещё хуже: параметры в URL могут создавать десятки почти одинаковых страниц.
Пошаговое решение: как убрать дубли в WordPress
Ниже рабочая последовательность, которую можно применять на обычном сайте без сложной кастомной архитектуры.
Шаг 1. Настроить редирект на один вариант URL
Если у вас есть доступ к серверу, лучше сделать это на уровне веб-сервера. Для Apache это обычно .htaccess, для Nginx — конфигурация виртуального хоста. Пример для принудительного перехода на HTTPS и без www:
RewriteEngine On
RewriteCond %{HTTPS} !=on [OR]
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [L,R=301]Если серверная настройка недоступна, можно использовать редирект через WordPress, но это хуже для производительности и надёжности. В таком случае лучше делать точечные правила, а не пытаться перехватывать всё подряд.
Шаг 2. Указать canonical для страниц с параметрами
Когда одна и та же страница доступна с параметрами, canonical помогает поисковику выбрать основную версию. В WordPress это можно сделать через фильтр wpseo_canonical, если используется Yoast SEO, или через собственную логику в шаблоне. Для базового случая без привязки к плагину можно вывести canonical вручную в head:
add_action('wp_head', function () {
if (is_admin()) {
return;
}
$canonical = home_url(add_query_arg([], $_SERVER['REQUEST_URI']));
$canonical = strtok($canonical, '?');
echo '<link rel="canonical" href="' . esc_url($canonical) . '" />\n';
}, 1);Этот пример не решает всё автоматически, но показывает принцип: canonical должен вести на чистый URL без лишних параметров. Если у вас уже есть SEO-плагин, не дублируйте тег вручную, иначе получите конфликт.
Шаг 3. Убрать из индекса архивы, которые не нужны
Если архивы автора, тегов или дат не дают пользы, их лучше закрыть от индексации в SEO-плагине. Важно проверить, что после изменения:
- архив остаётся доступным для пользователя;
- в
robots.txtне блокируется нужный контент случайно; - страницы не исчезают из навигации сайта.
Если нужен более жёсткий подход, можно отключить саму генерацию некоторых архивов через код темы или плагина, но это уже зависит от структуры сайта.
Шаг 4. Исключить служебные параметры из индексации
Параметры replytocom, UTM-метки и некоторые фильтры не должны становиться отдельными страницами. Для комментариев WordPress часто создаёт URL с replytocom, и это типичный источник дублей. Если комментарии не критичны для SEO, можно отключить такую генерацию ссылок или хотя бы следить, чтобы canonical указывал на чистую страницу.
Для точечной очистки параметров в canonical можно использовать фильтрацию URL:
function wpcoding_clean_canonical_url($url) {
$parts = wp_parse_url($url);
if (empty($parts['scheme']) || empty($parts['host'])) {
return $url;
}
$clean = $parts['scheme'] . '://' . $parts['host'];
if (!empty($parts['path'])) {
$clean .= $parts['path'];
}
return trailingslashit($clean);
}Такую функцию можно использовать как основу для собственной логики, но перед внедрением проверьте, не ломает ли она нужные query string на страницах поиска, фильтров или пагинации.
Сравнение подходов: плагин, код или сервер
| Подход | Когда подходит | Плюсы | Минусы |
|---|---|---|---|
| SEO-плагин | Нужно быстро закрыть архивы, canonical, sitemap | Меньше ручной работы, проще поддержка | Не всегда решает серверные дубли |
| Код в теме/плагине | Нужна точечная логика под конкретный сайт | Гибкость, можно учесть структуру проекта | Требует тестирования и сопровождения |
| Редиректы на сервере | Нужно убрать www/http/слеши и лишние версии URL | Быстро, надёжно, без нагрузки на WordPress | Нужен доступ к конфигу сервера |
Как проверить, что дубли действительно исчезли
После правок не ограничивайтесь открытием страницы в браузере. Проверка должна быть технической:
- откройте старый URL и убедитесь, что он отдаёт
301на нужный адрес; - проверьте исходный код страницы и найдите один canonical, без лишних параметров;
- сравните URL в Google Search Console после переобхода;
- посмотрите, не появились ли новые ошибки в sitemap;
- проверьте, что внутренние ссылки в меню, хлебных крошках и контенте ведут на канонический адрес.
Для быстрой проверки редиректа удобно использовать curl:
curl -I https://example.com/page
curl -I https://www.example.com/pageВ ответе должен быть понятный сценарий: старый адрес отдаёт 301, новый — 200. Если оба варианта возвращают 200, редирект не настроен или работает не там, где нужно.
Частые ошибки и как их исправить
Canonical указывает на саму себя с параметрами
Это происходит, когда в шаблоне берут текущий URL без очистки query string. В итоге поисковик видит разные canonical для одной и той же страницы. Решение простое: canonical должен строиться из чистого адреса, а параметры нужно отрезать или обрабатывать отдельно.
Редирект сделан через PHP и тормозит сайт
Если редирект выполняется уже после загрузки WordPress, вы тратите ресурсы на каждый лишний запрос. Для массовых правил используйте серверный редирект. PHP-уровень оставляйте только для редких, точечных случаев.
Закрыли архивы, но забыли убрать их из sitemap
Тогда поисковик продолжает видеть URL, которые вы уже не хотите индексировать. После изменения настроек проверьте sitemap и при необходимости пересоберите его. Если sitemap генерирует SEO-плагин, убедитесь, что исключённые типы записей и таксономии реально исчезли из карты сайта.
Отключили архивы, но сломали навигацию
Иногда архивы используют как часть пользовательского пути: рубрика, тег, авторская страница. Если убрать их без анализа, сайт станет менее удобным. Перед отключением проверьте, не завязаны ли на архивы хлебные крошки, блоки похожих материалов и перелинковка.
Чек-лист перед публикацией изменений
- выбран один основной вариант домена;
- на старых URL настроен
301; - canonical ведёт на чистую версию страницы;
- лишние архивы закрыты или удалены из sitemap;
- параметры вроде
replytocomне создают новые индексируемые страницы; - внутренние ссылки обновлены на канонические URL;
- проверка через
curlи Search Console показывает ожидаемое поведение.
Что делать, если дубли возвращаются после обновления плагина или темы
Это частая ситуация на живых проектах. Обновление может изменить шаблон canonical, структуру архивов или логику формирования ссылок. В таком случае сначала сравните, что именно изменилось: тема, SEO-плагин, кэш или правила редиректа. Если проблема появилась после обновления, не лечите её поверх ещё одним костылём — лучше найти источник и убрать его в одном месте.
Для сайтов, где много технических дублей и служебных страниц, полезно держать под рукой инструменты для чистки SEO-ошибок и лишних архивов. Если нужен набор именно под WordPress-оптимизацию, можно посмотреть решения уровня Clearfy Pro: https://wpshop.ru/plugins/clearfy?utm_source=wpcoding.ru&utm_medium=article&utm_campaign=kak-nayti-i-ubrat-dubli-stranits-v-wordpress
Главная идея простая: сначала устраняйте причину дубля, а не только его следствие. Тогда индексация станет чище, а правки не будут возвращаться после каждого обновления сайта.