Каноническая ссылка - это тег link в заголовке страницы, который указывает на постоянный адрес содержимого этой страницы. В первую очередь это нужно поисковикам, чтобы понимать, индексировали они это содержимое или нет. Ведь один и тот же контент может показываться по разным адресам. Например:
http://example.org/моя_страница
и
https://www.example.org/ru/моя_страница
Хотя для пользователя разница не так и велика: https вместо http, необязательный поддомен www и явное указание языка. Для поисковиков это абсолютно разные адреса. Чтобы понять, что странцы одинаковы, им придётся сначала загрузить их, а потом провести эвристический анализ. Если при этом есть ещё какие-то параметры в адресной строке, то это ещё больше осложняет работу по индексации сайта.
Чтобы не было проблем с поиском одной и той же страницы по разным адресам, ей нужно задать каноническую ссылку. То есть адрес, по которому она всегда доступна. Этот адрес и будет показываться в поисковиках.
Каноническая ссылка определяется следующим образом:
<!doctype html>
<html>
<head>
<link rel="canonical" href="https://адрес_страницы/">
...
</head>
<body>
...
</body>
</html>
Ссылка может быть абсолютной или относительной от корня сайта. Если у сайта есть зеркала, нпример поддомен www, то лучше указывать абсолютную ссылку. (На мой взгляд, лучше всегда указывать абсолютную ссылку)
Чтобы не было дублирования, каноническая ссылка должна содержать только те параметры, которые влияют на её содержимое. Например, она не должна содержать идентификатор сессии или какие-то параметры от предыдущих страниц, которые не меняют содержимое конретно этой страницы.
Предположим, у вас есть магазин, в котором пользователь и для просмотра товара переходит по таким ссылкам:
https://магазин/index.php?tov=11&cat=12&ref=Gya7H&sid=AA23Tgd=
Где tov - идентификатор товара; cat - идентификатор категории, который достался от предыдущей страницы; ref - идентификатор партнёра, откуда пришёл пользователь; sid - индентификатор текущей сессии.
Поскольку отображение товара зависит только от идентификатора товара, то каноническая ссылка должна быть такой:
<link rel="canonical" href="https://магазин/index.php?tov=11">
Остальные параметры нужно опустить, чтобы поисковики не занимались лишней работой.
Нужна ли каноническая ссылка для форм поиска и постраничной навигации? Однозначного ответа на этот вопрос нет. Это зависит скорее от того, что должно отображаться в поисковиках. Проблема в том, что каноническая ссылка задаёт однозначный адрес определённого содержимого. Но если содержимое постоянно меняется, то особой пользы от такой ссылки нет.
Yandex рекомендует делать каноничной только первую страницу каталога. Google советует использовать rel="next" и rel="prev" для указания следующей и предыдущей страницы. Но сходятся они в том, что лучше вообще не использовать канонические ссылки, если есть постраничная навигация и каталог не очень большой. А использовать sitemap.xml, в котором указать ссылки на товары. Либо сделать одну страницу, на которой будет весь каталог целиком (что на мой взгляд, равносильно sitemap.xml) и указывать её в качестве канонической ссылки на всех страницах с пагинацией (по-моему, не самый правильный вариант, так как в корне ломает индексацию).
Краткая памятка по использованию канонических ссылок:
<head>
.<link rel="canonical" href="<?php echo $_SERVER['REQUEST_URI']; // Так делать нельзя. Совсем нельзя. ?>">
Информация от Google:
Информация от Yandex: