( ..)φメモメモ
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