Настройка canonical URL для предотвращения дублей
Канонический URL указывает поисковику, какая версия страницы является основной. Дубли контента возникают из-за GET-параметров, пагинации, www/non-www, http/https, trailing slash — canonical решает это без редиректов.
Тег canonical
<link rel="canonical" href="https://example.ru/products/iphone-15-pro">
Типичные сценарии дублей, которые решает canonical:
| URL (дубль) | Canonical (основной) |
|---|---|
?utm_source=google |
/products/iphone-15-pro |
?sort=price&order=asc |
/products/laptops |
?page=1 |
/blog/ |
http:// версия |
https:// версия |
www. версия |
без www. |
/products/phone/ (trailing slash) |
/products/phone |
Реализация в Laravel
// HasCanonical trait
trait HasCanonical
{
public function getCanonicalUrl(): string
{
return url($this->canonical_path ?? $this->getSlugPath());
}
}
// В Blade-шаблоне
<link rel="canonical" href="{{ $page->getCanonicalUrl() }}">
Для страниц с фильтрами — убирать все GET-параметры:
public function canonicalUrl(Request $request): string
{
return $request->url(); // без query string
}
Canonical для пагинации
Страница /blog/?page=3 должна иметь canonical на саму себя (не на первую страницу), если контент уникален:
<link rel="canonical" href="{{ url()->current() }}{{ request('page') > 1 ? '?page=' . request('page') : '' }}">
Самоссылающийся canonical
На каждой странице ставить canonical на саму себя — хорошая практика. Это защищает от синдикации контента (когда кто-то копирует страницу).
Canonical в HTTP-заголовке
Для PDF и не-HTML ресурсов:
return response($pdf)
->header('Content-Type', 'application/pdf')
->header('Link', '<https://example.ru/docs/report>; rel="canonical"');
Проверка через Google Search Console
URL Inspection Tool показывает, какой canonical видит Google (указанный vs обнаруженный). Если они расходятся — Google игнорирует указанный canonical и выбирает свой; нужно устранить причину расхождения.
Срок настройки: несколько часов для шаблонной реализации.







