vdeep

*

vdeepはプログラミング、IT、Web技術、ライフハックの事などなどを管理人okutaniがつぶやくブログです

【Rails】『sitemap-generator』gemでお手軽にsitemap.xmlを作成する方法

      2017/12/10

LINEで送る
Pocket


こんにちは、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《先頭が大文字》)を活用すると、検索エンジンがサイト内にあるすべてのページを発見する手助けになります。

引用元search-engine-optimization-starter-guide-ja.pdf

また今回、動作環境はRuby2.4.1、Rails5.1.0を利用しています。

sitemap-generatorのGitHubリポジトリは以下。

LINKkjvarga/sitemap_generator: SitemapGenerator is a framework-agnostic XML Sitemap generator written in Ruby with automatic Rails integration. It supports Video, News, Image, Mobile, PageMap and Alternate Links sitemap extensions and includes Rake tasks for managing your sitemaps, as well as many other great features.

それでは、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の設定方法は以下の記事を参考にしてみてください。

cronでシェルスクリプトとrubyプログラムを定期実行させる
こんにちは、okutani(@okutani_t)です。Linuxにある「cron」という機能を使うと、特...
2016-08-04 18:53
はてブ

おまけ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などの外部ストレージに保存する必要があります。

【Rails】Heroku + S3でsitemapを利用する方法
こんにちは、okutani(@okutani_t)です。本記事では、Rails向けに「sitemap_ge...
2017-10-26 02:36
はてブ

上記の記事にまとめたので、Herokuユーザーの方は一読してみてください。

参考になれば幸いです。

LINEで送る
Pocket

okutani (okutani_t) のヒトコト
sitemap.xmlの作成は後回しにしがちですが、メディア運営してる場合は必須ですね。忘れずにやっておきましょう!

Web開発のお仕事を募集しています

フリーランスのエンジニアとして、Webシステム開発のお仕事依頼を随時募集しています(現在の業務量によってお受けできない場合もあります)。

Ruby on Rails」「JavaScript(jQuery, Reactなど)」「HTML + CSS」を用いたシステム開発、「Heroku」等を用いたサーバー構築・運用、「Git」や「GitHub」を利用したソーシャルコーディングなどに対応しています。

ご依頼を検討している方は、下記リンク本ブログからのお問い合わせ、もしくはokutaniのポートフォリオからご連絡ください。

LINKお問い合わせ

LINKokutani's Portfolio


 - Ruby on Rails

スポンサーリンク

PC用AdSense

PC用AdSense

  こちらもどうぞ

vdeepのトップページへ戻る画像です。風船の形をした島を女の子が掴んでいます。