世界を旅して暮らしたい放浪エンジニアブログ

Laravelium/laravel-sitemap を利用してsitemap.xmlを生成する

Laravelの案件でsitemap.xmlを生成する方法をまとめていきます。

[ 目次 ]

はじめに

こんにちは、香港に住んでいるWEBデベロッパーのなかむ(@nakanakamu0828)です。

今回はLaravelのプロジェクトでsitemap.xmlを生成する方法をまとめていきたいと思います。
Laravelium/laravel-sitemapというライブラリを利用して実装していきます。

■ 環境

ライブラリ バージョン
PHP ^7.1.3
Laravel 5.7.*

2019/05/29 - 追記

Githubの対象リポジトリを確認したところ、Laravelium/laravel-sitemapはアーカイブになっておりました。
今後はメンテナンスされない為、ライブラリを利用される方は注意が必要です。

Laravelium/laravel-sitemap インストール

$ composer require laravelium/sitemap

本日(2018/11/12)時点では、v3.0.1がインストールされました。

configファイルの生成

$ php artisan vendor:publish --provider="Laravelium\Sitemap\SitemapServiceProvider"
  • /config/sitemap.php
  • /resources/views/vendor/sitemap
  • /public/vendor/sitemap

上記のファイル・ディレクトリが生成されます。
/config/sitemap.phpにはsitemap.xml生成の設定が記載されています。
今回はサンプルなのでデフォルトの設定値を利用しますが、デフォルトでは以下のような設定になっています

<?php

/* Simple configuration file for Laravel Sitemap package */
return [
    'use_cache' => false,  // アクセスする度に更新
    'cache_key' => 'laravel-sitemap.'.config('app.url'), // キャッシュキー
    'cache_duration' => 3600, // キャッシュ時間
    'escaping' => true,
    'use_limit_size' => false,
    'max_size' => null,
    'use_styles' => true,
    'styles_location' => '/vendor/sitemap/styles/',
    'use_gzip' => false
];

routes/web.phpにsitemapのルーティングを追加

今回はサイトに訪れたユーザにどんなコンテンツがあるかサイト紹介・説明をするためのHTMLページと、検索エンジンがサイト内のURLを集めるために利用するsitemap.xmlの2つのルーティングを用意します。

// HTML画面表示用
Route::get('sitemap', 'SitemapController@html')->name('sitemap');
// sitemap.xml用
Route::get('sitemap.xml', 'SitemapController@xml')->name('sitemap.xml');

コントローラー作成

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Carbon\Carbon;

class SitemapController extends Controller
{
    // 画面表示
    public function html()
    {
        return view('sitemap');
    }

    // sitemap.xmlの生成と表示
    public function xml()
    {
        $sitemap = \App::make("sitemap");
        $now = Carbon::now();
        $sitemap->add(url('/'), $now, '1.0', 'daily');
        $sitemap->store('xml', 'sitemap');

        return $sitemap->render('xml');
    }
}

※ htmlの表示については、各サイトに合わせてテンプレートをマークアップして頂ければと思います。

利用方法

ブラウザからのsitemap.xmlにアクセスすることで、public ディレクトリ内にsitemap.xml が出力されます。
※ curlなどHTTPリクエストのアクセスならなんでも大丈夫です

今回は以下のようなsitemap.xmlが出力されました。

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="/vendor/sitemap/styles/xml.xsl" type="text/xsl"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1">
	<url>
	<loc>http://localhost</loc>
		<priority>1.0</priority>
		<lastmod>2018-11-12T18:41:22+09:00</lastmod>
		<changefreq>daily</changefreq>
	</url>
</urlset>

最後に

今回はLaravel開発によるsitemap.xmlの生成を行いました。
SEO会社さんから急にsitemap.xmlの作成依頼がきてもこれで大丈夫ですね。
どのようなsitemap.xmlがいいかは別途勉強が必要です・・・

前のページ

次のページ

Profile

なかむ🇭🇰Webデベロッパー

なかむ🇭🇰Webデベロッパー

香港在住4年目になるWEBエンジニアのなかむです。 現在は、LaravelやRailsを利用したWEB開発を中心にエンジニアをしています。 顧客は全て日本の企業になります。リモート開発にて各企業様の支援を行なっております

プロフィール詳細はこちら

Latest Posts