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 - 追記
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がいいかは別途勉強が必要です・・・