web-dev-qa-db-ja.com

itempropはリンクとspanタグで異なる意味を持っていますか?

PersonにSchema.orgマークアップを使用していますが、<a>タグと<span>タグを使用すると、Googleのリッチスニペットテストツールで一貫性のない結果が得られます。次の2つの例を見てください。

<span itemprop="author" itemscope itemtype="http://schema.org/Person">
  <a href="http://example.com/user/username">
    <span itemprop="name">username</span>
  </a>
</span>
<span itemprop="author" itemscope itemtype="http://schema.org/Person">
  <a href="http://example.com/user/username" itemprop="name">username</a>
</span>

最初のものは名前がusernameとして解析されることを示していますが、2番目のものをHTMLで保存しようとしたときに、ユーザー名がhttp://example.com/user/username-つまりリンクのURLであることを示しています。

なぜこれが起こりますか、それは正しい動作ですか?リンク上のitempropspanを区別するリソースが見つかりません。

6
DisgruntledGoat

仕様に書かれていること

はい、その動作は正しいです。 セクション5.4 W3C Microdata仕様のどの値が使用されるかを説明しています。

ほとんどの場合、要素のコンテンツはitemprop値として使用されますが、場合によっては、属性の値がitemprop値として使用されます。

これは、これらの6つの属性¹の場合です:content²、srchrefdatavaluedatetime

これが実際に意味すること

プロパティ値としてa要素のコンテンツ(href属性のURLの代わりに)を使用する場合は、適切な親または子要素を使用/追加する必要があります。

<a href="ignored-url"><span itemprop="property">property value</span></a>
<span itemprop="property"><a href="ignored-url">property value</a></span>

プロパティ値としてURLを提供する場合は、 URLプロパティ要素のいずれかでitempropを使用する必要があります (つまり、 hrefsrc、またはdata属性を持つことができる要素)。したがって、これは無効になります(URLのように見える値として文字列を提供したい場合を除く)。

<!-- INVALID --> <span itemprop="property">http://example.com/foo</span>

¹要素がこの属性を持つことは有効でなければなりません。 (無効!)<div href="" itemprop=""></div>の場合、href値ではなく、要素のコンテンツが使用されます。

²WHATWGおよびW3CのMicrodataの古い仕様では、 meta要素のみがcontent属性を持つことができます ですが、新しいW3C Microdata仕様(現在は草案)では、任意の要素でcontentが許可されます。要素にcontent属性があり、リストされている他の属性のいずれかがある場合、contentが使用されます。

³Microdata 無効にするURLプロパティ要素の1つを、それぞれのURL属性(つまり、hrefsrcdata)、link要素を除きます(ただし、href属性を持つことはHTMLで既に必要です)。

8
unor