Если на сайте есть фильтры, сортировки, пагинация или параметры в адресе, WordPress легко начинает отдавать десятки URL с почти одинаковым содержимым. Для поисковика это не всегда ошибка, но для SEO это почти всегда лишний шум: сигналы размазываются между дублями, а в индекс могут попасть не те версии страниц. В такой ситуации canonical помогает явно указать, какой URL считать основной.
Сразу оговорюсь: canonical не удаляет страницы из индекса и не запрещает их обход. Он лишь подсказывает поисковой системе, какую версию считать предпочтительной. Поэтому настройка canonical полезна именно тогда, когда у вас есть несколько адресов одной и той же или очень похожей страницы, а вы хотите сохранить одну основную версию.
Когда canonical для фильтров действительно нужен
Проблема обычно возникает на страницах каталога, архивах, подборках и любых списках, где параметры меняют выдачу на уровне URL. Типичные примеры: ?sort=price, ?color=black, ?page=2, ?orderby=date, а также комбинации нескольких параметров сразу. Если содержимое страницы меняется несущественно или это просто другая сортировка того же списка, canonical на базовый URL обычно оправдан.
Есть и обратная ситуация: фильтр создаёт по сути отдельную посадочную страницу с уникальным спросом и стабильным контентом. Тогда канонизировать её на общий список не всегда правильно. Если вы намеренно продвигаете такие страницы, canonical должен указывать на саму эту страницу, а не на родительский раздел. Иначе вы сами обесцените нужный URL.
Практическое правило простое: если параметр меняет только способ просмотра одного и того же набора товаров или записей, canonical обычно ведёт на чистый URL без параметров. Если параметр формирует самостоятельную страницу с отдельной ценностью, canonical оставляют на ней же.
Какой URL считать основным
Перед настройкой нужно определить эталонный адрес. Обычно это чистый URL раздела без параметров, например https://site.ru/catalog/. Именно он должен быть указан в rel="canonical" для версий с сортировкой и фильтрами, если они не являются самостоятельными страницами.
Важно не путать canonical с редиректом. Если пользователь открывает URL с параметрами, страница может продолжать работать в браузере, но в HTML должен быть указан канонический адрес. Это удобно, когда фильтры нужны для пользователя, но не должны плодить отдельные SEO-страницы.
Настройка canonical в WordPress: основные варианты
В WordPress canonical можно задать несколькими способами. Выбор зависит от того, как именно у вас реализованы фильтры и кто управляет SEO-разметкой на сайте.
| Способ | Когда подходит | Что учитывать |
|---|---|---|
| SEO-плагин | Если плагин уже управляет title, meta и canonical | Проще всего, но нужно проверить, не конфликтует ли он с темой или другим плагином |
| Код в теме или дочерней теме | Если нужен точечный контроль над отдельными типами страниц | Требует аккуратности и тестирования после обновлений |
| Логика в самом плагине фильтров | Если фильтры реализованы кастомно и плагин умеет отдавать канонический URL | Лучший вариант, когда фильтр знает, какой адрес считать основным |
Если у вас обычный сайт на WordPress и SEO уже ведётся через плагин, сначала проверьте именно его настройки. Во многих случаях ручной код вообще не нужен.
Вариант 1: задать canonical через SEO-плагин
У большинства SEO-плагинов есть поле для канонического URL на уровне записи, страницы или архива. Это самый безопасный путь, если речь идёт о нескольких важных страницах с фильтрами. Вы открываете нужную страницу в админке, находите поле canonical и указываете чистый адрес без параметров.
Такой способ хорош тем, что не требует правки шаблонов. Но у него есть ограничение: он удобен для отдельных страниц, а не для массовой автоматической обработки всех URL с параметрами. Если фильтров много, ручная настройка быстро становится неудобной.
Вариант 2: вывести canonical через код
Если нужно автоматически убирать параметры у определённых страниц, canonical можно изменить через фильтр wpseo_canonical в Yoast SEO или аналогичный механизм в другом плагине. Ниже пример для случая, когда вы хотите для URL с параметрами на конкретном разделе всегда отдавать канонический адрес без query string.
Перед изменениями сделайте резервную копию и работайте в дочерней теме или в небольшом mu-plugin. Если вы правите functions.php активной темы, обновление темы может затереть изменения.
add_filter( 'wpseo_canonical', function( $canonical ) {
if ( is_page( 'catalog' ) && ! empty( $_GET ) ) {
return get_permalink( get_queried_object_id() );
}
return $canonical;
} );Что делает этот пример: если открыта страница catalog и в URL есть параметры, canonical принудительно заменяется на постоянный адрес этой страницы. Для других страниц плагин продолжит работать как обычно.
Если вы не используете Yoast SEO, логика будет похожей, но хук может отличаться. Здесь важно не копировать пример вслепую, а проверить, какой SEO-плагин стоит на сайте и как он формирует canonical.
Вариант 3: управлять canonical на уровне шаблона
Иногда фильтры реализованы в самой теме, без отдельного SEO-плагина. Тогда canonical можно вывести прямо в шаблоне через <link rel="canonical" ...>. Но делать это стоит только если вы понимаете, где именно формируется <head>, и уверены, что не создадите дублирующий тег.
Для WordPress это обычно означает одно из двух: либо вы отключаете стандартный вывод canonical плагина/темы, либо аккуратно подменяете его в нужном месте. Два canonical-тега на странице — частая ошибка, которая только путает поисковик.
Как убрать параметры из canonical только там, где это нужно
Не все параметры одинаковы. Сортировка и технические параметры часто не должны попадать в canonical, а вот параметры, которые меняют смысл страницы, могут требовать отдельного подхода. Поэтому лучше не вырезать все query string подряд, а задать правила.
Например, если у вас есть параметры sort, orderby и page, а фильтр brand создаёт важную посадочную страницу, canonical можно строить по-разному. Для сортировки и пагинации — на базовый URL раздела. Для брендовой страницы — на саму страницу с этим фильтром, если она должна индексироваться как отдельная.
На практике это означает, что перед автоматизацией нужно составить список параметров и понять их роль. Без этого легко получить ситуацию, когда все фильтры склеены в один canonical, хотя часть из них должна жить отдельно.
Проверка после настройки
После изменения canonical не ограничивайтесь визуальной проверкой страницы в браузере. Откройте исходный код и найдите тег rel="canonical". Он должен вести на нужный URL без лишних параметров, если именно этого вы добивались.
Дальше проверьте несколько сценариев:
- страница без параметров;
- та же страница с сортировкой;
- страница с одним фильтром;
- страница с несколькими параметрами одновременно.
Если canonical везде одинаковый и соответствует вашей логике, настройка работает. Если на части страниц тег отсутствует, дублируется или указывает на неверный адрес, ищите конфликт между темой, SEO-плагином и плагином фильтров.
Полезно также проверить, не создаёт ли сайт разные canonical для одной и той же страницы в зависимости от версии с www, протоколом http/https или со слэшем на конце. Canonical должен быть единообразным и совпадать с основной версией сайта.
Типичные ошибки, из-за которых canonical не помогает
Самая частая ошибка — пытаться решить canonical-ом то, что должно решаться архитектурой URL. Если фильтр генерирует сотни почти одинаковых страниц без понятной структуры, одного canonical может быть недостаточно. В таком случае нужно пересмотреть, какие страницы вообще должны существовать как отдельные адреса.
Ещё одна проблема — canonical на несуществующий или редиректящий URL. Поисковик может проигнорировать такой сигнал. Адрес в canonical должен открываться нормально и вести на конечную страницу без цепочек редиректов.
Третья ошибка — конфликт между canonical и внутренними ссылками. Если меню, хлебные крошки и ссылки в контенте ведут на один URL, а canonical указывает на другой, вы создаёте противоречивые сигналы. По возможности все основные ссылки должны поддерживать ту же логику, что и canonical.
Что делать, если фильтры должны индексироваться отдельно
Иногда фильтрованные страницы действительно нужны в поиске. Например, это может быть посадочная страница под конкретный спрос, где фильтр уже закреплён как смысловой раздел. В этом случае canonical не должен уводить такую страницу на общий каталог. Наоборот, он должен подтверждать её собственный адрес.
Для таких страниц обычно важны три вещи: стабильный URL, уникальный контент и отсутствие лишних параметров, которые меняют только сортировку или вид выдачи. Если страница ценна для SEO, лучше не превращать её в набор временных URL с query string. Тогда canonical работает как подтверждение, а не как способ склеить всё подряд.
Если у вас на сайте много таких сценариев, имеет смысл отдельно описать правила для каждого типа параметров: какие склеиваются, какие сохраняются, а какие вообще не должны попадать в индексируемые URL. Это экономит время на поддержке и снижает риск случайно сломать уже работающие страницы.
В итоге настройка canonical для страниц с фильтрами и параметрами URL сводится к одному: вы должны явно показать поисковику основную версию страницы и не смешивать технические параметры с самостоятельными посадочными страницами. Если логика URL продумана, canonical работает предсказуемо и помогает удержать SEO-сигналы на нужных адресах.