feat: enhance MusicProductionController with structured data support, improve SEO metadata handling, and add JSON-LD integration in views for better search engine visibility

This commit is contained in:
Ümit Tunç
2026-05-20 23:17:30 +03:00
parent 33c7b6a51e
commit 15896248c4
8 changed files with 367 additions and 24 deletions
@@ -6,6 +6,7 @@ use App\Models\MusicProduction;
use App\Models\Setting;
use App\Models\FooterTemplate;
use App\Services\TemplateService;
use App\Support\MusicProductionStructuredData;
use Illuminate\Support\Str;
class MusicProductionController extends Controller
@@ -60,12 +61,22 @@ class MusicProductionController extends Controller
}
}
$canonicalUrl = route('music-productions.index');
$pageUrl = $search !== '' ? $canonicalUrl : url()->current();
$meta = [
'title' => __('music_productions.nav-music-productions'),
'title' => __('music_productions.meta-index-title'),
'description' => __('music_productions.meta-index-description'),
'image' => asset('assets/music-production.png'),
'image_alt' => __('music_productions.meta-index-title'),
'canonical' => $canonicalUrl,
'robots' => $search !== '' ? 'noindex, follow' : 'index, follow',
'og_type' => 'website',
'locale' => app()->getLocale(),
];
$structuredData = MusicProductionStructuredData::forIndex($productions, $pageUrl);
return view('front.music-productions.index', [
'productions' => $productions,
'search' => $search,
@@ -73,6 +84,7 @@ class MusicProductionController extends Controller
'header' => 'partials.header-center-nav',
'renderedFooter' => $renderedFooter,
'meta' => $meta,
'structuredData' => $structuredData,
]);
}
@@ -132,12 +144,24 @@ class MusicProductionController extends Controller
}
}
$pageUrl = route('music-productions.show', $production->slug);
$title = $production->translate('title');
$description = Str::limit(strip_tags((string) $production->translate('content')), 160)
?: __('music_productions.meta-index-description');
$meta = [
'title' => $production->translate('title'),
'description' => Str::limit(strip_tags($production->translate('content')), 160),
'image' => $production->cover_image_url,
'title' => $title,
'description' => $description,
'image' => $production->cover_image_url ?: asset('assets/music-production.png'),
'image_alt' => $title,
'canonical' => $pageUrl,
'robots' => 'index, follow',
'og_type' => 'article',
'locale' => app()->getLocale(),
];
$structuredData = MusicProductionStructuredData::forShow($production, $pageUrl);
return view('front.music-productions.show', [
'production' => $production,
'prev' => $prev,
@@ -146,6 +170,7 @@ class MusicProductionController extends Controller
'header' => 'partials.header-center-nav',
'renderedFooter' => $renderedFooter,
'meta' => $meta,
'structuredData' => $structuredData,
]);
}
}