Herokuを使うと、サイトマップの設置がめんどいです。
レンタルサーバー時代はweb上の適当なツールで自動生成して、FTPでアップロードするだけの超単純な作業だったのですが、今回は色々と大変でした。
とは言えやり方がわかってしまえばそこまで大変な作業ではないので、今後のために手順をまとめておきます。
##全体の流れ
- AWSのアカウントを作る
- S3のバケットを作る
- アクセスキー、シークレットアクセスキーを取得する
- 環境変数を登録する
- gemをインストールする
- サイトマップ用の設定ファイルを作る
- ルーティングを追加する
- サイトマップをS3にアップロードする
- robots.txtを編集する
- Google Search Consoleにサイトマップの場所を登録する
環境変数登録の部分から説明していきます。
アクセスキーの取得までは、「S3 バケット作成」等でググって頑張ってください。
##環境変数を登録する
ローカル、Herokuそれぞれに、以下の3つの環境変数を登録します。
AWS_ACCESS_KEY_ID
:AWSのアクセスキー
AWS_SECRET_ACCESS_KEY
:AWSのシークレットキー
S3_BUCKET_NAME
:作成したバケットの名前
私の場合、ローカルはdotenv-rails
を使い、Herokuは管理画面上から登録しました。
##gemをインストールする
gem 'sitemap_generator' #サイトマップ作成用
gem 'aws-sdk' #AWS接続用
$ bundle install
##サイトマップ用の設定ファイルを作る
$ rails sitemap:install
以下のように書き換える
SitemapGenerator::Sitemap.default_host = 'https://example.com'
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
#ここからサイトマップに登録したいページのパスを書いていく
add root_path
add mcs_genre_path
mcs = Mc.all
mcs.each do |mc|
add mcs_detail_path(mc_id: mc.id)
end
add rankings_p_line_path
add comments_path
.
.
end
##ルーティングを追加する
get '/sitemap', to: redirect("https://s3-ap-northeast-1.amazonaws.com/#{ENV['S3_BUCKET_NAME']}/sitemaps/sitemap.xml.gz")
##サイトマップをS3にアップロードする
ここまでの変更をHerokuにデプロイした後、以下のコマンドを打ち込むと、サイトマップが作成されS3に保存されます。
$ heroku run rails sitemap:refresh
※S3のパブリックアクセスの設定が上手くできていないとエラーが発生するので注意。
AWS S3で「Access Denied」を解決する
##robots.txtを編集する
以下の1行を追加
Sitemap: https://example.com/sitemap
##Google Search Consoleにサイトマップの場所を登録する
Search Consoleにログイン後、画面左のサイドバーから「サイトマップ」を選択し、それっぽいところにURLを入力して送信します。
##参考