_head_meta.blade.php 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. {{--
  2. Partial: мета-теги в <head> — Open Graph, Twitter Card, Яндекс.Метрика, Google Analytics.
  3. Подключается из layouts/app.blade.php внутри <head>.
  4. Переменная $siteSettings: Collection/array из Setting::all() (через ViewComposer).
  5. Приоритеты OG-данных:
  6. og:title → @section('og_title') | @section('title') | og_site_name
  7. og:description → @section('og_description') | og_description из настроек
  8. og:image → @section('og_image') | og_image из настроек
  9. og:url → request()->url() (без query-string)
  10. --}}
  11. @php
  12. // ── Вспомогательная функция для получения значения Blade-секции как строки ──
  13. // $__env->yieldContent() возвращает строку, если секция определена в дочернем шаблоне.
  14. $ss = is_array($siteSettings) ? $siteSettings : $siteSettings->toArray();
  15. // og:title — берём секцию og_title, иначе title, иначе название сайта
  16. $ogTitle = trim($__env->yieldContent('og_title', ''))
  17. ?: trim(strip_tags($__env->yieldContent('title', '')))
  18. ?: ($ss['og_site_name'] ?? config('app.name', 'Точка'));
  19. // og:description
  20. $ogDesc = trim($__env->yieldContent('og_description', ''))
  21. ?: ($ss['og_description'] ?? '');
  22. // og:image — секция может содержать абсолютный URL (от car-страницы)
  23. $ogImageRaw = trim($__env->yieldContent('og_image', ''))
  24. ?: ($ss['og_image'] ?? '');
  25. $ogImageUrl = $ogImageRaw
  26. ? (str_starts_with($ogImageRaw, 'http') ? $ogImageRaw : asset($ogImageRaw))
  27. : '';
  28. // og:url
  29. $ogUrl = request()->url();
  30. // og:locale и og:site_name из настроек
  31. $ogLocale = $ss['og_locale'] ?? 'ru_RU';
  32. $ogSiteName = $ss['og_site_name'] ?? config('app.name', 'Точка');
  33. // og:type — может быть переопределён страницей через @section('og_type')
  34. $ogType = trim($__env->yieldContent('og_type', '')) ?: 'website';
  35. // Аналитика
  36. $ymId = trim($ss['yandex_metrika'] ?? '');
  37. $gaId = trim($ss['google_analytics'] ?? '');
  38. @endphp
  39. {{-- ──────────────── NOINDEX (если включено в настройках) ──────────────── --}}
  40. @if(($ss['site_noindex'] ?? '0') === '1')
  41. <meta name="robots" content="noindex, nofollow"/>
  42. @endif
  43. {{-- ──────────────── OPEN GRAPH ──────────────── --}}
  44. <meta property="og:type" content="{{ $ogType }}"/>
  45. <meta property="og:locale" content="{{ $ogLocale }}"/>
  46. <meta property="og:site_name" content="{{ $ogSiteName }}"/>
  47. <meta property="og:url" content="{{ $ogUrl }}"/>
  48. @if($ogTitle)
  49. <meta property="og:title" content="{{ $ogTitle }}"/>
  50. @endif
  51. @if($ogDesc)
  52. <meta property="og:description" content="{{ $ogDesc }}"/>
  53. @endif
  54. @if($ogImageUrl)
  55. <meta property="og:image" content="{{ $ogImageUrl }}"/>
  56. <meta property="og:image:width" content="1200"/>
  57. <meta property="og:image:height" content="630"/>
  58. <meta property="og:image:alt" content="{{ $ogTitle }}"/>
  59. @endif
  60. {{-- ──────────────── TWITTER / X CARD ──────────────── --}}
  61. <meta name="twitter:card" content="summary_large_image"/>
  62. @if($ogTitle)
  63. <meta name="twitter:title" content="{{ $ogTitle }}"/>
  64. @endif
  65. @if($ogDesc)
  66. <meta name="twitter:description" content="{{ $ogDesc }}"/>
  67. @endif
  68. @if($ogImageUrl)
  69. <meta name="twitter:image" content="{{ $ogImageUrl }}"/>
  70. @endif
  71. {{-- ──────────────── ЯНДЕКС.МЕТРИКА ──────────────── --}}
  72. @if($ymId)
  73. <script type="text/javascript">
  74. (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
  75. m[i].l=1*new Date();
  76. for(var j=0;j<document.scripts.length;j++){if(document.scripts[j].src===r){return;}}
  77. k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
  78. (window,document,"script","https://mc.yandex.ru/metrika/tag.js","ym");
  79. ym({{ $ymId }},"init",{clickmap:true,trackLinks:true,accurateTrackBounce:true,webvisor:true});
  80. </script>
  81. <noscript><div><img src="https://mc.yandex.ru/watch/{{ $ymId }}" style="position:absolute;left:-9999px" alt=""/></div></noscript>
  82. @endif
  83. {{-- ──────────────── GOOGLE ANALYTICS (GA4) ──────────────── --}}
  84. @if($gaId)
  85. <script async src="https://www.googletagmanager.com/gtag/js?id={{ $gaId }}"></script>
  86. <script>
  87. window.dataLayer=window.dataLayer||[];
  88. function gtag(){dataLayer.push(arguments);}
  89. gtag('js',new Date());
  90. gtag('config','{{ $gaId }}');
  91. </script>
  92. @endif