На живом сайте WordPress технические URL появляются почти незаметно: страницы вложений, служебные архивы, результаты поиска, параметры сортировки, тестовые шаблоны, дубли с разными вариантами слэша и параметров. Проблема не в самом факте их существования, а в том, что поисковик тратит на них обход, а в индексе остаются страницы без ценности. Ниже — рабочая схема, как определить такие URL и закрыть их без лишних побочных эффектов.
Какие страницы действительно стоит закрывать
Не все “неполезные” страницы одинаковы. Одни лучше отдавать с noindex, другие — закрывать через robots.txt, а третьи вообще не должны генерироваться. Если смешать эти подходы, легко получить ситуацию, когда страница исчезла из поиска, но продолжает плодить дубли внутри сайта.
Типичные технические URL в WordPress
- страницы вложений, если они открываются как отдельные записи;
- архивы автора и даты на небольших сайтах без редакционного смысла;
- внутренний поиск вида
?s=; - страницы пагинации архивов, если они уже разобраны отдельно;
- служебные страницы с параметрами фильтрации и сортировки;
- черновые шаблоны и тестовые страницы, случайно опубликованные в публичный доступ.
Если у вас уже есть отдельные правила для пагинации, авторов, дат и поиска, не дублируйте их в новых плагинах и сниппетах. Сначала проверьте, не конфликтуют ли правила между собой.
Диагностика: как понять, что проблема именно в индексации
Начинать лучше не с кода, а с проверки фактов. На практике часто оказывается, что URL уже закрыт, но в индексе висит старая копия, либо наоборот — страница открыта для робота, хотя в интерфейсе она выглядит “технической”.
Что проверить вручную
- Откройте проблемный URL в браузере и посмотрите, есть ли на странице реальный контент или только служебная оболочка.
- Проверьте исходный код на наличие
meta name="robots"и заголовкаX-Robots-Tag. - Посмотрите, не отдаёт ли страница статус
200 OKтам, где логичнее был бы404или301. - Сравните URL с параметрами и без них: иногда индексируется только вариант с query string.
- Проверьте, не попадает ли страница в XML-карту сайта.
Если есть доступ к Search Console, откройте отчёт по страницам и посмотрите, как поисковик классифицирует URL: “Просканировано, но не проиндексировано”, “Исключено тегом noindex”, “Дублированная страница” и т. п. Это помогает не лечить не ту причину.
Что выбрать: плагин, код или настройку сервера
Для WordPress обычно есть три рабочих пути. Выбор зависит от того, сколько у вас таких URL и насколько стабильно они появляются.
| Подход | Когда подходит | Минус |
|---|---|---|
| Плагин SEO/оптимизации | Нужно быстро закрыть типовые архивы и служебные страницы | Легко задублировать правила и получить конфликт настроек |
| Код в теме или мини-плагине | Нужна точечная логика для конкретных URL и параметров | Требует аккуратного тестирования после обновлений |
| Настройка сервера / robots.txt | Нужно ограничить обход большого числа однотипных URL | Не всегда убирает URL из индекса, если они уже известны поисковику |
Если задача касается именно индексации, а не обхода, чаще нужен noindex, а не запрет в robots.txt. Запрет в robots может оставить URL в индексе без контента, если на него уже есть ссылки.
Пошаговое решение через код
Если вам нужно закрыть конкретные типы страниц без установки дополнительного SEO-плагина, удобнее добавить небольшой сниппет в мини-плагин или functions.php дочерней темы. Ниже пример для страниц вложений и внутреннего поиска.
<?php
add_action( 'wp_head', function () {
if ( is_attachment() || is_search() ) {
echo '<meta name="robots" content="noindex,follow" />' . "\n";
}
}, 1 );
add_filter( 'wp_robots', function ( array $robots ) {
if ( is_attachment() || is_search() ) {
$robots['noindex'] = true;
$robots['follow'] = true;
}
return $robots;
} );Этот вариант хорош тем, что использует штатный фильтр WordPress wp_robots. Он не ломает разметку и обычно совместим с современными темами и плагинами, которые тоже работают через robots-мета.
Если нужно закрыть URL с параметром
Иногда проблема не в типе страницы, а в параметре, например ?sort=price или ?view=grid. В таком случае можно добавить условие по $_GET, но делать это стоит только для строго известных параметров.
<?php
add_filter( 'wp_robots', function ( array $robots ) {
$allowed_params = array( 'sort', 'view' );
foreach ( $allowed_params as $param ) {
if ( isset( $_GET[ $param ] ) ) {
$robots['noindex'] = true;
$robots['follow'] = true;
break;
}
}
return $robots;
} );Здесь важно не пытаться закрывать всё подряд по наличию любого параметра. UTM-метки, например, обычно не должны превращать страницу в noindex, иначе вы сами себе сломаете аналитику и индексацию нормальных URL.
Пошаговое решение через SEO-плагин
Если у вас уже стоит SEO-плагин, сначала проверьте его настройки. Часто нужная опция уже есть: для архивов автора, дат, вложений, пагинации и XML-карты сайта. В этом случае лучше использовать штатный интерфейс, чем добавлять ещё один слой кода.
Практический порядок такой:
- Отключите индексацию в настройках конкретного типа архивов, если плагин это умеет.
- Проверьте, не остаётся ли URL в XML-карте сайта.
- Убедитесь, что на странице появился
noindex, а не только запрет в robots. - Сравните поведение на обычной и мобильной версии, если шаблон отдаёт разную разметку.
Если вы используете набор инструментов вроде Clearfy Pro, удобно сначала посмотреть, нет ли там уже готовой опции для удаления дублей и чистки служебных страниц. Это не отменяет проверки результата, но экономит время на ручных фильтрах. Ссылка на продукт: Clearfy Pro.
Как проверить, что решение сработало
После внедрения не ограничивайтесь визуальной проверкой в админке. Нужно убедиться, что поисковик видит именно ту инструкцию, которую вы задали.
- Откройте URL в браузере и посмотрите исходный код: должен быть
noindexили соответствующий заголовок. - Проверьте ответ сервера через
curl -I https://example.com/url/и убедитесь, что статус не меняется неожиданно. - Если URL уже был в индексе, отправьте его на повторную проверку в Search Console.
- Сравните XML-карту сайта до и после: технические URL не должны там оставаться.
Для быстрой проверки заголовков удобно использовать команду:
curl -I https://example.com/?s=testЕсли в ответе нет X-Robots-Tag, это не всегда ошибка — многие сайты используют только meta robots. Но если вы рассчитывали на серверный заголовок, а его нет, значит правило не сработало или было перехвачено другим плагином.
Частые ошибки и как их исправить
Закрыли в robots.txt, но URL всё равно в индексе
Это нормальная ситуация для старых URL. Robots.txt ограничивает обход, но не гарантирует удаление из индекса. Если страница уже известна поисковику, добавьте noindex и дождитесь переобхода.
Поставили noindex на нужную страницу, а она пропала из карты сайта
Это может быть правильно, но иногда плагин убирает из sitemap не только техническую страницу, а целый тип контента. Проверьте, не затронуты ли важные записи, рубрики или кастомные типы записей.
Закрыли слишком много URL по шаблону
Опасная ошибка — закрывать всё, где есть параметр. В результате можно случайно закрыть страницы фильтрации, которые приносят трафик, или полезные посадочные страницы с UTM-метками и каноникалами.
Оставили дубли в теме и в плагине одновременно
Если тема выводит robots-мета вручную, а SEO-плагин делает то же самое, в HTML может появиться две инструкции. Поисковик обычно ориентируется на итоговую логику, но такой код трудно сопровождать. Оставьте один источник правды.
Практические советы по безопасности и производительности
Чем меньше лишних URL генерирует сайт, тем проще его обходить и тем меньше мусора попадает в логи и кэш. Но не стоит пытаться решить всё через запреты на уровне сервера без понимания последствий.
- Не закрывайте важные страницы только через
robots.txt, если они уже в индексе. - Не добавляйте универсальные правила на основе всех GET-параметров.
- Проверяйте, не создаёт ли плагин новые служебные URL после обновления.
- Если используете кэш-плагин, очищайте кэш после изменения robots-логики.
- Для точечных правок держите код в мини-плагине, а не в основной теме, чтобы не потерять его при обновлении.
Если вам нужно регулярно чистить сайт от дублей, служебных страниц и лишних элементов разметки, удобнее собрать это в одном инструменте, а не держать набор разрозненных сниппетов. Но даже в этом случае проверка через исходный код и Search Console остаётся обязательной.
Хороший критерий результата простой: технический URL либо не индексируется, либо вообще не создаётся, а важные страницы не теряют видимость из-за слишком грубых правил. Всё остальное — уже детали реализации.