rails サイトマップの作成

本稿について

本稿はサイト運営者が学んだことなどを記したメモの内容です。
全てが正確な情報とは限りません。ご注意ください。また修正するべき点は適時修正していきます

gem 'sitemap_generator'

$ bundle exec rails sitemap:install


config/sitemap.rb
# Set the host name for URL creation
SitemapGenerator::Sitemap.default_host = "https://dosukoikoi.com”
# S3にアップロードする場合
SitemapGenerator::Sitemap.sitemaps_host = "https://s3-ap-northeast-1.amazonaws.com/#{ENV['S3_BUCKET_NAME']}"
SitemapGenerator::Sitemap.adapter = SitemapGenerator::AwsSdkAdapter.new(
  ENV['S3_BUCKET_NAME'],
  aws_access_key_id: ENV['AWS_ACCESS_KEY'],
  aws_secret_access_key: ENV['AWS_SECRET_KEY'],
  aws_region: 'ap-northeast-1',
)


SitemapGenerator::Sitemap.create do
  add articles_path, changefreq: 'daily' #記事一覧
  Article.find_each do |article|         # 記事詳細ページ
    add article_path(article), changefreq: 'daily',
                               lastmod: article.updated_at
  end
end


通常に実行すると `publich/sitemap.xml.gz` が作成される。
$ bundle exec rails sitemap:refresh

※ Herokuを利用している場合の注意。
herokuでは、git上にアップされているファイル以外は削除されてしまうので、
Herokuのサーバー上でsitemap.xml.gzを作成した場合には削除されてしまう。

この場合には、sitemapを作成と同時にS3などにsitemap.xml.gzをアップロードする必要がある。
また、 「Google Search Console」などでsitemapを登録する場合にはそのドメインからsitemapを参照できるようにする必要がある。

sitemapを生成してS3に上げる場合には config/sitemap.rb の以下のコードを追加する
SitemapGenerator::Sitemap.sitemaps_host = "https://s3-ap-northeast-1.amazonaws.com/#{ENV['S3_BUCKET_NAME']}"
SitemapGenerator::Sitemap.adapter = SitemapGenerator::AwsSdkAdapter.new(
  ENV['S3_BUCKET_NAME'],
  aws_access_key_id: ENV['AWS_ACCESS_KEY'],
  aws_secret_access_key: ENV['AWS_SECRET_KEY'],
  aws_region: 'ap-northeast-1',
)

Herokuサーバーからsitemapを参照できるようにroutingを設定する
get '/sitemap', to: redirect("https://s3-ap-northeast-1.amazonaws.com/#{ENV['S3_BUCKET_NAME']}/sitemap.xml.gz")

herokuでは定期的にsitemapを生成するように heroku schedule などで定期的に実行されるようにした方が良い


[参考]
Back