JSON-LD 的@id 引用之后的结构化数据测试工具 – 这会按预期工作吗?
Structured Data Testing Tools following @id references for JSON-LD – Will this work as expected?
我正在使用 JSON-LD 标记带有模式数据的站点。完成作业后,我了解到 @id
可用于引用其他模式片段。比如写 WebPage
schema 那 isPartOf
我的 WebSite
schema.
在此之后,我为我的网站创建了基本架构; Organization
、WebSite
和 WebPage
,其中 WebSite
链接到 WebPage
和 Organization
。
当我将我的标记插入 Google 的结构化数据测试工具时,它全部汇总到 WebSite
架构中。但是,当我删除 @id
引用时,它显示为三种不同类型的架构。
和@id
没有@id
当然,我希望我的模式数据被解释为一系列关系,这就是重点。但我也想确保每个单独的模式都被解析。
那你觉得怎么样,这样可以吗?
Organization
{
"@context": "http://schema.org",
"@type": "Organization",
"@id": "https://example.com/#organization",
"name": "Organization",
"legalName": "Organization, Inc",
"description": "We rock",
"logo": "https://www.example.com/images/logo.jpg",
"url": "https://www.example.com",
"telephone": "+1-111-111-1111",
"sameAs": ["https://twitter.com/example", "https://www.linkedin.com/company/example/", "https://plus.google.com/u/0/+example", "https://www.facebook.com/example", "https://www.youtube.com/user/example", "https://www.instagram.com/example/", "https://en.wikipedia.org/wiki/example", "https://www.wikidata.org/wiki/Q1", "https://www.crunchbase.com/organization/example"],
"address":
{
"@type": "PostalAddress",
"streetAddress": "111 Street",
"addressLocality": "Nowhere",
"postalCode": "11111",
"addressCountry": "United States"
}
}
WebSite
{
"@context": "http://schema.org",
"@type": "WebSite",
"@id": "https://example.com/#website",
"name": "Website",
"alternateName": "Web",
"url": "https://www.example.com",
"hasPart":
{
"@type": "WebPage",
"@id": "https://www.example.com/#webpage"
}
}
WebPage
{
"@context": "http://schema.org",
"@type": "WebPage",
"@id": "https://www.example.com/#webpage",
"name": "Webpage",
"description": "Told you, we rock",
"url": "https://www.example.com/",
"isPartOf":
{
"@id": "https://www.example.com/#website"
},
"potentialAction":
{
"@type": "SubscribeAction",
"agent":
{
"@type": "Organization",
"@id": "https://example.com/#organization"
},
"object":
{
"@type": "Product",
"name": "Mailing List"
}
}
}
Of course, I want my schema data to be interpreted as a series of relationships, that's the whole point.
没错。使用 @id
引用是实现此目的的一种方法,另一种方法是嵌套完整的项目。结果将是相同的,即它们是等价的。
But I also want to make sure each individual schema is being parsed.
如果您认识一个只识别顶级商品的消费者,您可能想要适应一下。通常可以在顶层选择一个项目(通过 或反向属性,如果存在的话),但是像 Google 的 SDTT 这样的工具当然可以在不同的方式。
但除非您认识这样的消费者,否则我认为不建议使用带有项目值的属性。你会错过最重要的语义信号:关系。
理论上,提供 mainEntity
/mainEntityOfPage
属性 应该足以让面向页面的消费者了解该页面上的主要实体是什么。当然,在实践中,消费者可能不会 recognize/support 这个 属性。但是我看不出消费者应该如何更容易地处理几个顶级项目,他们之间的关系不清楚(因为没有指定关系),所以消费者应该有兴趣支持Schema.org 结构化数据在 Web 上提供的常见方式。
我正在使用 JSON-LD 标记带有模式数据的站点。完成作业后,我了解到 @id
可用于引用其他模式片段。比如写 WebPage
schema 那 isPartOf
我的 WebSite
schema.
在此之后,我为我的网站创建了基本架构; Organization
、WebSite
和 WebPage
,其中 WebSite
链接到 WebPage
和 Organization
。
当我将我的标记插入 Google 的结构化数据测试工具时,它全部汇总到 WebSite
架构中。但是,当我删除 @id
引用时,它显示为三种不同类型的架构。
和@id
没有@id
当然,我希望我的模式数据被解释为一系列关系,这就是重点。但我也想确保每个单独的模式都被解析。
那你觉得怎么样,这样可以吗?
Organization
{
"@context": "http://schema.org",
"@type": "Organization",
"@id": "https://example.com/#organization",
"name": "Organization",
"legalName": "Organization, Inc",
"description": "We rock",
"logo": "https://www.example.com/images/logo.jpg",
"url": "https://www.example.com",
"telephone": "+1-111-111-1111",
"sameAs": ["https://twitter.com/example", "https://www.linkedin.com/company/example/", "https://plus.google.com/u/0/+example", "https://www.facebook.com/example", "https://www.youtube.com/user/example", "https://www.instagram.com/example/", "https://en.wikipedia.org/wiki/example", "https://www.wikidata.org/wiki/Q1", "https://www.crunchbase.com/organization/example"],
"address":
{
"@type": "PostalAddress",
"streetAddress": "111 Street",
"addressLocality": "Nowhere",
"postalCode": "11111",
"addressCountry": "United States"
}
}
WebSite
{
"@context": "http://schema.org",
"@type": "WebSite",
"@id": "https://example.com/#website",
"name": "Website",
"alternateName": "Web",
"url": "https://www.example.com",
"hasPart":
{
"@type": "WebPage",
"@id": "https://www.example.com/#webpage"
}
}
WebPage
{
"@context": "http://schema.org",
"@type": "WebPage",
"@id": "https://www.example.com/#webpage",
"name": "Webpage",
"description": "Told you, we rock",
"url": "https://www.example.com/",
"isPartOf":
{
"@id": "https://www.example.com/#website"
},
"potentialAction":
{
"@type": "SubscribeAction",
"agent":
{
"@type": "Organization",
"@id": "https://example.com/#organization"
},
"object":
{
"@type": "Product",
"name": "Mailing List"
}
}
}
Of course, I want my schema data to be interpreted as a series of relationships, that's the whole point.
没错。使用 @id
引用是实现此目的的一种方法,另一种方法是嵌套完整的项目。结果将是相同的,即它们是等价的。
But I also want to make sure each individual schema is being parsed.
如果您认识一个只识别顶级商品的消费者,您可能想要适应一下。通常可以在顶层选择一个项目(通过
但除非您认识这样的消费者,否则我认为不建议使用带有项目值的属性。你会错过最重要的语义信号:关系。
理论上,提供 mainEntity
/mainEntityOfPage
属性 应该足以让面向页面的消费者了解该页面上的主要实体是什么。当然,在实践中,消费者可能不会 recognize/support 这个 属性。但是我看不出消费者应该如何更容易地处理几个顶级项目,他们之间的关系不清楚(因为没有指定关系),所以消费者应该有兴趣支持Schema.org 结构化数据在 Web 上提供的常见方式。