Главная / База знаний / Технические проблемы / Canonical указывает не на ту страницу
База знаний

Canonical указывает не на ту страницу

Canonical случайно настроен на главную, на категорию, на 404. Как найти и исправить.

Технические проблемы · 3 мин чтения

Симптом

Причина

  1. Неправильная генерация канонического URL
    В шаблоне сайта (PHP, Django, WordPress и т.п.) используется статический путь, например https://example.com/, вместо динамического $current_url.
  2. Переопределение в .htaccess / nginx
    Перенаправления могут менять $_SERVER['REQUEST_URI'], а скрипт, генерирующий canonical, читает уже изменённый путь.
  3. Кэширование
    В CDN или в кеш-плагине хранится старый вариант страницы с неправильным canonical.
  4. Мультидоменные/поддоменные конфигурации
    При использовании canonical в шаблоне прописан основной домен, но запросы приходят с поддомена, и ссылка остаётся прежней.
  5. Ошибки в CMS
    В настройках темы (например, в WordPress) включён «Постоянные ссылки» с неверным шаблоном, а в шаблоне wp_head() используется rel_canonical() без фильтра.

Как проверить

Шаг Инструмент Что искать
1 В браузере → «Показать исходный код» Тег <link rel="canonical" href="...">. Сравнить href с текущим URL.
2 Google Search Console → «Проблемы с каноническими URL» Список страниц с неверным canonical.
3 Инструмент «Проверка URL» в GSC Убедиться, что Google видит тот же canonical, что и в коде.
4 curl -I https://example.com/page Проверить заголовки ответа, убедиться, что нет редиректов, которые меняют URL.
5 Проверка кэша CDN Отключить кэш (через панель управления) и проверить снова.
6 Проверка конфигурации сервера В nginx: location / { try_files $uri $uri/ =404; }. В .htaccess: RewriteRule ^(.*)$ https://example.com/$1 [R=301,L].

Пример проверки в браузере

<head>
  <link rel="canonical" href="https://example.com/" />
</head>

Если текущий URL https://example.com/product/123, то canonical неверен.

Проверка через curl

curl -I https://example.com/product/123

Ответ должен содержать HTTP/1.1 200 OK без редиректа. Если есть 301 → возможно, сервер меняет URL.

Решение

1. Исправить генерацию канонического URL в шаблоне

PHP / WordPress

<?php
$canonical = get_permalink(); // правильный URL текущей страницы
?>
<link rel="canonical" href="<?php echo esc_url( $canonical ); ?>" />

Если используется wp_head(), убедитесь, что в теме не отключён rel_canonical():

add_filter( 'wpseo_canonical', '__return_false' ); // если Yoast SEO

Django

<link rel="canonical" href="{{ request.build_absolute_uri }}">

Nginx

Убедитесь, что в конфигурации не переопределяется переменная $canonical:

location / {
    try_files $uri $uri/ =404;
}

2. Устранить переопределения в .htaccess

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/canonical/
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]

Удалите лишние правила, которые могут менять путь.

3. Очистить кэш

4. Проверить мультидоменные настройки

Если сайт доступен через www.example.com и example.com, убедитесь, что canonical указывает на один из них, а не на оба:

<link rel="canonical" href="https://example.com/product/123" />

5. Проверить в GSC после исправлений

  1. В GSC перейти в «Проверка URL» и ввести URL страницы.
  2. Нажать «Проверить» → «Отправить в индексацию».
  3. Через 24–48 чекать статус в отчёте «Проблемы с каноническими URL».

6. Пример полного исправленного шаблона (WordPress)

<?php
/* header.php */
?>
<!DOCTYPE html>
<html <?php language_attributes(); ?>>
<head>
<meta charset="<?php bloginfo( 'charset' ); ?>">
<title><?php wp_title(); ?></title>
<link rel="canonical" href="<?php echo esc_url( get_permalink() ); ?>" />
<?php wp_head(); ?>
</head>
<body <?php body_class(); ?>>

Связанные

SEO КП · нужна помощь?

Не хотите разбираться сами?

Запустите технический аудит сайта за 5 минут — получите PDF-отчёт с разбором всех 64 параметров и конкретными точками роста. Или закажите комплексное SEO-продвижение сайта — починим всё это и возьмём на себя дальнейшую оптимизацию.

Запустить аудит за 199 ₽ Узнать про продвижение →