Налаштування 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 та non-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 та обирає свій; усуньте причину розходження.
Час налаштування: кілька годин для реалізації шаблону.







