$ 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 などで定期的に実行されるようにした方が良い
[参考]