【Laravel】ページごとにタイトルやOGPを設定する方法

【Laravel】ページごとにタイトルやOGPを設定する方法 Laravel

LaravelでWebサイトを開発していると、ページごとに「タイトル」や「OGP(Open Graph Protocol)」を個別に設定したくなる場面はよくあります。

この記事では、Bladeテンプレートを活用して簡単にページごとにタイトルやOGPを切り替える方法を紹介します。

共通レイアウトにタイトルやOGPの出力場所を用意する

まずは、共通で使うレイアウトファイル(例:resources/views/layouts/app.blade.php)に、タイトルやOGP情報を出力するためのコードを追加します。

<head>
    <title>@yield('title', 'デフォルトのサイトタイトル')</title>
    <meta property="og:title" content="@yield('og_title', 'デフォルトのOGPタイトル')">
    <meta property="og:description" content="@yield('og_description', 'デフォルトのOGP説明文')">
    <meta property="og:image" content="@yield('og_image', asset('default-og-image.png'))">
    <!-- 必要に応じて他のmetaタグも追加 -->
</head>

ここでは、@yieldを使って、各ページごとに値を上書きできるようにしています。
もしページ側で指定がなければ、デフォルト値が使われるため安心です。

ページごとにタイトルやOGPを指定する

個別のページ(例:resources/views/page.blade.php)では、@sectionを使ってタイトルやOGPを設定します。

@extends('layouts.app')

@section('title', 'このページ専用のタイトル')
@section('og_title', 'このページのOGPタイトル')
@section('og_description', 'このページのOGP説明文')
@section('og_image', asset('images/this-page-og-image.png'))

@section('content')
    <h1>ページ内容</h1>
    <p>ここに本文が入ります。</p>
@endsection

このように、各ページで必要な情報だけを自由にカスタマイズできるようになります。

コントローラーから渡す場合

場合によっては、コントローラー側で動的にタイトルやOGPを設定したいケースもあるでしょう。
その場合は、コントローラーからビューにデータを渡す方法が使えます。

public function show()
{
    return view('page', [
        'title' => 'コントローラーから渡すタイトル',
        'og_title' => 'コントローラーから渡すOGPタイトル',
        'og_description' => 'コントローラーから渡すOGP説明',
        'og_image' => asset('images/controller-og-image.png'),
    ]);
}

Bladeファイルでは受け取ったデータを使って指定します。

@extends('layouts.app')

@section('title', $title ?? 'デフォルトタイトル')
@section('og_title', $og_title ?? 'デフォルトOGPタイトル')
@section('og_description', $og_description ?? 'デフォルトOGP説明文')
@section('og_image', $og_image ?? asset('default-og-image.png'))

@section('content')
    <h1>ページ内容</h1>
@endsection

??演算子を使って、データが渡っていない場合でもデフォルト値を使うようにしておくと、エラーを防ぐことができます。

まとめ

方法 特徴
Bladeファイルで@sectionする シンプルで直感的。静的なページに向いている
コントローラーから渡す 動的なデータに応じて柔軟に設定できる

Laravelでは、Bladeテンプレートの@sectionや@yieldを活用することで、ページごとに柔軟にタイトルやOGPを設定できます。
サイト規模が大きくなっても、この仕組みを使えばスマートに管理できるでしょう。