目的
herokuだとsitemapを置けないためs3に置き、そこから読み込みをgoogleにさせる。
仕様概要
- sitemapgeneratorでsitemapを作成
- aws-sdkでs3に保存
- sitemap専用のルーティングを作ってそれをsearchconsoleに送信
- robots.txtにもsitemapの場所を記載
aws-sdkでs3に保存
sitemap.rbにsitemapの置き場所を記載
sitemap.rb
SitemapGenerator::Sitemap.default_host = ""
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_ID'],
aws_secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'],
aws_region: 'ap-northeast-1'
)
SitemapGenerator::Sitemap.create do
# '/articles/:id' を追加する
Post.find_each do |post|
add post_path(post), :lastmod => post.updated_at
end
end
default_hostでwebsiteのURLを登録。sitemaps_hostでsitemapのURLを登録する。
herokuに環境変数登録
$ heroku config:add S3_BUCKET_NAME=bucket_name
$ heroku config:add AWS_ACCESS_KEY_ID=xxxxxxxxxxxxx
$ heroku config:add AWS_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxxx
localはdotenvで環境変数登録
gemのdotenvを入れて環境変数の登録
sitemap専用のルーティングを作る
get '/sitemap' => redirect('https://s3-ap-northeast-1.amazonaws.com/sitename/sitemap.xml.gz')
robots.txtにsitemapの場所を記述
robots.txt
Sitemap: https://sitename/sitemap