Дубли в WordPress обычно появляются не из-за одной ошибки, а из-за набора мелких настроек: архивы тегов, страницы автора, пагинация, параметры в URL, версии с www и без него, HTTP и HTTPS, а иногда еще и дубли от темы или плагина. В итоге поисковик видит несколько адресов с одинаковым или почти одинаковым содержимым, а вы получаете размытый вес страниц и лишние URL в индексе.
Ниже разберем не абстрактную «борьбу с дублями», а конкретный сценарий: как найти источники дублей, что отключать, что оставлять, и как проверить, что после правок сайт не потерял нужные страницы из поиска.
Как понять, что проблема именно в дублях
Сначала стоит отличить дубли от обычной просадки трафика. Типичные признаки видны в Google Search Console и в логах обхода:
- в индексе есть несколько URL с одинаковым заголовком и описанием;
- одна и та же запись открывается с параметрами вроде
?amp,?replytocom,?utm_source=; - в отчете «Страницы» появляются варианты архивов, которые вы не планировали продвигать;
- поиск по сайту или внутренние ссылки ведут на URL с лишними параметрами;
- канонический адрес в исходном коде не совпадает с тем, который вы считаете основным.
Что проверить в первую очередь
Не начинайте с массового удаления. Сначала соберите список проблемных шаблонов URL. Обычно это:
- архивы категорий, тегов, авторов и дат;
- страницы пагинации;
- страницы вложений медиафайлов;
- URL с параметрами сортировки, фильтров или трекинга;
- дубли главной страницы на
/index.php, со слешем и без него, сwwwи без него.
Если у вас установлен SEO-плагин, проверьте, не создает ли он отдельные мета-теги для архивов и таксономий. Если плагина нет, часть логики может идти из темы или кастомного кода.
Диагностика: где искать источник дублей
Самый полезный способ — посмотреть, какие URL реально отдает сервер и что в них отличается. Для этого не нужен сложный стек. Достаточно открыть несколько вариантов одной страницы и сравнить:
- код ответа;
canonicalв<head>;- мета-robots;
- заголовок страницы;
- наличие редиректа на основной адрес.
Если у вас есть доступ к командной строке, можно быстро сравнить заголовки:
curl -I https://example.com/post-name/
curl -I https://www.example.com/post-name/
curl -I https://example.com/post-name/?utm_source=testСмотрите, есть ли 301-редирект на один основной вариант. Если редиректа нет, это уже кандидат на дубль.
Проверка в исходном коде страницы
Откройте HTML и найдите тег rel="canonical". Для обычной записи он должен указывать на один чистый URL без параметров. Для архивов и пагинации логика может отличаться, но каноникал должен быть осознанным, а не случайным.
Если canonical отсутствует, это не всегда критично, но для WordPress-сайта без него вы сильно усложняете поисковику выбор основной версии страницы.
Пошаговое решение: что исправлять и в каком порядке
Лучше идти от инфраструктуры к контенту. Так вы не будете лечить симптомы, пока источник дублей остается активным.
1. Приведите к одному виду домен и протокол
В Настройки → Общие проверьте адрес WordPress и адрес сайта. Они должны быть одинаковыми по протоколу и домену. Если сайт должен работать на HTTPS, не оставляйте старый HTTP как основной адрес.
На уровне сервера настройте 301-редирект на единственный вариант домена. Пример для Apache:
RewriteEngine On
RewriteCond %{HTTPS} !=on [OR]
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^ https://example.com%{REQUEST_URI} [L,R=301]Для Nginx логика будет другой, но смысл тот же: один канонический хост и один протокол.
2. Закройте технические архивы, которые не нужны в поиске
Если у вас информационный сайт, архивы дат и авторов часто не дают ценности, но создают дубли и раздувают индекс. Их можно отключить в SEO-плагине или через код, если вы точно понимаете последствия.
Пример для темы или мини-плагина: отключить архивы автора и даты через фильтры, если ваша тема или SEO-плагин их поддерживает не полностью, а вы хотите управлять логикой сами:
<?php
add_action('template_redirect', function () {
if (is_author() || is_date()) {
global $wp_query;
$wp_query->set_404();
status_header(404);
nocache_headers();
}
});Этот вариант жесткий и подходит не всем. Если архивы уже в индексе и на них есть трафик, сначала оцените последствия. Иногда лучше оставить страницу доступной, но добавить noindex,follow через SEO-плагин или шаблон.
3. Уберите дубли от вложений изображений
Страницы вложений — частая причина мусора в индексе. Пользователь открывает картинку, а WordPress создает отдельную страницу attachment, которая почти всегда бесполезна для поиска.
Безопасный вариант — редиректить attachment-страницы на сам файл или на родительскую запись. Пример:
<?php
add_action('template_redirect', function () {
if (is_attachment()) {
$parent = wp_get_post_parent_id(get_queried_object_id());
if ($parent) {
wp_redirect(get_permalink($parent), 301);
exit;
}
$file = wp_get_attachment_url(get_queried_object_id());
if ($file) {
wp_redirect($file, 301);
exit;
}
}
});Если у вас уже есть SEO-плагин, проверьте, не делает ли он это сам. Двойной редирект здесь не нужен.
4. Нормализуйте URL с параметрами
Параметры utm_*, fbclid, gclid и похожие не должны создавать отдельные индексируемые страницы. Обычно поисковики сами понимают их как служебные, но на практике лучше не оставлять их без контроля.
Если у вас есть внутренние ссылки с параметрами, исправьте источник. Для внешнего трафика достаточно canonical на чистый URL и корректных редиректов там, где это уместно.
Для случаев, когда параметр не должен влиять на контент, можно удалить его на стороне шаблона при формировании canonical:
<?php
add_filter('get_canonical_url', function ($canonical, $post) {
if (!$canonical) {
return $canonical;
}
$parts = wp_parse_url($canonical);
if (empty($parts['query'])) {
return $canonical;
}
parse_str($parts['query'], $query);
foreach (array_keys($query) as $key) {
if (strpos($key, 'utm_') === 0 || in_array($key, ['fbclid', 'gclid'], true)) {
unset($query[$key]);
}
}
$clean = $parts['scheme'] . '://' . $parts['host'] . ($parts['path'] ?? '');
if (!empty($query)) {
$clean .= '?' . http_build_query($query);
}
return $clean;
}, 10, 2);Этот код полезен только если вы понимаете, что делаете. Если canonical уже формируется SEO-плагином, не дублируйте логику в теме.
Сравнение подходов: плагин, код или ручная настройка
| Подход | Когда подходит | Плюсы | Минусы |
|---|---|---|---|
| SEO-плагин | Нужно быстро закрыть архивы, теги, параметры и canonical | Меньше ручной работы, проще поддержка | Легко получить конфликт настроек, если часть логики уже в теме |
| Код в теме/мини-плагине | Нужна точечная логика под конкретный сайт | Полный контроль, можно убрать лишнее без тяжелых плагинов | Нужно тестировать после обновлений темы и ядра |
| Ручная настройка сервера | Нужно привести к одному виду домен, HTTPS, слеши | Самый надежный уровень для редиректов | Ошибки в конфиге могут сломать доступ к сайту |
Как проверить, что решение сработало
После правок не ограничивайтесь открытием главной страницы в браузере. Проверьте несколько уровней:
- основной URL отвечает 200 и не имеет лишних редиректов;
- варианты с
www, HTTP и параметрами ведут на один адрес через 301; - страницы, которые вы закрывали, не попадают в sitemap;
- в исходном коде у нужных страниц canonical указывает на чистый URL;
- в Search Console исчезают или уменьшаются сообщения о дублирующихся страницах.
Быстрая проверка через curl:
curl -I https://example.com/page/
curl -I https://www.example.com/page/
curl -I https://example.com/page/?utm_source=testЕсли все настроено правильно, вы увидите либо прямой 200 на каноническом адресе, либо 301 на него с альтернативных вариантов.
Частые ошибки и как их исправить
Оставили несколько канонических вариантов
Часто проблема не в отсутствии canonical, а в том, что разные слои сайта пишут его по-разному: тема, SEO-плагин и кастомный код. В итоге поисковик получает противоречивые сигналы. Решение простое: оставьте один источник правды.
Закрыли архивы, которые дают трафик
Если архив категорий или тегов уже ранжируется, резкое отключение может просадить видимость. Сначала посмотрите статистику в Search Console и аналитике, потом решайте, что закрывать через noindex, а что оставить.
Сделали 404 там, где нужен 301
Если страница имела внешние ссылки или уже была в индексе, 404 — не лучший вариант. Для дублей обычно нужен 301 на основной адрес, а 404 оставляют для реально удаленного контента.
Не проверили шаблоны темы
Иногда дубли создаются не ядром WordPress, а шаблоном: отдельный вывод заголовка, неправильный canonical, лишние ссылки на архивы, повторяющиеся блоки в header.php. После обновления темы такие ошибки легко пропустить.
Практические советы по безопасности и производительности
Любые правки, которые затрагивают редиректы и каноникал, лучше вносить не в активную тему, а в мини-плагин или mu-plugin. Так вы не потеряете логику при смене темы.
Перед изменениями:
- сделайте резервную копию файлов и базы;
- проверьте правила редиректов на staging, если он есть;
- не ставьте одновременно несколько SEO-плагинов с похожими функциями;
- не добавляйте редиректы на каждый параметр без необходимости — это замедляет обработку запросов;
- после правок очистите кэш страницы, объекта и CDN, если он используется.
Если вам нужно быстро убрать дубли и технический мусор без ручной сборки десятка настроек, имеет смысл посмотреть на инструменты вроде Clearfy Pro: он закрывает часть типовых задач по чистке сайта и SEO-настройкам, но даже в этом случае логику дублей все равно нужно проверять вручную под конкретный проект.
Главный принцип здесь простой: сначала найдите источник дубля, потом решайте, нужен ли редирект, canonical, noindex или полное удаление URL. Если перепутать порядок, можно убрать не мусор, а рабочие страницы.