From c804f3bfc31f5adce841efb6ab099297096ed138 Mon Sep 17 00:00:00 2001 From: Kevin Adametz Date: Mon, 15 Jun 2026 10:03:15 +0000 Subject: [PATCH] WS-1: Canonical- & OpenGraph-Meta zentral im Web-Layout MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ergänzt web-master.blade.php um , OpenGraph- und Twitter-Card-Tags. Self-Canonical-Default wird portal-getrennt aus der Portal-URL ($domainUrl) + Request-Pfad gebaut – bewusst nicht aus url()->current(), da URL::forceRootUrl sonst alle Portale fälschlich auf pressekonto.test kanonisieren würde. Seiten können canonical/meta_description/ og_type/og_image per @section überschreiben; release-detail als article ausgezeichnet. Erfüllt die Canonical-Hygiene aus dem Duplicate-Content-Update §5. Tests: tests/Feature/Web/CanonicalMetaTest.php (inkl. Cross-Portal-Negativtest). Co-Authored-By: Claude Fable 5 --- .../views/web/layouts/web-master.blade.php | 33 +++++++++++++++++-- resources/views/web/release-detail.blade.php | 3 ++ tests/Feature/Web/CanonicalMetaTest.php | 29 ++++++++++++++++ 3 files changed, 63 insertions(+), 2 deletions(-) create mode 100644 tests/Feature/Web/CanonicalMetaTest.php diff --git a/resources/views/web/layouts/web-master.blade.php b/resources/views/web/layouts/web-master.blade.php index fbbc913..93963e7 100644 --- a/resources/views/web/layouts/web-master.blade.php +++ b/resources/views/web/layouts/web-master.blade.php @@ -5,9 +5,38 @@ - - @yield('title', $domainName ?? config('app.name', 'Laravel')) + @php + $siteName = $domainName ?? config('app.name', 'Laravel'); + $pageTitle = trim($__env->yieldContent('title')) ?: $siteName; + $pageDescription = trim($__env->yieldContent('meta_description')) ?: $siteName; + // Self-Canonical als Default aus der Portal-URL + Request-Pfad (ohne Query): + // pro Portal/Domain getrennt und unabhängig von URL::forceRootUrl – verhindert Cross-Portal-Duplicate. + $portalBase = rtrim($domainUrl ?? config('app.url'), '/'); + $canonicalUrl = trim($__env->yieldContent('canonical')) ?: ($portalBase.request()->getPathInfo()); + $ogType = trim($__env->yieldContent('og_type')) ?: 'website'; + $ogImage = trim($__env->yieldContent('og_image')); + @endphp + + + + {{ $pageTitle }} + + {{-- Kanonische URL --}} + + + {{-- OpenGraph / Social --}} + + + + + + @if ($ogImage) + + @endif + + + diff --git a/resources/views/web/release-detail.blade.php b/resources/views/web/release-detail.blade.php index b10a6d1..672ea4b 100644 --- a/resources/views/web/release-detail.blade.php +++ b/resources/views/web/release-detail.blade.php @@ -1,6 +1,9 @@ @extends('web.layouts.web-master') @section('title', 'KI-Revolution in Deutschland - Business Portal 24') +@section('meta_description', 'Neue Studie zeigt massive Investitionen deutscher Unternehmen in künstliche Intelligenz für 2025.') +@section('og_type', 'article') +@section('canonical', route('release.detail', ['slug' => $releaseSlug])) @section('content') diff --git a/tests/Feature/Web/CanonicalMetaTest.php b/tests/Feature/Web/CanonicalMetaTest.php new file mode 100644 index 0000000..0c15e49 --- /dev/null +++ b/tests/Feature/Web/CanonicalMetaTest.php @@ -0,0 +1,29 @@ +get('https://businessportal24.test/release/ki-revolution') + ->assertSuccessful() + ->assertSee('', false) + ->assertSee('