web-dev-qa-db-fra.com

Balisage SiteNavigationElement Schema.org

Schema.org SiteNavigationElement devrait-il être structuré comme ceci

<div itemscope itemtype="http://www.schema.org/SiteNavigationElement">
    <ul>
        <li itemprop="url"><a href="#" itemprop="name">Link 1</a>
    </ul>
</div>

ou comme ça?

<div itemscope itemtype="http://www.schema.org/SiteNavigationElement">
    <ul>
        <li>
            <a href="#" itemprop="url"><span itemprop="name">Link 1</span></a>
        </li>
    </ul>
</div>
3
davidcondrey

Vos questions semblent être:

  • Puis-je spécifier itemprop="url" sur li?
  • Puis-je spécifier itemprop="name" sur a?

La réponse à ces deux questions est: Non, vous ne devriez pas faire cela. Microdata définit des règles d'analyse spéciales pour des éléments tels que a.

Schema.org’s url property attend une URL en tant que valeur. Microdata définit que vous devez utiliser des éléments tels que a/area/link/etc. ( essentiellement tout élément avec un attribut src ou href) pour spécifier les URL. Dans votre premier exemple, la valeur de la propriété url serait pas l'URL, mais le texte "Lien 1".

Comme les propriétés des éléments a (si elles ont un attribut href) prennent toujours le contenu href (et non le contenu de l'élément) en tant que valeur, votre premier exemple aurait l'URL comme valeur pour la propriété name (mais attend un texte, pas une URL, bien sûr).

Donc: Votre premier exemple produirait des résultats erronés. Votre deuxième exemple est bien.

Notez qu'il serait également possible d'omettre l'élément span. Au lieu de

<li>
  <a href="#" itemprop="url"><span itemprop="name">Link 1</span></a>
</li>

vous pourriez utiliser

<li itemprop="name">
  <a href="#" itemprop="url">Link 1</a>
</li>

(Voir aussi ma réponse similaire à une question sur le dépassement de capacité.)

5
unor

Selon Search Engine Land , il est supposé ressembler à ceci:

<ul itemscope itemtype="http://www.schema.org/SiteNavigationElement">
    <li itemprop="name">
        <a itemprop="url" href="#">Link 1</a>
    </li>
    <li itemprop="name">
        <a itemprop="url" href="#">Link 2</a>
    </li>
    <li itemprop="name">
        <a itemprop="url" href="#">Travel Resources</a>
    </li>
</ul>
2
John R Perry

SiteNavigationElement pose un problème pour moi et pour d'autres personnes également, comme on peut le voir dans la question publiée par @bybe dans un commentaire. on peut dire que le problème est le manque de portée.

Est-ce que SiteNavigationElement est référencé à un seul élément du système de navigation, de sorte qu'il se lit comme suit: est un élément de la navigation du site . Ou il est référé à l'ensemble du système de navigation, et il est donc lu comme suit: L'élément de navigation du site

<!DOCTYPE html>
<html>
    <head>
        <title>test</title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    </head>
    <body>
        <div itemscope itemtype="http://schema.org/WebPageElement">
            <link itemprop="additionalType" href="http://schema.org/ItemList" />
            <meta itemprop="name" content="navigation_menu" />
            <ul>
                <li itemprop="additionalType" itemscope itemtype="http://www.schema.org/SiteNavigationElement">
                    <span itemprop="itemListElement">
                        <a href="http://www.example.com/link_1" itemprop="url"><span itemprop="name">Link 1</span></a>
                    </span>
                </li>
                <li itemprop="additionalType" itemscope itemtype="http://www.schema.org/SiteNavigationElement">
                    <span itemprop="itemListElement">
                        <a href="http://www.example.com/link_2" itemprop="url"><span itemprop="name">Link 2</span></a>
                    </span>
                </li>
            </ul>
        </div>
    </body>
</html>

Ce qui est un peu plus complexe, dans la mesure où chaque membre du système de navigation n'est pas considéré comme un élément qui mérite une balise, il requiert également une syntaxe combinée, en utilisant additionalType pour transmettre l'idée. que ces liens sont une liste d'éléments qui appartiennent à quelque chose.

Mettre à jour

J'ai changé les codes de cette réponse par la version ci-dessus, pour l'adapter à un mode de fonctionnement et de validation en tant que microdonnées et HTML. Dans l'historique de l'édition de la question, vous pouvez voir les options que j'ai utilisées auparavant. J'ai remplacé ces codes parce que

  • J'ai eu une erreur sur la première partie, en utilisant une propriété où un type devrait être. Bien que l'outil de test de données structurées l'a validé sans erreur
  • L’option HTML, validée très bien, mais comme je l’ai mentionné plus haut, la manière d’y parvenir brise la méthode d’analyse des microdonnées en ne lisant que le dernier élément.
  • Au moment de ce message, ne semble pas être un moyen d'avoir deux types sur un seul type d'élément. Cela peut être vérifié sur le W3C WebSchemas/additionalTypeProposal , bien que cela n’ait pas été mis à jour depuis mai 2013.
1
PatomaS