【Laravel】SEO対策にサイトマップ(sitemap.xml)を作成する

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対策にお役立てください。

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次