読者です 読者をやめる 読者になる 読者になる

直径1.5メートル

ひよっこエンジニアのちょっとしたメモ。主に備忘録。

【Rails】sitemap_generatorでsitemapを生成して、S3AdapterでS3にアップロードする

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.adapterS3Adapterを指定すると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の使い方(旧ウェブマスターツール)