Дубли в WordPress обычно появляются не из-за одной ошибки, а из-за набора мелочей: архивы тегов, страницы автора, пагинация, параметры сортировки, версии с ?replytocom, а иногда и технические URL, которые поисковик видит как отдельные документы. Если их не контролировать, в индексе быстро накапливается мусор, а канонические страницы начинают конкурировать сами с собой.
Ниже — рабочая схема, как подойти к задаче без лишней магии: сначала понять, что именно индексируется, потом закрыть лишнее на уровне robots.txt, .htaccess и настроек WordPress, а затем проверить, что ничего важного не отрезали.
Что именно считать дублем в WordPress
Не всякая похожая страница — дубль. В техническом смысле проблема возникает, когда один и тот же контент доступен по разным URL, а поисковая система может выбрать не тот адрес для индексации. В WordPress это чаще всего такие сценарии:
- архивы категорий и тегов дублируют записи по смыслу;
- страницы автора не несут самостоятельной ценности на небольшом сайте;
- страницы пагинации индексируются без необходимости;
- URL с параметрами
?replytocom,?utm_*,?ampили сортировкой создают лишние варианты; - веб-версия и служебные файлы отдают контент, который не должен попадать в поиск.
Если сайт небольшой и структура простая, часто достаточно убрать лишние архивы и привести каноникал в порядок. Если сайт крупнее, без диагностики лучше не трогать правила в лоб.
Диагностика: где искать дубли
Начинать нужно не с правок, а с проверки факта. Самый быстрый путь — посмотреть, какие URL уже попали в индекс и какие из них повторяют друг друга по шаблону. Для этого удобно использовать:
- отчёт по страницам в Google Search Console;
- поиск по сайту с оператором
site:example.com; - краулер вроде Screaming Frog или Sitebulb;
- просмотр исходного кода проблемных страниц на наличие
rel="canonical".
Если дубли связаны с параметрами, проверьте, не создаёт ли плагин комментариев, фильтров или аналитики новые URL. Часто проблема выглядит так: одна запись доступна по чистому адресу, по адресу с якорем комментария и по версии с параметром отслеживания. Для пользователя это одна страница, для поисковика — несколько.
Что смотреть в первую очередь
- есть ли у архивов тегов и авторов реальная ценность;
- не индексируются ли страницы пагинации без необходимости;
- не открываются ли служебные URL с кодом 200;
- совпадает ли canonical с основным адресом;
- не создаёт ли тема или плагин лишние ссылки на параметры.
Пошаговое решение: что закрывать и чем
Универсального рецепта нет, но для большинства сайтов схема выглядит так: часть дублей убирается настройками WordPress и SEO-плагина, часть — правилами в robots.txt, а часть — редиректами или запретом на уровне сервера. Важно не путать блокировку сканирования и удаление из индекса: если страница уже в поиске, одного Disallow может быть недостаточно.
1. Отключите лишние архивы в WordPress
Если у сайта нет задачи продвигать архивы авторов или теги, их лучше либо закрыть от индексации, либо вообще убрать из публичной навигации. Через код это можно сделать аккуратно, без правки ядра.
<?php
add_action('init', function () {
// Если архивы авторов не нужны на сайте
if (function_exists('remove_action')) {
remove_action('wp_head', 'wp_generator');
}
});
add_filter('author_link', function ($link) {
return $link;
});
Сам по себе этот фрагмент не закрывает архивы от индексации, но показывает правильный подход: лишнее не должно плодиться в шаблоне. Для реального закрытия лучше использовать SEO-плагин или noindex на уровне шаблона.
Если вы работаете через SEO-плагин, проверьте настройки архивов: теги, авторы, даты, форматы записей. На небольших проектах чаще всего достаточно закрыть теги и даты, а авторские архивы оставить только если они реально наполнены.
2. Добавьте правила в robots.txt только для сканирования, а не для удаления
robots.txt полезен, когда нужно снизить нагрузку на обход и не тратить краулинговый бюджет на мусорные URL. Но он не заменяет noindex и не гарантирует удаление уже проиндексированных страниц.
User-agent: *
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php
Disallow: /?replytocom=
Disallow: /*?replytocom=
Disallow: /*?utm_
Disallow: /*?sort=
Disallow: /tag/
Disallow: /author/
Этот пример нужно адаптировать под сайт. Не стоит бездумно закрывать /tag/ и /author/, если эти архивы у вас реально работают как посадочные страницы. Для некоторых проектов теги дают трафик, и тогда их лучше не блокировать, а доработать.
3. Настройте canonical и noindex для архивов
Если архив нужен пользователю, но не нужен в поиске, правильнее оставить его открытым для обхода и поставить noindex,follow. Так поисковик сможет пройти по ссылкам, но не будет индексировать сам архив как отдельную посадочную страницу. Это особенно полезно для страниц пагинации и архивов с тонким контентом.
В шаблоне это можно сделать через wp_head, если у вас нет SEO-плагина или его настройка не покрывает сценарий:
<?php
add_action('wp_head', function () {
if (is_tag() || is_author() || is_date() || is_paged()) {
echo '<meta name="robots" content="noindex,follow" />' . "\n";
}
});
Если у вас уже есть SEO-плагин, не дублируйте мета-теги вручную. Два разных robots на одной странице — типичная причина конфликтов, когда поисковик получает противоречивые сигналы.
4. Уберите параметры URL на уровне сервера, если они создают мусор
Когда один и тот же контент доступен с параметрами, лучше не полагаться только на robots. Если параметр не нужен для работы сайта, можно сделать редирект на чистый URL. Для Apache это обычно решается в .htaccess.
<IfModule mod_rewrite.c>
RewriteEngine On
# Убираем replytocom
RewriteCond %{QUERY_STRING} (^|&)replytocom=[^&]+(&|$)
RewriteRule ^ %{REQUEST_URI}? [R=301,L]
# Убираем UTM-параметры, если они не нужны в URL
RewriteCond %{QUERY_STRING} (^|&)(utm_[^=]+)=[^&]+(&|$)
RewriteRule ^ %{REQUEST_URI}? [R=301,L]
</IfModule>
С UTM-параметрами нужно быть осторожнее: если у вас аналитика или рекламные кампании завязаны на них, не ломайте сбор данных редиректом на сервере. В таком случае лучше закрывать их от индексации через canonical и не трогать сам URL.
Сравнение подходов: что выбрать в реальном проекте
| Подход | Когда уместен | Плюс | Минус |
|---|---|---|---|
| Настройки SEO-плагина | Архивы, теги, авторы, пагинация | Быстро и безопасно | Зависит от плагина и его логики |
robots.txt | Нужно снизить обход мусорных URL | Просто внедрить | Не удаляет уже проиндексированные страницы |
.htaccess / редиректы | Параметры и дубли с одинаковым контентом | Жёстко убирает лишние варианты | Можно сломать рабочие сценарии |
Проверка результата после внедрения
После правок не ограничивайтесь визуальной проверкой. Нужно убедиться, что поисковик видит именно то, что вы задумали.
- Откройте проблемный URL и проверьте исходный код: есть ли
canonicalна основную страницу. - Проверьте ответ сервера через
curl -Iили DevTools: нет ли лишних 200 там, где должен быть редирект илиnoindex. - В Search Console отправьте на переобход несколько ключевых URL.
- Посмотрите, исчезли ли из отчётов страницы с параметрами и служебные архивы.
Пример быстрой проверки заголовков:
curl -I https://example.com/post-name/
curl -I https://example.com/post-name/?replytocom=12
Если второй URL всё ещё отдаёт 200 и не редиректит на чистый адрес, значит правило не сработало или его перекрывает другой плагин. Если canonical указывает на сам параметризованный URL, значит проблема уже в шаблоне или SEO-настройках.
Частые ошибки и как их исправить
Закрыли в robots.txt, но страницы остались в индексе
Это ожидаемо. Disallow запрещает обход, но не гарантирует удаление. Для уже проиндексированных URL нужен noindex, редирект или удаление страницы из сайта.
Поставили noindex и одновременно закрыли URL в robots.txt
Так делать можно не всегда. Если поисковик не может зайти на страницу, он не увидит мета-тег noindex. В результате URL может зависнуть в индексе дольше, чем ожидалось. Для удаления лучше сначала дать роботу доступ, а потом уже ограничивать обход.
Сломали пагинацию
Если закрыть пагинированные страницы слишком агрессивно, поисковик перестанет нормально проходить по архивам и внутренним ссылкам. Для пагинации чаще нужен noindex,follow, а не полный запрет.
Редиректнули все параметры подряд
Это частая ошибка при работе с .htaccess. Не каждый параметр мусорный. Некоторые нужны для фильтров, авторизации, поиска по сайту или аналитики. Перед редиректом проверьте, кто именно генерирует параметр и используется ли он в интерфейсе.
Практические советы по безопасности и производительности
Чистка дублей полезна не только для SEO. Чем меньше лишних URL и архивов, тем меньше нагрузка на сервер и тем проще поддерживать сайт. Но есть несколько правил, которые лучше не игнорировать:
- не правьте
.htaccessбез резервной копии; - если сайт на Nginx, не копируйте Apache-правила вслепую;
- не отключайте архивы, которые реально приносят трафик;
- не ставьте одновременно несколько плагинов, которые управляют canonical и robots;
- после изменений проверьте кэш: иногда старые заголовки и мета-теги отдаются из кэширующего слоя.
Если нужен более системный подход к технической чистке WordPress, удобно делать это через один инструмент, а не собирать правила по кускам. Например, Clearfy Pro закрывает часть типовых дублей и служебных элементов без ручной правки шаблонов, но даже в этом случае логику сайта всё равно нужно проверить руками.
Когда лучше не трогать правила вручную
Если сайт уже живёт на сложной связке темы, SEO-плагина, кэша и нескольких кастомных плагинов, ручные правки могут дать побочный эффект. В таких случаях безопаснее сначала отключить дубли в настройках, затем точечно добавить редиректы и только потом трогать серверные правила. Особенно это важно, если у вас нестандартные архивы, мультиязычность или фильтры с параметрами в URL.
Хороший ориентир простой: если вы не можете объяснить, зачем конкретный URL должен существовать в индексе, его стоит либо закрыть от индексации, либо убрать из генерации совсем. Но делать это нужно по одному сценарию за раз, с проверкой ответа сервера и состояния индекса после каждого изменения.