hentryの「author,entry-title,updatedがありません」の対処法

WordPressサイトをGoogle Serach Consoleの構造化データで見ると下記のエラーが表示することがあると思います。

authorがありません entry-titleがありません updated がありません Serach Console

hentryのmicrofomats.orgのマークアップが足りない、という意味ですが、構造化テストツール使用するも目立ったエラーがありません。

ツール内右のhentryをクリックし記述箇所に移動すると、クラス属性(「class=””」)のひとつだとわかりますが、意味がわかりません。
hentryには、どのような役割があるのでしょうか。

目次

  1. hentryとは
  2. hentryのあるclassをすべて消す
  3. hentryのみ削除するPHP
  4. hentryのマークアップ方法
    1. authorがありませんの対処
    2. entry-titleがありませんの対処
    3. updatedがありませんの対処
  5. 解決後のテスト結果

1.hentryとは

hentryは、構造化マークアップ方法の一つ「hatom」のタイプです。

構造化マークアップとは、サイトを巡回している検索ボットにサイトの細かい情報を与える「microformats.org」の設定をするためのマークアップ(HTMLに書く)方法です。
microfomatsについて(原文英語→日本語版できていました。)

WordPressのテーマの中には、hentryを採用し構造化マークアップをしているものがあります。
hentry自体は、「post_class();」からclass名として呼び出されているclass属性です。

主にdivタグやspanタグに記述し、各情報タイプごとのclass名を記入しています。

hentry:記事の内容、articleタグなどに記述
entry-title:タイトル
entry-content:記事内容
published:公開日
updated:更新日
author:著者
tag:タグやカテゴリー(URL)
bookmark:ブックマーク

特定の情報(例えばタイトル、公開日、電話番号など)を検索エンジンに提供します。
hentryの役割はMicrodataでいうところのitemscope、すなわち構造化の宣言です。

1つのWEBサイトにitemscopeあるいはhentryなど、どれか1つ構造化のマークアップがあれば問題ありません。しかしWordPressのテーマによっては、hentryの記述のみがあり肝心のプロパティがないゆえにエラー表示されます。

まとめると、hentryは構造化の宣言であり、class属性なのでclassとして記述する。記述したらauthorなど必須のプロパティを記述しなくてはならない。

さて、hentryエラーの解決方法は3つあります。

class名hentryの削除、function.phpに追記し削除、hentryの足りないプロパティを追加です。次から順を追って説明します。

2.hentryのあるclassをすべて消す

「post_class()」関数を探し削除する方法です。この関数は全てのclass属性を呼び出すWordPressの関数です。記事内のHTMLからarticleタグを見つけると次のように記述しています。

<article id="ex" class="post- post type- status- format- hentry category- category-">

ここからclass属性のhentryのみ削除したいと思います。
PHPファイル(single.php)では下記のように記述されています。

<article id=""  <?php post_class(); ?>>

ここから<?php post_class(); ?> を削除し、 <article id=""> 
にします。

しかしclass属性が全削除されるので、CSSが反映されずデザインが崩れてしまいます。
そこであらかじめclassをコピーしておき、<?php post_class(); ?> を削除、その後にコピーしておいたclass=””をペーストします。

<article id="" class="post- post type- status- format-  category- category-">

このようにhentry以外のclass名を追記します。  

3.hentryのみ削除するPHP

こちらのコードを参考にしてください。変更前にバックアップ推奨です。

function remove_hentry( $classes ) {
	$classes = array_diff( $classes, array( 'hentry' ) );
	return $classes;
}

add_filter( 'post_class','remove_hentry' );

hentryのみ消えます。挿入箇所はPHPファイル「function.php」の一番下です。もしエラーが表示されたり、サイトが真っ白になったら削除します。  

4.hentryのマークアップ方法

hentryを削除せず、hentryが反映されるclass名を追記して構造化をマークアップしていく方法です。

海外では消さずにマークアップしていく傾向にあるようです。
検索エンジンのbotが登録しやすくなるなら追加していった方がいいかもしれません。

基本は個別記事に対しては「single.php」、トップページなら「index.php」とエラーが起きたページにマークアップしていきます。

WordPressのテーマによってエラー箇所が異なるかもしれませんが、PHPファイル内のhtmlタグから該当する箇所にclass名を追記していきます。

(下記では「single.php」ファイル編集)

4-1.authorがありませんの対処

authorの場合は、「get_the_author() 」か「itemprop=”author”」を探します。 「F+Ctrl」でauthorの単語で見つかります。 該当箇所はauthorの情報が出力されるコードです。 私の場合は

<span class="meta-top__author" itemscope itemtype="http://schema.org/Person" itemprop="author"> 
中略
<meta itemprop="name" content="<?php echo esc_attr( get_the_author() ); ?>"> </span>

「get_the_author()」のphpを囲うspanタグにclass名を追記します。

class属性「vcard author」と「fn」が必須です。
新たにタグを追記し「vcard author」の中に「fn」のあるタグを囲まないと(入れ子にする)反映されません。
つまり下記のようにspanタグとclass名を追記します。

<span class="vcard author">
<span class="meta-top__author fn" itemscope itemtype="http://schema.org/Person" itemprop="author">

中略
<meta itemprop="name" content="<?php echo esc_attr( get_the_author() ); ?>"> </span>
</span>

4-2.entry-titleがありませんの対処

php関数の「the_title();」を探してもいいですが、必ずしも該当の見出しに当たらない(パンくずリストやnavタグ(ナヴィゲーション)に入っているサイトもある)ので、h1タグを探すと見つけやすいです。

 <h1 class="post__title" itemprop="headline"><?php the_title(); ?></h1>

entry-titleのclass名を追記します。

<h1 class="post__title entry-title" itemprop="headline"><?php the_title(); ?></h1>

4-3.updated がありませんの対処

投稿日はdateの単語を探すかtimeタグを探すと該当箇所にたどり着きます。
私の場合はtimeタグでした。

<time class="meta-top__date" datetime="" itemprop='datePublished'>2017---- </time>

ここにupdatedを追記します。

<time class="meta-top__date updated" datetime=""  itemprop='datePublished'>2017---- </time>

5.解決後のテスト結果

エラー表示のclass名をすべて記述すると、エラーがなくなり構造結果が情報ごとに表示されるようになりました。

hentry   エラーなし  警告なし

@type
hentry
entry-title
hentryエラーの対処法
updated
2017年1月7日
author
@type
hcard
fn
by nora
(Visited 102 times, 1 visits today)

Leave a Reply

Your email address will not be published. Required fields are marked *