Laravel9でのライブラリを使わない実装例になります。
ほぼコピペできるような内容なので、良かったらご活用ください。
現時点ではLaravel9に対応していないようですが、Laravel8以下であればlaravel-sitemapの利用をおすすめします。
ルーティングの定義
use App\Http\Controllers\SitemapController;
Route::get('/sitemap.xml', [SitemapController::class, 'index']);
コントローラーの定義
例として、ログイン / プライバシーポリシー / お問い合わせページのsitemap.xmlを定義します。
class SitemapController extends Controller
{
public function index()
{
$data['data'] = [
[
'loc' => route('login'),
'lastmod' => '2022-05-03',
'changefreq' => 'weekly',
'priority' => '1.0'
],
[
'loc' => route('privacy.policy'),
'lastmod' => '2022-05-06',
'changefreq' => 'weekly',
'priority' => '0.8'
],
[
'loc' => route('contact'),
'lastmod' => '2022-04-18',
'changefreq' => 'weekly',
'priority' => '0.8'
],
];
return response()->view('sitemap.index', $data)->header('Content-type', 'text/xml');
}
}
ビューの定義
<?php echo '<?xml version="1.0" encoding="UTF-8"?>'; ?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
@foreach ($data as $d)
<url>
<loc>{{ $d['loc'] }}</loc>
<lastmod>{{ $d['lastmod'] }}</lastmod>
<changefreq>{{ $d['changefreq'] }}</changefreq>
<priority>{{ $d['priority'] }}</priority>
</url>
@endforeach
</urlset>
表示
/sitemap.xmlへアクセスして、下記のような表示になっていれば正常です。
※下記はhttps://localhost:8080/sitemap.xmlへアクセスした時の表示です。
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<script/>
<url>
<loc>http://localhost:8080/login</loc>
<lastmod>2022-05-03</lastmod>
<changefreq>weekly</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>http://localhost:8080/privacy-policy</loc>
<lastmod>2022-05-06</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>http://localhost:8080/contact</loc>
<lastmod>2022-04-18</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
</urlset>
終わりに
Controllerのheaderメソッドで’text/xml’を指定するのを忘れないようにしてくださいね。
長文書くのがちょっと面倒だったので、今回はsitemap.xmlを生成する実装例を紹介しました。
最後にことわざを紹介して終わりたいと思います。
手を抜く(てをぬく)
しなければいけないことをやらないこと。または、力を尽くさず、いい加減にすること。
https://kotowaza.jitenon.jp/kotowaza/5383.php
短いですが、今回はこのあたりで終わりたいと思います。
最後まで読んで頂きありがとうございました。
少しでも参考になりましたら幸いです。