プログラミング

Ruby on Railsでsitemapを自動で定期更新しS3にアップロードする

ruby on rails eyecatch

railsでのアプリケーション実装が完了したら、せっかくなのでSEO対策もやっていきましょう。

小さなアプリであれば必要はないのですが、定期的に記事を更新したりデータを更新して都度sitemapをアップデートさせたいのであれば、全て自動化してやってしまうと楽です。

今回の記事では、sitemapの自動生成更新・S3への自動アップデートを行うサンプルを記載します。

sitemap_generatorを導入する

“sitemap_generator”という、railsでsitemapを生成する便利なgemがありますので、まずはこちらを導入します。AWSのS3に定期的にアップロードするので、併せてaws-sdkも導入しておきます。

# Gemfile
gem 'sitemap_generator'
gem 'aws-sdk'
bundle install

ターミナルでアプリケーションのルートに移動し、

rake sitemap:install

を実行し、config/sitemap.rbを作成します。

sitemap_generatorの設定

S3への自動アップロードと、作成するサイトマップの中身を、sitemap.rbに記述していきます。

require 'aws-sdk-s3'

# S3へアップロードするためのアダプタ設定
SitemapGenerator::Sitemap.default_host = "https://sample.com/"
SitemapGenerator::Sitemap.sitemaps_host = "http://s3-ap-northeast-1.amazonaws.com/sample-sitemaps"
SitemapGenerator::Sitemap.adapter = SitemapGenerator::AwsSdkAdapter.new('sample-sitemaps',
  aws_access_key_id: "AWS_ACCESS_KEY_ID",
  aws_secret_access_key: "AWS_SECRET_ACCESS_KEY",
  aws_region: "AWS_REGION"
)

# 作成するサイトマップの設定
SitemapGenerator::Sitemap.create do
  add samples_path, changefreq: 'daily'
  Sample.find_each do |sample|
    add sample_path(sample), changefreq: 'daily', lastmod: sample.updated_at
  end
end

詳細はsitemap_generatorの公式ドキュメントを参照してください。
sitemap_generator

rake sitemap:refresh

この状態で、上記コマンドを実行すると、sitemapファイル郡がS3にアップロードされます。

定期的に更新したsitemapをS3にアップロードする

先程手動で実行したrake sitemap:refreshを自動で定期的に実行するようにcrontabを設定します。

アプリケーションが動いているサーバーに接続し、crontabを設定します。

crontabの設定

crontab -e

以下は毎分サイトマップを更新・S3にアップロードする記述になります。

* * * * * bundle exec rake sitemap:refresh

実際に運用する際には、1周間に一度や1月に一度など、適宜修正してください。