Страницы с параметрами в URL — типичная причина дублей в WordPress. Чаще всего это поиск по сайту, сортировки, фильтры, UTM-метки, служебные параметры плагинов и формы с GET-запросами. Если такие адреса попадают в индекс, поисковик начинает считать их отдельными страницами, а не вариациями одного и того же контента.
Проблема обычно выглядит так: в отчётах Search Console появляются URL с ?s=, ?orderby=, ?filter_, ?utm_ или другими параметрами, а в выдаче всплывают страницы, которые не должны ранжироваться. Ниже — рабочий способ закрыть такие URL без поломки сайта и без лишней магии.
Как понять, что у вас именно эта проблема
Сначала проверьте не абстрактно «падает SEO», а конкретные признаки. Если в индексе есть страницы с параметрами, их почти всегда можно увидеть в одном из трёх мест: отчёт об индексировании в Google Search Console, логика внутренних ссылок темы или результаты поиска по сайту через site:example.ru.
Что искать в Search Console и на сайте
- URL с
?s=— страницы поиска по сайту. - URL с
?orderby=,?order=,?filter_— сортировки и фильтры. - URL с
?utm_,?fbclid=,?gclid=— рекламные и трекинговые параметры. - URL с техническими параметрами плагинов, которые не нужны в поиске.
Если такие адреса уже индексируются, одной директивы noindex в HTML недостаточно: поисковик должен ещё и не тратить краулинговый бюджет на мусорные варианты. Поэтому решение обычно состоит из двух частей: ограничение индексации и нормализация ссылок.
Что именно закрывать от индексации
Не все параметры одинаково вредны. Если параметр меняет только отображение, но не смысл страницы, его обычно стоит закрыть. Если же параметр формирует уникальный контент, например отдельную посадочную страницу, тогда нужна другая логика.
| Тип URL | Что делать | Комментарий |
|---|---|---|
| Поиск по сайту | Закрыть от индексации | Почти всегда мусор для поиска |
| Сортировки и фильтры | Закрыть или канонизировать | Зависит от структуры каталога и темы |
| UTM и рекламные метки | Не индексировать | Нужны для аналитики, не для поиска |
| Параметры пагинации | Осторожно, по ситуации | Не путать с обычной пагинацией архивов |
Пошаговое решение без лишних плагинов
Если задача точечная, удобнее начать с кода в functions.php дочерней темы или в небольшом mu-plugin. Так вы контролируете поведение и не зависите от лишних настроек.
Шаг 1. Добавьте noindex,follow для URL с параметрами
Ниже пример, который добавляет мета-тег robots на страницы с типовыми параметрами. Он не ломает обычные страницы и не трогает URL без параметров.
<?php
add_action('wp_head', function () {
if (is_admin() || is_feed()) {
return;
}
if (empty($_GET)) {
return;
}
$blocked_keys = array('s', 'orderby', 'order', 'filter', 'filter_');
$has_blocked_param = false;
foreach (array_keys($_GET) as $key) {
foreach ($blocked_keys as $blocked_key) {
if ($key === $blocked_key || strpos($key, $blocked_key) === 0) {
$has_blocked_param = true;
break 2;
}
}
}
if ($has_blocked_param) {
echo '<meta name="robots" content="noindex,follow">' . "\n";
}
}, 1);Это базовый вариант. Если у вас уже есть SEO-плагин, проверьте, не генерирует ли он свой robots-тег. Два разных meta name="robots" на одной странице — частая ошибка.
Шаг 2. Уберите мусорные параметры из canonical
Если canonical оставляет параметры в URL, поисковик может продолжить считать их отдельными страницами. Для страниц с параметрами canonical должен указывать на чистую версию адреса.
<?php
add_filter('get_canonical_url', function ($canonical, $post) {
if (is_admin() || empty($_GET)) {
return $canonical;
}
$url = home_url(add_query_arg(array(), $GLOBALS['wp']->request));
// Убираем query string целиком для служебных параметров.
$clean_url = strtok($url, '?');
return $clean_url ? $clean_url : $canonical;
}, 10, 2);Этот пример стоит использовать аккуратно. Если параметр действительно меняет контент и вы хотите сохранить его в индексе, canonical на чистую страницу может быть неверным. Для фильтров каталога это часто нормально, для отдельных посадочных — нет.
Шаг 3. Закройте служебные параметры в robots.txt
Robots.txt не заменяет noindex, но помогает сократить обход очевидного мусора. Для WordPress можно добавить правила через фильтр robots_txt.
<?php
add_filter('robots_txt', function ($output, $public) {
$output .= "\nUser-agent: *\n";
$output .= "Disallow: /*?s=\n";
$output .= "Disallow: /*?orderby=\n";
$output .= "Disallow: /*?order=\n";
$output .= "Disallow: /*?utm_\n";
$output .= "Disallow: /*?fbclid=\n";
return $output;
}, 10, 2);Важно: robots.txt не гарантирует удаление уже проиндексированных URL. Если страница уже в индексе, сначала нужен noindex или корректный canonical, а потом — переобход и очистка индекса.
Когда лучше использовать плагин, а когда код
Если у вас много типов дублей и нет желания поддерживать собственный код, проще взять SEO-плагин с управлением canonical и robots. Но если проблема узкая и повторяется на одном-двух шаблонах, код надёжнее: он предсказуем, не зависит от интерфейса и не добавляет лишних настроек в админку.
Например, если на сайте уже используется Clearfy Pro, часть задач по чистке дублей и техническому SEO можно закрыть через его настройки. Но даже в этом случае полезно понимать, какие именно URL вы закрываете и почему, чтобы не спрятать от индексации нужные страницы.
Как проверить, что решение сработало
Проверка нужна не только в исходном коде, но и в реальном ответе сервера. Иначе можно легко получить ситуацию, когда мета-тег добавлен, но canonical остался старым или robots.txt блокирует не то.
- Откройте страницу с параметром в браузере и посмотрите исходный код.
- Убедитесь, что есть
<meta name="robots" content="noindex,follow">. - Проверьте canonical: он должен вести на чистый URL без лишних параметров.
- Посмотрите ответ через
curl -Iили инструменты разработчика, если нужно проверить заголовки. - В Google Search Console отправьте URL на проверку и запросите переобход.
Пример быстрой проверки через консоль:
curl -s https://example.ru/page/?utm_source=test | grep -i robotsЕсли страница отдаёт нужный robots-тег, но в индексе всё ещё висит старая версия, это нормально: поисковику нужно время на переобход. В таких случаях помогает ускорить повторную проверку через Search Console и убрать внутренние ссылки на параметризованные URL.
Частые ошибки и как их исправить
Дублируется robots-тег
Это происходит, когда SEO-плагин уже выводит noindex, а тема или кастомный код добавляет второй тег. В результате поведение становится непредсказуемым. Решение простое: оставьте один источник правды — либо плагин, либо код.
Canonical ведёт на URL с параметрами
Такое часто бывает после копирования шаблона или при ручной сборке URL. Исправление — убрать query string из canonical для служебных параметров и проверить, не ломает ли это страницы, где параметры действительно нужны.
Robots.txt закрывает страницу, которую нужно удалить из индекса
Это распространённая ловушка. Если URL уже в поиске, простого Disallow мало: робот может перестать заходить на страницу, но запись в индексе останется. Сначала дайте сигнал noindex или 404/410, потом ограничивайте обход.
Закрыли всё подряд и потеряли полезные страницы
Иногда под фильтр попадают нормальные архивы, страницы пагинации или посадочные с параметрами. Перед массовым закрытием проверьте, какие URL реально дают трафик и какие из них должны жить в индексе.
Практические советы по безопасности и производительности
Если вы используете собственный код, не вставляйте его в случайный плагин для сниппетов без проверки обновлений и резервных копий. Лучше хранить такой код в дочерней теме или в маленьком mu-plugin, чтобы он не исчез после обновления темы.
- Не полагайтесь только на robots.txt для удаления дублей.
- Не закрывайте параметры, которые формируют отдельный контент и уже получают трафик.
- Проверяйте, как тема генерирует canonical и нет ли у неё собственного SEO-слоя.
- Если параметров много, сначала составьте список по логам сервера и Search Console.
- После изменений проверьте кэш страницы и CDN: старый HTML может ещё отдавать прежний robots-тег.
Если сайт крупный и параметров много, полезно сначала собрать список проблемных URL, а уже потом решать, что закрывать кодом, что — через SEO-плагин, а что — через настройку темы. Такой подход обычно быстрее, чем точечное «лечить» каждую страницу вручную.