На WordPress дубли чаще всего появляются не из-за «плохого SEO», а из-за технических деталей: UTM-метки, сортировки, фильтры, параметры поиска, пагинация, служебные query string. Если такие URL начинают индексироваться, поисковик видит несколько версий одной и той же страницы, а обновления контента расходятся по разным адресам.
В этой статье разберём рабочую схему: какие URL оставлять, какие закрывать от индексации, где ставить canonical, когда нужен редирект, а когда достаточно нормализации ссылок и отправки только основной версии в IndexNow.
Как понять, что проблема именно в параметрах URL
Сначала стоит проверить не «просел ли сайт вообще», а есть ли в индексе лишние варианты одной и той же страницы. Для WordPress это обычно видно по таким признакам:
- в поиске находятся URL вида
?utm_source=...,?sort=...,?replytocom=...; - одна и та же запись открывается по нескольким адресам, а canonical указывает не туда;
- в Search Console растёт число страниц с параметрами, но реальных новых страниц не добавлялось;
- в логах и аналитике много заходов на служебные URL, которые не должны быть посадочными.
Если у вас уже есть IndexNow, важно не отправлять в него все варианты подряд. Иначе вы сами ускоряете индексацию дублей, а не основной страницы.
Что проверить в первую очередь
- исходный HTML страницы: какой canonical реально отдается;
- нет ли у темы или плагина генерации ссылок с параметрами в меню, хлебных крошках и блоках;
- как ведут себя параметры при открытии: меняется ли контент или только сортировка/вид;
- есть ли редирект с технических вариантов на чистый URL;
- не отправляются ли в IndexNow адреса с параметрами через хук сохранения записи.
Какая стратегия лучше: canonical, редирект или noindex
Здесь не стоит выбирать один инструмент на все случаи. Для WordPress обычно работает комбинация, а не один «магический» способ.
| Сценарий | Что делать | Компромисс |
|---|---|---|
| UTM и рекламные метки | Оставить страницу доступной, ставить canonical на чистый URL | Параметры не должны менять контент |
| Служебные параметры сортировки | Если контент тот же — canonical; если это мусорный URL — 301 на основную версию | Нужно аккуратно проверить логику темы и фильтров |
| Внутренний поиск с query string | Чаще всего noindex и запрет индексации шаблона поиска | Не все поисковые URL стоит редиректить |
| Дубли от пагинации и фильтров | Оставить только полезные страницы, остальное нормализовать | Нельзя ломать навигацию и сортировку |
Если параметр не меняет смысл страницы, canonical обычно безопаснее редиректа. Если URL технический и не нужен пользователю, лучше 301 на чистую версию. Если страница нужна в интерфейсе, но не должна попадать в индекс, используйте noindex на уровне шаблона или плагина SEO.
Пошаговое решение для WordPress
1. Нормализуйте внутренние ссылки
Частая ошибка — когда дубли создаются самим сайтом. Например, тема вставляет ссылки с UTM в меню, а плагин аналитики добавляет параметры к внутренним переходам. Это нужно убрать в источнике, а не лечить постфактум.
Проверьте:
- меню и кнопки в шапке;
- ссылки в блоках редактора;
- виджеты и шаблоны карточек;
- автоматическую подстановку параметров в шаблонах.
2. Добавьте canonical для URL с параметрами
Если у вас есть собственная логика генерации страниц, можно принудительно указывать canonical на чистый адрес. Ниже пример для темы или небольшого mu-plugin: он убирает query string из canonical для обычных записей и страниц.
<?php
add_filter('get_canonical_url', function ($canonical, $post) {
if (! $post instanceof WP_Post) {
return $canonical;
}
if (is_admin()) {
return $canonical;
}
$clean = get_permalink($post);
return $clean ?: $canonical;
}, 10, 2);
Это не универсальная панацея: если у вас есть страницы, где параметр реально меняет контент, canonical нужно считать отдельно. Но для типичных UTM и служебных хвостов такой подход помогает удержать основную версию URL.
3. Перенаправьте технические параметры на чистый URL
Если параметр не нужен пользователю, лучше убрать его редиректом. В WordPress это можно сделать на уровне template_redirect, но только для заранее известных параметров.
<?php
add_action('template_redirect', function () {
if (is_admin() || wp_doing_ajax()) {
return;
}
$bad_params = ['replytocom', 'ref', 'source'];
foreach ($bad_params as $param) {
if (isset($_GET[$param])) {
$url = remove_query_arg($bad_params, home_url(add_query_arg([], $_SERVER['REQUEST_URI'])));
wp_safe_redirect($url, 301);
exit;
}
}
});
Здесь важно не делать редирект «всех параметров подряд». Иначе можно сломать поиск, фильтры, сортировку и даже страницы входа, если логика написана неаккуратно.
4. Не отправляйте дубли в IndexNow
Если вы уже интегрировали IndexNow, отправляйте только канонический URL. Для этого перед отправкой надо вычистить query string и не подставлять параметры из $_GET.
<?php
function indexnow_clean_permalink($url) {
$parts = wp_parse_url($url);
if (empty($parts['scheme']) || empty($parts['host'])) {
return $url;
}
$clean = $parts['scheme'] . '://' . $parts['host'];
if (!empty($parts['port'])) {
$clean .= ':' . $parts['port'];
}
$clean .= $parts['path'] ?? '/';
return $clean;
}
Если у вас отправка завязана на сохранение записи, проверяйте, что в очередь попадает именно get_permalink($post_id), а не текущий адрес из запроса. Это особенно важно в админке, где URL может содержать служебные параметры.
Как проверить, что решение сработало
Проверка должна быть не только визуальной. Нужны три уровня контроля: браузер, исходный код и поисковый индекс.
- Откройте URL с параметром и убедитесь, что он либо редиректит на чистую версию, либо отдаёт canonical на основной адрес.
- Посмотрите исходный HTML: canonical должен вести на один и тот же URL без параметров.
- Проверьте, что в sitemap и в очереди IndexNow нет параметризованных адресов.
- Через несколько дней сравните отчёты Search Console: число дублей и страниц с параметрами должно снижаться, а не расти.
Для быстрой ручной проверки удобно использовать curl -I:
curl -I 'https://example.com/post/?utm_source=test'
В ответе смотрите статус: для редиректа должен быть 301 или 302 только если это осознанно, а не случайно. Если редиректа нет, проверьте canonical и заголовки X-Robots-Tag, если они используются.
Частые ошибки и как их исправить
Редирект на все параметры без разбора
Так ломают фильтры, поиск и страницы с сортировкой. Исправление простое: редиректить только заранее известные технические параметры, а не весь query string.
Canonical указывает на главную страницу
Это часто случается из-за неверной логики в теме или SEO-плагине. Для записи canonical должен вести на её собственный чистый URL, а не на homepage. Иначе поисковик начинает считать страницу нерелевантной.
IndexNow получает все варианты URL
Если отправлять и чистый адрес, и адрес с параметрами, вы создаёте конкурирующие сигналы. Исправление: нормализовать URL до отправки и исключить query string из очереди.
noindex ставят на полезные страницы
Иногда разработчики закрывают от индексации всё подряд, включая страницы, которые должны ранжироваться. Это особенно опасно для архивов, фильтров и категорий с трафиком. Сначала проверьте, действительно ли страница мусорная, а потом уже ставьте noindex.
Безопасность и производительность: что не стоит делать
Не храните список параметров прямо в шаблоне, если он меняется под проект. Лучше вынести его в конфиг или в небольшой mu-plugin, чтобы не потерять логику при обновлении темы. Не используйте тяжёлые запросы к базе на каждом хите ради проверки дублей: нормализация URL должна работать быстро и предсказуемо.
Если сайт большой, не пытайтесь «починить всё» массовой переиндексацией. Сначала уберите источник дублей, потом проверьте canonical и редиректы, и только после этого отправляйте в IndexNow только чистые адреса. Иначе поисковые системы просто быстрее увидят старую проблему.
Если нужен более широкий контроль дублей и технической чистки WordPress, в связке с SEO-задачами часто используют Clearfy Pro: https://wpshop.ru/plugins/clearfy. Но даже с плагином полезно понимать, где именно рождается дубль: в теме, в плагине или в ручной разметке.
Практический чек-лист перед выкладкой
- проверены все типовые параметры: UTM, сортировка, поиск, replytocom;
- canonical на чистых страницах ведёт на правильный URL;
- технические параметры редиректятся только точечно;
- в IndexNow отправляются только канонические адреса;
- в sitemap нет мусорных вариантов;
- после правок проверен ответ сервера и исходный HTML;
- страницы, которые должны индексироваться, не получили случайный noindex.
Если после внедрения дублей меньше не стало, обычно проблема не в индексации, а в генерации ссылок. Тогда нужно искать источник параметров в шаблонах, блоках редактора, фильтрах и плагинах аналитики, а не только в SEO-настройках.