Дубли в WordPress обычно появляются не из-за одной ошибки, а из-за набора мелких настроек: архивы тегов, пагинация, параметры сортировки, версии с www и без него, HTTP/HTTPS, страницы автора, вложения медиафайлов, а иногда и из-за темы или SEO-плагина. На сайте это выглядит как «одна и та же страница доступна по нескольким адресам», а в поиске — как размывание веса и лишние URL в индексе.
Ниже разберём, как быстро диагностировать проблему, какие дубли WordPress действительно стоит закрывать, а какие лучше оставить, и как проверить, что после правки сайт не потерял нужные страницы из индекса.
Какие дубли в WordPress встречаются чаще всего
Перед правкой полезно понять источник. В WordPress одинаковый контент может открываться по разным URL по вполне штатным причинам:
- страница доступна с
wwwи без него; - сайт открывается и по
http, и поhttps; - у записей есть страницы вложений с тем же изображением и почти пустым контентом;
- архивы категорий, тегов, авторов и дат дублируют друг друга по смыслу;
- пагинация и параметры в URL создают новые адреса для одного и того же списка;
- страницы с UTM-метками или сортировкой попадают в индекс как отдельные документы;
- тема выводит один и тот же блок на главной, в архиве и в таксономии без каноникализации.
Что считать проблемой, а что нет
Не каждый повтор — ошибка. Например, архив категории и отдельная запись не являются дублями, даже если часть текста совпадает. Проблема начинается там, где поисковик видит несколько URL с практически одинаковым основным контентом и не понимает, какой из них считать главным.
Если сомневаетесь, ориентируйтесь на два признака: одинаковый основной текст и возможность открыть эти страницы без явного намерения пользователя перейти на другую сущность.
Диагностика: где искать дубли и как их подтвердить
Начинать лучше не с кода, а с проверки фактических URL. Это экономит время: часто оказывается, что проблема не в WordPress, а в настройке сервера или SEO-плагина.
- Проверьте главную страницу с
http/httpsиwww/non-www. - Откройте несколько записей и категорий в режиме инкогнито: нет ли дубля со слэшем и без слэша, если сервер настроен нестабильно.
- Посмотрите исходный код страницы и найдите
rel="canonical". - В Google Search Console откройте раздел индексации и посмотрите, какие URL считаются дубликатами или альтернативными страницами.
- Проверьте, не индексируются ли страницы вложений и служебные архивы.
Если доступен терминал, быстро проверить редиректы можно через curl:
curl -I https://example.com/page-nameВ ответе важно увидеть один финальный URL с кодом 200 для канонической версии и 301 для всех альтернативных вариантов.
Пошаговое решение: что закрывать, а что оставлять
Универсального «удалить все дубли» не существует. Рабочая схема обычно состоит из трёх действий: выбрать канонический адрес, настроить редирект на уровне сервера или WordPress и убрать из индекса страницы, которые не должны конкурировать с основным контентом.
1. Зафиксируйте одну главную версию домена
Если сайт должен работать на HTTPS без www, все остальные варианты должны вести туда же. Это лучше делать на уровне веб-сервера, а не только через WordPress, чтобы не плодить цепочки редиректов.
Пример для .htaccess на Apache:
RewriteEngine On
RewriteCond %{HTTPS} !=on [OR]
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^ https://example.com%{REQUEST_URI} [L,R=301]Для Nginx логика аналогичная: один серверный блок принимает альтернативные варианты и отдаёт 301 на канонический домен.
2. Закройте вложения и пустые служебные страницы
Страницы вложений часто создают тонкие дубли: на них почти нет полезного текста, но есть отдельный URL. Если они не нужны для SEO, лучше редиректить их на сам файл или на родительскую запись.
Ниже пример для functions.php или мини-плагина: если открыта страница вложения, отправляем пользователя на родительскую запись, а если родителя нет — на сам файл.
add_action('template_redirect', function () {
if (!is_attachment()) {
return;
}
$post = get_queried_object();
if (!$post || empty($post->ID)) {
return;
}
$parent_id = wp_get_post_parent_id($post->ID);
if ($parent_id) {
wp_safe_redirect(get_permalink($parent_id), 301);
exit;
}
$file_url = wp_get_attachment_url($post->ID);
if ($file_url) {
wp_safe_redirect($file_url, 301);
exit;
}
});3. Уберите из индекса архивы, которые не несут ценности
Если на сайте много тегов, авторов или дат, часть архивов часто только размножает одинаковые подборки. Их не всегда нужно удалять полностью, но часто разумно закрыть от индексации через SEO-плагин или мета-тег noindex.
Практический ориентир такой:
| Вариант | Когда подходит | Компромисс |
|---|---|---|
| Редирект 301 | Есть явный дубль одной и той же страницы | Пользователь и робот попадают только на одну версию |
rel=canonical | Нужны альтернативные URL, но главный должен быть один | Дубль остаётся доступным, но сигнал передаётся каноническому адресу |
noindex | Страница полезна пользователю, но не должна индексироваться | URL остаётся в обходе, но не конкурирует в выдаче |
4. Нормализуйте параметры в URL
Если на сайте есть фильтры, сортировка или UTM-метки, не давайте им создавать бесконечное число индексируемых страниц. Для служебных параметров обычно достаточно канонического URL без параметров.
Если нужен точечный контроль, можно добавить свой canonical для выбранных шаблонов:
add_filter('get_canonical_url', function ($canonical, $post) {
if (is_admin() || !$post) {
return $canonical;
}
if (is_singular('post')) {
return get_permalink($post);
}
return $canonical;
}, 10, 2);Этот фильтр не решает все проблемы сам по себе, но помогает, если тема или плагин подменяют канонический адрес не так, как нужно.
Как проверить, что решение сработало
После внедрения не ограничивайтесь открытием страницы в браузере. Нужна проверка на уровне ответов сервера и HTML.
- У альтернативных URL должен быть
301, а не302. - Каноническая версия должна отдавать
200. - В исходнике страницы должен быть один корректный
rel="canonical". - Страницы, которые вы закрывали от индексации, должны иметь ожидаемый
noindexили не попадать в sitemap. - В Search Console со временем должно уменьшаться число альтернативных и дублирующихся URL.
Проверить canonical можно так:
curl -s https://example.com/page-name | grep -i canonicalЕсли используете SEO-плагин, убедитесь, что он не конфликтует с вашим кодом. Два разных canonical на одной странице — частая причина путаницы для поисковика.
Частые ошибки и как их исправить
Редирект настроен, но дубли всё равно индексируются
Обычно причина в цепочке редиректов или в том, что канонический URL отдаёт не тот код ответа. Проверьте, нет ли промежуточного перехода http → https → www → без www. Должен быть один шаг.
Закрыли архивы, а трафик просел
Значит, вы закрыли не мусорные страницы, а полезные посадочные. Например, категория может приносить трафик по НЧ-запросам. В таком случае лучше оставить её в индексе, но улучшить уникальный текст, а не ставить noindex автоматически на всё подряд.
Страницы вложений исчезли, хотя на них были переходы
Если вложения реально получали трафик, не удаляйте их без анализа. Иногда лучше сделать 301 на родительскую запись или на сам файл, чем массово закрывать всё без разбора.
Плагин SEO и код темы спорят между собой
Если в теме уже есть вывод canonical или robots-меток, а SEO-плагин делает то же самое, оставьте один источник истины. Дублирующиеся мета-теги — типичная причина некорректной индексации.
Практические советы по безопасности и производительности
Любые правки редиректов и canonical лучше вносить через дочернюю тему или мини-плагин, а не напрямую в ядро темы. Так проще откатить изменения после обновления.
- Перед массовыми редиректами сделайте резервную копию базы и
.htaccess/nginx.conf. - Не ставьте редиректы через PHP на каждую загрузку, если это можно решить на уровне сервера.
- После правок очистите кеш страницы и объектный кеш, если он есть.
- Проверьте sitemap: в него не должны попадать URL, которые вы закрыли от индексации.
Если нужен более системный аудит дублей, полезно смотреть не только на редиректы, но и на служебные настройки сайта: robots.txt, sitemap, архивы, вложения и шаблоны темы. В проектах, где много технических правок, иногда проще сначала навести порядок в SEO-настройках и дублях через один инструмент, чем собирать это из разрозненных плагинов. Например, в Clearfy Pro есть набор функций для чистки сайта и отключения лишних дублей: https://wpshop.ru/plugins/clearfy.
Если после внедрения сомневаетесь, что всё работает правильно, сравните три вещи: ответ сервера, canonical в HTML и статус URL в Search Console. Когда эти три слоя согласованы, дубли обычно перестают мешать индексации.