web-dev-qa-db-fra.com

Itemprop a-t-il une signification différente sur les liens par rapport aux balises span?

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.

6
DisgruntledGoat

Que dit la spécification

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.

Qu'est-ce que cela signifie en pratique

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).

8
unor