【问题标题】:What is the correct use of schema.org SiteNavigationElement?schema.org SiteNavigationElement 的正确用法是什么?
【发布时间】:2012-09-19 08:35:03
【问题描述】:

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

【问题讨论】:

    标签: html seo schema.org


    【解决方案1】:

    如果SiteNavigationElement 用于整个导航(即导航链接列表),那么您的第一个示例是正确的。

    如果SiteNavigationElement 用于单个导航条目(即导航链接列表中的链接),则您的第二个示例是正确的。

    我认为 Schema.org 并没有明确定义是指哪个变体,因为他们只是说:

    页面的导航元素。

    但是,父类型WebPageElement定义为:

    网页元素,如表格或图像

    此外,所有其他子类型(如 TableWPFooter)似乎用于整个事物,而不是事物的特定部分。

    所以这似乎表明应该标记整个导航,而不是每个链接:

    <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! )。

    【讨论】:

    • 所以根据你的回答,这个微数据只是将菜单引入搜索引擎...不是菜单结构!
    • @chharvey:是的。它是might make sense in non-HTML contexts or special cases,但对于典型的网页,我不会使用WebPageElement 及其子类型,如SiteNavigationElement
    • 如果有带有微数据的正文标签:&lt;body id="app-layout" itemscope itemtype="http://schema.org/WebPage"&gt; 我必须在导航中添加itemprop 吗?如果是,那么导航中itemprop 的值是多少?
    • @alex:如果您想提供SiteNavigationElement 项目,您可以使用hasPart 属性:WebPage hasPart SiteNavigationElement。但除非您有特定原因,否则我建议您根本不要提供SiteNavigationElement
    • @alex:通常没用。请参阅我上面评论中的链接。或this answer,或this one。我还为 Schema.org 创建了an issue
    【解决方案2】:

    根据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 次投反对票,但没有解释这个答案有什么不正确之处?
    • 我没有投反对票,但我确实发现 nameurl 模棱两可。这是否代表实际值应该是什么,或者只是一个占位符,向查看者显示相关信息应该出现的位置。
    • url 标识 URL,name 标识名称(即链接 2)。所以不,它们不是占位符。
    • 问题是urlnameSiteNavigationElement 的单例属性。这个标记有三个,这使得它们模棱两可。搜索引擎应该使用哪一个nameurl
    • 这是 Google 结构化数据工具识别和接受的结构。
    【解决方案3】:

    第一个答案是正确的,但我会混合使用(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>
    

    【讨论】:

    • 这样做会生成一个 URL 和名称列表,它们都在同一个组中,单个 URL 和名称之间没有任何关系。我认为应该有某种方式来表明每个列表元素都是一个具有一个 URL 和一个名称的实体。
    • 当然,一般来说你是对的。但是当我们谈论导航时,我假设所有链接都属于一起,不是吗?
    【解决方案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>
    

    【讨论】:

    • 毫无疑问!就是这样。
    【解决方案5】:

    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>
    

    【讨论】:

      【解决方案6】:

      考虑以下代码sn-p改编自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 这样分组本身就可以被标记。可以使用链接本身的内容获取组内各个项目的标签。

      因此,尽管断言相反,您的第一个示例更正确。

      【讨论】:

        【解决方案7】:

        OP 的原始问题包含一个很好的代码示例。但是没有一个答案可以...

        似乎每个人都给出了一个有点随机的答案...您可以使用以下官方谷歌工具search.google.com/structured-data/testing-tool测试您的架构微数据代码。

        如果您在此工具中运行建议的答案,您会注意到没有一个给出预期的结果:SiteNavigationElement 的列表,带有名称和网址

        有些人可能会争辩说,整个菜单可能被视为“导航元素”,但我认为将这个名称指定为单个导航链接更有意义。另外,如果我们使用SiteNavigationElement 作为整个菜单的标记,我们无法将名称与 html 中的 URL 关联起来。

        要实现这一点,您需要将每个链接都封装在 itemscope 属性中,并且它们都需要有自己的 nameurl 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 属性作为值

        【讨论】:

        • 在 yandex 上尝试一下,看看是否得到类似 this 的信息。
        • 我得到了不同的结果,但它仍然有意义。我找不到有关哪些工具使用 Yandex schema.org 阅读器引擎的任何信息。我认为 Google 提供的那个是显而易见的选择,但出于某种原因,也许专注于 Yandex 会更有意义?对此有何建议?
        • 我最好的建议是选择最常用的方法,直到规范被修改为明确(或弃用)。对我来说,命名站点导航是最有意义的,因为导航 a 正文已经包含用于命名导航链接的文本节点。我确实尝试过寻找百度工具,但我不精通中文。我觉得 ARIA 将来会在这一切中扮演一个角色
        • 赞成,因为您是正确的,所以您不应该对该响应投反对票,个人应该使用结构化数据测试工具。我在 icalculator 上使用 itemprop="url" 和 itemprop="name" (请参见左侧菜单上的源代码,例如 icalculator.info 这是在 google 和 bing 搜索结果下支持指向相关页面的链接的正确验证方法(实施,他们在 4-6 周后在搜索引擎上进行测试,变化是显着的)。
        【解决方案8】:

        我认为最优雅的解决方案是使用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 应该遵循这些链接的链接:

        【讨论】:

          【解决方案9】:

          综合以上几点,我得出以下结论:

          <nav itemscope itemtype="http://schema.org/SiteNavigationElement">
            <ul>
             <li itemprop="hasPart">
               <a href="/" itemprop="url"><span itemprop="name">Home</span></a>
             </li>
          </nav>

          因此,每个&lt;li&gt; 都是具有urlnameSiteNavigationElement 的一部分。我认为这是最好的选择。

          但是搜索引擎需要这样的冗余标记吗?他们已经知道&lt;a href=""&gt; 中的hrefurl,而标签&lt;a&gt;name&lt;/a&gt; 内部是name。你怎么看?

          【讨论】:

            【解决方案10】:

            这里引用Google support site 的帖子,说:

            我们正在考虑实施站点导航架构 https://schema.org/SiteNavigationElement

            如果架构存在,谷歌会尊重它并显示附加链接,还是它会做自己的事情? 我有什么意思吗?

            此类顶级当前不支持 Google。实际上, 这种类型甚至没有范围定义。目前尚不清楚是否 这种类型会影响一个组,例如,一个导航菜单,或者只影响一个 链接。

            这证实了我对他们丰富的结果测试的经验:只识别面包屑。 Yandex 可以很好地验证我的微数据。因此,您页面上的SiteNavigationElement 似乎是无用的,因为它是有效的。

            【讨论】:

              猜你喜欢
              • 2023-03-05
              • 1970-01-01
              • 2014-07-22
              • 2013-03-09
              • 2011-04-15
              • 1970-01-01
              • 2012-10-04
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多