【Laravel10】サイトマップを動的に作る

composerでパッケージインストール

composer require spatie/laravel-sitemap

サイトマップ表示用のルーティング作成

  • routes/web.php
Route::get('/sitemap', [App\Http\Controllers\SitemapController::class, 'index'])->name('sitemap');

サイトマップ作成用のController作成

例えば、TOPページと、登録された店舗詳細ページを対象にしたい場合

  • app/Http/Controllers/SitemapController
<?php
namespace App\Http\Controllers;

use App\Models\Shop;
use Spatie\Sitemap\Sitemap;
use Spatie\Sitemap\Tags\Url;

class SitemapController extends Controller
{
    public function index()
    {
        $sitemap = Sitemap::create();
        // Topページ
        $sitemap->add(route('top'));
        // DBのデータを元に動的URL生成
        $shops = Shop::query()->orderBy('updated_at', 'desc')->get();
        foreach ($shops as $shop) {
            $url = Url::create(route('shops.show', compact('shop')))
                ->setLastModificationDate($shop->updated_at);
            $sitemap->add($url);

        }

        // XMLファイルに出力
        $sitemap->writeToFile(public_path('sitemap.xml'));
        // クローラー用にリダイレクト
        return redirect('/sitemap.xml');
    }
}

\ 案件のご依頼・ご相談はこちらから /