登録日:
2025-03-04
最終更新日:
2025-03-23
Laravel で sitemap.xml を出力するプログラム
Laravel で sitemap.xml を生成するプログラムを作る方法する。
手順
- ルーティングの設定
- コントローラーの作成
- ビューファイル(Blade)の作成
- キャッシュの設定(オプション)
ルーティングの設定
routes/web.php に以下を追加
use App\Http\Controllers\SitemapController;
Route::get('/sitemap.xml', [SitemapController::class, 'index']);
コントローラーの作成
コントローラーを作成する
php artisan make:controller SitemapController
生成された app/Http/Controllers/SitemapController.php を編集する。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Response;
use App\Models\Post; // 例: 記事情報を取得する場合
class SitemapController extends Controller
{
public function index()
{
// キャッシュを利用(オプション)
$sitemap = Cache::remember('sitemap', 60, function () {
$posts = Post::latest()->get(); // 記事データを取得
return view('sitemap', compact('posts'));
});
return Response::make($sitemap, 200, [
'Content-Type' => 'application/xml'
]);
}
}
ビューファイル(Blade)の作成
sitemap.xml を生成するためのビューを作成する。
resources/views/sitemap.blade.php
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>{{ url('/') }}</loc>
<lastmod>{{ now()->tz('UTC')->toAtomString() }}</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
@foreach ($posts as $post)
<url>
<loc>{{ url('/posts/' . $post->id) }}</loc>
<lastmod>{{ $post->updated_at->tz('UTC')->toAtomString() }}</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
@endforeach
</urlset>
キャッシュのクリア(オプション)
キャッシュを利用する場合、データ更新時にキャッシュをクリアする。
例えば、新しい記事が作成されたときに Cache::forget('sitemap') を実行する。
Post::created(function () {
Cache::forget('sitemap');
});
Post::updated(function () {
Cache::forget('sitemap');
});