メインコンテンツに移動

Drupalとメタタグ

こんにちは。
ぴころじーの竹川です。

ついこの前、Drupalでメタタグを設定する際の相談がありました。

Drupalには、デフォルトでメタタグを設定できる機能がありません。そのため、メタタグを設定するためのモジュールが用意されています。

Metatagモジュール

こちらのモジュールを使用すると、メタタグ各種を設定することができます。

しかし、モジュールを利用せずに、メタタグを設定したい。という、要望があったとき、はてこれどうしようかとなったお話です。

まず先に、実装可能なのか?というお話ですが、実装自体は可能です。メタタグを設定したいページ(URL)単位で設定することができます。ただ、すこ~しだけめんどくさいかもしれません。ですが、簡潔明瞭です。

実装方法

テーマのhtml.html.twigのheadタグ内に通常通りのメタタグを埋め込んでいきます。このとき、何らかの条件で分岐をします。手っ取り早くできるのはURLごとに分岐をすることです。

実装手順

今回設定したDrupalのテーマはbootstrap barrio 5で、そのサブテーマを作成して使用しました。(bootstrap barrioがデフォルトで用意しているサブテーマとは別です。)

内容は次のようになります。(headタグのみ抜き出しました。)

<head>
   <head-placeholder token="{{ placeholder_token|raw }}">
   <title>{{ head_title|safe_join(' | ') }}</title>
   <css-placeholder token="{{ placeholder_token|raw }}">
   <js-placeholder token="{{ placeholder_token|raw }}">
   {% if path('<current>') == "/node" %} {# フロントページ #}
       <meta name="description" content="◯◯のオフィシャルサイトです。" />
   {% elseif path('<current>') == "/page1" %}
       <meta name="description" content="page1のdescriptionです。" />
   {% elseif path('<current>') == "/page2" %}
       <meta name="description" content="page2のdescriptionです。" />
   {% elseif path('<current>') == "/page3" %}
       <meta name="description" content="page3のdescriptionです。" />
   {% else %}
       <meta name="description" content="それ以外" />
   {% endif %}
</head>

path('<current>')を利用して、URLごとに分岐しています。フロントページは、デフォルトで/nodeです。

このようにすれば、特定のページに対して必要なメタタグの設定ができます。賛否両論のある議題ですが、制約を課されている中で実装してみました。

他にもいくつか方法がありそうですが、分かりやすく、メンテナンスしやすい方法だと思います。