Как закрыть дубли страниц в WordPress через robots.txt и .htaccess

Технические дубли в WordPress появляются чаще, чем кажется: одна и та же запись доступна по нескольким URL, архивы тегов и авторов дублируют контент, а служебные страницы иногда попадают в индекс. В итоге поисковик тратит краулинговый бюджет не туда, а в отчётах растёт мусор вместо полезных страниц.

Ниже — рабочая схема, которая помогает не «запретить всё подряд», а аккуратно сократить индексируемые дубли. Подход рассчитан на обычный WordPress без выдуманных плагинов и без магии: сначала диагностика, потом точечные правки, затем проверка результата.

Какие дубли в WordPress встречаются чаще всего

Перед правкой важно понять, что именно вы закрываете. Ошибка многих сайтов — одинаково обрабатывать все URL, хотя причины дублей разные.

Типовые источники дублей

  • страницы с пагинацией архивов: /page/2/, /page/3/;
  • архивы тегов и авторов, если они не несут самостоятельной ценности;
  • служебные URL с параметрами сортировки, фильтров или UTM;
  • версии с www и без него, если не настроен единый канонический хост;
  • страницы вложений медиафайлов, которые индексируются отдельно;
  • страницы поиска по сайту вида /?s=....

Не все из них нужно закрывать в robots.txt. Иногда правильнее поставить noindex, а иногда — сделать 301-редирект на канонический URL.

Диагностика: где именно у вас появляются дубли

Сначала соберите факты. Без этого легко закрыть полезные страницы и оставить в индексе то, что действительно мешает.

Что проверить в первую очередь

  • отчёт «Страницы» в Google Search Console: какие URL индексируются, но не должны;
  • результаты поиска по сайту через оператор site:example.ru;
  • наличие одинаковых title и description у архивов и записей;
  • доступность одной и той же страницы по разным адресам;
  • ответ сервера для служебных URL: 200, 301, 404, noindex.

Если у вас есть доступ к командной строке, быстро проверить заголовки можно так:

curl -I https://example.ru/page/2/
curl -I https://example.ru/?s=тест
curl -I https://example.ru/wp-content/uploads/2024/01/image.jpg

Ищите не только код ответа, но и заголовок X-Robots-Tag, если он уже настроен на сервере или через плагин.

Что закрывать через robots.txt, а что — через noindex

Это ключевой момент. robots.txt не убирает страницу из индекса сам по себе. Он только запрещает обход. Если URL уже известен поисковику, он может остаться в выдаче без сниппета. Поэтому для части страниц лучше использовать noindex.

СценарийЛучший вариантКомпромисс
Поисковые страницы ?s=noindex, followРедирект на страницу поиска с нулевым результатом не нужен
Архивы тегов без ценностиnoindex, followОставить только важные теги
Параметры сортировки и фильтровканоникал + запрет обхода в robots.txt для мусорных параметровЕсли параметры уже в индексе, нужен отдельный вывод из индекса
Медиа-вложения301 на файл или родительскую записьЕсли вложения уже индексируются, сначала убрать их из выдачи

Пошаговое решение

1. Настройте единый канонический адрес сайта

Если сайт доступен и с www, и без него, поисковик может считать это разными хостами. В WordPress базовый адрес задаётся в настройках, но редирект лучше закрепить на уровне сервера.

Для Apache можно использовать такой вариант в .htaccess:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.example\.ru$ [NC]
RewriteRule ^(.*)$ https://example.ru/$1 [L,R=301]
</IfModule>

Если у вас Nginx, правило настраивается в конфиге виртуального хоста, а не в .htaccess. Это важно: не пытайтесь копировать Apache-правила в Nginx без адаптации.

2. Закройте мусорные параметры в robots.txt

Файл robots.txt полезен для снижения лишнего обхода. Но закрывайте только то, что действительно не нужно сканировать.

User-agent: *
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php
Disallow: /?s=
Disallow: /*?replytocom=
Disallow: /*?utm_
Disallow: /*?sort=
Disallow: /*?filter=

Sitemap: https://example.ru/sitemap_index.xml

Здесь есть важная оговорка: шаблоны с * и $ поддерживаются не всеми роботами одинаково. Для Google и Яндекса такой подход обычно работает, но если у вас сложная структура URL, лучше дополнительно проверить, как именно поисковик видит правила.

3. Уберите из индекса архивы и служебные страницы через SEO-настройки

Если у вас есть SEO-плагин, используйте его штатные настройки для noindex на тегах, авторах, датах и страницах поиска. Это надёжнее, чем пытаться закрыть всё через robots.txt.

Если плагина нет, можно добавить мета-тег вручную для отдельных типов страниц:

add_action('wp_head', function () {
    if (is_search() || is_tag() || is_author()) {
        echo '<meta name="robots" content="noindex,follow" />' . "\n";
    }
});

Такой код лучше использовать только если вы понимаете, какие архивы реально нужны. Например, теги в новостном проекте могут быть полезны, а в небольшом корпоративном блоге — чаще нет.

4. Сделайте редирект для страниц вложений

Страницы вложений часто создают пустые URL, которые не несут ценности. Если медиа-страницы не нужны, перенаправляйте их на сам файл или на родительскую запись.

add_action('template_redirect', function () {
    if (is_attachment()) {
        $parent = wp_get_post_parent_id(get_the_ID());
        if ($parent) {
            wp_redirect(get_permalink($parent), 301);
            exit;
        }
    }
});

Если у вложения нет родителя, лучше не делать случайный редирект на главную. В таком случае оставьте страницу с 404 или настройте отдельную логику в зависимости от структуры сайта.

Проверка результата после внедрения

После правок не ограничивайтесь открытием пары страниц в браузере. Нужно проверить, как сервер отвечает поисковому роботу и что видит индекс.

  • откройте проблемные URL и убедитесь, что они ведут на канонический адрес или отдают noindex;
  • проверьте заголовки через curl -I или DevTools;
  • в Search Console отправьте на повторную проверку страницы, которые были закрыты ошибочно;
  • посмотрите, исчезли ли дубли в отчёте по индексированию;
  • убедитесь, что sitemap содержит только нужные URL.

Если вы добавляли noindex через wp_head, проверьте исходный код страницы: тег должен быть в HTML, а не только в визуальном просмотре темы.

Частые ошибки и как их исправить

Закрыли в robots.txt, но URL остался в индексе

Это ожидаемо. robots.txt не удаляет уже известные страницы из выдачи. Если нужно убрать URL из индекса, используйте noindex или 301-редирект на канонический адрес.

Поставили noindex на важные страницы

Такое часто случается с архивами категорий, которые реально приводят трафик. Перед массовым закрытием проверьте, какие архивы уже ранжируются и дают переходы. Если страница полезна пользователю и поиску, не закрывайте её автоматически.

Сделали редирект на главную для всех дублей

Это плохая практика. Поисковик быстро замечает нерелевантные редиректы, а пользователи получают не тот контент. Для медиа, архивов и параметров нужны разные сценарии.

Смешали каноникал, noindex и редирект без логики

Если страница отдаёт 301, каноникал на старый URL уже не нужен. Если страница остаётся доступной, но не должна индексироваться, тогда уместен noindex. Не используйте все методы одновременно без причины.

Практические советы по безопасности и производительности

Чистка дублей — это не только про SEO. Чем меньше мусорных URL, тем меньше лишних запросов к серверу и тем проще поддерживать сайт.

  • не редактируйте .htaccess через случайные плагины без бэкапа;
  • после правок очистите серверный и плагинный кэш, иначе вы будете проверять старую версию;
  • если используете SEO-плагин, не дублируйте его правила ручным кодом без необходимости;
  • проверяйте, не закрыли ли вы CSS, JS или REST API случайным правилом в robots.txt;
  • для крупных сайтов сначала тестируйте изменения на staging-копии.

Если нужен более системный подход к чистке дублей, технических архивов и лишних мета-тегов, можно посмотреть в сторону инструментов вроде Clearfy Pro: https://wpshop.ru/plugins/clearfy. Но даже с плагином полезно понимать, какие именно URL вы закрываете и зачем.

Когда лучше не трогать robots.txt вручную

Если сайт уже живёт на сложной связке плагинов, фильтров и кастомных таксономий, массовая правка robots.txt может дать побочный эффект. В таких случаях безопаснее сначала собрать список URL, которые реально индексируются, а потом закрывать их по одному типу.

Особенно осторожно стоит быть с:

  • интернет-магазинами с фильтрами и сортировками;
  • сайтами на мультиязычности;
  • проектами, где архивы тегов используются как посадочные страницы;
  • темами и плагинами, которые сами добавляют каноникал и noindex.

Если после правок дубли не исчезают, проблема часто не в robots.txt, а в том, что у страницы есть несколько доступных маршрутов или неверно настроен канонический URL. Тогда нужно смотреть структуру permalink, редиректы и SEO-метки вместе, а не по отдельности.

Как закрыть дубли страниц в WordPress через robots.txt и .htaccess
30.08.2026