Canonical указывает не на ту страницу
Canonical случайно настроен на главную, на категорию, на 404. Как найти и исправить.
Симптом
- На странице в
<head>виден тег<link rel="canonical" href="...">, но ссылка указывает на другую страницу (главную, категорию, 404). - В поисковой выдаче Google отображается другая URL, чем та, что открывается в браузере.
- В Google Search Console в отчёте «Проблемы с каноническими URL» отмечается «Неверный канонический URL».
- На странице видны дублирующие контенты, но поисковый робот считает их «плохими» из‑за неверного каноника.
- При проверке через инструмент «Проверка URL» в GSC появляется сообщение «Канонический URL отличается от фактического».
Причина
- Неправильная генерация канонического URL
В шаблоне сайта (PHP, Django, WordPress и т.п.) используется статический путь, напримерhttps://example.com/, вместо динамического$current_url. - Переопределение в .htaccess / nginx
Перенаправления могут менять$_SERVER['REQUEST_URI'], а скрипт, генерирующий canonical, читает уже изменённый путь. - Кэширование
В CDN или в кеш-плагине хранится старый вариант страницы с неправильным canonical. - Мультидоменные/поддоменные конфигурации
При использованииcanonicalв шаблоне прописан основной домен, но запросы приходят с поддомена, и ссылка остаётся прежней. - Ошибки в 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. Очистить кэш
- В CDN (Cloudflare, Akamai) сбросить кэш для проблемных URL.
- В CMS (WordPress) отключить кэш-плагин и очистить кэш вручную.
4. Проверить мультидоменные настройки
Если сайт доступен через www.example.com и example.com, убедитесь, что canonical указывает на один из них, а не на оба:
<link rel="canonical" href="https://example.com/product/123" />
5. Проверить в GSC после исправлений
- В GSC перейти в «Проверка URL» и ввести URL страницы.
- Нажать «Проверить» → «Отправить в индексацию».
- Через 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(); ?>>
Связанные
Не хотите разбираться сами?
Запустите технический аудит сайта за 5 минут — получите PDF-отчёт с разбором всех 64 параметров и конкретными точками роста. Или закажите комплексное SEO-продвижение сайта — починим всё это и возьмём на себя дальнейшую оптимизацию.