Если один и тот же контент в WordPress открывается по разным адресам, поисковик видит дубли. Чаще всего это происходит из-за параметров в URL: сортировки, фильтров, пагинации, UTM-меток, служебных параметров поиска. В таких случаях canonical помогает подсказать, какая версия страницы должна считаться основной.
Но canonical не решает всё автоматически. Его нужно ставить осознанно: на одних страницах он должен указывать на саму себя, на других — на чистый URL без параметров, а иногда параметрические страницы вообще не стоит отдавать в индекс. Ниже разберём, как это работает на практике и как настроить canonical в WordPress без лишних костылей.
Что именно должен делать canonical на страницах с параметрами
Canonical — это тег link rel="canonical" в <head>, который сообщает поисковой системе предпочтительный URL для индексации. Для пользователя ничего не меняется: страница открывается как обычно. Меняется только сигнал для поисковика.
Для страниц с параметрами есть три типичных сценария:
- Параметр не меняет смысл страницы — например, сортировка товаров или UTM-метки. Тогда canonical обычно ведёт на чистую основную страницу без параметров.
- Параметр меняет набор контента, но страница всё равно не должна конкурировать с основной — например, фильтр по цвету или размеру. Здесь canonical часто тоже указывает на базовую категорию или архив, если фильтр не является самостоятельной посадочной страницей.
- Параметр создаёт отдельную полезную страницу — например, заранее подготовленная посадочная под конкретный фильтр. Тогда canonical может вести на саму себя, если эта страница действительно должна индексироваться как отдельная.
Ошибка, которую часто допускают: ставят canonical на главную категорию вообще для всех параметрических URL, не проверяя, не потеряется ли нужная посадочная. Если страница с фильтром должна ранжироваться отдельно, такой подход её обрежет.
Какие URL в WordPress обычно дают дубли
В WordPress дубли чаще всего появляются не из-за самой CMS, а из-за того, как сайт строит навигацию и фильтры. На практике это такие варианты:
?sort=price,?orderby=price,?order=asc— сортировка;?filter_color=black,?size=m— фильтры;?page=2или встроенная пагинация архивов;?utm_source=...и другие маркетинговые параметры;?s=...— поиск по сайту;- страницы, доступные и по «чистому» URL, и по URL с параметрами, которые не меняют содержимое.
Если у вас есть плагин фильтрации, он может генерировать десятки или сотни комбинаций URL. Не все из них нужно индексировать. Canonical здесь — не замена архитектуре, а способ показать поисковику, какая версия является основной.
Как выбрать правильный canonical для параметрических страниц
Перед настройкой нужно ответить на простой вопрос: эта страница нужна в поиске как отдельная сущность или это просто техническая вариация?
Ориентируйтесь на такой принцип:
- Сортировка почти всегда должна канонизироваться на базовую страницу без параметров.
- UTM-метки не должны менять canonical: он обычно указывает на URL без меток.
- Фильтры, которые не создают отдельную посадочную, тоже обычно ведут на основную категорию.
- Фильтрованные страницы с уникальным спросом можно оставлять самоканоничными, если они реально полезны и не дублируют основную страницу.
Если сомневаетесь, сравните содержимое. Когда на странице с параметром меняются только порядок блоков или внешний вид списка, но не смысл, canonical на базовый URL обычно уместен. Если же страница с параметром имеет уникальный заголовок, текст, хлебные крошки и стабильный набор товаров или записей, её можно рассматривать как отдельную посадочную.
Как задать canonical в WordPress без плагинов
В большинстве случаев WordPress сам выводит canonical для записей, страниц и архивов. Но для параметрических URL этого часто недостаточно: нужно либо изменить canonical на уровне темы, либо добавить свою логику через хук wp_head.
Ниже пример для темы или дочерней темы. Он убирает параметры сортировки и UTM-метки из canonical, если страница открыта с ними. Код нужно адаптировать под ваш набор параметров.
add_action('wp_head', function () {
if (is_admin()) {
return;
}
if (!is_singular() && !is_post_type_archive() && !is_tax() && !is_category() && !is_tag()) {
return;
}
$canonical = home_url(add_query_arg(array(), $GLOBALS['wp']->request));
$canonical = strtok($canonical, '?');
echo '<link rel="canonical" href="' . esc_url($canonical) . '" />' . "\n";
}, 1);Этот пример показывает сам принцип, но в реальном проекте его лучше доработать под конкретные типы страниц. Если тема или SEO-плагин уже выводит canonical, нельзя просто добавить ещё один тег — поисковик увидит конфликтующие сигналы. Сначала проверьте исходный код страницы и убедитесь, что canonical выводится только один раз.
На практике удобнее не переписывать всё вручную, а точечно менять canonical только для нужных URL. Например, если у вас есть страницы каталога с сортировкой, можно проверять наличие параметра orderby и убирать его из канонического адреса.
Пример точечной обработки параметра сортировки
Этот вариант полезен, когда нужно оставить canonical на базовую страницу, но не ломать остальные URL сайта:
add_filter('get_canonical_url', function ($canonical, $post) {
if (is_admin() || empty($canonical)) {
return $canonical;
}
if (isset($_GET['orderby']) || isset($_GET['order']) || isset($_GET['sort'])) {
$canonical = remove_query_arg(array('orderby', 'order', 'sort'), $canonical);
}
return $canonical;
}, 10, 2);Фильтр get_canonical_url есть в WordPress и подходит для изменения canonical у записей и страниц. Но он не всегда покрывает все архивы и нестандартные шаблоны, поэтому после внедрения обязательно проверьте конкретные типы страниц, которые у вас генерируют дубли.
Что делать с фильтрами, если они должны индексироваться
Не каждый фильтр нужно канонизировать на базовую категорию. Иногда фильтр создаёт полезную страницу, которая отвечает на отдельный запрос пользователя: например, «красные кроссовки», «ноутбуки до 1000 долларов», «платья миди». В таком случае canonical должен вести на саму страницу фильтра, а не на общую категорию.
Чтобы это работало корректно, страница должна быть не просто набором параметров, а полноценной посадочной:
- у неё есть стабильный URL;
- на ней уникальный заголовок и текст;
- она не создаёт бесконечное число почти одинаковых комбинаций;
- она не дублирует другую страницу с тем же смыслом.
Если фильтр генерируется динамически и каждая комбинация параметров создаёт новый URL, лучше ограничить индексирование только теми комбинациями, которые действительно нужны. Canonical в этом случае помогает, но не заменяет контроль над количеством URL.
Как проверить, что canonical настроен правильно
После изменения нужно проверить не только наличие тега, но и его логику. Откройте страницу с параметром, затем посмотрите исходный код или используйте инструменты разработчика браузера. В <head> должен быть один тег canonical с нужным адресом.
Проверяйте такие вещи:
- canonical указывает на чистый URL без лишних параметров;
- на странице нет второго canonical от темы или SEO-плагина;
- URL в canonical отдаёт код ответа 200, а не редирект на другой адрес;
- если страница должна индексироваться отдельно, canonical не указывает на общую категорию;
- пагинация не склеивается с первой страницей, если это отдельный архивный сценарий.
Если вы используете Google Search Console, полезно посмотреть, какой URL выбран каноническим поисковой системой. Иногда Google игнорирует ваш canonical, если страница выглядит как слабый дубль или сигналов слишком много. Это не ошибка WordPress, а нормальная реакция поисковика на структуру сайта.
Чего лучше не делать
Есть несколько типичных ошибок, которые сводят настройку canonical к нулю.
- Не ставьте canonical на главную страницу сайта для всех параметрических URL. Это слишком грубо и ломает смысл архивов.
- Не выводите несколько canonical одновременно: от темы, от SEO-плагина и вручную.
- Не канонизируйте страницы с уникальным контентом на нерелевантный URL только потому, что там есть параметр.
- Не рассчитывайте, что canonical сам уберёт все дубли из индекса. Если URL технически мусорные, их ещё нужно ограничить на уровне генерации ссылок, фильтров и навигации.
Если сайт уже давно живёт с параметрами в URL, сначала исправьте самые массовые дубли: сортировку, UTM и бесполезные комбинации фильтров. Потом переходите к более тонкой настройке посадочных страниц. Так проще не сломать полезные URL и быстрее увидеть результат.
Если вам нужно не только править canonical, но и системно чистить дубли, служебные страницы и лишние сигналы для поисковиков, в экосистеме WPShop есть Clearfy Pro. Но даже с плагином логику canonical всё равно стоит понимать и проверять вручную: именно она решает, какой URL будет считаться основным.