LaravelでSEO対策のため、動的なページにも対応するようsitemap.xmlを作成してみます。
Laravelではcomposerでsitemap.xmlを生成するパッケージがあります。
パッケージを使ってみたかったのですが、依存関係がエラーで解決できず、インストールできなかったのでこの際、自前で作ってみようと思います。
sitemap.xmlとは
サイトマップ(sitemap.xml)とは検索エンジンにこのサイトが持っているURLを知らせるものです。
Googleなどの検索エンジンのクローラーはサイトマップ(sitemap.xml)の情報を参考にクロールします。
検索順位を上げるには必要なファイルになります。
Laravelで動的なページも対応したsitemap.xmlを作ってみましょう。
Controller作成
sitemapに情報を返すControllerを作成しましょう。
php artisan make:controller SitemapController
SitemapControllerが作成されました。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Post;
class SitemapController extends Controller
{
public function index() {
$posts = Post::get();
return response()->view('sitemap', [
'posts' => $posts,
])->header('Content-Type', 'text/xml');
}
}
今回は例として記事データ(POST)を全件取得して返却するようにしています。
記事データをsitemap.xmlへ返却しています。
sitemapはXML形式のため、ヘッダをカスタマイズして返却しています。
header(‘Content-Type’, ‘text/xml’);
bladeファイル作成
/resources/views配下にsitemap.blade.phpを作成します。
<?php echo '<?xml version="1.0" encoding="UTF-8"?>'; ?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
@php
$dt = new \Carbon\Carbon('2022-12-01 00:00:00');
@endphp
<url>
<loc>{{ url('/') }}</loc>
<lastmod>{{ $dt->tz('UTC')->toAtomString() }}</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
@foreach ($posts as $post)
<url>
<loc>{{ url('/') }}/post/{{ $post->id }}</loc>
<lastmod>{{ $post->created_at->tz('UTC')->toAtomString() }}</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
@endforeach
</urlset>
ファイルについて解説します。
{{ url(‘/’) }}はURLのフルパスになります。
lastmodタグには最終更新日時が入ります。
タイムゾーンはUTC、書式は [年]-[月]-[日]T[時]:[分]:[秒]Z にしています。
@foreach ($posts as $post)の部分で返した記事の情報を展開し、sitemapのタグを動的に生成しています。
作成できたので、ルーティングの設定をしていきます。
ルーティングの設定
確認するためにルーティングの設定をしていきます。
/routes/web.phpに追加します。
Route::get('sitemap.xml', [SitemapController::class, 'index' ])->name('get.sitemap');
これで確認することができます。
https://自身のURL/sitemap.xmlで確認してみましょう。
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://自身のURL/</loc>
<lastmod>2022-11-30T15:00:00+00:00</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://自身のURL/post/1</loc>
<lastmod>2022-11-30T15:00:00+00:00</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://自身のURL/post/2</loc>
<lastmod>2022-11-30T15:00:00+00:00</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://自身のURL/post/3</loc>
<lastmod>2022-11-30T15:00:00+00:00</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
</urlset>
サイトマップ(sitemap.xml)が作成されているのが確認できます。
これでサイトマップの作成は完了です。LaravelのSEO対策にお役立てください。