railsでサイトマップを作成する

準備

Gemfileに以下を追加

 gem 'sitemap_generator'

追加したらbundle install。

インストールできたら以下のコマンドを実行

 $ rake sitemap:install

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

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

ここから、実際にサイトのどのページを追加するかを指定する。
以下では、albumとして登録されているすべてのページを登録しています。

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

     # これはAlbumモデル全件のページを取得してインデックスに登録します。
     # 最終更新日をalbumのupdated_atに、更新頻度を毎日に設定
     Album.find_each do |album|
       add "/albums/show_pictures/#{album.id}", :lastmod => album.updated_at, :changefreq => 'daily', :priority => 0.75
     end
  end

サイトマップの送信

production環境の場合、以下のコマンドを実行します(developの場合はRAILS_ENV=production)は必要ありません。

 $ rake sitemap:refresh RAILS_ENV=production

以下のように表示されれば成功です。

 In '/home/azureuser/hogehoge/public/':
 + sitemaps/sitemap.xml.gz                                666 links /    2.82 KB
 Sitemap stats: 666 links / 1 sitemaps / 0m00s

 Pinging with URL 'http://hogehoge/sitemaps/sitemap.xml.gz':
   Successful ping of Google
   Successful ping of Bing

これで、google, bingに更新を通知しているようです。public/sitemapsフォルダに、sitemap.xml.gzが出来上がっているので、一応確認したほうがいいでしょう。

これをwheneverで実行するために、config/schedule.rbに以下を追加します。

 every 1.days do
   rake "sitemap:refresh", :enviroment => :production
 end

追加したら、以下のコマンドで自動更新スケジュールを登録します。

 $ bundle exec whenever --update-crontab

これで、サイトマップ自動更新が出来ました。

shirusu-ni-tarazu.hatenablog.jp

railsで写真共有サイトを作成しました。

http://workshops.ddns.net

作成までの過程をまとめてアップしたい・・