Hat itemprop eine andere Bedeutung für Links als für Span-Tags?

7

Ich verwende Schema.org-Markup für a Person, erhalte jedoch inkonsistente Ergebnisse im Rich Snippet Testing Tool von Google, wenn ein <a>Tag im Vergleich zu einem <span>Tag verwendet wird. Nehmen Sie diese beiden Beispiele:

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

Der erste zeigt, dass der Name analysiert wurde username, aber als ich den zweiten versuchte, in HTML zu speichern, zeigte er, dass der Benutzername http://example.com/user/username- dh die URL des Links - ist.

Warum passiert das und ist es richtig? Ich kann keine Ressourcen finden, die zwischen itempropeinem Link und einem unterscheiden span.

DisgruntledGoat
quelle
Und deshalb bevorzuge ich JSON-LD.
Simon Hayter
1
@ Simon, warum alle Ihre Inhalte in einem JSON-Block wiederholen? Für mich ist es sinnvoll, das vorhandene HTML zu verwenden.
DisgruntledGoat
Da das Schreiben Ihres Inhalts häufig um ein Schema herum nicht selbstverständlich ist, beginnen Sie mehr als häufig mit dem Organisieren und Anzeigen von Seiteninhalten für Google und Bing und nicht für Besucher. JSON-LD ist einfacher zu verwalten und muss nicht mit UX um Ihren Code herum arbeiten. Darüber hinaus kann JSON-LD in Google Tag Manager hinzugefügt werden, was es noch schneller macht und Ihren Server davon abhält, diesen sogenannten GLEICHEN INHALT zu bedienen :)
Simon Hayter
Das ist mir noch nie passiert. Ich füge vorhandenen Elementen Attribute hinzu, füge gelegentlich Wrapper-Elemente hinzu, aber ich musste nie das Design oder UX ändern, um das Schema zu berücksichtigen.
DisgruntledGoat

Antworten:

9

Was die Spezifikation sagt

Ja, dieses Verhalten ist korrekt. In Abschnitt 5.4 der W3C-Mikrodatenspezifikation wird beschrieben, welcher Wert verwendet wird.

In den meisten Fällen wird der Inhalt des Elements als itempropWert verwendet, in einigen Fällen wird der Wert eines Attributs als Wert verwendet itemprop.

Dies ist der Fall für diese sechs attributes¹: content², src, href, data, value, datetime.

Was dies in der Praxis bedeutet

Wenn Sie den Inhalt eines aElements (anstelle der URL in seinem hrefAttribut) als Eigenschaftswert verwenden möchten , müssen Sie ein geeignetes übergeordnetes oder untergeordnetes Element verwenden / hinzufügen:

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

Wenn Sie eine URL als Eigenschaftswert zur Verfügung stellen möchten, verwenden Sie müssen itempropauf einer der URL - Eigenschaft Elemente (dh Elemente , die can³ haben href, srcoder dataAttribut). Dies wäre also ungültig (es sei denn, Sie möchten eine Zeichenfolge als Wert angeben, der nur wie eine URL aussieht):

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

¹ Es muss gültig sein, damit das Element dieses Attribut hat. Für ein (ungültig!) Wird also <div href="" itemprop=""></div>der Elementinhalt verwendet, nicht der hrefWert.

² In der alten Mikrodaten-Spezifikation von WHATWG und W3C kann nur das metaElement das contentAttribut haben , aber die neue Mikrodaten-Spezifikation von W3C (derzeit ein Arbeitsentwurf) erlaubt contentjedes Element. Wenn ein Element ein contentAttribut und auch eines der anderen aufgelisteten Attribute hat, contentwird es verwendet.

³ Mikrodaten macht es ungültig eines der haben URL - Eigenschaft Elemente ohne ihre jeweiligen URL - Attribut (dh href, src, data), mit Ausnahme des linkElements (aber es ist bereits von HTML erforderlich , um das haben , hrefAttribut).

unor
quelle
Wie immer (!), Ausgezeichnet! Prost!!
Schranknoc