LoginSignup
13
10

More than 5 years have passed since last update.

sitemap_generator + whenever + S3 で サイトマップを配信する

Posted at

毎日定時にサイトマップを生成し、GoogleにPingするのは whenever + sitemap_generator でカンタンに実現できるのですが、いくつかの特殊要件を満たすために工夫したことをまとめておきます。

なお、使っている gem の version は以下の通りです。
* rails: 4.2.0
* whenever: 0.9.4
* sitemap_generator: 5.1.0

production のみ whenever を有効に

素直に

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

と書くと、sandbox や staging 等でも crontab に登録され、Google に Ping されるので避けたいところです。

if @environment.to_sym == :production
  every 1.day, at: '10:00 am' do
    rake 'sitemap:refresh'
  end
end

と書けば、production だけで 有効になります。
See: https://github.com/javan/whenever/wiki/Setting-variables-on-the-fly

S3から sitemap.xml.gz を配信する

一般的には sitemap_generator で生成したサイトマップは Nginx や Apache 等の Web サーバから配信すればいいのですが、事情により Webサーバから配信できないこともあります。

代替手段として最も手軽なのは(たぶん)S3 でのホスティングだと思われます。
sitemap_generator にはアダプターがあり

 SitemapGenerator::Sitemap.adapter = SitemapGenerator::S3Adapter.new(fog_provider: 'AWS',
                                         aws_access_key_id: <your-access-key-id>,
                                         aws_secret_access_key: <your-access-key>,
                                         fog_directory: <your-bucket>,
                                         fog_region: <your-aws-region e.g. us-west-2>)

という風に設定することができます。
https://github.com/kjvarga/sitemap_generator/wiki/Generate-Sitemaps-on-read-only-filesystems-like-Heroku

S3 にあるサイトマップをWebマスターツールに登録

Webマスターツールでは所有ドメイン外にあるサイトマップは登録できない(少なくとも調べた範囲では)ので、例えば /sitemap という path を S3 にリダイレクトしてあげればよさそうです。

get '/sitemap' => redirect('https://s3-ap-northeast-1.amazonaws.com/your-bucket/sitemaps/sitemap.xml.gz')

こんな感じで routes.rb を書けば ok。

13
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
10