"position" 属性 需要包含产品列表项的 ItemList?

"position" property required for ItemList with Product list items?

我有一个问题:Google 的结构化数据测试工具给我一个错误:

Tag position doesn't exist. It's required.

我将其添加到标记中。比我得到这个错误:

Position property is not valid for an object of type Product

这是我的标记:

<table id="sale_table" itemscope="" itemtype="http://schema.org/ItemList">
    <tbody>
            <tr itemprop="itemListElement" itemscope="" itemtype="http://schema.org/Product">
                <td class="sale_art_td" itemprop="productID">10496278</td>
                <td class="sale_brand_td" itemprop="brand"><span itemprop="name ">--</span></td>
                <td class="sale_name_td" itemprop="name">10496278 / Крышка трамблера Daewoo Nexia,Espero DD</td>
                <td class="sale_am_td">1.00</td>
                <td class="sale_price_td" itemprop="offers" itemscope="" itemtype="http://schema.org/Offer"><meta itemprop="priceCurrency" content="RUR"><span itemprop="price">341.50</span></td>
                <td class="sale_buy_td"><a href="javascript:void(0);" class="sale_buy_link" data-id="63455914" data-query="10496278">Купить</a><!--<img src="/upload/badge/sale_cart.png" />--></td>
                <td class="hidden">
                    <meta itemprop="url" content="/partsearch/?q=10496278">
                                        <span itemprop="description">Распродажа: 10496278 / Крышка трамблера Daewoo Nexia,Espero DD по цене 341.50</span>
                </td>
            </tr>
                    <tr itemprop="itemListElement" itemscope="" itemtype="http://schema.org/Product">
                <td class="sale_art_td" itemprop="productID">76202sx0a12</td>
                <td class="sale_brand_td" itemprop="brand"><span itemprop="name ">HONDA</span></td>
                <td class="sale_name_td" itemprop="name">76202SX0A12</td>
                <td class="sale_am_td">1.00</td>
                <td class="sale_price_td" itemprop="offers" itemscope="" itemtype="http://schema.org/Offer"><meta itemprop="priceCurrency" content="RUR"><span itemprop="price">704.00</span></td>
                <td class="sale_buy_td"><a href="javascript:void(0);" class="sale_buy_link" data-id="63456060" data-query="76202sx0a12">Купить</a><!--<img src="/upload/badge/sale_cart.png" />--></td>
                <td class="hidden">
                    <meta itemprop="url" content="/partsearch/?q=76202sx0a12">
                                        <span itemprop="description">Распродажа: 76202SX0A12 по цене 704.00</span>
                </td>
            </tr>
    </tbody>
 </table> 

这不是您的代码错误。这只是意味着 Google 不会显示某个 Rich Snippet(或类似功能),除非您提供此 属性.

但是,position property is not defined for the Product type,所以这没有任何意义。

这似乎是 Google 的新结构化数据功能,尚未记录,因为它链接到 404 页面:List Page Carousels。也许这是一项正在进行的工作,他们并不打算在他们的测试工具中发布检查。

所以我暂时忽略它。

我想这是 Google 方面的实施错误,由非显式文档引起:

https://schema.org/itemListElement明确指出

Existing entities are best for a simple, unordered list of existing things in your data. ListItem is used with ordered lists when you want to provide additional context about the element in that list or when the same item might be in different places in different lists.

Note: The order of elements in your mark-up is not sufficient for indicating the order or elements. Use ListItem with a 'position' property in such cases.

同时说预期为这些类型之一的值是:

  • 列表项
  • 文字
  • 东西

=> 这意味着 隐含地,即 position 元素只能用于排序列表,这反过来要求 Thing元素包含在 ListItem 元素中,它提供了 itemprop position.

这也意味着隐式如果ItemListElementTextThing,列表应该算是Unordered.

这是文档唯一有意义的方式。我认为隐式连接被遗漏了。

所以我想适当的行动是为 结构化数据测试工具 提交错误报告并暂时接受警告 Product 嵌套在 ListItem 元素中作为解决方法。

试试这个

'@type': 'ListItem',
'position': 1,
'item':{
   '@type': 'Product',
... product props
}

根据我的测试,malefique 找到了正确的解决方案。

此代码使用 Structured Data testing tool:

完全验证
{
    "@context": "http://schema.org",
    "@type": "ItemList",
    "itemListOrder": "http://schema.org/ItemListOrderDescending",
    "itemListElement": [
        {
            "@type": "ListItem",
            "position": 1,
            "item": {
                "@type": "Product",
                "name": "My product",
                "url": "www.example.com",
                "offers": {
                    "@type": "Offer",
                    "availability": "http://schema.org/InStock",
                    "price": "100.00",
                    "priceCurrency": "AUD"
                }
            }
        }
    ]
}

我找到了http://schema.org/itemListElement

你必须像这样指定位置<meta itemprop="position" content="1" />

页面底部有示例。

解决方法是将您的 product 填入 ListItemitem 属性。 ListItem 得到 position 属性。一旦你这样做,它就会通过 Google 的 SDTT。

注意:一件商品offer超过1件URL/URI是无效的。

为每个产品报价构建一个页面(唯一 URL),这是您放置结构化数据/schema.org 产品报价数据的地方;或者,将您所有的产品报价放在一个页面上 (URL/URI) - 永远不要两者兼而有之。否则,你会得到错误 All values provided for url must point to the same page.