( ..)φメモメモ
FacebookのOGPのメタデータを収集するクローラは、Accept: */*でリクエストを送ってくるようだ。普通のWebブラウザではAccept: text/htmlが入ると思うけど、これを前提にした実装になっているとクローラに対してWebアプリが正しいHTMLを返さず、OGPを拾ってくれない場合がある。
トップページだけOGPが反映されなくてかなり悩んだ。このページはRailsでURLの拡張子に応じてHTMLとRSSを出し分けるように実装していた。
class TopController < ApplicationController
def index
respond_to do |format|
format.rss { render layout: false }
format.html { render }
end
end
end
respond_toとかを使う際には、routes.rbのdefaultsオプションでデフォルトのformatを必ず指定するようにしよう。
root to: 'top#index', defaults: { format: :html }
あるいはコントローラでこうしちゃうか。(よくないかも)
class ApplicationController < ActionController::Base before_filter :default_request_format def default_request_format request.format = :html if request.format == '*/*' end end