J'utilise le balisage Schema.org pour un Person
, mais l'outil Rich Snippet Testing Tool de Google donne des résultats incohérents lorsque j'utilise un tag <a>
par rapport à un tag <span>
. Prenons ces deux exemples:
<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>
La première montre que le nom est analysé comme suit: username
, mais lorsque j'ai essayé d'enregistrer le second en HTML, le nom d'utilisateur est http://example.com/user/username
- c'est-à-dire l'URL du lien.
Pourquoi cela se produit-il et est-ce un comportement correct? Je ne trouve aucune ressource qui fasse la distinction entre itemprop
sur un lien et un span
.
Oui, ce comportement est correct. Section 5.4 de la spécification W3C Microdata décrit quelle valeur est utilisée.
Dans la plupart des cas, le contenu de l’élément est utilisé en tant que valeur itemprop
, mais dans certains cas, la valeur d’un attribut est utilisée en tant que valeur itemprop
.
C'est le cas de ces six attributs¹: content
², src
, href
, data
, value
, datetime
.
Si vous souhaitez utiliser le contenu d'un élément a
(au lieu de l'URL dans son attribut href
) comme valeur de propriété, vous devez utiliser/ajouter un élément parent ou enfant approprié:
<a href="ignored-url"><span itemprop="property">property value</span></a>
<span itemprop="property"><a href="ignored-url">property value</a></span>
Si vous souhaitez fournir une URL en tant que valeur de propriété, vous devez utiliser itemprop
sur l'un des éléments de propriété d'URL = (ie, les éléments qui peuvent³ ont un attribut href
, src
ou data
). Donc, cela ne serait pas valide (sauf si vous voulez fournir une chaîne sous forme de valeur qui ressemble à une URL):
<!-- INVALID --> <span itemprop="property">http://example.com/foo</span>
¹ Il doit être valide pour que l'élément ait cet attribut. Donc, pour un (invalide!) <div href="" itemprop=""></div>
, le contenu de l'élément est utilisé, pas la valeur href
.
² Dans les anciennes spécifications de microdonnées des groupes WHATWG et W3C, seul l'élément meta
peut avoir l'attribut content
, mais la nouvelle spécification des microdonnées du W3C (actuellement un brouillon) autorise content
sur n'importe quel élément. Si un élément a un attribut content
et l'un des autres attributs répertoriés, content
est utilisé.
³ Microdonnées le rend invalide pour avoir l'un des éléments de propriété d'URL sans leur attribut URL respectif (c'est-à-dire, href
, src
, data
), à l'exception de l'élément link
(mais HTML requiert déjà l'attribut href
).