sitemap_generatorを使って生成したsitemapをS3にアップロードする方法で、S3Adapterを使った方法の実装メモ github.com
sitemap生成準備
Gemfileにsitemap_generatorを追加してbundle install
# Gemfile gem 'sitemap_generator'
sitemapをインストールして設定ファイルを生成する
$ bundle exec rake sitemap:install #=> config/sitemap.rbが生成される
設定
生成された設定ファイルにsitemapに出力するパスなどを記述する
ここでSitemapGenerator::Sitemap.adapter
にS3Adapter
を指定するとCarrierwaveを使わずに指定S3へアップロードできる
# config/sitemap.rb # 自分のサイトURL SitemapGenerator::Sitemap.default_host = "http://hoge.com" # アップロード先になるS3のURL SitemapGenerator::Sitemap.sitemaps_host = "https://BUCKETNAME.s3.amazonaws.com/" # アプリケーション内のsitemap生成先ディレクトリ SitemapGenerator::Sitemap.public_path = 'public/' # sitemap配置ディレクトリ SitemapGenerator::Sitemap.sitemaps_path = 'sitemaps/' # S3Adapterを利用してS3へアップロードする SitemapGenerator::Sitemap.adapter = SitemapGenerator::S3Adapter.new({ fog_provider: 'AWS', fog_directory: BUCKETNAME, fog_region: REGION, aws_access_key_id: ACCESS_KEY_ID, aws_secret_access_key: SECRET_ACCESS_KEY }) SitemapGenerator::Sitemap.create do Article.find_each do |article| add article_path(article), lastmod: article.updated_at, changefreq: 'daily' end end
参考:ECサイトの開発運用に必要になった技術メモ: Railsでsitemap_generator使ってS3にサイトマップを作成する方法
確認
sitemapの生成はrake sitemap:refresh
rake sitemap:refresh:no_ping
のようにするとGoogleなどの検索エンジンに更新通知せずに、sitemapだけ更新できる
$ bundle exec rake sitemap:refresh:no_ping #=> public/sitemaps/sitemap.xml.gzが生成される(public_path + sitemaps_path + sitemapファイル)
周辺設定
/sitemap.xml.gzにアクセスされたら、S3上のsitemapにリダイレクトさせる設定を追加
# config/routes.rb get 'sitemap.xml.gz', to: redirect('https://BUCKETNAME.s3.amazonaws.com/sitemaps/sitemap.xml.gz')
public/robots.txtファイルにsitemapの場所を指定することで、検索エンジンにsitemapの参照場所を伝えることができる
# robots.txt Sitemap: https://BUCKETNAME.s3.amazonaws.com/sitemaps/sitemap.xml.gz
参考:robots.txt ファイルについて - Search Console ヘルプ
参考:robots.txtファイルでサイトマップの場所を指定 - Google Search Consoleの使い方(旧ウェブマスターツール)