redirect_toのレスポンスコードをデフォルトで302 Foundではなく301 Moved Permanentlyにする

301リダイレクトと302リダイレクトの違い

301リダイレクトと302リダイレクトの違いから301リダイレクトと302リダイレクトの違いは、

301リダイレクトは、”Permanent Redirect”で「恒久的な転送」、一方、302リダイレクトは、”Temporary Redirect”で「一時的な転送」を表します。

Railsでは、デフォルトで302が返るようになっています。

変更方法

redirect_to root_path, status: :moved_permanently
redirect_to root_path, status: 301

301をデフォルトにする方法は、

app/controllers/application_controller.rb

class ApplicationController < ActionController::Base
  def redirect_to_with_moved_permanently(options = {}, response_status = {})
    response_status.reverse_merge!(status: :moved_permanently)
    redirect_to_without_moved_permanently(options, response_status)
  end
  alias_method_chain :redirect_to, :moved_permanently
end

上記のようにに変更して、302を返したい時だけ、以下のコードにします。

redirect_to root_path, status: :found
redirect_to root_path, status: 302