Дубли в WordPress обычно появляются не из-за одной ошибки, а из-за набора мелких настроек: архивы тегов, пагинация, параметры в URL, версии со слешем и без, страницы автора, поиск по сайту, UTM-параметры, а иногда и дубли из-за шаблона темы. Если просто закрыть всё подряд в robots.txt, можно потерять полезные страницы. Если ничего не делать — поисковик сам выберет канонический URL, и не всегда так, как вам нужно.
Ниже — рабочий сценарий: как найти тип дубля, что лучше закрыть, где поставить canonical, а где нужен 301-редирект. Без лишней теории, с проверкой результата.
Какие дубли в WordPress встречаются чаще всего
Сначала полезно понять, что именно вы считаете дублем. В WordPress это не всегда одинаковые страницы по содержанию. Иногда это один и тот же контент, доступный по разным URL, а иногда — похожие страницы, которые поисковик может склеить сам.
Типичные источники дублей
- страницы с и без завершающего слеша:
/pageи/page/; - HTTP и HTTPS версии сайта;
- www и без www;
- архивы категорий, тегов, автора и даты, если они дублируют смысловые страницы;
- страницы пагинации и фильтров;
- поиск по сайту:
?s=; - URL с UTM и другими параметрами;
- печатные версии, AMP, служебные шаблоны темы;
- дубли из-за неправильного вывода одного и того же поста в нескольких архивах.
Если у вас уже есть статья про удаление дубликатов контента, здесь фокус другой: не на чистке базы, а на технических URL-дублях и способах их нормализации.
Диагностика: как понять, где именно проблема
Не начинайте с массового отключения архивов. Сначала проверьте, какие URL реально индексируются и какие версии страницы доступны.
Что проверить вручную
- Откройте одну и ту же страницу в нескольких вариантах URL.
- Посмотрите, меняется ли адрес после загрузки.
- Проверьте исходный код на наличие
rel="canonical". - Сравните заголовки ответа сервера для дублей.
Быстрый способ посмотреть заголовки — через curl:
curl -I https://example.com/sample-page/Ищите три вещи: код ответа, редирект и канонический адрес. Если страница доступна по двум URL без редиректа, а canonical указывает на один и тот же адрес, это уже лучше, чем полные дубли без сигнала. Но если обе версии отдают 200 OK и canonical отсутствует или неверный, проблему нужно исправлять.
Что смотреть в Search Console
В отчётах индексации обычно видно, какие URL выбраны как канонические, а какие исключены как дубли. Это полезно, потому что поисковик может выбрать не ту версию, которую вы считаете основной. Если в отчёте много страниц с пометкой про дубликаты без выбранного canonical, значит, на сайте есть техническая путаница с адресами.
Что исправлять редиректом, а что — canonical
Не все дубли нужно закрывать одинаково. Если URL отличается только технически, лучше делать 301-редирект. Если страницы похожи, но обе должны существовать, используйте canonical или настройку индексации.
| Сценарий | Что делать | Комментарий |
|---|---|---|
| HTTP → HTTPS | 301-редирект | Это одна и та же страница, нужен один основной адрес |
| www → без www | 301-редирект | Выберите один вариант и придерживайтесь его везде |
| Параметры UTM | canonical на чистый URL | Редиректить UTM обычно не нужно, если аналитика должна их видеть |
| Архивы тегов | noindex или отключение, если архив бесполезен | Зависит от структуры сайта |
| Пагинация | обычно оставить, но проверить canonical | Не ломайте навигацию без причины |
Пошаговое решение: как убрать дубли в WordPress
Шаг 1. Выберите основной формат URL
Сначала зафиксируйте один вариант для сайта: HTTPS, один домен с www или без, единый стиль слеша. Это база. Если в настройках WordPress и на уровне сервера разные правила, дубли будут появляться снова.
Проверьте в Настройки → Общие, что адрес WordPress и адрес сайта совпадают с выбранной версией. Если сайт работает через nginx или Apache, редирект лучше делать там, а не только в PHP.
Шаг 2. Настройте 301-редиректы для технических дублей
Если вы не можете быстро поправить серверную конфигурацию, можно временно сделать редирект через template_redirect. Это не идеальный вариант для высоконагруженного сайта, но для точечной задачи работает.
add_action('template_redirect', function () {
if (is_admin() || wp_doing_ajax()) {
return;
}
$host = $_SERVER['HTTP_HOST'] ?? '';
$uri = $_SERVER['REQUEST_URI'] ?? '/';
// Пример: принудительно переводим http на https и убираем www.
$target_host = preg_replace('/^www\./i', '', $host);
$is_https = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off');
if (!$is_https || $host !== $target_host) {
$target = 'https://' . $target_host . $uri;
wp_redirect($target, 301);
exit;
}
});Этот код не должен жить в теме, если вы планируете её менять. Лучше вынести в небольшой mu-plugin или в собственный плагин.
Шаг 3. Проверьте canonical на архивных страницах
Для страниц, которые должны оставаться доступными, но не конкурировать с основной страницей, canonical помогает поисковику понять приоритет. В WordPress canonical часто выводится автоматически, но на кастомных шаблонах и в некоторых темах он может отсутствовать или быть неверным.
Если нужно явно задать canonical для конкретного шаблона, можно использовать wp_head:
add_action('wp_head', function () {
if (is_page('contacts')) {
echo '<link rel="canonical" href="https://example.com/contacts/" />' . "\n";
}
}, 1);Такой подход уместен только для точечных случаев. Если canonical приходится править массово, сначала ищите проблему в теме или SEO-плагине.
Шаг 4. Закройте ненужные архивы от индексации
Если на сайте есть архивы тегов, дат или автора, которые не дают ценности, их можно закрыть от индексации. Но не путайте noindex и удаление страницы: страница остаётся доступной для пользователей и ссылок, просто не должна попадать в индекс.
Для поисковых архивов часто достаточно настроить SEO-плагин. Если делаете вручную, можно добавить мета-тег через wp_head:
add_action('wp_head', function () {
if (is_tag() || is_date() || is_author()) {
echo '<meta name="robots" content="noindex,follow" />' . "\n";
}
});Но здесь важно не переборщить: если у вас сильная структура тегов и они реально приводят трафик, закрывать их не стоит.
Шаг 5. Уберите мусорные параметры из индексации
UTM-метки, параметры сортировки и внутренние фильтры часто создают десятки URL с одинаковым контентом. Для аналитики они полезны, но в индекс попадать не должны. Здесь canonical обычно лучше редиректа, потому что редирект может сломать атрибуцию.
Если шаблон страницы генерирует canonical автоматически, убедитесь, что он указывает на URL без параметров. Для проверки откройте страницу с ?utm_source=test и посмотрите, не меняется ли canonical на служебный адрес.
Если дубли создаёт тема или плагин
Иногда проблема не в настройках, а в коде. Например, тема выводит один и тот же пост в нескольких блоках с разными URL, или плагин создаёт отдельные архивы без нормального canonical. В этом случае править нужно источник, а не только следствие.
Как найти виновника
- временно переключитесь на стандартную тему и проверьте, остаётся ли дубль;
- отключите SEO-плагины и сравните canonical;
- посмотрите, не создаёт ли плагин собственные архивы или страницы поиска;
- проверьте, не дублирует ли шаблон
single.phpилиarchive.phpодин и тот же контент в разных местах.
Если после отключения конкретного плагина дубль исчезает, у вас есть точка входа для исправления. Иногда достаточно обновить плагин или изменить его настройки. Иногда — добавить фильтр, который убирает лишний архив из индекса.
Проверка результата после внедрения
После правок не ограничивайтесь визуальной проверкой. Нужно убедиться, что поисковый робот видит именно то, что вы задумали.
Мини-чек-лист
- основной URL отдаёт
200 OK; - технические варианты URL отдают
301на канонический адрес; - в исходном коде есть один корректный
rel="canonical"; - ненужные архивы закрыты через
noindexили отключены; - в Search Console уменьшается число страниц с пометкой о дублях;
- внутренние ссылки ведут на один основной вариант URL.
Проверить canonical можно и через браузер, и через командную строку. Например:
curl -s https://example.com/sample-page/ | grep -i canonicalЕсли у вас несколько языков или поддоменов, проверяйте каждую версию отдельно. Частая ошибка — исправить основной домен и забыть про тестовый или языковой поддомен, который продолжает плодить дубли.
Частые ошибки и как их исправить
Ставят noindex вместо редиректа
Если страницы отличаются только адресом, а не содержанием, нужен редирект. noindex не решает проблему дубля как такового: обе версии остаются доступны, и поисковик всё равно видит две страницы.
Закрывают всё через robots.txt
Это грубая ошибка. Если страница уже в индексе, запрет в robots.txt не удалит её сам по себе. Более того, поисковик может не увидеть canonical и другие сигналы, если вы закрыли доступ слишком рано.
Оставляют разные версии сайта в ссылках
Даже после редиректов дубли возвращаются, если в меню, контенте и шаблонах используются разные варианты URL. Проверьте внутренние ссылки, особенно в хедере, футере и хлебных крошках.
Ломают пагинацию
Иногда после массовой чистки архивов исчезают страницы пагинации или они начинают отдавать неправильный canonical. Это особенно заметно на блогах и новостных сайтах. Пагинацию нужно проверять отдельно, а не считать её дублем по умолчанию.
Практические советы по безопасности и производительности
Если вы добавляете код для редиректов и canonical, не держите его в functions.php без контроля версий. Лучше использовать отдельный mu-plugin или небольшой собственный плагин. Так проще откатить изменения, если что-то пойдёт не так после обновления темы.
Для сайтов, где много технических дублей из-за архивов и служебных страниц, имеет смысл посмотреть в сторону SEO-инструментов с управлением индексированием и очисткой лишней разметки. Например, у Clearfy Pro есть функции для удаления дублей и технической чистки сайта: https://wpshop.ru/plugins/clearfy. Но даже с плагином важно сначала понять, какие URL должны остаться, а какие — нет.
Если сайт большой, после массовых редиректов и изменения canonical не забывайте очистить серверный и плагинный кэш. Иначе вы будете проверять старые заголовки и делать ложные выводы.
Когда решение уже внедрено, повторно проверьте несколько типовых URL: главную, запись, архив категории, страницу с параметрами и старый дубль. Если все они ведут себя предсказуемо, значит, вы не просто скрыли симптомы, а действительно нормализовали структуру адресов.