Если в Search Console всплывают десятки похожих URL, а в индексе оказываются страницы вложений, страницы архивов с пагинацией и их вариации с параметрами, проблема обычно не в контенте, а в настройках WordPress и теме. Такие дубли особенно часто появляются на сайтах с большим количеством изображений, рубрик и архивов записей.
Ниже разберём, как найти источник дублей, что отключать на уровне WordPress, а что лучше оставить и закрыть каноникалами или noindex. Без лишней магии: только рабочие варианты, которые можно проверить руками.
Как понять, что дубли создаёт именно WordPress
Сначала нужно не «чистить всё подряд», а увидеть тип URL, который размножается. Обычно это один из сценариев:
/attachment/или отдельные страницы медиафайлов;- архивы рубрик и меток с пагинацией:
/category/news/page/2/; - страницы автора и даты, если они не нужны для поиска;
- URL с параметрами сортировки, фильтров или UTM, которые попали в индекс;
- дубли главной через
/page/2/и похожие служебные адреса.
Быстрая диагностика в админке и через поиск по сайту
Проверьте три места:
- Отчёт «Страницы» в Google Search Console — там видно, какие URL исключены или выбраны как дубли.
- Поиск по сайту через
site:example.com attachmentиsite:example.com /page/2/. - Исходный код подозрительной страницы: есть ли
rel="canonical", не ведёт ли он на другую страницу.
Если canonical указывает на нормальную страницу, а в индексе всё равно сидят дубли, значит проблема либо в слабом сигнале, либо в том, что лишние URL продолжают генерироваться и доступны для обхода.
Что отключать, а что не трогать
Не все дубли одинаково вредны. Пагинация архивов, например, может быть полезна для обхода и внутренней перелинковки. А вот attachment archive почти всегда создаёт мусор, если вы не используете отдельные страницы вложений как полноценный контент.
| Вариант | Что делает | Когда подходит | Компромисс |
|---|---|---|---|
| Отключить attachment pages | Убирает отдельные страницы медиафайлов | Почти всегда | Нужно настроить редирект на файл или родительскую запись |
| Noindex для архивов | Оставляет URL доступным, но просит не индексировать | Для авторов, дат, части архивов | Страницы всё ещё обходятся роботами |
| Canonical | Указывает основную версию страницы | Для параметров и похожих URL | Не убирает сам URL из обхода |
Пошаговое решение: убрать attachment archive и настроить редирект
Если на сайте не нужны отдельные страницы вложений, самый надёжный путь — отключить их и отправлять посетителя на файл или на запись, к которой прикреплено изображение. Для этого можно использовать template_redirect.
<?php
add_action('template_redirect', function () {
if (!is_attachment()) {
return;
}
$attachment_id = get_queried_object_id();
$parent_id = wp_get_post_parent_id($attachment_id);
if ($parent_id) {
wp_safe_redirect(get_permalink($parent_id), 301);
exit;
}
$file_url = wp_get_attachment_url($attachment_id);
if ($file_url) {
wp_safe_redirect($file_url, 301);
exit;
}
wp_safe_redirect(home_url('/'), 301);
exit;
});Этот вариант полезен, если у вас уже есть индексированные attachment URL и нужно быстро убрать их из поиска без ручной правки каждой страницы.
Когда лучше не редиректить на файл
Если вложение — это не просто картинка, а PDF, прайс или документ, редирект на сам файл может быть нормальным решением. Но если файл должен открываться только через страницу записи, лучше вести на родительский пост. Иначе вы получите индексируемый файл вместо контекстной страницы.
Как закрыть архивы авторов и дат без поломки навигации
Архивы авторов и дат часто создают дубли на новостных и корпоративных сайтах. При этом полностью удалять их не всегда нужно: иногда они полезны для пользователей и внутренней структуры. В таком случае лучше оставить страницы доступными, но убрать их из индекса.
Если вы используете SEO-плагин, проверьте, есть ли в нём отдельные настройки для архивов автора и дат. Если нет — можно добавить noindex через фильтр в теме или мини-плагине. Но не стоит слепо закрывать всё подряд: сначала убедитесь, что эти архивы действительно не несут трафик и не нужны как посадочные.
Пример: добавить noindex для архивов автора и даты
<?php
add_filter('wp_robots', function (array $robots) {
if (is_author() || is_date()) {
$robots['noindex'] = true;
$robots['follow'] = true;
}
return $robots;
});Это не удаляет URL из сайта, но даёт поисковику понятный сигнал. После внедрения проверьте исходный код страницы: должен появиться метатег robots с noindex.
Что делать с пагинацией архивов и рубрик
Пагинация сама по себе не ошибка. Проблема начинается, когда в индекс попадают почти одинаковые страницы без ценности, а canonical настроен неправильно или отсутствует. В этом случае нужно решить, какие страницы должны индексироваться.
Для рубрик с большим количеством записей обычно оставляют индексируемой первую страницу архива, а остальные — либо с canonical на саму страницу пагинации, либо с noindex, если они не нужны в поиске. Выбор зависит от структуры сайта и того, как у вас устроена навигация.
Проверка canonical на страницах пагинации
Откройте /category/news/page/2/ и посмотрите, куда указывает canonical. Если он ведёт на первую страницу рубрики, это может быть нормой для некоторых сайтов, но не всегда. Если же canonical отсутствует или указывает на неправильный URL, поисковик может путаться.
Исправлять canonical вручную стоит только если вы понимаете, как тема и SEO-плагин формируют head. В большинстве случаев проще сначала проверить настройки плагина и шаблон header.php, чем писать собственную логику.
Проверка результата после внедрения
После изменений не ограничивайтесь открытием страницы в браузере. Проверьте три вещи:
- редирект с attachment URL действительно отдаёт
301; - в исходном коде архивов появился нужный
noindexили canonical; - в Search Console новые дубли перестали появляться, а старые постепенно уходят в исключённые.
Для быстрой проверки редиректа можно использовать curl:
curl -I https://example.com/sample-attachment/
В ответе должен быть статус 301 и заголовок Location с целевым URL. Если вместо этого приходит 200, значит код не сработал или условие is_attachment() не совпало с реальным типом страницы.
Для проверки robots и canonical откройте HTML страницы и найдите:
<meta name="robots" content="noindex,follow" />
<link rel="canonical" href="https://example.com/category/news/page/2/" />Частые ошибки и как их исправить
- Редирект attachment ведёт на главную. Обычно это происходит, если у вложения нет родителя и код не обрабатывает fallback. Добавьте проверку
wp_get_attachment_url(). - Noindex ставят через robots.txt. Это не то же самое. Robots.txt запрещает обход, но не управляет индексацией уже известных URL так, как метатег robots.
- Закрывают пагинацию целиком, а потом ломают обход рубрик. Если архив нужен пользователю, не убирайте его без анализа трафика и структуры.
- Меняют canonical вручную в шаблоне, но SEO-плагин перезаписывает его. Сначала проверьте, кто именно выводит canonical: тема, плагин или оба сразу.
- Удаляют attachment pages из базы. Это лишний риск. Обычно достаточно редиректа и настройки индексации.
Практика безопасности и производительности
Если вы добавляете код в functions.php, лучше вынести его в мини-плагин. Так вы не потеряете логику при смене темы и не получите белый экран из-за ошибки в шаблоне.
Ещё один полезный момент: не делайте тяжёлые проверки на каждом запросе. В примерах выше используются стандартные условные теги WordPress, они дешёвые по сравнению с дополнительными запросами в базу. Если у вас большой сайт, сначала тестируйте на staging, а потом уже переносите на боевой домен.
Если нужно быстро убрать часть дублей без ручной правки шаблонов, можно посмотреть в сторону плагинов, которые умеют управлять архивами и техническими страницами. Например, у Clearfy Pro есть инструменты для чистки сайта и отключения лишних сущностей, но перед включением любой опции всё равно проверьте, не завязана ли на ней навигация или SEO-структура.
Самый надёжный порядок такой: сначала найти источник дублей, потом отключить лишнюю генерацию URL, затем проверить canonical и robots, и только после этого смотреть на индексацию в Search Console. Если пропустить первый шаг, можно просто заменить один дубль на другой.