metaタグを動的に作成する

ruby Ruby
rails Rails

動的ページのメタタグを作成したい

HTMLの<head>~</head>のメタタグを商品ページ等動的に作られたページに
固有のタグを入れたい。
今回入れるのは keywordsとdescription

まず共通で作っていたヘッダの定義を見てみると、

_head.haml
~~~前略~~~
!= meta_data_tags
~~~後略~~~

となっており、ここでmetaタグを作っている見たい

実装してみる

まずはhelperにデフォルトのmetaタグを作成する

helper.rb
~~~前略~~~
  def meta_data
    if (defined? my_meta_data)
      my_meta_data
    else
      ({
          keywords: "default keyword",
          description: "default Description",
      })
    end
  end

続いて動的ページを作成するControllerで読み込んだページ毎のmetaを上書きする。

xxx_controller.rb
  helper_method :my_meta_data

  private
    def search_items(item_id)
      @item = Items.find(item_id)
    end
    def my_meta_data
      if @item.present?
        ({
          keywords: @item.keywords,
          description: @item.description,
        })
      else
        ({
            keywords: "",
            description: "",
        })
      end
    end

テーブルには事前にkeywordsとdescriptionを作成し、
商品毎のkeywordとDescriptionを登録すれば、
新しい商品を追加するときもRecordを追加するだけで対応可能。

my_meta_dataが作られていなければ、defaultのkeywordとDescriptionが設定される。

生成されたHTMLはこんな感じ

・動的に取得しないページ

test.html
<head>
  <meta name="keywords" content="default keyword">
  <meta name="description" content="default Description">

</head>

・itemから取得したページ

test.html
<head>
  <meta name="keywords" content="アイテムのkeyword">
  <meta name="description" content="アイテムのDescription">

</head>