SitemapGeneratorの導入
ここからは、実際にRailsプロジェクト上でSitemapGeneratorを使う手順を紹介します。
インストール
Gemfileにsitemap_generatorを追記します。
…(中略)… gem 'sitemap_generator' …(中略)…
以下のコマンドを実行しsitemap_generatorをインストールします。
bin/bundle
▼
…(中略)… Installing sitemap_generator 6.0.1 Bundle complete! 20 Gemfile dependencies, 83 gems now installed. Bundled gems are installed into `./vendor/bundle`
上記の通り、執筆時点では6.0.1がインストールされました。
設定ファイルの設置
以下のコマンドを実行し、サイトマップ生成ルールを記述する設定ファイルのひな型を作成します。
bin/rails sitemap:install
▼
created: config/sitemap.rb
[Tips]railsコマンド
rakeコマンドはRails5.0からrailsコマンドに代替可能です。本稿ではRails5系を前提としているため、rakeタスクはrailsコマンドとして記述します。
設定ファイルの記述方法
生成された設定ファイルを確認します。
# Set the host name for URL creation SitemapGenerator::Sitemap.default_host = "http://www.example.com" SitemapGenerator::Sitemap.create do # Put links creation logic here. …(中略)… end
設定ファイルには、サンプルが記述されています。サイトマップのURLはフルパスで記述する必要があるので、まずホスト名をSitemapGenerator::Sitemap.default_hostに設定します。
SitemapGenerator::Sitemap.create do〜endのブロック内に、サイトマップ用に生成したいパスや設定を記述していきます。
記事URLの定義
ここでは、すべての記事(Articleモデル)のURLがサイトマップに追加されるように設定ファイルを修正します。
…(中略)…
SitemapGenerator::Sitemap.create do
Article.find_each do |article|
add article_path(article), lastmod: article.updated_at
end
end
addはSitemapGeneratorが提供するメソッドです。「add ルーティングのパス, オプション(ハッシュ形式)」のように指定することで、URLを示すloc要素の値を、ルーティングのパスとして出力します。また、パスの後のオプションに、要素名をシンボルとしたハッシュ形式でその他のサイトマップXMLの要素とその値を指定することもできます。
指定できる要素は以下の通りです。
| 要素(シンボル) | 概要 | デフォルト値 |
|---|---|---|
| :changefreq | 更新頻度 | 'weekly' |
| :priority | 優先順位 | 0.5 |
| :lastmod | 最終更新日 | Time.now |
| :host | ホスト名 | SitemapGenerator::Sitemap.default_host |
修正した例では、lastmod要素の設定値を明示的に指定しています。lastmod要素は、前述の表の通りTime.nowです。つまりサイトマップ生成のrakeタスクが実行された時間です。
一般的にサイトマップでは、記事が更新された日時をlastmodに設定すべきなので、ここでは記事の更新日時(article.updated_at)を指定しています。
サイトマップ作成
これでサイトマップを作成する最低限の準備ができました。
以下のコマンドを実行し、サイトマップを生成してみます。なお、ここではテスト作成なので検索エンジンにpingを送信する必要はなく、createを使用している点に注意が必要です。
bin/rails sitemap:create
▼
In '/Users/tchikuba/codezine/repos/kaminari_sample/public/': + sitemap.xml.gz 1001 links / 6.69 KB Sitemap stats: 1,001 links / 1 sitemaps / 0m00s
正常にサイトマップが作成されると上記のようなログが出力されます。生成されたサイトマップの形式に問題がないかを確認します。
まず、以下のコマンドを実行して出力されたサイトマップを解凍します。
gzip -d public/sitemap.xml.gz
解凍したサイトマップを確認します。出力されたサイトマップは1行のXMLとなっているため、整形して見やすいようにxmllintコマンドを使います。
xmllint --format public/sitemap.xml | less
▼
…(中略)…
<url>
<loc>http://www.example.com/articles/721056</loc>
<lastmod>2018-07-22T10:46:53+00:00</lastmod>
<changefreq>weekly</changefreq>
<priority>0.5</priority>
</url>
…(中略)…
このように、検索エンジンが参照するサイトマップXMLの形式で正常に出力されます。loc要素に設定されている値が正しい記事URLになっていること、lastmod要素に設定されている値がデータを登録した日時になっていることが確認できます。
