子ノードに設定したスキーマは親ノードに反映されない

schema.org のロゴ

schema 2.0 には Web ページのヘッダ部分を示す WPHeader スキーマが存在するのですが、 専用のプロパティが設けられていないため、非常に扱いにくいです。

かろうじて CreativeWork などから継承されたプロパティのいくつかが設定できそうではあるのですが、 それらのプロパティはむしろ、WebSite / WebPage などで設定されるべきプロパティです。

schema 2.0 の WPHeader や WPSideBar の使い道がない- NEAREAL

ただし、スキーマの設定がネストされるとき、下位のスキーマに設定されたプロパティの値が、 上位のスキーマの共通するプロパティにも反映されるのであれば、WPHeader を使う余地があります。

残念?なことに、類似するフォーマットの標準的な解釈では、 上位のプロパティに設定が反映される例はありませんが、念のため検証しました。

子ノードに設定したスキーマのプロパティが、親のノードに設定したスキーマに影響を与えるかどうかを検証します。 検証には Google の構造化データテストツールを使います(現状ではこれ以外に手段がありません)。

結論から述べると、WPHeader に設定した name プロパティは、WebSite の name プロパティとは判断されず、 WPHeader の name プロパティとして解釈されました。

したがって、WPHeader の活用方法がますますなくなっていったことになります。

検証したコードと結果

WPHeader を使わない標準的なマークアップは次のようになります。 このとき、name プロパティは WebSite スキーマのプロパティとして解釈されます。 値は"サイトタイトル"です。

<html itemscope itemtype="http:\/\/schema.org/WebSite">
<body>
<header class="site-header" role="banner">
<h1 class="site-header-title" itemprop="name">
サイトタイトル
</h1>
…
検証したコード (WebSite のみ)

次に WPHeader を使う場合です。この状態で構造化ツールによって解析すると、 WebSite が空のノードとして解釈され、name プロパティは WPHeader のプロパティとして解釈されました。

したがって、WPHeader(ヘッダー) の名前が、"サイトタイトル" であり、WebSite にはタイトルがないと解釈されることになります。

<html itemscope itemtype="http:\/\/schema.org/WebSite">
<body>
<header class="site-header" role="banner"
        itemscope itemtype="http:\/\/schema.org/WPHeader">
<h1 class="site-header-title" itemprop="name">
サイトタイトル
</h1>
…
検証したコード (WebSite のみ)

現実的には、このような設定がされたとしても、このサイトのタイトルは "サイトタイトル" として解釈されるでしょう。 しかしながら、誤ったデータを提供することは絶対的に良くないことです。

WPHeader などの活用方法がますます分からなくなったわけですが、 どなたか画期的な活用方法を提案したり、仕様が変更されることはあるのでしょうか。 いずれにせよ、現時点で積極的に WPHeader などを採用することはありませんね。

Reference