在SEO方面...
最好将方案放在包含所有链接的父级上吗?
<nav itemscope="itemscope" itemtype="http://www.schema.org/SiteNavigationElement">
<a href="#">Link 1</a>
<a href="#">Link 2</a>
<a href="#">Link 3</a>
</nav>
...或者每个链接应该被视为它自己的元素吗?
<nav>
<span itemscope="itemscope" itemtype="http://www.schema.org/SiteNavigationElement">
<a itemprop="url" href="#">
<span itemprop="name">Link 1</span>
</a>
</span>
<span itemscope="itemscope" itemtype="http://www.schema.org/SiteNavigationElement">
<a itemprop="url" href="#">
<span itemprop="name">Link 2</span>
</a>
</span>
<span itemscope="itemscope" itemtype="http://www.schema.org/SiteNavigationElement">
<a itemprop="url" href="#">
<span itemprop="name">Link 3</span>
</a>
</span>
</nav>
答案 0 :(得分:21)
如果SiteNavigationElement
适用于整个导航(即导航链接列表),那么您的第一个示例是正确的。
如果SiteNavigationElement
用于单个导航条目(即导航链接列表中的链接),则第二个示例是正确的。
我认为Schema.org没有明确定义哪个变体意味着什么,因为他们只说:
页面的导航元素。
但是,父类型WebPageElement
定义为:
网页元素,如表格或图片
此外,所有其他子类型(如Table
或WPFooter
)似乎都用于整个事物,而不是事物的特定部分。
所以这似乎表明应该标记整个导航,而不是每个单独的链接:
<nav itemscope itemtype="http://schema.org/SiteNavigationElement">
<ul>
<li><a href="/link-1">Link 1</a></li> <!-- don’t use the 'url' or 'name' property here! -->
<li><a href="/link-2">Link 2</a></li>
</ul>
</nav>
在这种情况下,所有属性都属于整个导航,这意味着url
属性将指定此导航的URL(并且不此链接中的链接的URL导航!)。
答案 1 :(得分:12)
根据Search Engine Land,它应该是这样的:
<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 :(得分:8)
第一个答案是正确的,但我将两者混合为(HTML5-)语义:
<nav itemscope itemtype="http://schema.org/SiteNavigationElement">
<ul>
<li>
<a itemprop="url" href="http://example.com/">
<span itemprop="name">Link 1</span>
</a>
</li>
</ul>
</nav>
答案 3 :(得分:4)
<nav role="navigation">
<ul role="menubar" aria-activedescendant="">
<li role="presentation" itemscope itemtype="https://schema.org/SiteNavigationElement">
<a href="" role="menuitem" tabindex="-1" itemprop="url">
<span itemprop="name">Link 1</span>
</a>
</li>
</ul>
</nav>
答案 4 :(得分:2)
schema.org/SiteNavigationElement扩展了WebPageElement,可用于标记链接,这通常会产生良好的上下文链接。您可以将此架构用于页面菜单。
<nav role="navigation" itemscope itemtype="http://schema.org/SiteNavigationElement">
<ul>
<li>
<a href="https://yoursite.com/" title="Link to Home" itemprop="url">
<span itemprop="name">Home</span>
</a>
</li>
<li>
<a href="https://yoursite.com/sample-page" title="Link to sample page" itemprop="url">
<span itemprop="name">sample page</span>
</a>
</li>
</ul>
答案 5 :(得分:0)
考虑以下来自habd.as页面源的代码段:
<nav itemscope itemtype="https://schema.org/SiteNavigationElement">
<meta itemprop="name" content="Main Menu">
<a itemprop="url" class="active" href="/">habd.as</a>
<a itemprop="url" href="/code/">Code</a>
<a itemprop="url" href="/post/">Posts</a>
<a itemprop="url" href="/site/">Sites</a>
<a itemprop="url" href="/talk/">Talks</a>
</nav>
<nav itemscope itemtype="https://schema.org/SiteNavigationElement">
<meta itemprop="name" content="Utility Menu">
<a itemprop="url" href="/about/">About</a>
<a itemprop="url" href="/contact/">Contact</a>
</nav>
如上所示有多个导航时,使用SiteNavigationElement
对导航项进行分组即可使用name
以便可以对分组本身进行标记。可以使用链接本身的内容来获取组中各个项目的标签。
因此,尽管有相反的说法,您的第一个示例还是正确的。
答案 6 :(得分:0)
我认为最明智的解决方案是使用hasPart属性。
<nav itemscope="itemscope" itemtype="http://www.schema.org/SiteNavigationElement">
<a itemprop="hasPart" href="/link1.html">Link 1</a>
<a itemprop="hasPart" href="/link2.html">Link 2</a>
<a itemprop="hasPart" href="/link3.html">Link 3</a>
</nav>
使用Google的Structure Data Testing Tool会通知这些链接是SiteNavigationElement的一部分,并且Google应该遵循指向这些项目的链接:
答案 7 :(得分:0)
考虑了以上所有内容,我得出以下结论:
<nav itemscope itemtype="http://schema.org/SiteNavigationElement">
<ul>
<li itemprop="hasPart">
<a href="/" itemprop="url"><span itemprop="name">Home</span></a>
</li>
</nav>
因此,每个<li>
是具有SiteNavigationElement
和url
的{{1}}的一部分。我认为这是最好的选择。
但是搜索引擎是否需要这种冗余标记?他们已经知道name
中的href
是<a href="">
,标签url
内的是<a>name</a>
。您如何看待?
答案 8 :(得分:0)
这是Google support site上一则帖子的引言,说:
我们正在考虑实施站点导航架构 https://schema.org/SiteNavigationElement
如果架构存在,谷歌会尊重它并显示附加链接吗?或者它会自己做? 我一点都没说吗?
此类型的顶级当前不支持Google。事实上, 此类型甚至没有作用域定义。目前尚不清楚 此类型会影响一组,例如导航菜单或仅一个 链接。
这证实了我对丰富结果测试的经验:仅识别面包屑。 Yandex可以很好地验证我的微数据。因此,页面上的SiteNavigationElement
似乎无效。
答案 9 :(得分:-1)
OP最初的问题包含一个很好的代码示例。虽然没有答案...
似乎每个人都给出了一个随机的答案...您可以使用以下官方google工具 search.google.com/structured-data/testing-tool测试架构微数据代码。
如果您在此工具中运行建议的答案,您会发现没有一个能给您预期的结果:带有名称和网址的SiteNavigationElement
列表
有些人可能会认为整个菜单可能被认为是“导航元素”,但是我认为使用该名称指定单个导航链接更为合理。另外,如果我们将SiteNavigationElement
用作整个菜单的标记,则无法将名称与html中的URL相关联。
要实现此目的,您需要将每个链接都用itemscope
属性进行封装,并且它们都需要具有自己的name
和url
itemprop
(这些是@David Harkness提到的单例,因此每个itemprop
只能出现一次)
<nav>
<ul>
<li itemscope itemtype="http://schema.org/SiteNavigationElement">
<a itemprop="url" href="http://example.com/link-1">
<span itemprop="name">Link 1</span>
</a>
</li>
<li itemscope itemtype="http://schema.org/SiteNavigationElement">
<a itemprop="url" href="http://example.com/link-2">
<span itemprop="name">Link 2</span>
</a>
</li>
</ul>
</nav>
上面的代码将产生两个不同的导航元素,每个元素都有一个名称和一个URL。
注意:itemprop="url"
属性使用锚点的href
属性作为值