На небольшом сайте дубли часто появляются не из-за темы, а из-за служебных URL: результаты поиска, страницы с параметрами сортировки, фильтры, архивы с пустым контентом, технические страницы плагинов. В индексе они не помогают трафику, зато размывают релевантность и создают лишнюю нагрузку на краулинг.
Ниже — практический сценарий: как найти такие страницы, закрыть их от индексации корректно и не сломать внутреннюю навигацию.
Когда проблема уже есть: как понять, что в индексе мусорные URL
Сначала стоит убедиться, что речь именно о технических дублях, а не о полезных посадочных страницах. Типичные признаки:
- в поиске всплывают URL вида
?s=,?orderby=,?filter=,?replytocom=; - в Google Search Console растёт число страниц с пометкой «Просканировано, но не проиндексировано» или «Дубликат, выбранный не пользователем»;
- в логах или аналитике заметны переходы на пустые архивы, страницы поиска и служебные параметры;
- один и тот же контент доступен по нескольким адресам с разными query string.
Что проверить вручную
Откройте несколько проблемных URL в браузере и посмотрите, меняется ли контент по сути или только сортировка/фильтр. Если страница не несёт самостоятельной ценности, её обычно не нужно индексировать. Для WordPress это особенно актуально для встроенного поиска и архивов с параметрами.
Полезно проверить и исходный код страницы: есть ли там noindex, какой canonical указан, не генерирует ли тема лишние ссылки на параметры. Если canonical указывает на ту же страницу с параметром, это не решает проблему дубля.
Какие варианты решения есть и что выбрать
Есть три рабочих подхода: закрыть страницы через SEO-плагин, добавить правила в код темы/мини-плагина или комбинировать оба варианта. Для большинства сайтов лучше начинать с точечного управления через robots meta и canonical, а не с грубого запрета в robots.txt.
| Подход | Когда подходит | Плюсы | Минусы |
|---|---|---|---|
| SEO-плагин | Нужно быстро закрыть типовые архивы и параметры | Меньше кода, проще поддержка | Не всегда удобно для нестандартных URL |
| Код в теме или mu-plugin | Нужны точечные правила под конкретный сайт | Полный контроль, нет лишней логики | Нужно аккуратно тестировать после обновлений |
robots.txt | Нужно снизить обход служебных URL | Просто добавить правило | Не гарантирует исключение из индекса, если URL уже известен поисковику |
Если задача касается только нескольких шаблонов URL, лучше использовать код. Если на сайте уже стоит SEO-плагин и он управляет мета-тегами, можно решить задачу там, чтобы не дублировать логику.
Пошаговое решение через код
Ниже пример, который закрывает от индексации страницы поиска, архивы с параметрами и отдельные служебные запросы. Код лучше поместить в мини-плагин или в functions.php дочерней темы, если вы уверены, что тема не меняется часто.
<?php
add_action('wp_head', function () {
if (is_admin()) {
return;
}
$noindex = false;
// Встроенный поиск WordPress
if (is_search()) {
$noindex = true;
}
// Страницы с параметрами, которые не должны индексироваться
$query_vars = array('orderby', 'filter', 'sort', 'replytocom');
foreach ($query_vars as $var) {
if (isset($_GET[$var]) && $_GET[$var] !== '') {
$noindex = true;
break;
}
}
if ($noindex) {
echo '<meta name="robots" content="noindex,follow" />' . "\n";
}
}, 1);Этот вариант не запрещает переход по ссылкам, но просит поисковик не добавлять такие страницы в индекс. Для служебных страниц это обычно безопаснее, чем noindex,nofollow, потому что ссылки на сайте продолжают передавать сигнал дальше.
Если нужно убрать дубли canonical
Иногда одной мета-метки мало. Например, страница поиска может иметь canonical на саму себя, и поисковик всё равно будет тратить на неё ресурсы. Тогда можно переопределить canonical для конкретных шаблонов:
<?php
add_filter('get_canonical_url', function ($canonical) {
if (is_search()) {
return home_url('/');
}
if (!empty($_GET['orderby']) || !empty($_GET['filter']) || !empty($_GET['sort'])) {
return remove_query_arg(array('orderby', 'filter', 'sort', 'replytocom'));
}
return $canonical;
});Здесь важно не переборщить: canonical должен вести на реально существующую и релевантную страницу. Если вы подмените его на главную для слишком широкого набора URL, поисковик может начать игнорировать полезные страницы.
Что делать через robots.txt и когда это уместно
robots.txt полезен для снижения обхода, но не как единственный способ удаления дублей из индекса. Если URL уже попал в поиск, одного запрета в robots часто недостаточно: робот может перестать его сканировать, но запись в индексе останется до следующей переоценки.
Пример точечного правила:
User-agent: *
Disallow: /?s=
Disallow: /*?orderby=
Disallow: /*?filter=
Disallow: /*?sort=
Disallow: /*?replytocom=Такой файл не универсален для всех конфигураций, потому что поддержка шаблонов в robots зависит от поисковика. Поэтому в реальной работе лучше использовать его как дополнительный слой, а не как основной механизм.
Проверка результата после внедрения
После изменений не стоит сразу ждать исчезновения всех URL из поиска. Сначала проверьте техническую часть:
- откройте проблемный URL и убедитесь, что в
<head>появилсяmeta robotsсnoindex,follow; - посмотрите, что canonical ведёт на нужную страницу без лишних параметров;
- проверьте, не закрыли ли вы случайно полезные страницы категорий или фильтров;
- в Search Console отправьте на переобход несколько тестовых URL и посмотрите, как робот их видит;
- сравните количество служебных URL в отчётах до и после, но делайте выводы только после переобхода.
Если у вас есть доступ к серверным логам, полезно посмотреть, продолжает ли бот активно сканировать закрытые страницы. Это поможет понять, нужен ли дополнительный слой в robots.txt или проблема уже решена на уровне мета-тегов.
Частые ошибки и как их исправить
Ставят noindex только в robots.txt
Это частая ошибка. Запрет на сканирование не равен запрету на индексацию. Если URL уже известен поисковику, он может остаться в выдаче без описания. Для удаления из индекса нужен noindex или корректный canonical, а robots — только дополнение.
Закрывают слишком много страниц
Иногда под фильтр попадают категории, теги или полезные архивы. Это происходит, когда правило написано слишком широко, например по наличию любого параметра в URL. Проверяйте, какие query string реально создают мусор, а какие используются для нормальной навигации.
Используют noindex, но оставляют внутренние ссылки с параметрами
Если тема или плагин продолжают массово генерировать ссылки с параметрами, бот всё равно будет тратить краулинговый бюджет. В таком случае нужно не только закрыть страницы, но и убрать источник параметров в шаблоне или настройках плагина.
Подменяют canonical на главную для всех дублей
Это грубое решение. Canonical должен быть логичным и близким по смыслу. Для поиска и служебных параметров лучше либо указывать чистый URL текущей страницы, либо не использовать canonical там, где он может запутать поисковик.
Практические советы по безопасности и производительности
Если вы добавляете код вручную, не правьте основной файл темы на живом сайте. Безопаснее сделать маленький mu-plugin: он не зависит от активации темы и проще переживает обновления.
<?php
/**
* Plugin Name: WP Kit Noindex Helpers
*/
add_action('wp_head', function () {
if (is_search()) {
echo '<meta name="robots" content="noindex,follow" />' . "\n";
}
}, 1);Такой подход удобен, если правила закрытия индексации нужны на нескольких сайтах. Но если логика сложнее, лучше вынести её в отдельный плагин с понятными условиями, чтобы не потерять контроль при редактировании темы.
Если вы используете SEO-плагин и он уже умеет управлять мета-роботами, не дублируйте ту же логику в коде. Двойные теги robots и конфликтующие canonical — типичная причина странного поведения в индексации.
Короткий чек-лист перед публикацией изменений
- Проверены все типы URL, которые нужно закрыть.
- На страницах поиска и служебных параметрах стоит
noindex,follow. - Canonical не указывает на мусорный URL.
- В
robots.txtнет слишком широких запретов. - Полезные категории, записи и страницы не затронуты.
- После правок выполнена проверка в браузере и Search Console.
Если после внедрения закрытые URL всё ещё появляются в поиске, проблема обычно в двух местах: либо страница доступна по альтернативному адресу без мета-робота, либо на неё продолжают вести внутренние ссылки. В таком случае сначала ищите источник ссылки, а уже потом правьте индексацию.