サイトマップ

Webサイトを作成したら、検索で上位に表示させたいと思うものです。
Googleはクローラーを使ってリンクを辿り、そのWebページを解析した上でサイトを評価しているようです。
Google検索の仕組み

このとき、適切に各ページへのリンクが設定されていれば良いようですが、より詳細にクローラーに巡回してもらうためには サイトマップ をGoogleに送信しておくと良いようです。
サイトマップについて

今回は SitemapGenerator というRubyのGemを紹介したいと思います。
(WordPressでもあるようですね。)

インストールから適用

公式リポジトリ

ふつうにGemでインストールするのであれば、

$ gem install sitemap_generator

Gemfileを使用するのであれば、

gem 'sitemap_generator'

でしょうか。

まずはsitemap.rbという設定ファイルを作成する必要があるので、下記コマンドで生成します。

$ rake sitemap:install

sitemap.rbに追記していきます。
ルートパスは自動で追加されるようです。

# サイトのホスト名
SitemapGenerator::Sitemap.default_host  = 'https://hogehoge.com/'
# サイトマップを生成するディレクトリ
# この場合、public以下に生成されます
SitemapGenerator::Sitemap.sitemaps_path = 'sitemaps/'

SitemapGenerator::Sitemap.create do
    # 登録したいパスを書きます
    # route.rbに登録したルート名の方が分かりやすいと思われます
    add "/about"

    # 更新頻度を設定することができます
    # デフォルトは「weekly」です
    add contact_path, :changefreq => 'monthly'

    # Memberモデルから全件取得し、登録することも可能です
    # last_modオプションで、更新日を管理するプロパティを設定できます
    Member.find_each do |member|
        add member_path(member), :lastmod => member.updated_at
    end
end

基本的にはこのような感じでしょうか?
詳しいオプションは公式リポジトリを参照してください。

sitemap.rbが生成できたら実際にサイトマップを生成します。
また、デフォルトはdevelopment環境で実施するので、本番環境などで実行する場合は、RAILS_ENV=productionなどとつけましょう。
(少しここで足踏みしました。)

$ rake sitemap:refresh

これで、sitemaps/sitemap.xml.gzが生成されたかと思います。
このときGoogleやBingにサイトマップの送信までしてくれます。

cronに登録して毎日更新

毎回新しい記事を作成するたびにコマンドを打つのは面倒なので、cronに登録しておきます。
ふつうにcrontabコマンドに登録すれば済む話です。

ただ今回は、 whenever を使用する方法で記載します。
(wheneverについてはまた後日取り上げたいと思います。)

毎日10時に実行する場合は、schedule.rbに下記を追加すればOKです。

every 1.day, :at => '10:00 am' do
    rake "sitemap:refresh"
end

余談ですが、環境ごとに変える場合は、下記のように書くと良さそうです。

case @environment
    when 'production'
        every 1.day, :at => '10:00 am' do
            rake "sitemap:refresh"
        end
    when 'staging'
        # stagingでやりたいこと
end

あとはcrontabを更新すればOKですね。

$ whenever --update-crontab
Shere
  • はてなブログ
  • Twitter
  • Facebook
サイトマップとSitemapGenerator

Writer

  • Name

    Naoki

  • Position

    RubyやPHPが書きたい雑用

  • Profile

    最近、(自称)PHPerから(自称)Rubyistに移行しようと考えている雑用です。Rubyのオブジェクト 指向はすごい分かりやすいので好きになりました。また、メソッド名に?が使えるのも良いですよね!