SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

これだけは押さえておきたい! Rails開発で使えるgemパッケージ/ツール

SEO対策の定番gem(sitemap_generator/meta-tags)をRailsで使おう

これだけは押さえておきたい! Rails開発で使えるgemパッケージ/ツール 第7回

SitemapGeneratorの導入

 ここからは、実際にRailsプロジェクト上でSitemapGeneratorを使う手順を紹介します。

インストール

 Gemfileにsitemap_generatorを追記します。

[リスト 1]Gemfile
…(中略)…
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コマンドとして記述します。

設定ファイルの記述方法

 生成された設定ファイルを確認します。

[リスト2]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.
  …(中略)…
end

 設定ファイルには、サンプルが記述されています。サイトマップのURLはフルパスで記述する必要があるので、まずホスト名をSitemapGenerator::Sitemap.default_hostに設定します。

 SitemapGenerator::Sitemap.create do〜endのブロック内に、サイトマップ用に生成したいパスや設定を記述していきます。

記事URLの定義

 ここでは、すべての記事(Articleモデル)のURLがサイトマップに追加されるように設定ファイルを修正します。

[リスト3]config/sitemap.rb
…(中略)…
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の要素とその値を指定することもできます。

 指定できる要素は以下の通りです。

表:addメソッドのオプションに指定できる要素
要素(シンボル)  概要 デフォルト値   
: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要素に設定されている値がデータを登録した日時になっていることが確認できます。

次のページ
MetaTagsとは

この記事は参考になりましたか?

これだけは押さえておきたい! Rails開発で使えるgemパッケージ/ツール連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 竹馬 力(チクバ ツトム)

WINGSプロジェクト について> 有限会社 WINGSプロジェクト が運営する、テクニカル執筆コミュニティ(代表 ...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/11192 2018/11/08 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー