WordPressで「投稿ページ」にのみ構造化データのマークアップであるhentryクラスを挿入する方法

Googleのウェブマスターツールには、「構造化データ」という項目があり、HTMLのクラス名などでマークアップされたページの構造化データを見ることができます。

で、先月この項目を見たら、思いっ切りエラーが出ていたので

構造化データのエラー

構造化データエラーが出たときの対策方法テーマに対応させて現在は、エラーが0になっています。(途中のエラーも対策済み)

寝ログ構造化データ

この「構造化データ」、Googleが推奨しているだけで、今のところ特に検索順位には関係ないそうです。ただ、やはり適切にマークアップしてエラーが出ないのが、一番気持ち良いのでエラー0を目指しています。

けれど先日、Simplicityサイトの方で、WordpressにbbPressというフォーラム作成用のプラグインをインストールしたら、またエラーが少し出始めました。

Simplicityサイトの構造化データエラー

これは、フォーラム作成プラグインが、フォーラムやトピックを作成するごとに自動的にページを生成してしまうために起こります。それで何故エラーが出るかというと、フォーラムが生成するページには、hentryマークアップに必要な情報が足りないからです。

ということで、いろいろなプラグインをインストールしても、構造化データエラーが出ないようにするには以下の手順を踏む必要がありそうです。(単にエラーを出さないようにするだけなら構造化データを使用しないという手もある)

  1. 適切にマークアップして欲しい「投稿ページ」では構造化データのマークアップ方法を使ってマークアップを挿入
  2. それ以外のページではhentryのマークアップをしないようにする

1の構造化データのマークアップ方法は、前回書いたので、今回は、「投稿ページ」にのみhentryマークアップを挿入する方法を紹介します。

スポンサーリンク
レクタングル(大)広告

「投稿」と「固定ページ」以外でhentryクラスを挿入しない方法

その方法は、以下のコードをテーマのfunctions.phpに貼り付けるだけです。(※この方法は、投稿ページは、hentryマークアップが挿入されるので、投稿ページには構造化データのマークアップ方法をする必要があります。)

//投稿ページ以外ではhentryクラスを削除する関数
function remove_hentry( $classes ) {
  if ( !is_single() ) {
    $classes = array_diff($classes, array('hentry'));
  }
  //これらのクラスが含まれたページではhentryを削除する
  $ng_classes = array('type-forum', 'type-topic');//ここに追加していく
  $is_include = false;
  foreach ($ng_classes as $ng_class) {
    //NGのクラス名が含まれていないか調べる
    if ( in_array($ng_class, $classes) ) {
      $is_include = true;
    }
  }
  //含まれていたらhentryを削除する
  if ($is_include) {
    $classes = array_diff($classes, array('hentry'));
  }
  return $classes;
}
add_filter('post_class', 'remove_hentry');

この関数は、投稿ページ以外では、Wordpressのpost_class()関数で自動的に挿入される、hentryクラスを除外しています。

あとは、この次のコード以下は、引数にtype-forum、type-topicというクラスが含まれているとhentryを削除する処理です。

$ng_classes = array('type-forum', 'type-topic');//ここに追加していく

こうすることで、bbPressが作成したフォーラムやトピックページでは、hentryが挿入されません。プラグインのインストールにより、独自のクラスが挿入される場合は、上記の配列部分に追記していきます。プラグイン対応は、もっとスマートな方法があるのかもしれませんが、今のところこんな方法しか思いつきませんでした。

参考 ウェブマスターツールの構造化データ(hentry)のエラー対策

動作確認

設定したあと動作を確認してみます。

構造化データエラーのチェックは、Google構造化データ テスト ツールを使えばウェブマスターツールにログインしなくても以下のページでチェックできるので、手軽に試せます。

試しにフォーラムページをチェックしてみるとエラーがなくなりました。

Google Structured Data Testing Tool

※表示されている構造化データは、全ページに挿入されているFacebook OGPと、Twitter Cardsのものです。

まとめ

これでおそらくエラーはなくなると思います。ただ、ちょっと強引な部分もあるのでもう少しスマートな方法を見つけたら、また書きたいと思います。

ウェブマスターツールの構造化データは、クロールされる毎に変更されるので、ページにクロールが来るまでは変化がありません。サイトの規模にもよりますが、エラー対策をしてもすべて反映されるまでには、1週間~4週間程度かかる場合があります

ということで、しばらくウェブマスターツールの経過を見守りたいと思います。