DrupalのOGP設定

DrupalからFacebookへのフィード内容を指定するためのモジュールを紹介したことがあるのですが、他のモジュールとの競合があったみたいでホワイトスクリーンになってしまったことがあります。

その後バージョンアップされているので改善されていると思われますが、モジュールを使わなくても、pageテンプレートにmetaタグを自分で組み込めば、OGPの設定は簡単にできてしまいます。こんな感じです。

<?php
if ((arg(0) == 'node') && is_numeric(arg(1))) {
$args[0] = arg(1);
$node_id = $args[0];
$node = node_load($node_id)
;?>
<meta property="fb:app_id" content="自分のアプリID">
<meta property="og:locale" content="ja_JP" />
<?php print '
<meta property="og:title" content="' . $head_title . '" />
<meta property="og:image" content="http://example.com/' . ($node->field_images[0]['filepath'] ? $node->field_images[0]['filepath'] : '/logo.png') . '">
<meta property="og:description" content="' . mb_strimwidth(strip_tags($node->body),0,230) . '…" />
<meta property="og:type" content="article" />
<meta property="og:url" content="http://example.com/' . $node->path . '">' ;  ?>

  • 最初の部分はpageテンプレートに、nodeの情報を引っ張りだすための呪文です。
  • og:imageはimagesフィールドに画像があればその画像(複数画像の場合は最初の画像)を、なければサイトのロゴを表示するようにしています。
  • og:descriptionは本文からHTMLタグを取っ払って冒頭の230文字の抽出していますが、230文字に意味はあまりなくて、もっと少なくていいのかも知れません。
  • og:typeはサイトの特性により設定してください。
  • og:urlに$node->pathを設定していますが、この変数を有効にするにはPath Autoモジュールでnodeのパスを自動エイリアス設定しておく必要があります。

あとはFacebookのデバッガーでエラーがでていないかチェックして完了です。

ちなみに、上記はnodeだけが対象になり、フロントページやViewsのページは考慮していませんが、Facebookへ正確にフィードする必要があるのはnodeだけで構わないかも知れません。

追記:2016/7/7

Drupal7対応はこちらを参照してください。