В WordPress дубли обычно появляются не из-за одной ошибки, а из-за набора мелочей: архивы тегов, страницы автора, пагинация, параметры сортировки, версии с ?replytocom, вложения медиафайлов, тестовые таксономии. Если их не контролировать, поисковик тратит обход на мусор, а в индексе начинают жить страницы, которые вы не планировали продвигать.
Ниже — рабочая схема: сначала находим источник дублей, затем выбираем, что закрывать через noindex, а что — через robots.txt, и в конце проверяем результат без гадания по логам.
Какие дубли в WordPress встречаются чаще всего
Проблема не всегда выглядит как явный дубль в Search Console. Иногда это просто несколько URL, которые ведут на один и тот же контент или почти на один и тот же шаблон. Для SEO это разные адреса, а для пользователя — одна и та же страница.
Типовые источники дублей
- архивы тегов и рубрик, если они не несут самостоятельной ценности;
- страницы автора на сайте с одним редактором или без смысла в авторских архивах;
- страницы вложений медиафайлов;
- пагинация архивов и страниц записей;
- URL с параметрами сортировки, фильтрации, UTM и служебными параметрами;
- версии с
/page/2/,?replytocom=и похожими хвостами; - дубли из-за http/https, www/без www, слеша на конце и неправильных редиректов.
Диагностика: где именно у вас появляется дубль
Сначала не трогайте правила закрытия. Сначала посмотрите, какие URL реально индексируются и какие из них не должны там быть. Иначе легко закрыть лишнее и получить просадку по нормальным страницам.
Что проверить вручную
- откройте несколько архивов тегов и рубрик: есть ли у них уникальный текст, заголовок и смысл;
- проверьте страницы автора, если на сайте один автор или авторские архивы пустые;
- посмотрите исходный код страниц с параметрами: есть ли
canonicalна чистый URL; - проверьте, не индексируются ли вложения изображений;
- сравните URL с и без слеша, с www и без www.
Что смотреть в Search Console и логах
В Search Console полезны отчёты по страницам, исключённым из индекса, и по дублированным страницам с выбранным каноническим URL. Если сайт большой, дополнительно смотрите серверные логи: какие URL чаще всего обходятся ботом, но не дают ценности.
Если у вас есть доступ к командной строке, можно быстро собрать список URL, которые отдают неканоническую версию. Например, через curl и поиск заголовка Link или тега canonical в HTML.
curl -s https://example.com/sample-page/ | grep -i canonicalЭто не заменяет аудит, но помогает быстро понять, куда ведёт каноникал и не ломается ли он на шаблоне.
Что закрывать через noindex, а что через robots.txt
Здесь часто делают ошибку: всё подряд закрывают в robots.txt. Это не всегда правильно. Если страница уже в индексе, запрет на обход не убирает её из выдачи мгновенно. Для удаления из индекса чаще нужен noindex или редирект, а robots.txt — это про запрет обхода, а не про гарантированное удаление.
| Подход | Когда использовать | Плюс | Минус |
|---|---|---|---|
noindex | страница должна быть доступна, но не нужна в поиске | поисковик видит директиву и может убрать URL из индекса | страницу ещё нужно обходить, чтобы увидеть мета-тег |
robots.txt | служебные разделы, которые не должны тратить crawl budget | быстро ограничивает обход | не решает уже проиндексированные URL |
| 301-редирект | есть явный дубль и есть правильный канонический адрес | передаёт сигнал на целевой URL | нельзя использовать для страниц без замены |
Практическое правило
Если страница полезна пользователю, но не должна ранжироваться отдельно, ставьте noindex,follow. Если это технический мусор, который не должен обходиться, закрывайте в robots.txt или убирайте на уровне генерации URL. Если это дубль с очевидным основным адресом, делайте 301.
Пошаговое решение в WordPress
Шаг 1. Уберите индексирование лишних архивов
Для большинства сайтов достаточно отключить индексацию архивов, которые не несут самостоятельной ценности: страницы автора, даты, иногда теги. Если вы используете SEO-плагин, делайте это в его настройках. Если нужен код, можно добавить мета-robots точечно.
add_action('wp_head', function () {
if (is_author() || is_date() || is_attachment()) {
echo '<meta name="robots" content="noindex,follow">' . "\n";
}
});Этот вариант рабочий, но его лучше использовать только если вы понимаете, как тема выводит head и нет другого SEO-плагина, который уже управляет robots-метатегом. Два разных источника директив часто создают конфликт.
Шаг 2. Закройте служебные URL в robots.txt
В robots.txt имеет смысл отправлять то, что не должно обходиться вообще: внутренние поисковые страницы, служебные параметры, иногда архивы, если они не нужны. Но не закрывайте там то, что уже проиндексировано и требует удаления.
User-agent: *
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php
Disallow: /?s=
Disallow: /search/
Disallow: /*?replytocom=
Disallow: /*?attachment_id=
Sitemap: https://example.com/sitemap_index.xmlЕсли сайт использует красивые ЧПУ и внутренний поиск на отдельном пути, правила нужно подстроить под реальную структуру. Универсального файла для всех сайтов нет.
Шаг 3. Поставьте canonical на основную версию
Если у вас дубли из-за параметров или разных представлений одного контента, canonical должен указывать на чистый URL. Это особенно важно для страниц с фильтрами, сортировкой и пагинацией.
add_filter('get_canonical_url', function ($canonical, $post) {
if (is_singular('post') && $post instanceof WP_Post) {
return get_permalink($post);
}
return $canonical;
}, 10, 2);Фильтр get_canonical_url есть в WordPress, но применять его нужно аккуратно: не переписывайте canonical без необходимости для всех типов страниц. Иначе можно сломать архивы и пагинацию.
Шаг 4. Уберите вложения медиафайлов из индекса
Страницы вложений почти всегда бесполезны для поиска, если вы не строите фотобанк или каталог изображений. Обычно их лучше редиректить на файл или на родительскую запись.
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;
}
wp_redirect(home_url('/'), 301);
exit;
}
});Это простой и понятный вариант. Если у вас уже есть SEO-плагин, проверьте, не делает ли он такой редирект сам, чтобы не получить цикл или двойную обработку.
Как проверить, что решение сработало
После внедрения не ограничивайтесь визуальной проверкой в браузере. Нужно убедиться, что поисковик видит именно то, что вы задумали.
- откройте страницу и проверьте исходный код: есть ли нужный
meta robotsи корректныйcanonical; - проверьте ответ сервера для редиректов: должен быть
301, а не302; - в Search Console отправьте URL на переобход и посмотрите, как он определяется;
- проверьте, что закрытые в
robots.txtURL больше не тратят обход на новые запросы; - убедитесь, что важные страницы не получили случайный
noindex.
Для быстрой проверки заголовков удобно использовать:
curl -I https://example.com/attachment-page/Если ожидаете редирект, смотрите на статус и на конечный URL. Если ожидаете noindex, проверьте HTML-ответ, а не только заголовки.
Частые ошибки и как их исправить
Закрыли страницу в robots.txt, но она осталась в индексе
Это нормальная ситуация. robots.txt не удаляет URL из индекса сам по себе. Если страница уже известна поисковику, используйте noindex или 301 на релевантную страницу.
Поставили noindex на важные архивы
Такое часто случается с рубриками, которые реально собирают трафик и помогают навигации. Перед закрытием проверьте, есть ли у архива уникальный текст, внутренние ссылки и поисковый спрос. Если архив полезен, не убирайте его из индекса без причины.
Сломали canonical на страницах пагинации
Если все страницы пагинации каноникалят на первую страницу, поисковик может хуже понимать структуру архива. Для некоторых сайтов это допустимо, для некоторых — нет. Смотрите на логику шаблона и на то, как реально устроен контент.
Получили конфликт между плагином и кодом
Если SEO-плагин уже выводит canonical и robots-метатеги, а вы добавили свои через wp_head, в HTML может оказаться два набора директив. Это нужно проверить в исходнике и оставить только один источник правды.
Безопасность и производительность: что не стоит делать
Не редактируйте ядро WordPress ради закрытия дублей. Любое обновление всё перетрёт. Не ставьте агрессивные правила в .htaccess без понимания, какие URL они затронут. И не закрывайте всё подряд через массовые плагины, если не проверили, как они работают с каноникалами и sitemap.
Если у вас много дублей из-за параметров, лучше сначала убрать причину на уровне шаблона или фильтрации URL, а уже потом добивать остатки директивами. Это снижает нагрузку на обход и делает структуру сайта предсказуемой.
Когда нужен более быстрый и менее ручной вариант, можно использовать SEO-плагин с настройками для архивов, мета-robots и чистки дублей. Например, в Clearfy Pro есть инструменты для отключения лишних архивов и технической оптимизации, но перед включением любых опций всё равно проверьте, как они влияют на конкретный сайт: шаблон, sitemap и уже существующие редиректы.
Если после правок дубли продолжают появляться, обычно проблема не в одном теге, а в генерации URL, структуре таксономий или в том, что на сайте одновременно работают несколько источников SEO-логики. В таком случае лучше идти от списка URL, а не от настроек «на глаз».