【Rails】herokuapp.comから独自ドメインに301リダイレクトを行う方法

WEBアプリを作ってherokuにデプロイしてheroku.comドメインでアクセスできるようになりました。

その後、お名前comで独自ドメインを取得したので、それでもアクセスできるようにしました。
(その時の記事がこちらhttps://pg-happy.jp/domain-heroku-ssl.html

現状は

https://koluku.herokuapp.com/
でも
https://www.koluku.net/

でも同じサイトにアクセスできるようになっています。

2つのドメインで1つのサイトにアクセスできる状況はSEO的に(Google的)に好ましくありません。

Googleクローラーにより重複コンテンツや類似ページとみなされたり、クローリングに時間がかかったりするのはよろしくない訳で、ドメインの正規化(どっちのドメインが重要なのか、統一すること)を行ったほうがよいです。

https://support.google.com/webmasters/answer/139066?hl=ja

これにより検索ユーザーに表示するURLを一意に指定することができます。

今回は

https://koluku.herokuapp.com/
でアクセスしてきた場合に↓に
https://www.koluku.net/
リダイレクトをかけることで正規化を行います。

※まだやっていませんがGoogleサーチコンソール上でサイトを登録してサチコ上で正規ページを指定する方法もあります。

herokuでは.htaccessが効かない

今までサイトを運用してきてapacheサーバーが動いてれば.htaccessファイルを作成して301リダイレクトの記述をすることでクローラーに正規ページを指定することができました。

今回やってみたのですが、結論は駄目でした。herokuってapache動いてないんですね。Railsは初心者なのでpumaサーバーやらsinatraサーバーが動いてるのは理解したのですが、いずれにしても.htaccessファイルが使えなくて絶望していました。

rack-rewriteというgemを使ってやる方法

rackサーバーでリクエスト処理をする方法も見つけました。検索すると出てくるやり方のほとんどがこのgemを使ったやり方でした。

将来的にサーバー移設時にこの手続を忘れてしまうといけないのでプロはこういう行為はやらないそうですが‥

ということで他の方法も探しました。

Railsのコントローラー内でリダイレクト処理

こちらの記事を見つけました。

Railsでherokuapp.comを正しいFQDNへリダイレクトさせる

結論、これで出来たのですが自分がやったやりかたを詳しく書いておきます。

application_controller.rbに追記しました。

class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception


  #herokuapp.comから独自ドメインへリダイレクト
  before_filter :ensure_domain
  FQDN = 'www.koluku.net'

  # redirect correct server from herokuapp domain for SEO
  def ensure_domain
   return unless /\.herokuapp.com/ =~ request.host
  
   # 主にlocalテスト用の対策80と443以外でアクセスされた場合ポート番号をURLに含める 
   port = ":#{request.port}" unless [80, 443].include?(request.port)
   redirect_to "#{request.protocol}#{FQDN}#{port}#{request.path}", status: :moved_permanently
  end
 
 end

FQDNに独自ドメインの文字列を入れています。

herokuapp.comというリクエストじゃなければ(Cloud9とかの開発環境のプレビュー時)だったらそのまま画面に表示されるし、

koluku.herokuapp.comというリクエストだったら、FQDNに入れたドメインにリダイレクトされます。

redirect_toのステータスコードは:moved_permanentlyシンボルを指定しているので、「永続的なリダイレクト」つまり301リダイレクトになります。

これでクローラーにも正規ページの指示が出来ていると思います。

実際にブラウザでkoluku.herokuapp.comにアクセスすると、www.koluku.netに画面が遷移したのでOKでしょう。