WEBアプリを作ってherokuにデプロイしてheroku.comドメインでアクセスできるようになりました。
その後、お名前comで独自ドメインを取得したので、それでもアクセスできるようにしました。
(その時の記事がこちらhttp://pg-happy.jp/domain-heroku-ssl.html)
現状は
https://koluku.herokuapp.com/
でも
https://www.koluku.net/
でも同じサイトにアクセスできるようになっています。
2つのドメインで1つのサイトにアクセスできる状況はSEO的に(Google的)に好ましくありません。
Googleクローラーにより重複コンテンツや類似ページとみなされたり、クローリングに時間がかかったりするのはよろしくない訳で、ドメインの正規化(どっちのドメインが重要なのか、統一すること)を行ったほうがよいです。
これにより検索ユーザーに表示する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でしょう。