search
LoginSignup
12

More than 1 year has passed since last update.

posted at

updated at

Heroku + Rails + S3でサイトマップを設置

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をインストールする

Gemfile
gem 'sitemap_generator' #サイトマップ作成用
gem 'aws-sdk' #AWS接続用
$ bundle install

サイトマップ用の設定ファイルを作る

$ rails sitemap:install

以下のように書き換える

config/sitemap.rb
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

ルーティングを追加する

config/routes.rb
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行を追加

public/robots.txt
Sitemap: https://example.com/sitemap

Google Search Consoleにサイトマップの場所を登録する

Search Consoleにログイン後、画面左のサイドバーから「サイトマップ」を選択し、それっぽいところにURLを入力して送信します。

参考

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
12