Schema.org 小型公司的做法:'Organization' 和 'WebSite' 在 JSON-LD 中每个页面,微数据用于其他所有内容

Schema.org practices for small company: 'Organization' and 'WebSite' in JSON-LD on every page, Microdata for everything else

我想知道如何构建我的 Schema.org。我对 JSON-LD 和微数据元素使用混合方法。我不会用它们以两种不同的方式来描述一件事。我需要一些关于要包含哪些内容的指南。

现在我在每一页上都有我们公司的描述:

<script type="application/ld+json">
{
    "@context"          : "http://schema.org",
    "@type"             : "Organization",
    "url"               : "https://our.url",
    "logo"              : "https://our.url/logo2.svg",
    "contactPoint"      : [{
        "@type"         : "ContactPoint",
        "telephone"     : "",
        "contactType"   : "Customer Service"
    }],
    "sameAs"            :[],
    "name"              : "Our Small Company"
}
</script>

然后我在 JSON-LD:

中再次对我们的网页进行了简短的描述
<script type="application/ld+json">
{
   "@context"          : "http://schema.org",
    "@type"             : "WebSite",
    "url"               : "http://our.url",
    "potentialAction"   : {
        "@type"         : "SearchAction",
        "target"        : "http://our.url/search",
        "query-input"   : "required name=search_term_string"
    }
}
</script>

从这里开始,我有了所有元素的微数据。例如,搜索结果是包含产品的 ItemList 等。

这样可以吗?我应该在每个页面上或仅在主页上或根本不包含 JSON-LD 公司描述吗?我是否需要深入挖掘并为每个页面提供更具体的描述(例如搜索页面可以是 SearchResultsPage 而不是 WebSite)?

在 JSON-LD 中提供一些数据,在 Microdata 中提供一些数据应该没问题(但如果两者都是关于相同的实体,你 )。但是,如果您想连接实体,它可能会出现问题。

连接 WebSiteOrganization

说到连接实体,我建议您对 WebSiteOrganization 项目执行此操作。例如,您可以声明您的 Organizationpublisher of the WebSite, and/or that the WebSite is about Organization

在 JSON-LD 中有两种实现方法:

  • 使用一个 script 元素并将 Organization 节点作为值嵌入
  • 同时保留 script 个元素 (),给每个节点一个 URI(@id)并将这些 URI 作为值引用

前者可能有更好的消费者支持,后者更适合提供多个属性(例如,authorpublisher)而不必复制整个数据(但您可以使用也是一种混合方式。

前一种方式的示例:

<script type="application/ld+json">
{
   "@context"          : "http://schema.org",
   "@type"             : "WebSite",
   "publisher"         : {
       "@type"         : "Organization"
   }
}
</script>

后一种方式的示例:

<script type="application/ld+json">
{
    "@context"          : "http://schema.org",
    "@type"             : "Organization",
    "@id"               : "/#org"
}
</script>
<script type="application/ld+json">
{
    "@context"          : "http://schema.org",
    "@type"             : "WebSite",
    "publisher"         : {"@id": "/#org"},
    "about"             : {"@id": "/#org"},
    "mainEntity"        : {"@id": "/#org"},
    "author"            : {"@id": "/#org"}
}
</script>

(其中 /#org 是代表组织本身的 URI,而不仅仅是关于或属于组织的 page/site)

提供WebPage

您可以为每个页面提供一个 WebPage 项目。它在许多情况下都有用。但是就像任何其他类型的情况一样,没有任何要求。

如果您想提供这样的项目,当然最好在适用的情况下使用更具体的类型(如 SearchResultsPage)。但如果那不可能,到处使用 WebPage 总比不提供要好得多。

在您的情况下,您必须决定以何种语法提供它。 JSON-LD 允许您将其提供为 hasPart of the WebSite according to the former way, as explained above. But that would make it hard to connect the WebPage with your page’s main entity (which you specify in Microdata) via the mainEntity 属性。因为我认为这是一个重要的关系,所以我会在 Microdata 中指定 WebPage 并通过 URI 连接 WebSiteWebPage

您可以从 JSON-LD WebSite 节点执行此操作:

"hasPart"           : {"@id": "/current-page.html"}

(您也可以从 WebPage 微数据中逆向 属性 isPartOf, but then you’d have to 。)

在微数据中具有 WebPage,例如,在 body 元素上,它允许您提供 mainEntity 属性:

<body itemscope itemtype="http://schema.org/WebPage">
  <article itemprop="mainEntity" itemscope itemtype="http://schema.org/Article">
    <!-- for an article that is the main content of the page -->
  </article>
</body>
<body itemscope itemtype="http://schema.org/SearchResultsPage">
  <ul itemprop="mainEntity" itemscope itemtype="http://schema.org/ItemList">
    <!-- for a search result list that is the main content of the page -->
  </ul>
</body>

连接 WebPageOrganization

如果您愿意,可以明确声明 Organizationpublisher/author/等等。 WebPage 的,还有:

<link itemprop="author publisher" href="/#org" />

(可以推断,因为您为 WebSite 声明了这一点,并且每个 WebPage 都通过 hasPart 连接,但这对于许多消费者来说可能太高级了,所以声明它明确地可以提供帮助。)