JSON-LD 和 Microdata 在同一页上?

JSON-LD and Microdata on the same page?

我的电子商务产品页面上有 Micro Data 和 JSON-LD,它们描述的是同一事物(在我的案例中是产品)。由于超出此问题范围的原因,我无法删除这两种格式中的任何一种。我在想:

  1. 这是 Google 的问题吗?结构化数据测试工具确实显示了两个项目(产品)而不是一个。

  2. 如果一个 属性,比方说产品名称,两种格式之间略有不同,这两种格式中的任何一种,例如,JSON- LD优先?

问题是消费者会认为描述的是不同的东西(或者更准确地说:消费者不知道这些东西是否相同)。

有一种方法可以防止这种情况¹:give each thing a URI,如果情况相同,则 URI 相同。

这可以通过 JSON-LD 中的 @id 和微数据中的 itemid 来完成。

所以一个简单的案例可能是:

<!-- markup on the product page, 
     so the fragment "#this" results in an absolute URI like 
     "http://example.com/products/foo#this" -->

<!-- JSON-LD -->
<script type="application/ld+json">
{
  "@context": "http://schema.org",
  "@type": "Product",
  "@id": "#this",
  "name": "Foo"
}
</script>

<!-- Microdata -->    
<article itemscope itemtype="http://schema.org/Product" itemid="#this">
  <h1 itemprop="name">Foo</h1>
</article>

如果像 name 这样的 属性 有不同的值,消费者处理这个问题的明显方法是给事物多个名称。对于消费者只需要一个名称的功能(例如,在丰富的结果中),未定义将使用哪个 name 值。如果消费者是搜索引擎,它可能会使用其现有的专有算法来处理此类情况。


¹ 当然还不清楚 if/how 各种消费者都支持它。但这是执行此操作的正确方法,也是执行此操作的唯一明确方法。隐含的方式包括希望消费者理解通常(但不一定)唯一属性(例如 urlemailproductID 等)的相同值意味着事物是相同的。但是这种隐式方式当然可以和显式方式一起使用。