混合 JSON-LD CollectionPage 和 Schema.org 的 Microdata `hasPart`
Mixing JSON-LD CollectionPage and Microdata `hasPart` of Schema.org
下面的微数据标记工作得很好,Google's structured data testing tool 将一个 CollectionPage
和 WebSite/WebPage
显示为 children。
<body itemscope itemtype="https://schema.org/CollectionPage">
<span itemscope itemtype="https://schema.org/WebSite" itemprop="hasPart">
<a href="https://springfield-xxxx.us" itemprop="url">Official site of Springfield</a>
</span>
<span itemscope itemtype="https://schema.org/WebPage" itemprop="hasPart">
<a href="https://facebook.com/group/XXXX" itemprop="url">Local events in Springfield</a>
</span>
<span itemscope itemtype="https://schema.org/WebPage" itemprop="hasPart">
<a href="https://news.us/city/springfield-xxxx" itemprop="url">Latest news in Springfield</a>
</span>
</body>
然而,当我添加 JSON-LD Google's structured data testing tool 时,objects CollectionPage
和 WebPage/WebSite
分别显示,就像它们没有连接一样。这是 JSON-LD:
的示例
<!DOCTYPE html>
<html>
<head>
<script type="application/ld+json">
{
"description": "...",
"author": {"@type":"Person", "name": "Homer J. Simpson"},
"@type": "CollectionPage",
"url": "http://my-springfield.us/sites",
"publisher": {
"@type": "Organization",
"logo": "Object of type ImageObject here",
"name": "Homer J. Simpson"
},
"image": "...",
"headline": "Springfield Sites",
"sameAs": ["..."],
"@context": "http://schema.org"
}
</script>
</head>
<body>
<span itemscope itemtype="https://schema.org/WebSite" itemprop="hasPart">
<a href="https://springfield-xxxx.us" itemprop="url">Official site of Springfield</a>
</span>
<span itemscope itemtype="https://schema.org/WebPage" itemprop="hasPart">
<a href="https://facebook.com/group/XXXX" itemprop="url">Local events in Springfield</a>
</span>
<span itemscope itemtype="https://schema.org/WebPage" itemprop="hasPart">
<a href="https://news.us/city/springfield-xxxx" itemprop="url">Latest news in Springfield</a>
</span>
</body>
</html>
我尝试将 @id
放入 JSON-LD 并将 itemid
放入 body
无济于事:Google 测试工具显示两个单独的 CollectionPages 或两个单独的 CollectionPages其他类型的项目。
我的问题:如何连接JSON-LD和微数据,以便Google测试工具显示一个CollectionPage
和WebPage/WebSite
作为 children/props?
like if they had no connection
好吧,在您的示例中,它们 没有 连接。 JSON-LD 和 Microdata 无法在语法级别上协同工作。
如果你想连接以不同语法定义的实体,唯一的方法是
- 为这些实体提供 URI(如果它们是同一事物,则为相同的 URI),并且
- 将这些 URI 引用为 属性 值(如果一个实体是另一个实体的 属性 的值)。
Giving entities URIs 以您提到的方式工作:在 JSON-LD 中使用 @id
,在 Microdata 中使用 itemid
(在 resource
中RDFa 精简版)。
消费者(搜索引擎或 Google 的 SDTT 等服务,浏览器插件等本地客户端)必须支持以下引用(并非所有人都支持),如果他们支持以下引用, 他们还必须支持解析附加语法(并非全部支持)。
但即使您使用此类 URI 引用,也不会改变您使用的语法的一致性要求。您的 HTML 文档无效,因为您有 itemprop
个不属于 itemscope
的属性。这是不允许的。因此,如果您想继续使用 Microdata,您也必须在 Microdata 中提供父项(CollectionPage
在您的情况下)。
这将是传达两个 CollectionPage
事件代表相同实体的方式(它们具有相同的 URI = 当前文档的基础 URL):
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "CollectionPage",
"@id": ""
}
</script>
<div itemscope itemtype="http://schema.org/CollectionPage" itemid="">
<span itemprop="hasPart" itemscope itemtype="http://schema.org/WebSite"></span>
<span itemprop="hasPart" itemscope itemtype="http://schema.org/WebSite"></span>
<span itemprop="hasPart" itemscope itemtype="http://schema.org/WebPage"></span>
</div>
Google的SDTT仍然显示两个CollectionPage
条目(if syntaxes are mixed), but they (correctly) have the same URI. It’s up to Google to decide what to do with this information for their various structured data features. Maybe mixed-syntax references are supported for none/some/all of their features ();他们的 SDTT 如何显示事物并不一定反映他们如何解释其特征。
更多示例
下面的微数据标记工作得很好,Google's structured data testing tool 将一个 CollectionPage
和 WebSite/WebPage
显示为 children。
<body itemscope itemtype="https://schema.org/CollectionPage">
<span itemscope itemtype="https://schema.org/WebSite" itemprop="hasPart">
<a href="https://springfield-xxxx.us" itemprop="url">Official site of Springfield</a>
</span>
<span itemscope itemtype="https://schema.org/WebPage" itemprop="hasPart">
<a href="https://facebook.com/group/XXXX" itemprop="url">Local events in Springfield</a>
</span>
<span itemscope itemtype="https://schema.org/WebPage" itemprop="hasPart">
<a href="https://news.us/city/springfield-xxxx" itemprop="url">Latest news in Springfield</a>
</span>
</body>
然而,当我添加 JSON-LD Google's structured data testing tool 时,objects CollectionPage
和 WebPage/WebSite
分别显示,就像它们没有连接一样。这是 JSON-LD:
<!DOCTYPE html>
<html>
<head>
<script type="application/ld+json">
{
"description": "...",
"author": {"@type":"Person", "name": "Homer J. Simpson"},
"@type": "CollectionPage",
"url": "http://my-springfield.us/sites",
"publisher": {
"@type": "Organization",
"logo": "Object of type ImageObject here",
"name": "Homer J. Simpson"
},
"image": "...",
"headline": "Springfield Sites",
"sameAs": ["..."],
"@context": "http://schema.org"
}
</script>
</head>
<body>
<span itemscope itemtype="https://schema.org/WebSite" itemprop="hasPart">
<a href="https://springfield-xxxx.us" itemprop="url">Official site of Springfield</a>
</span>
<span itemscope itemtype="https://schema.org/WebPage" itemprop="hasPart">
<a href="https://facebook.com/group/XXXX" itemprop="url">Local events in Springfield</a>
</span>
<span itemscope itemtype="https://schema.org/WebPage" itemprop="hasPart">
<a href="https://news.us/city/springfield-xxxx" itemprop="url">Latest news in Springfield</a>
</span>
</body>
</html>
我尝试将 @id
放入 JSON-LD 并将 itemid
放入 body
无济于事:Google 测试工具显示两个单独的 CollectionPages 或两个单独的 CollectionPages其他类型的项目。
我的问题:如何连接JSON-LD和微数据,以便Google测试工具显示一个CollectionPage
和WebPage/WebSite
作为 children/props?
like if they had no connection
好吧,在您的示例中,它们 没有 连接。 JSON-LD 和 Microdata 无法在语法级别上协同工作。
如果你想连接以不同语法定义的实体,唯一的方法是
- 为这些实体提供 URI(如果它们是同一事物,则为相同的 URI),并且
- 将这些 URI 引用为 属性 值(如果一个实体是另一个实体的 属性 的值)。
Giving entities URIs 以您提到的方式工作:在 JSON-LD 中使用 @id
,在 Microdata 中使用 itemid
(在 resource
中RDFa 精简版)。
消费者(搜索引擎或 Google 的 SDTT 等服务,浏览器插件等本地客户端)必须支持以下引用(并非所有人都支持),如果他们支持以下引用, 他们还必须支持解析附加语法(并非全部支持)。
但即使您使用此类 URI 引用,也不会改变您使用的语法的一致性要求。您的 HTML 文档无效,因为您有 itemprop
个不属于 itemscope
的属性。这是不允许的。因此,如果您想继续使用 Microdata,您也必须在 Microdata 中提供父项(CollectionPage
在您的情况下)。
这将是传达两个 CollectionPage
事件代表相同实体的方式(它们具有相同的 URI = 当前文档的基础 URL):
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "CollectionPage",
"@id": ""
}
</script>
<div itemscope itemtype="http://schema.org/CollectionPage" itemid="">
<span itemprop="hasPart" itemscope itemtype="http://schema.org/WebSite"></span>
<span itemprop="hasPart" itemscope itemtype="http://schema.org/WebSite"></span>
<span itemprop="hasPart" itemscope itemtype="http://schema.org/WebPage"></span>
</div>
Google的SDTT仍然显示两个CollectionPage
条目(if syntaxes are mixed), but they (correctly) have the same URI. It’s up to Google to decide what to do with this information for their various structured data features. Maybe mixed-syntax references are supported for none/some/all of their features (