陸マイラーの始め方。目指せ年間30万マイル!!
ここ数年、飛行機に全く乗らずして1年で30万マイルも稼ぎ出す「陸マイラー(おかマイラー)」が多数誕生しているのをご存知でしょうか?

Article(記事)の構造化データのmainEntityOfPageには何を指定すれば良いのか⚡

このエントリーをはてなブックマークに追加

ウェブサイトのコンテンツ情報をGoogleをはじめとした検索エンジンに的確に伝えるための手段である構造化データ。この構造化データが正しく記述されているかどうかをチェックするためのツールがGoogleから提供されています。それが「構造化データテストツール」です。

過去にウェブサイトのHTML5化やAMP対応を行った頃には頻繁にチェックしていましたが、最近はあまり見ていませんでした。ふと本サイトの記事をチェックしてみると以下のようなエラーが指摘されていました。

SEO_mainEntityOfPageのエラー

mainEntityOfPageのところで、赤字で「は identifier プロパティの認識される有効なターゲット タイプではありません。」とエラーとなっています。主語がどれを指しているのか不明ですが、「有効なターゲットタイプではない」という指摘から察するに、「@type」を「WebPage」としているところに問題がありそうです。

mainEntityOfPageとは

そもそもmainEntityOfPageとは何なのでしょうか。http://schema.org/mainEntityOfPageに記載されている「background notes」を見ると、以下のような記述があります。

mainEntityOfPage "Indicates a page (or other CreativeWork) for which this thing is the main entity being described."

Many (but not all) pages have a fairly clear primary topic, some entity or thing that the page describes. For example a restaurant's home page might be primarily about that Restaurant, or an event listing page might represent a single event. The mainEntity and mainEntityOfPage properties allow you to explicitly express the relationship between the page and the primary entity.

Related properties include sameAs, about, and url.

The sameAs and url properties are both similar to mainEntityOfPage. The url property should be reserved to refer to more official or authoritative web pages, such as the item's official website. The sameAs property also relates a thing to a page that indirectly identifies it. Whereas sameAs emphasises well known pages, the mainEntityOfPage property serves more to clarify which of several entities is the main one for that page.

mainEntityOfPage can be used for any page, including those not recognized as authoritative for that entity. For example, for a product, sameAs might refer to a page on the manufacturer's official site with specs for the product, while mainEntityOfPage might be used on pages within various retailers' sites giving details for the same product.

about is similar to mainEntity, with two key differences. First, about can refer to multiple entities/topics, while mainEntity should be used for only the primary one. Second, some pages have a primary entity that itself describes some other entity. For example, one web page may display a news article about a particular person. Another page may display a product review for a particular product. In these cases, mainEntity for the pages should refer to the news article or review, respectively, while about would more properly refer to the person or product.

日本語に翻訳するとこんな感じです。

mainEntityOfPageはページ(またはその他のCreativeWork)が主に何について書かれているものなのかを指し示します。

多くのページでは(全てではありませんが)、そのページに関する極めて明確なメインとなるトピックが存在します。例えば、レストランのホームページには、そのレストランに関するメインとなる情報のページや、各種イベントをリストアップしたページなどが記載されていることでしょう。mainEntityとmainEntityOfPageプロパティは、ページとメインとなるエンティティ間の関係性をあなたが明示的に指定するために用いられます。

関連するプロパティには、sameAsabouturlがあります。

sameAsおよびurlプロパティはどちらもmainEntityOfPageと同じです。urlプロパティはよりオフィシャルなウェブページを参照するために用いられるべきでしょう。sameAsプロパティもまた間接的に特定するページに関連しています。sameAsはウェルノウンなページを意味し、mainEntityOfPageプロパティは複数存在するエンティティの中でどれがそのページのメインとなるエンティティかを明確化するために用いられます。

mainEntityOfPageはいかなるページでも使用することが出来ます。そのエンティティの公式ページでなくとも構いません。例えば、とある製品において、sameAsはその製品の製造者のオフィシャルサイトを参照する一方で、mainEntityOfPageは同じ製品に関する詳細な情報を提供する様々な小売店のサイトのページで用いられます。

aboutはmainEntityと基本的に同じですが、2つの重要な違いがあります。一つ目は、aboutは複数のエンティティやトピックスを参照することができますが、mainEntityはメインの一つだけに用いられるべきという点です。二つ目は、some pages have a primary entity that itself describes some other entity. 例えば、あるウェブページが特定の人物に関するニュース記事だとしましょう。別のページには特定の製品に関するレビューが書かれています。この場合、これらのページのmainEntityはニュース記事なのかレビューなのかを指し示すのに対し、aboutは人物なのか製品なのかを指し示すために用いられます。

意味わかりました?わからないですよね。こういう時はGoogle検索してみるのが良さそうです。検索にヒットしたページをいくつか読むと何やら諸説入り乱れているのがわかります。

mainEntityOfPageはそのページのメインとなる構造化データ?

いくつかのサイトでは「mainEntityOfPageはそのページに記載されている複数の構造化データのうち、最も重要な構造化データを指定する」と書かれています。例えば、映画に関するウェブサイトにおいて、映画情報の構造化データであるMovieとともに、参考情報としてその映画が上映されている映画館情報の構造化データ MovieTheaterの両方が書かれている場合に、検索エンジンがこのページは映画館に関するページだと誤解しないように、明示的に映画(Movie)を指定するというものです。

この説が正しいとすれば、確かに本サイトの記事にはArticleの構造化データがあるだけで、mainEntityOfPageに対して以下のように指定しているWebPageの構造化データは存在しません。※JSON-LD形式

"mainEntityOfPage":
{
"@type": "WebPage",
"@id": "http://ana-jal-creditcard.com/Flight/●●●.php"
}

は identifier プロパティの認識される有効なターゲット タイプではありません。」というエラーも納得です。

ではなぜ、WebPageなどと指定していたのでしょうか?それはhttp://schema.org/mainEntityOfPageのサンプルコードとして以下のように記述されていたためです。

"mainEntityOfPage":
{
"@type": "WebPage",
"@id": "http://cathscafe.example.com/"
}

これにならって、@typeをWebPage、@idにURLを指定するよう解説しているページが多数ありました。なぜ@idがURLになるのかは謎ですが、公式サイトのサンプルがそうなっているのですから、それなりに説得力のある解説です。

そこで、@typeにWebPageではなく、Articleを指定してみました。ところが、ひとたびArticleを指定すると、Articleに必須または推奨とされているプロパティを指定せよと一斉に警告してきます。その中にはmainEntityOfPageも含まれています。これでは無限ループに陥ってしまいます。

いっそmainEntityOfPageを無くしてみた場合

なにやら混乱してきたので、思い切ってmainEntityOfPageを削除してみました。すると、以下のように「mainEntityOfPage」は推奨フィールドです。値があれば指定してください。という警告が出てしまいました。

mainEntityOfPage未指定時

エラーではなく警告(Warning)なので、このままでも問題無いと思われますが、BugとかErrorとかWarningとかが気になって仕方が無い性分な人にとってはこの警告は苦痛以外の何物でもありません。

とりあえずmainEntityOfPageを復活させておきます。

コードスニペットだとエラー検出されない

さらにGoogle検索を進めると、「構造化データテストツールにおいてURL指定ではなくコードスニペットでチェックするとエラーは検出されないので、このエラーは無視しても良い」というものがありました。

チェック対象となるページのURLを指定して、構造化データテストツールに実際のページへアクセスさせて構造化データをチェックするのではなく、ページのHTMLコードをコピペしてチェックするのがコードスニペットです。上述通り、コードスニペットでチェックさせると確かにエラーは検出されませんでした。やはり無視で良いのでしょうか。

mainEntityOfPageはCanonical URL

さらにGoogle検索を続けていると、Google開発者向けサイトのProperty list for article structured data (Article構造化データのプロパティ一覧)に以下のような記述があるのを発見しました。

mainEntityOfPage
URL; recommended (AMP), ignored (non-AMP)

The canonical URL of the article page. Specify mainEntityOfPage when the article is the primary topic of the article page.

これを日本語にすれば、「mainEntityOfPageはAMPページでは指定推奨、非AMPページでは無視。記事ページのCanonical URLを指定。」となります。

Canonical URLとはAMP対応のページの元となるページ(基本的には非AMPページ)のURLの事を指します。何という事でしょう。mainEntityOfPageにはこのCanonical URLを指定しろと明記されているではありませんか。

そこで構造化データのmainEntityOfPageプロパティを次のようにシンプルに記述してみました。

"mainEntityOfPage": "http://ana-jal-creditcard.com/Flight/●●●.php"

すると以下の通り、めでたくエラーが解消されました。

mainEntityOfPageのエラーが解消した状態

まとめ

記事(Article)スキーマにおける構造化データのmainEntityOfPageプロパティは、http://schema.org/mainEntityOfPageのサンプルのように、「@type」や「@id」を指定するのではなく、単純に非AMPページを参照するCanonical URLを指定すればOKのようです。このmainEntityOfPageプロパティはAMPページでのみ有効で、非AMPでは無視されます。

 他の陸マイラーさんたちはこちら 
にほんブログ村へ
マイレージ ブログランキングへ
カンポ・デル・パンターノ
作成日 2017年08月06日 20時57分
更新日 2017年08月16日 23時07分
6225文字
このエントリーをはてなブックマークに追加