現象
以下のようなソースでレスポンスのフォーマットを振り分けていた際、Facebookなどのクローラーに対しhtmlを返さず、json形式で返してしまうため、OGPがエラーになってしまう。
respond_to do |format|
format.json { render json: user.to_json }
format.html
end
原因
Facebookなどのクローラーは特定のフォーマットを要求しないため、respond_toのブロックを上から順番に実行し、一番上にあるjsonのフォーマットで返してしまう。
対処法
jsonとhtmlの順序を逆に入れ替えればいい。
respond_to do |format|
format.html
format.json { render json: user.to_json }
end