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.

在此之后,我为我的网站创建了基本架构; OrganizationWebSiteWebPage,其中 WebSite 链接到 WebPageOrganization

当我将我的标记插入 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 上提供的常见方式。