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');
}
}