schema.org – JSON-LD和Microdata在同一页面上?

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

>这对谷歌来说是个问题吗?结构化数据测试工具确实显示两个项目(产品)而不是一个.
>如果一个属性(假设产品名称)在两种格式之间略有不同,那么两种格式中的任何一种(例如JSON-LD)都会优先吗?

解决方法

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

有一种方法可以阻止这个¹:give each thing a URI,如果事情是相同的,那就是相同的URI.

这可以使用JSON-LD中的@id和Microdata中的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>

如果名称之类的属性具有不同的值,则消费者可以处理此问题的显而易见的方法是为该事物赋予多个名称.对于消费者只需要一个名称(例如,在富结果中)的特征,没有定义将使用哪个名称值.如果消费者是搜索引擎,它可能会使用其现有的专有算法来处理此类情况.

¹当然,目前尚不清楚各种消费者是否支持它.但这是正确的方法,而这是唯一明确的方法.隐含方式包括希望消费者理解通常(但不一定)唯一属性(例如,url,email,productID等)的相同值意味着事物是相同的.但是这种隐含的方式当然可以与明确的方式一起使用.

相关文章

什么是深拷贝与浅拷贝?深拷贝与浅拷贝是js中处理对象或数据...
前言 今天复习了一些前端算法题,写到一两道比较有意思的题:...
最近在看回JavaScript的面试题,this 指向问题是入坑前端必须...
js如何实现弹出form提交表单?(图文+视频)
js怎么获取复选框选中的值
js如何实现倒计时跳转页面