【Rails】『sitemap-generator』gemでお手軽にsitemap.xmlを作成する方法
2017/12/10
こんにちは、okutani(@okutani_t)です。本記事では『sitemap-generator』というgemを使って「Ruby on Railsのプロジェクトにsitemap.xmlを導入する方法」について解説しています。
SEO対策でGoogleに適切にインデックスしてもらうため、sitemap.xmlの作成はほぼ必須ですね。
sitemap.xmlのかんたんな解説は、Googleが公開している「参考search-engine-optimization-starter-guide-ja.pdf」を参考にしてみてください。
一応、以下に該当箇所を引用しておきます。
サイト内のすべてのページ、もしくは(何百、何千ものページがあるサイトの場合は)主要なページへのリンクが張られたHTMLのサイトマップ(sitemap《先頭が小文字》)があると、ユーザーにとって便利です。また、XMLサイトマップ(Sitemap《先頭が大文字》)を活用すると、検索エンジンがサイト内にあるすべてのページを発見する手助けになります。
また今回、動作環境はRuby2.4.1、Rails5.1.0を利用しています。
sitemap-generatorのGitHubリポジトリは以下。
それでは、sitemap-generatorの導入方法から見ていきましょう。
スポンサーリンク
もくじ
sitemap-generator
Gemfileに以下を記述します。
gem 'sitemap_generator'
bundlerで導入。今回はプロジェクト以下に配置しました。
$ bundle install --path vendor/bundle
これでsitemap-generatorの導入完了です。
設定ファイルの作成
以下のコマンドで設定ファイルを作成します。
$ bundle exec rails sitemap:install
「config/sitemap.rb」が作成されました。作成時のファイルの中身をそのまま記載しておきます。
# Set the host name for URL creation
SitemapGenerator::Sitemap.default_host = "http://www.example.com"
SitemapGenerator::Sitemap.create do
# Put links creation logic here.
#
# The root path '/' and sitemap index file are added automatically for you.
# Links are added to the Sitemap in the order they are specified.
#
# Usage: add(path, options={})
# (default options are used if you don't specify)
#
# Defaults: :priority => 0.5, :changefreq => 'weekly',
# :lastmod => Time.now, :host => default_host
#
# Examples:
#
# Add '/articles'
#
# add articles_path, :priority => 0.7, :changefreq => 'daily'
#
# Add all articles:
#
# Article.find_each do |article|
# add article_path(article), :lastmod => article.updated_at
# end
end
こちらをプロジェクトに合わせて変更していきます。
設定ファイルの編集
今回、以下のように設定ファイルを編集してみました。
SitemapGenerator::Sitemap.default_host = 'https://example.com'
# 出力先のパスを変更したい場合は以下を有効化
# SitemapGenerator::Sitemap.sitemaps_path = 'sitemaps/'
SitemapGenerator::Sitemap.create do
add articles_path, priority: 0.7, changefreq: 'daily'
Article.where(status: 1).find_each do |article|
add article_path(article), priority: 1.0, lastmod: article.updated_at, changefreq: 'daily'
end
end
「example.com」「article」などはそれぞれ各プロジェクトに合わせて変更してください。
各設定項目の内容は以下のとおり。
changefreq | 更新頻度を指定。[‘always’, ‘hourly’, ‘daily’, ‘weekly’, ‘monthly’, ‘yearly’, ‘never(アーカイブされたページ)’]のいずれかを指定 |
---|---|
priority | 優先順位1.0(重要度:高)~0.1(重要度:低)を指定 |
lastmod | 最終更新日を指定 |
また、find_each メソッドを使うことで、大量のデータを少しずつ処理できるようにしています(デフォルトでは1000件ずつ)。
ちなみに、ルートパスはデフォルトで以下内容をsitemap.xmlに出力してくれるので、特に設定しなくてもOKです。
<url>
<loc>https://example.com</loc>
<lastmod>sitemap.xml作成時の時刻</lastmod>
<changefreq>always</changefreq>
<priority>1.0</priority>
</url>
これで設定ファイルの準備が整いました。
サイトマップ作成を実行
以下のコマンドを実行。
$ bundle exec rails sitemap:refresh
これで設定ファイルを元に「/public/sitemap.xml.gz」を作成してくれます。
gzip形式で圧縮されているので、中身を確認したい場合は解凍してください。
ちなみに、sitemap作成・更新時にGoogleとBingに自動でpingを飛ばします。pingを飛ばしたくない場合は以下のコマンドを代わりに使用します。
$ bundle exec rails sitemap:refresh:no_ping
あとはGoogle Search Consoleなどに「http://example.com/sitemap.xml.gz」もしくは「http://example.com/sitemap.xml」の形式で登録してあげればOKですね。
それ以外の詳しいオプションについては、公式のGitHubページをご確認ください。
.gitignoreの設定
sitemap.xml.gzはGit管理しなくてOKなので、「.gitignore」に以下行を追記しておきます。
public/sitemap.xml
public/sitemap.xml.gz
これでGit管理から外れました。
あとはcronかなにかで、サーバー上で「$ bundle exec rails sitemap:refresh
」を実行できるように設定すればOKです。
cronの設定方法は以下の記事を参考にしてみてください。
おまけ1:sitemap.xmlを整形する
解凍したsitemap.xmlは一行で記載されているため、見やすいように整形するには「tidy」コマンドを利用すればOKです。
$ tidy --indent-cdata true -xml -utf8 -i public/sitemap.xml
ファイルに出力したい場合は以下。
$ tidy --indent-cdata true -xml -utf8 -i -o public/sitemap_out.xml public/sitemap.xml
こちら(参考tidyコマンドでXMLインデント整形する – それマグで!)を参考にしました。
確認のため出力されたデータにざっと目を通したかったため、上記の方法で整形してみました。
これでsitemap.xmlの確認も楽になりますね。
おまけ2:Herokuで利用する方法
Herokuでは作成したファイルをサーバー上に置くことができないため、S3などの外部ストレージに保存する必要があります。
上記の記事にまとめたので、Herokuユーザーの方は一読してみてください。
参考になれば幸いです。
Web開発のお仕事を募集しています
フリーランスのエンジニアとして、Webシステム開発のお仕事依頼を随時募集しています(現在の業務量によってお受けできない場合もあります)。
「Ruby on Rails」「JavaScript(jQuery, Reactなど)」「HTML + CSS」を用いたシステム開発、「Heroku」等を用いたサーバー構築・運用、「Git」や「GitHub」を利用したソーシャルコーディングなどに対応しています。
ご依頼を検討している方は、下記リンク本ブログからのお問い合わせ、もしくはokutaniのポートフォリオからご連絡ください。
LINKお問い合わせ
スポンサーリンク