@props([ 'title' => null, 'description' => null, 'canonical' => null, 'ogType' => 'website', 'schema' => null, ]) @php $locale = app()->getLocale(); $appName = config('app.name', 'ToolZeno'); // Title deduplication: avoid duplicate branding if title already contains ToolZeno if ($title) { if (str_contains($title, $appName) || str_contains($title, 'ToolZeno')) { $pageTitle = $title; } else { $pageTitle = $title . ' — ' . $appName; } } else { $pageTitle = $appName . ' — ' . __('common.tagline'); } $pageDesc = $description ?? __('common.meta_description_default'); // Canonical URL with production origin normalization $prodOrigin = rtrim(config('app.url', 'https://toolzeno.site'), '/'); if (empty($canonical)) { $path = request()->path(); $currentUrl = $prodOrigin . '/' . ltrim($path, '/'); } else { $currentUrl = preg_replace('#^https?://[^/]+#', $prodOrigin, $canonical); } // Hreflang URLs $currentRoute = Route::currentRouteName() ?? 'home'; $params = Route::current() ? Route::current()->parameters() : []; try { $enUrl = route($currentRoute, array_merge($params, ['locale' => 'en'])); $bnUrl = route($currentRoute, array_merge($params, ['locale' => 'bn'])); $enUrl = preg_replace('#^https?://[^/]+#', $prodOrigin, $enUrl); $bnUrl = preg_replace('#^https?://[^/]+#', $prodOrigin, $bnUrl); } catch (\Throwable $e) { $enUrl = $prodOrigin . '/en'; $bnUrl = $prodOrigin . '/bn'; } @endphp {{ $pageTitle }} @php $gaEnabled = (bool) \App\Models\SiteSetting::get('analytics_enabled', false); $gaId = (string) \App\Models\SiteSetting::get('analytics_measurement_id', ''); @endphp @if($gaEnabled && !empty($gaId)) @endif @if(isset($schema) && !empty($schema)) @endif @stack('schema') @vite(['resources/css/app.css', 'resources/js/app.js']) {{ __('common.nav.skip_to_content') }}
{{ $slot }}
@stack('scripts')