Дубли в WordPress обычно появляются не из-за одной ошибки, а из-за набора мелочей: одна и та же запись открывается по нескольким URL, в индексе остаются старые адреса после смены структуры, а каноникал либо отсутствует, либо указывает не туда. Если это не разобрать руками, поисковик начинает выбирать «свой» вариант страницы, а вы теряете контроль над индексацией.
Ниже — рабочая схема: как найти дубли, чем закрывать каждый тип, когда достаточно canonical, а когда нужен 301-редирект, и как проверить, что после правки сайт не начал отдавать лишние адреса.
Какие дубли встречаются чаще всего
В WordPress один и тот же контент может быть доступен по разным адресам по вполне легальным причинам. Проблема начинается, когда эти адреса не сведены в один основной вариант.
- страница открывается со слэшем и без слэша;
- доступны версии с
wwwи безwww; - остались старые URL после смены структуры постоянных ссылок;
- одна запись доступна через архив рубрики, метки и прямую ссылку;
- параметры в URL создают технические копии страниц;
- плагин или тема выводят отдельные страницы пагинации, сортировки или фильтрации без нужной канонизации.
Когда нужен 301, а когда canonical
Если старый адрес больше не должен существовать как самостоятельная точка входа, используйте 301. Это относится к переезду URL, смене структуры постоянных ссылок, удалённым страницам и дублям с параметрами, которые не должны индексироваться.
canonical нужен, когда страница технически доступна по нескольким адресам, но контент один и тот же, и вы хотите подсказать поисковику основной URL без принудительного редиректа. Это полезно для пагинации, UTM-параметров, сортировки и некоторых архивов.
Диагностика: где искать дубли
Начните не с кода, а с проверки фактических URL. Иначе легко исправить не ту проблему. Самый быстрый путь — посмотреть, какие адреса уже попали в индекс и какие из них отдают одинаковый HTML.
Что проверить вручную
- откройте страницу с разными вариантами URL и сравните ответ сервера;
- посмотрите исходный код и найдите тег
<link rel="canonical">; - проверьте, не ведут ли старые адреса на 200 OK вместо 301;
- сравните заголовки ответа через DevTools или
curl; - посмотрите отчёты в Google Search Console по страницам с дублирующимся canonical.
Для быстрой проверки удобно использовать curl -I. Он покажет код ответа и заголовок Location, если редирект настроен правильно.
curl -I https://example.com/old-page/
curl -I https://example.com/old-page
curl -I https://www.example.com/page/
Если на старом адресе вы видите 200 OK вместо 301 Moved Permanently, значит поисковик может продолжать считать его отдельной страницей.
Пошаговое решение: сводим дубли к одному URL
Логика простая: сначала выбираем основной адрес, потом перенаправляем все альтернативы, и только после этого проверяем canonical. Не делайте наоборот: canonical без редиректа часто оставляет поисковику слишком много свободы.
Шаг 1. Зафиксируйте основной формат URL
Определите один вариант для сайта: со слэшем или без, с www или без, HTTPS обязательно. В WordPress это должно совпадать с настройками Адрес WordPress (URL) и Адрес сайта (URL) в Настройки → Общие.
Если там уже стоят разные значения, сначала исправьте их, а потом проверьте, не сломались ли вход в админку и медиафайлы.
Шаг 2. Настройте 301 для старых адресов
Для точечных переездов удобнее всего добавить редирект в .htaccess на Apache или в конфигурацию Nginx. Это быстрее и надёжнее, чем пытаться ловить всё на уровне темы.
Пример для Apache: редирект со старого пути на новый.
Redirect 301 /old-page/ https://example.com/new-page/Если нужно убрать www, используйте единое правило на весь сайт:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]Для Nginx логика та же, только правило пишется в конфиге сервера. Если доступа к серверу нет, можно использовать плагин редиректов, но для массовых правил серверный уровень обычно стабильнее.
Шаг 3. Проверьте canonical на шаблоне
Если тема или SEO-плагин уже выводит canonical, не дублируйте его вручную без необходимости. Двойной canonical — частая ошибка, особенно когда разработчик добавляет свой тег в header.php, а плагин продолжает печатать свой.
Если canonical отсутствует или указывает на неправильный адрес, можно добавить его через wp_head. Это не замена редиректам, а страховка для страниц, где дубли неизбежны.
add_action('wp_head', function () {
if (is_singular()) {
echo '<link rel="canonical" href="' . esc_url(get_permalink()) . '" />' . "\n";
}
}, 1);Этот вариант годится только если у вас нет другого механизма canonical, который уже работает корректно. Иначе сначала отключите конфликтующий код.
Шаг 4. Уберите технические копии из индексации
Параметры сортировки, фильтры, служебные страницы поиска и некоторые архивы лучше не оставлять в индексе. Если они нужны пользователю, но не нужны поиску, ограничьтесь canonical или noindex в зависимости от сценария.
Для страниц внутреннего поиска WordPress обычно разумнее использовать noindex, follow, а не редиректить их на главную. Редирект в таких случаях часто ухудшает поведение сайта и мешает пользователю.
Сравнение подходов: плагин, код, сервер
| Подход | Когда подходит | Плюсы | Минусы |
|---|---|---|---|
| Плагин редиректов | Нужно быстро закрыть несколько старых URL | Удобно без доступа к серверу | Дополнительная нагрузка, риск конфликтов правил |
| Код в теме или mu-plugin | Нужны точечные правила и контроль | Прозрачно, можно версионировать | Требует аккуратной поддержки |
| .htaccess / Nginx | Массовые и стабильные редиректы | Быстро, без участия WordPress | Нужен доступ к серверу |
Проверка результата после внедрения
После настройки не ограничивайтесь открытием страницы в браузере. Браузер может скрыть часть проблемы из-за кеша или автоматического перехода.
- проверьте старые URL через
curl -Iи убедитесь в коде301; - откройте новый адрес и посмотрите, что canonical указывает на него же;
- проверьте, нет ли цепочки редиректов: старый URL → промежуточный URL → конечный URL;
- в Search Console отправьте на переобход ключевые страницы после массовых правок;
- посмотрите серверные логи: старые адреса не должны массово возвращать
200.
Если у вас есть доступ к логам, полезно искать повторяющиеся запросы к старым URL. Это помогает понять, не осталось ли внутренних ссылок на устаревшие адреса в меню, хлебных крошках или блоках темы.
Частые ошибки и как их исправить
Редирект на главную вместо нужной страницы
Так делают, когда старую страницу удалили и не хотят разбираться с сопоставлением. Для SEO это слабое решение: пользователь и поисковик теряют контекст. Лучше вести на наиболее близкую релевантную страницу или вернуть 410, если аналогов нет.
Цикл редиректов
Часто возникает при одновременной работе плагина, правил в .htaccess и настроек CDN. Проверяется просто: curl -I показывает несколько переходов подряд. Уберите дублирующее правило в одном из уровней.
Canonical указывает на несуществующий URL
Это бывает после смены структуры постоянных ссылок или переноса сайта. Поисковик видит противоречие: страница открывается по одному адресу, а canonical ведёт в другой. Исправляйте сначала источник ссылки, потом проверяйте шаблон и кеш.
Старые внутренние ссылки остались в контенте
Даже при правильных редиректах лучше обновить внутренние ссылки в записях, меню и виджетах. Иначе сайт продолжит делать лишние переходы, а часть страниц будет открываться через редирект вместо прямого URL.
Практические советы по безопасности и производительности
Редиректы и canonical — это не только про SEO, но и про стабильность. Чем меньше лишних переходов, тем меньше нагрузка на сервер и тем проще отлаживать сайт.
- не ставьте десятки правил в тему, если можно вынести их в серверный конфиг;
- не добавляйте canonical вручную, если SEO-плагин уже делает это корректно;
- после массовых изменений очистите кеш страницы, объектный кеш и CDN;
- держите список редиректов в отдельном файле или в mu-plugin, если правок много;
- проверяйте, не создают ли плагины фильтрации и сортировки новые индексируемые URL.
Если задача шире и включает чистку дублей, архивов и технических страниц, имеет смысл смотреть в сторону инструментов, которые помогают управлять SEO- и служебными настройками сайта. Например, у Clearfy Pro есть набор функций для удаления дублей и технической чистки WordPress: https://wpshop.ru/plugins/clearfy.
Когда лучше не трогать страницу редиректом
Не каждый дубль нужно закрывать 301. Если страница нужна пользователю в нескольких вариантах, но поисковику должен быть понятен основной адрес, canonical часто безопаснее. Это касается некоторых страниц фильтрации, пагинации и версий с параметрами.
Но если у вас есть два полноценных URL с одинаковым контентом и оба уже индексируются, canonical без редиректа обычно оставляет проблему наполовину решённой. В таких случаях сначала убирают технический дубль, потом проверяют, не остались ли ссылки на старый адрес в шаблонах и контенте.