読者です 読者をやめる 読者になる 読者になる

ここにタイトルが入ります

デザイン&プログラミングのことも書くし、それ以外のことも書く。

【Ruby, Rails】sitemap-generatorを使ってsitemapを作成。

ruby Rails

SEOの一環でサイトマップとか作って検索エンジンのインデックスに登録することありますよね?


googleサイトマップについて〜
サイトマップについて - ウェブマスター ツール ヘルプ

サイトマップのフォーマット〜
sitemaps.org - プロトコル


サイトマップ自体はタダのXMLファイルですし、それをWebサーバーに置いたらURIgoogleとかのAPIで伝えるだけなので
そんなに難しいことではないのですが、
Railsでサイトを作っているのなら

sitemap generator

というgemを使うと簡単にサイトマップが作れるそうなのでつかってみました。


※以下説明することはここにすべて書いて有りますので…

sitemap generator

準備

いつもどおりGemfileに追加

gem 'sitemap_generator'

でbundle install。

$ rake sitemap:install

を実行するとconfig/sitemap.rbが作成されるので
それに作成したいサイトマップの設定を書いていきます。


sitemap.rbの作成

基本情報をセット

# サイトのホスト名
SitemapGenerator::Sitemap.default_host = 'http://example.com'
#サイトマップのパス(これだとpublic/sitemaps以下にsitemapができる)
SitemapGenerator::Sitemap.sitemaps_path = 'sitemaps/'

で、実際にどのページ(URI)を追加するかを指定した例がこちら↓。
お店(shop)に関するページを登録してみました。

createメソッドでindex内容を指定します。

SitemapGenerator::Sitemap.create do

  # これだとhttp://example.com/shopsというページを
  # 更新頻度を毎月、優先度を0.75という形で登録しています
  add '/shops', :changefreq => 'monthly', :priority => 0.75

  # これはモデルからShop全件のページを取得してインデックスに登録しようとしています
  # 最終更新日をshopのupdated_atに、更新頻度を毎月に設定
  Shop.find_each do |shop|
    add shop_path(shop), :lastmod => shop.updated_at, :changefreq => 'monthly'
  end

end

サイトマップ作成〜送信

sitemap.rbが完成すれば、rakeコマンドでsitemapの作成〜送信が行えます。

$ rake sitemap:refresh

を実行すると、指定したパスの位置に
sitemap1.xml.gz
sitemap_index.xml.gz
が作成されます。


sitemap1の方に実際のURIが入っていて、数が多くなるとsitemap2,3のように分割されていきます。
※分割される条件ですが、1ファイルに登録できるURIやサイズは決まっているのでそこを越えたら…みたいになってんじゃないかと。
確認しておりません!!


そしてその後、何も設定していなければ
Google, Bing, SitemapWriterに通知をしてくれます。通知を行なってほしくない場合は

$ rake sitemap:refresh:no_ping

で実行します。

私はこのrefreshをcronに登録し定期的に行うようにしています。


Rakeコマンドじゃなくプログラム内で利用

書いてあるものまんまコピーですけど

SitemapGenerator::Sitemap.default_host = 'http://example.com'
SitemapGenerator::Sitemap.create do
  add '/home', :changefreq => 'daily', :priority => 0.9
  add '/contact_us', :changefreq => 'weekly'
end
SitemapGenerator::Sitemap.ping_search_engines

でまあアプリケーションの中で書けば
わざわざRakeコマンドを叩かなくてもいけると。


その他設定

デフォルトでは3つのサーチエンジンにリクエストが送られてしまいます。
私はgoogleにのみ送信したかったので

SitemapGenerator::Sitemap.search_engines = { :google => "http://www.google.com/webmasters/sitemaps/ping?sitemap=%s" }

をsitemap.rbに追加(というか上書き)を行いました。

…なんかほかに設定の仕方がある気がします。


追記:hashで:google,bing,sitemap_writerがデフォルトで入っているみたいなので、
いらないもの消せばいいだけですねー
(sitemap_writerがよくわからないけど)



他にもたくさん、cronの設定やcapstranoを使用する場合など様々なoptionがあります。
ちなみに私はsitemapをs3に上げるよう実装しましたが、設定変えるだけでした
(carrierwave使っている場合だと、s3へのコネクションを使えるので一層楽!)


※違うドメインにサイトマップ置けることすら知らなかった…
〜参考になりました!〜
robots.txtによるサイトマップのクロスサイト送信 | 海外SEO情報ブログ


詳しくはgithubの説明見てね(・∀・)
Railsサイトでサイトマップ作成が必要な人は使ってみてはいかがでしょうか