feat: implement structured data support for blog and page components, enhancing SEO and user experience through JSON-LD integration

This commit is contained in:
Ümit Tunç
2026-05-21 21:54:12 +03:00
parent 8675325f50
commit 6d9ffc808b
15 changed files with 509 additions and 176 deletions
+10
View File
@@ -9,6 +9,7 @@ use App\Models\HeaderTemplate;
use App\Models\FooterTemplate;
use App\Services\TemplateService;
use App\Models\Page;
use App\Support\BlogStructuredData;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
@@ -115,6 +116,8 @@ class BlogController extends Controller
]);
}
$pageUrl = url()->current();
return view('blog.index', [
'settings' => $settings,
'posts' => $posts,
@@ -125,6 +128,9 @@ class BlogController extends Controller
'title' => __('blog.meta-index-title'),
'description' => __('blog.meta-index-description'),
],
'structuredData' => $posts instanceof \Illuminate\Contracts\Pagination\LengthAwarePaginator
? BlogStructuredData::forIndex($posts, $pageUrl)
: null,
]);
}
@@ -215,6 +221,8 @@ class BlogController extends Controller
);
}
$pageUrl = route('blog.show', $post->slug);
return view('blog.show', [
'settings' => $settings,
'post' => $post,
@@ -226,7 +234,9 @@ class BlogController extends Controller
'title' => method_exists($post, 'translate') ? ($post->translate('meta_title') ?: $post->translate('title')) : ($post->meta_title ?? $post->title),
'description' => method_exists($post, 'translate') ? ($post->translate('meta_description') ?: $post->translate('excerpt')) : ($post->meta_description ?? $post->excerpt),
'image' => $post->featured_image ? asset('storage/' . $post->featured_image) : null,
'og_type' => 'article',
],
'structuredData' => BlogStructuredData::forShow($post, $pageUrl),
]);
}
+15 -2
View File
@@ -7,6 +7,7 @@ use App\Models\Setting;
use App\Models\HeaderTemplate;
use App\Models\FooterTemplate;
use App\Services\TemplateService;
use App\Support\PageStructuredData;
use Illuminate\Http\Request;
use Illuminate\Support\Collection;
@@ -32,10 +33,13 @@ class PageController extends Controller
// Hiç sayfa yoksa fallback
if (!$page) {
$meta = $this->getMeta(null, $settings);
return view('templates.home', [
'page' => null,
'settings' => $settings,
'meta' => $this->getMeta(null, $settings),
'meta' => $meta,
'structuredData' => PageStructuredData::forPage(null, url('/'), $meta['title'] ?? null, $meta['description'] ?? null),
]);
}
@@ -136,6 +140,9 @@ class PageController extends Controller
$renderedFooter = $this->renderFooter($page, $settings);
}
$meta = $this->getMeta($page, $settings);
$pageUrl = url()->current();
return view($view, [
'page' => $page,
'settings' => $settings,
@@ -143,7 +150,13 @@ class PageController extends Controller
'templatedSections' => $page ? ($page->templated_sections ?? collect([])) : collect([]),
'renderedHeader' => $renderedHeader,
'renderedFooter' => $renderedFooter,
'meta' => $this->getMeta($page, $settings),
'meta' => $meta,
'structuredData' => PageStructuredData::forPage(
$page,
$pageUrl,
$meta['title'] ?? null,
$meta['description'] ?? null,
),
]);
}