Дубли в WordPress редко появляются из одной причины. Обычно это смесь архивов, пагинации, параметров в URL, тегов, авторских страниц и технических страниц, которые поисковик видит как отдельные документы. Если не разложить проблему по типам, легко закрыть от индексации лишнее и одновременно сломать нужные страницы.
Ниже — рабочая схема, которая помогает сначала найти источник дублей, потом выбрать способ исправления: через настройки, код или SEO-плагин. Подход рассчитан на обычный сайт на WordPress, без привязки к WooCommerce.
Какие дубли чаще всего встречаются в WordPress
На практике чаще всего всплывают такие сценарии:
- одна и та же запись доступна по нескольким адресам из-за категорий, тегов и архивов автора;
- страницы пагинации индексируются как самостоятельные, хотя не несут уникальной ценности;
- URL с параметрами сортировки, поиска или UTM попадают в индекс;
- архивы тегов и дат дублируют смысл основных рубрик;
- страницы вложений медиафайлов индексируются отдельно от самого контента;
- сайт отдает и
www, и безwww, а также HTTP и HTTPS-версии.
Не все из этого нужно закрывать. Например, пагинация может быть полезна для обхода роботом, а архивы категорий — для структуры сайта. Ошибка начинается там, где пытаются решить все одной директивой noindex.
Диагностика: как понять, что именно дублируется
Сначала проверьте не «есть ли дубли вообще», а какой тип дубля у вас преобладает. Это экономит время и снижает риск лишних правок.
Что смотреть в первую очередь
- отчеты Google Search Console по страницам и исключенным URL;
- список проиндексированных адресов через оператор
site:; - URL с параметрами в логах или аналитике;
- наличие одинаковых title и meta description на разных страницах;
- канонические URL в исходном коде страниц.
Если у вас есть доступ к серверным логам, полезно посмотреть, какие URL реально обходят боты. Иногда проблема не в индексации, а в том, что робот тратит краулинговый бюджет на мусорные адреса.
Быстрая проверка через консоль
Если есть WP-CLI, можно быстро посмотреть, сколько архивов и вложений опубликовано на сайте:
wp post list --post_type=attachment --post_status=inherit --fields=ID,post_title --format=table
wp term list category --fields=term_id,name,slug,count --format=table
wp term list post_tag --fields=term_id,name,slug,count --format=tableЭто не покажет дубли напрямую, но помогает увидеть, не расплодились ли пустые теги, архивы вложений и слабые таксономии, которые только создают лишние URL.
Пошаговое решение: что закрывать, а что оставлять
Удобнее идти от наиболее безопасных изменений к более жестким. Сначала убираем технический шум, потом — спорные архивы.
Шаг 1. Приведите к одному виду базовый URL
Проверьте, что сайт отвечает только в одной версии: HTTPS, с www или без него. Это настраивается на уровне сервера, а не WordPress. Если обе версии доступны, поисковик может считать их разными сайтами.
После этого убедитесь, что в Настройки → Общие адрес WordPress и адрес сайта совпадают с выбранной канонической версией.
Шаг 2. Закройте страницы вложений
Страницы медиафайлов часто бесполезны для поиска: там нет контента, кроме изображения и подписи. Если тема или плагин не делает редирект на файл или родительскую запись, лучше настроить это явно.
Для редиректа вложений на родительскую запись можно использовать такой код в functions.php дочерней темы или в небольшом плагине:
add_action('template_redirect', function () {
if (is_attachment()) {
global $post;
if ($post && !empty($post->post_parent)) {
wp_redirect(get_permalink($post->post_parent), 301);
exit;
}
wp_redirect(home_url('/'), 301);
exit;
}
});Это рабочий вариант, если вам не нужны отдельные страницы вложений. Если они уже участвуют в выдаче и получают трафик, сначала проверьте их ценность, а потом принимайте решение.
Шаг 3. Ограничьте индексирование тегов и слабых архивов
Теги в WordPress часто создаются «на автомате» и потом дублируют рубрики. Если теговые архивы не несут самостоятельной пользы, их лучше закрыть от индексации или вообще отключить вывод в sitemap.
Через код можно добавить noindex,follow для тегов и архивов автора:
add_filter('wp_robots', function (array $robots) {
if (is_tag() || is_author()) {
$robots['noindex'] = true;
$robots['follow'] = true;
}
return $robots;
});Такой подход не ломает обход ссылок, но убирает сами архивы из индекса. Если у вас авторские страницы реально полезны, например на медиа-сайте, этот вариант нужно пересмотреть.
Шаг 4. Уберите из индекса параметры URL
Параметры сортировки, поиска и фильтрации часто создают бесконечное число адресов. Для обычного контентного сайта они почти всегда лишние.
Если параметры используются только для фронтенд-логики и не должны индексироваться, можно отдать для них noindex через условие по $_GET:
add_filter('wp_robots', function (array $robots) {
$blocked_params = ['sort', 'filter', 'view', 'replytocom'];
foreach ($blocked_params as $param) {
if (isset($_GET[$param])) {
$robots['noindex'] = true;
$robots['follow'] = true;
break;
}
}
return $robots;
});Для replytocom это особенно полезно: WordPress и так может плодить URL с этим параметром в комментариях.
Шаг 5. Настройте каноникал для пагинации и архивов
Не всегда нужно ставить noindex. Иногда достаточно корректного canonical. Например, если у вас пагинация рубрики, страницы /category/news/page/2/ должны указывать на себя, а не на первую страницу архива. Иначе поисковик может игнорировать вторую и третью страницы.
Большинство нормальных SEO-плагинов это делают автоматически. Если вы пишете логику сами, не подменяйте canonical вручную без необходимости. Сначала проверьте, что тема не выводит дублирующий тег <link rel="canonical"> дважды.
Сравнение подходов: плагин, код или ручная настройка
| Подход | Когда подходит | Плюсы | Минусы |
|---|---|---|---|
| SEO-плагин | Нужно быстро закрыть теги, архивы, вложения, параметры | Меньше ручного кода, проще поддержка | Не всегда гибко для нестандартных правил |
| Код в теме или мини-плагине | Нужны точечные правила для конкретных URL | Полный контроль, нет лишнего интерфейса | Нужно тестировать после обновлений |
| Ручная настройка на сервере | Проблема в www/HTTPS, редиректах, кэше | Решает корень проблемы | Требует доступа к серверу и аккуратности |
Если нужен именно SEO-инструмент для чистки дублей и технической оптимизации, имеет смысл смотреть в сторону плагинов уровня Clearfy Pro: он закрывает часть типовых задач без ручного кода. Но даже с плагином полезно понимать, что именно он меняет, иначе легко скрыть симптом, а не причину.
Как проверить, что исправление сработало
После внедрения не ограничивайтесь визуальной проверкой. Нужны минимум три уровня контроля.
- Откройте проблемный URL и посмотрите исходный код: есть ли
noindex, корректный canonical, нет ли лишних мета-тегов. - Проверьте ответ сервера через
curl -Iили инструменты браузера: редирект должен быть 301, а не 302. - В Search Console отправьте страницу на переобход и посмотрите, как она классифицируется через несколько дней.
Пример быстрой проверки canonical и robots с консоли:
curl -s https://example.com/category/news/ | grep -iE 'canonical|robots'
curl -I https://example.com/wp-content/uploads/2024/01/image.jpgЕсли после правок страница вложения все еще открывается как отдельный документ, значит редирект не срабатывает или тема переопределяет шаблон.
Частые ошибки и как их исправить
Ставят noindex на все подряд
Это самая частая ошибка. В итоге из индекса исчезают не только мусорные архивы, но и полезные категории, которые приводят трафик. Исправление простое: сначала разделите архивы на полезные и технические, потом применяйте правила точечно.
Закрывают URL в robots.txt вместо noindex
Если страница уже известна поисковику, запрет в robots.txt не гарантирует ее удаление из индекса. Для удаления дубля обычно нужен noindex или 301-редирект на канонический адрес.
Оставляют дубли из-за плагина кэша
Некоторые плагины кэширования могут сохранять старые мета-теги или canonical после изменения настроек. После правок обязательно очищайте кэш страницы, объектный кэш и CDN, если он есть.
Ставят редирект на главную для всех вложений
Это допустимо не всегда. Если вложение связано с конкретной записью, лучше редиректить на родителя. На главную стоит отправлять только «сиротские» вложения без parent.
Практические советы по безопасности и производительности
Любые изменения в functions.php лучше делать не в основной теме, а в дочерней или в маленьком MU-плагине. Тогда обновление темы не затрет правки. Перед изменениями сохраните резервную копию и проверьте сайт в staging-окружении, если оно есть.
- не добавляйте несколько одинаковых фильтров
wp_robotsв разных местах; - не дублируйте canonical в теме и SEO-плагине одновременно;
- не закрывайте от индексации страницы, которые приносят переходы из поиска;
- после массовых правок очищайте кэш и проверяйте исходный HTML, а не только визуальный вид страницы;
- если используете плагины для SEO-очистки, проверяйте, не отключили ли они нужные системные страницы случайно.
Если задача шире, чем один тип дублей, удобно сначала сделать инвентаризацию URL, а потом уже выбирать инструмент: код, SEO-плагин или серверные редиректы. В WordPress это почти всегда быстрее, чем лечить последствия после массовой индексации мусорных адресов.