Атрибут rel="canonical" сообщает поисковым роботам местоположение исходного файла и заставляет их обратиться к источнику. Данный атрибут может использоваться как в теле HTML-страницы, так и в HTTP-заголовках.
Как указать основной URL при помощи атрибута rel="canonical"?
Предположим, вы хотите указать URL https://site.com/example в качестве основного (причем содержание этой страницы доступно и по другим адресам). Сообщить об этом поисковой системе можно следующим образом:
- Добавьте в раздел <head> канонической страницы элемент — <link> с атрибутом rel="canonical". Таким образом вы указываете основной URL, который будет представлен в большинстве результатов поиска.
- Чтобы снизить вероятность ошибки, в элементах link после атрибута rel="canonical" используйте абсолютные, а не относительные пути, то есть https://site.com/example.html, а не /example.html.
Как указать каноническую ссылку в заголовке HTTP?
Если у вас есть доступ к настройкам сервера, можно использовать атрибут rel="canonical" в заголовках HTTP, чтобы указывать канонический URL для документов в формате HTML и файлов других типов.
Предположим, что один и тот же файл PDF на вашем сайте можно просмотреть по следующим адресам:
https://www.site.com/example.pdf
https://cdn.site.com/example.pdf
В этом случае можно сообщить поисковому боту канонический адрес с помощью заголовка HTTP rel="canonical", как показано ниже:
<https: www.site.com="" example.pdf="">Link: <<a href="https://www.site.com/example.pdf" target="_blank">https://www.site.com/example.pdf</a>><https: www.site.com="" example.pdf="">; rel="canonical"</https:> </https:>
Как настроить атрибут rel="canonical" на сервере?
Пример конфигурации файла .htaccess на сервере источнике:
<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf|webp|html)(\.gz)?(\?.*)?$"> <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTPS} !=on RewriteRule .* - [E=CANONICAL:http://%{HTTP_HOST}%{REQUEST_URI},NE] RewriteCond %{HTTPS} =on RewriteRule .* - [E=CANONICAL:https://%{HTTP_HOST}%{REQUEST_URI},NE] </IfModule> <IfModule mod_headers.c> Header set Link "<%{CANONICAL}e>; rel="canonical" </IfModule> </FilesMatch>
Пример конфигурации для NginX:
location ~ \.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf|webp|html)(\.gz)?(\?.*)?$ { add_header Link "<$scheme://$http_host$request_uri>; rel=\"canonical\""; }
Как проверить, отображается ли атрибут rel="canonical"?
Очистите кеш CDN-ресурса. После этого для проверки воспользуйтесь командой cURL в терминале или используйте онлайн сервисы.
curl -I https://cdn.site.com/example.html
HTTP/1.1 200 OK
Date: Sat, 27 Apr 2013 06:06:06 GMT
Content-Type: text/html
Connection: keep-alive
Last-Modified: Sat, 09 Feb 2013 01:02:03 GMT
Expires: Sun, 05 May 2013 11:12:13 GMT
Link: ; rel="canonical"
Cache-Control: max-age=604800
Server: NetDNA-cache/2.2
X-Cache: HIT
Если увидели строку Link: ; rel="canonical", настройка прошла успешно.