【Rails】TwitterのOGPを設定する


Gemなしです。

TwitterのOGPを表示させるために必要なmetaタグについては以下の記事を参考にしました。
【2020年版】Twitterカードとは?使い方と設定方法まとめ

実装

app/helper/application_helper.rb
def full_title(page_title = '')
  base_title = 'MC BATTLE CHANNEL'
  if page_title.empty?
    base_title
  else
    "#{page_title} | #{base_title}"
  end
end

def full_url(path)
  domain = if Rails.env.development?
             'http://0.0.0.0:3000'
           else
             'https://mcbattle-ch.jp'
           end
  "#{domain}#{path}"
end
app/views/layouts/application.html.erb
<head>
  <!-- ogp -->
  <meta name="twitter:card" content="summary_large_image" />
  <meta name="twitter:site" content="@McBattleChannel" />
  <meta property="og:title" content="<%= full_title(yield(:title)) %>" />
  <meta property="og:url" content="<%= request.url %>" />
  <meta property="og:description"
    content="<%= content_for?(:description) ? yield(:description) : 'MCバトルの総合サイトです。' %>" />
  <meta property="og:image"
    content="<%= content_for?(:image_url) ? yield(:image_url) : full_url('/assets/other/ogp_default.png') %>" />
app/views/hoge/fuga.html.erb
<%= content_for(:title, "この個別ページのタイトル!") %>
<%= content_for(:description, "この個別ページの説明文!") %>
<%= content_for(:image_url, full_url("assets/mc/hoge.img")) %>

本番環境で表示されない場合

ステージング環境では表示されて、本番環境では表示されない場合、たぶんOGPのキャッシュが原因です。
以下の「OGPの表示を確認するツール」を使うと、表示確認と同時にキャッシュがクリアされます。
https://cards-dev.twitter.com/validator