Как исключить текущую страницу из canonical в WordPress без поломки SEO

|

Иногда WordPress или SEO-плагин ставит canonical не туда, куда нужно: на страницу пагинации, на фильтр, на служебный шаблон, на дублирующий вариант записи или на страницу, где canonical вообще должен быть отключен. В результате поисковик видит не ту основную версию URL, а это уже влияет на индексацию и консолидацию сигналов.

Ниже разберем не абстрактную теорию, а рабочий сценарий: как точечно убрать или заменить canonical на конкретной странице, не ломая остальной сайт.

Когда canonical действительно мешает

Проблема обычно всплывает после редактирования темы, установки SEO-плагина, включения фильтров в каталоге, создания посадочных страниц с параметрами или при работе с кастомными типами записей. Самый неприятный вариант — когда canonical указывает на URL, который не совпадает с содержимым страницы, а иногда еще и ведет на 404, редирект или другую сущность.

Проверять нужно не только HTML-код страницы, но и то, как canonical формируется в теме и плагинах. В WordPress canonical часто выводится через стандартный механизм ядра, а SEO-плагины могут его переопределять. Поэтому сначала важно понять источник.

Как диагностировать проблему

Откройте исходный код страницы и найдите строку вида <link rel="canonical" href="..." />. Затем проверьте:

Если canonical формируется не там, где вы ожидаете, искать нужно в теме, в functions.php, в mu-plugin или в SEO-плагине. Для диагностики удобно временно отключить плагины по одному на тестовой копии сайта и сравнить исходный код.

Как убрать canonical точечно через фильтр

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

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

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

    // Отключаем canonical только для конкретной записи.
    if ( (int) $post->ID === 123 ) {
        return false;
    }

    return $canonical;
}, 10, 2 );

Если canonical нужно не убрать, а заменить на другой URL, верните нужный адрес строкой:

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

    if ( (int) $post->ID === 123 ) {
        return home_url( '/landing-page/' );
    }

    return $canonical;
}, 10, 2 );

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

Если canonical выводит SEO-плагин

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

Например, у Yoast SEO есть фильтр wpseo_canonical. Его можно использовать для точечной замены:

<?php
add_filter( 'wpseo_canonical', function( $canonical ) {
    if ( is_page( 123 ) ) {
        return false;
    }

    if ( is_page( 124 ) ) {
        return home_url( '/correct-url/' );
    }

    return $canonical;
} );

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

Сравнение подходов

СпособКогда подходитМинус
Настройка в SEO-плагинеЕсли canonical нужно изменить без кодаНе всегда есть нужная опция
Фильтр get_canonical_urlЕсли canonical формирует ядро WordPressМожет не перекрыть вывод плагина
Фильтр SEO-плагинаЕсли canonical задает плагинНужно знать конкретный хук плагина
Правка шаблонаЕсли нужен полный контроль над headЛегко сломать обновления и дублировать теги

Пошаговое решение без лишнего риска

  1. Сначала определите, кто выводит canonical: ядро, тема или SEO-плагин.
  2. Проверьте исходный код страницы и убедитесь, что проблема воспроизводится стабильно.
  3. Выберите точечный фильтр, а не глобальное отключение.
  4. Добавьте код в дочернюю тему или в небольшой mu-plugin, если правка должна переживать обновления.
  5. Очистите кеш страницы, кеш плагина и, если есть, серверный кеш.
  6. Снова откройте исходный код и проверьте, что canonical изменился только там, где нужно.

Пример для mu-plugin

Если вы не хотите держать такую логику в теме, создайте файл в wp-content/mu-plugins/canonical-fix.php. Это удобно для точечных технических правок, которые не должны зависеть от активной темы.

<?php
/**
 * Plugin Name: Canonical Fix
 */

add_filter( 'get_canonical_url', function( $canonical, $post ) {
    if ( $post instanceof WP_Post && (int) $post->ID === 123 ) {
        return false;
    }

    return $canonical;
}, 10, 2 );

Как проверить, что решение сработало

Проверка должна быть не на глаз, а по факту. Откройте страницу в браузере и посмотрите исходный код. Затем проверьте:

Если canonical меняется в админке, но на фронтенде остается старый, почти всегда виноват кеш. Сначала очищайте кеш плагина и CDN, потом проверяйте снова.

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

Два canonical на одной странице

Обычно это конфликт ядра и SEO-плагина или два разных куска кода в теме. Решение — оставить только один источник генерации canonical. Не пытайтесь «перебить» тег вторым таким же выводом в head.

Отключили canonical глобально

Это плохая идея для обычных страниц, записей и архивов. Без canonical поисковику сложнее понять основную версию URL, особенно если есть параметры, пагинация или UTM-метки.

Код добавили в тему без учета обновлений

Если правка нужна надолго, используйте дочернюю тему или mu-plugin. Иначе после обновления тема может перезаписать изменения.

Проверили только визуально

Страница может выглядеть нормально, но в исходном коде canonical останется старым. Всегда проверяйте HTML, а не только отображение в браузере.

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

Сам по себе фильтр canonical почти не влияет на производительность, но важно не раздувать functions.php десятками одноразовых правок. Для технических исключений лучше держать отдельный mu-plugin или небольшой плагин проекта. Так проще сопровождать код и меньше риск случайно сломать тему.

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

Если вам нужно не только править canonical, но и чистить дубли, служебные страницы и лишние элементы в head, иногда проще собрать это в один технический набор. Для таких задач уместно посмотреть в сторону Clearfy Pro: https://wpshop.ru/plugins/clearfy?utm_source=wpbusiness.ru&utm_medium=article&utm_campaign=isklyuchit-tekushchuyu-stranitsu-iz-canonical-wordpress

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

Как использовать REST API WooCommerce для автоматизации обработки заказов
23.09.2026
Как использовать фильтры для автоматического изменения заказов WooCommerce
03.10.2026
Как использовать статусы заказов WooCommerce для автоматизации процессов
27.08.2026
Как закрыть дубли архивов WordPress от индексации без потери нужных страниц
20.08.2026
Автоматическое изменение стоимости товаров в WooCommerce по условиям
03.10.2026
×
-15%
на премиум-тему
Bono

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

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