Как закрыть от индексации страницы с параметрами в WordPress и убрать дубли

На WordPress дубли чаще всего появляются не из-за самих записей, а из-за URL с параметрами: ?replytocom=, ?utm_, фильтров, сортировок, страниц поиска и служебных переходов. Если такие адреса попадают в индекс, поисковик видит несколько версий одной и той же страницы, а это уже лишний шум в обходе и размывание сигналов.

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

Когда проблема действительно в параметрах URL

Сначала нужно убедиться, что речь не о случайных единичных дублях. Откройте отчёт по страницам в поисковой системе или выгрузку из краулера и посмотрите, какие адреса повторяются. Если у них один и тот же контент, но разные query string, это типичный кандидат на закрытие.

Признаки, которые видно без сложной диагностики

  • в индексе есть версии страниц с ?replytocom=;
  • поисковик показывает URL с UTM-метками или внутренними параметрами сортировки;
  • страницы поиска по сайту индексируются как отдельные документы;
  • в логах краулера много обращений к адресам вида /page/2/?sort=price или похожим комбинациям.

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

Что именно закрывать, а что оставить

Не все параметры одинаково вредны. Например, UTM-метки полезны для аналитики, но их не нужно индексировать. А вот параметры сортировки и внутренние фильтры часто создают десятки почти одинаковых страниц. Для них логика обычно такая: если параметр не меняет смысл страницы для поиска, его надо закрыть от индексации.

ПодходКогда подходитМинус
Плагин SEO/clean-upНужно быстро закрыть типовые дубли без кодаМеньше контроля над точечными исключениями
Код в теме или mu-pluginНужна точная логика по параметрам и шаблонамТребует проверки после обновлений
robots.txtНужно снизить обход служебных URLНе всегда убирает уже известные дубли из индекса

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

Пошаговое решение через код

Самый надёжный вариант — добавить noindex, follow для страниц с нежелательными параметрами. Так поисковик не будет индексировать такие URL, но сможет проходить по ссылкам дальше. Код лучше класть в mu-plugin или в дочернюю тему, чтобы не потерять его при обновлении.

1. Определяем список параметров

Сначала соберите реальные параметры, которые появляются на сайте. Не надо писать универсальный фильтр на всё подряд. Обычно достаточно нескольких конкретных ключей: replytocom, sort, order, filter, utm_source, utm_medium, utm_campaign.

2. Добавляем мета robots для фронтенда

<?php
add_action('wp_head', function () {
    if (is_admin()) {
        return;
    }

    $blocked_params = [
        'replytocom',
        'sort',
        'order',
        'filter',
        'utm_source',
        'utm_medium',
        'utm_campaign',
        'utm_term',
        'utm_content',
    ];

    foreach ($blocked_params as $param) {
        if (isset($_GET[$param])) {
            echo "<meta name=\"robots\" content=\"noindex,follow\" />\n";
            break;
        }
    }
}, 1);

Этот вариант простой и работает для большинства тем. Но если у вас уже подключён SEO-плагин, проверьте, не перезаписывает ли он robots meta. Иначе можно получить конфликт: в исходнике будет одна директива, а в рендере — другая.

3. Для служебных параметров можно добавить canonical на чистый URL

Если параметр не меняет контент, полезно указывать канонический адрес без query string. Это помогает поисковику быстрее понять, какая версия основная.

<?php
add_filter('get_canonical_url', function ($canonical, $post) {
    if (is_admin() || ! $canonical) {
        return $canonical;
    }

    $params = ['replytocom', 'sort', 'order', 'filter', 'utm_source', 'utm_medium', 'utm_campaign'];

    foreach ($params as $param) {
        if (isset($_GET[$param])) {
            return get_permalink($post);
        }
    }

    return $canonical;
}, 10, 2);

Здесь важный момент: canonical не должен вести на нерелевантную страницу. Если параметр реально меняет контент, например сортировка товаров или архив по фильтру, каноникал на базовую страницу может быть спорным. В таком случае лучше оставить canonical как есть и закрыть только индексацию.

Если нужно закрыть только отдельные шаблоны

Иногда проблема не в параметрах вообще, а в конкретных типах страниц: поиск, архивы с фильтрами, страницы пагинации с параметрами. Тогда логика должна быть не по $_GET, а по условным тегам WordPress.

<?php
add_action('wp_head', function () {
    if (is_admin()) {
        return;
    }

    if (is_search() || is_404()) {
        echo "<meta name=\"robots\" content=\"noindex,follow\" />\n";
        return;
    }

    if (is_paged() && ! empty($_GET)) {
        echo "<meta name=\"robots\" content=\"noindex,follow\" />\n";
    }
}, 1);

Такой вариант полезен, если на сайте много архивов и пагинации, а параметры только усиливают проблему. Но не используйте его бездумно: если у вас SEO-ценные страницы пагинации, их лучше анализировать отдельно.

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

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

  • Откройте страницу с параметром, например ?utm_source=test или ?replytocom=1.
  • Посмотрите исходный код страницы и найдите <meta name="robots" content="noindex,follow" />.
  • Проверьте canonical: он должен вести на чистый URL, если вы его меняли.
  • Прогоните проблемный URL через краулер или инструмент проверки URL в поисковой системе.
  • Убедитесь, что обычные страницы без параметров не получили лишний noindex.

Если у вас включён кэш страниц, очистите его перед проверкой. Иначе можно смотреть старую версию HTML и сделать ложный вывод, что код не работает.

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

Закрыли всё через robots.txt и ждёте исчезновения дублей

Это частая ошибка. Disallow помогает снизить обход, но не гарантирует, что уже известные URL исчезнут из индекса. Для дублей с параметрами обычно нужен noindex или корректный canonical.

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

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

Не учли конфликт с SEO-плагином

Если плагин уже выводит свои robots meta и canonical, ваш код может не сработать или сработать частично. В этом случае проверьте источник тега в HTML и оставьте только один механизм управления.

Использовали canonical на главную вместо чистого URL

Это ломает смысл страницы и может ухудшить индексацию. Canonical должен указывать на эквивалентную версию, а не на случайную страницу.

Что делать для безопасности и производительности

Если на сайте много параметров, они создают не только SEO-проблему, но и лишнюю нагрузку: больше обхода, больше кеш-ключей, больше мусора в логах. Здесь помогает дисциплина на уровне шаблонов и кеша.

  • не плодите параметры в ссылках без необходимости;
  • для UTM используйте их только в рекламных ссылках, а не во внутренней перелинковке;
  • проверяйте, не генерирует ли тема лишние query string в меню, фильтрах и кнопках;
  • если используете page cache, убедитесь, что он не хранит отдельную копию для каждого UTM-параметра;
  • для массовой чистки дублей и технических настроек удобнее держать отдельный список правил, а не править код в нескольких местах.

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

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

Вам также может быть интересно:

  • Уроки WordPress от опытных разработчиков, более 500 материалов.
  • Вопросы и ответы по вордпресс. Здесь вы можете задать свой вопрос и получить ответ от сообщества.
  • Еще один ресурс о ВП с вопросами и ответами от пользователей.
Как использовать WPGPT для создания чатбота в WordPress
04.09.2026
Как использовать WPRemark для организации удобных комментариев в WordPress
30.08.2026
Как закрыть дубли страниц пагинации в WordPress и не сломать индексацию
03.09.2026
Как удалить неиспользуемые вариации продуктов в WooCommerce через код
04.09.2026
Как сделать обновляемый кэш в WordPress для динамического контента
30.08.2026
×
-15%
на премиум-тему
Bono

Создай магазин мечты
на WordPress!

↓ ↓ ↓ ↓ ↓
Купить со скидкой »