サイトの情報をFacebookに正しく伝え、いいね!やシェアされた際にサイトの情報を表示させるための設定であるOGP(Open Graph protocol)。
いろいろな方法で設定することができますが、WordPressで作られている当ブログではプラグインWP Facebook Open Graph protocolを使っています。
しかし、先日何の気なしにサイトのソースを見たところ、og:typeの設定(というかプラグインの仕様が)がちょっと違っていることに気が付き、WP Facebook Open Graph protocolを修正して対処しました。
(現時点でのWP Facebook Open Graph protocolのバージョンは2.0.7です)
そこでog:typeはどう設定するものなのか、WP Facebook Open Graph protocolをどう修正したのか、などを備忘録的にまとめてみます。
Sponsored Link
og:typeとは何か
OGPの一要素としてそのサイトが何のサイトであるかを提示するもので、その書式は下記のようなメタタグとしてページのhead内に記述します。
<meta property="og:type" content="blog"/>
OGP全般の詳細についてはFacebookの開発者サイトOpen Graph Protocol – Facebook開発者にざっと目を通しておくといいかもしれません。
The Open Graph protocolにもいろいろ書かれていますが公式サイトなのかな?
og:typeに設定できる要素
Open Graph Protocol – Facebook開発者のtypesの段にog:typeに設定できる要素として定義済されたものが列挙されています。
サイトのコンテンツの内容を直接ここに指定するのもあり、ということです。
当ブログでは特定のコンテンツに特化しているわけではないので、「Websites」の項目の要素(つまりblog/website/articleのいずれか)を設定しますが、これには一つのルールがあります。
それは
Use article for any URL that represents transient content – such as a news article, blog post, photo, video, etc. Do not use website for this purpose. website and blog are designed to represent an entire site, an og:type tag with types website or blog should usually only appear on the root of a domain.
とういうこと、つまり
- websiteとblogはドメインルートにのみ設定可能( /wp/ など)
- articleはどのURLにも設定可能
ということです。
ブログに適したog:typeの設定とは
前段の引用に従って考えると、
- トップページにblog(websiteでも誤りではないが、blogとしてのサイトの形態を示すにはblogにすべき)
- トップページ以外のすべてにarticle
を設定することになります。
しかし、WP Facebook Open Graph protocolの仕様では個別ページにarticleが、トップページ及びカテゴリページなどその他のページにwebsiteが設定されていました。
別にサイトにエラー的なものは発生しませんが、上記のルールからは外れていますね。
尚、WordPressで普通の(blogでない)サイトを作ることも当然あるので、websiteが出力される仕様は使用の前提条件の違いということで、誤りではないと思います。
しかし、カテゴリページなどにもwebsiteが設定されているのは、違うなーと。
で、特に難しいロジックでもないので、今回は自分でWP Facebook Open Graph protocolを修正することにしました。
WP Facebook Open Graph protocolをブログ向きに修正する
いよいよ本題です。
WP Facebook Open Graph protocolのog:typeの設定を行う該当箇所(141行目辺り)のオリジナルのソースはこのようになっています。
// do ogp type if ( is_single() ) { $wpfbogp_type = 'article'; } else { $wpfbogp_type = 'website'; }
自分はこれを下記のように直しました(大したことはしてませんが)。
// do ogp type if ( is_home() && !is_paged() ) { $wpfbogp_type = 'blog'; } else { $wpfbogp_type = 'article'; }
ロジック修正のポイントは以下の通り。
- websiteをblogに変更
- blog(website)を出力する条件を「個別ページ以外」から「サイトトップかつその1ページ目」に変更
- articleを出力する条件を「個別ページ」から「サイトトップの1ページ目」に変更
これによって、トップページにのみog:typeにblogが出力され、その他の各エントリやカテゴリページ、サイト内検索結果等ではarticleが出力されるようになりました。
まだ気になっていること
トップページの2ページ目以降( /wp/page/2 等)のページングについてまだすっきりしていません。
トップページの2ページ目以降はarticleとしたのですが、ここはblogの方がいいのかなあ?
ドメインルートではないけれど、トップページの一部であるし・・・と思うわけです。
どなたか正解をご存じの方がいらしたら教えて下さい。
まぁ、どっちでも大きな影響はないのでしょうけどね・・・。