Ste*_*ven 6 html5 microdata schema.org
在Person
模式下,我想将每个职位与其各自的组织相关联.这是一个类似简历的设置,所以有很多工作和很多组织.
这是我项目中一些代码的实际示例(内容已剪切+已更改):
<div itemscope itemtype="http://schema.org/Person">
…
<p><!--list of jobs-->
<span itemprop="jobTitle">Job 1</span>,
<span itemprop="jobTitle">Job 2</span>, and
<span itemprop="jobTitle">Job 3</span>
</p>
<p><!--list of places worked for-->
<span itemprop="worksFor">Company A</span> and
<span itemprop="worksFor">Company B</span>
</p>
</div>
Run Code Online (Sandbox Code Playgroud)
这会从https://search.google.com/structured-data/testing-tool/ 返回这样的架构:
@type Person
jobTitle Job 1
jobTitle Job 2
jobTitle Job 3
worksFor
@type Organization
name Company A
worksFor
@type Organization
name Company B
Run Code Online (Sandbox Code Playgroud)
假设我希望工作1和2成为A公司的一部分,而Job 3则成为公司B的一部分.我如何表达它,以便它在Schema中具有干净的层次结构?
我知道我可以选择itemref
(从如何与schema.org中的项目相关的问题?)但我无法弄清楚如何设计一种方法来jobTitle
引用Organization
(worksFor
).
我不相信模式和谷歌(或至少是结构化数据工具)解释它的方式之间不会发生这种情况。我可能是错的,但我认为问题在于 和jobTitle
都worksFor
适用于person
. 因此,谷歌会将这两个属性与该人相关联,但不一定将这两个属性相互关联。
也可能是我的方法中遗漏了一些东西,而这实际上是可能的。我想发布我的答案,至少引导您或有更好经验的人朝正确的方向前进(或证实我的怀疑)。我有两种方法,我相信微数据方法在工具中看起来是正确的,但却是错误的。我认为 JSON-LD 方法是正确的,但在结构化数据工具中无法正确显示。
微观数据方法
如果您可以在一定程度上修改 DOM,则可以使用元标记将组织嵌套在人员中。尽管结构化数据工具显示了我认为您想要的结果,但我不相信数据真的相关,因为员工并未真正附加到 ID:
<div itemscope itemtype="http://schema.org/Person" id="person1">
<p><!--list of jobs-->
<span>Job 1</span>,
<span>Job 2</span>, and
<span>Job 3</span>
</p>
<p><!--list of places worked for-->
<span itemscope itemprop="worksFor" itemtype="http://schema.org/Organization">
<span itemprop="name">Company A</span>
<span itemscope itemprop="employee" itemref="person1" itemtype="http://schema.org/Person">
<meta itemprop="jobTitle" content="Job 1">
</span>
</span> and
<span itemscope itemprop="worksFor" itemtype="http://schema.org/Organization">
<span itemprop="name">Company B</span>
<span itemscope itemprop="employee" itemref="person1" itemtype="http://schema.org/Person">
<meta itemprop="jobTitle" content="Job 2">
<meta itemprop="jobTitle" content="Job 3">
</span>
</span>
</p>
</div>
Run Code Online (Sandbox Code Playgroud)
返回:
@type = Person
worksFor
@type = Organization
name = Company A
employee
@type = Person
jobTitle = Job 1
worksFor
@type = Organization
name = Company B
employee
@type = Person
jobTitle = Job 2
jobTitle = Job 3
Run Code Online (Sandbox Code Playgroud)
我通过嵌套Person
> Organization
> Employee
( Person
) >来解决这个问题JobTitle
。我为具有元标记的员工添加了一个空白范围,以便您可以保持相同的前端样式。
我对这种方法的担忧是,Employee
每个下层Organization
将与上层断开连接Person
。我在父级上使用了一个 id,并在每个中使用了 itemrefEmployee
来指向该父级 id,但我不确定这是否真正受支持,或者也许嵌套就足够了(值得怀疑)。
JSON-LD方法
我认为 JSON-LD 方法正确地将人与组织联系起来,但 Google 的工具最终会将其推jobTitle
回到人身上,基本上给出相同的结果。不过,可能有更好的方法来关联数据。
<script type="application/ld+json">
{
"@context": {
"@vocab": "http://schema.org/",
"id": "@id",
"graph": "@graph",
"type": "@type"
},
"graph" : [
{
"type": "Person",
"id": "Person1",
"name": "John Smith",
"worksFor" : [
{
"id": "CompanyA"
},
{
"id": "CompanyB"
}
]
},
{
"type": "Organization",
"id": "CompanyA",
"name": "Company A",
"employees": [
{
"@id" : "Person1",
"jobTitle" : ["Job 1", "Job 2"]
}
]
},
{
"type": "Organization",
"id": "CompanyB",
"name": "Company B",
"employees": [
{
"@id" : "Person1",
"jobTitle" : "Job 3"
}
]
}
]
}
</script>
Run Code Online (Sandbox Code Playgroud)
不幸的是返回:
@type : http://www.example.com/Person
@id : http://www.example.com/Person1
name : John Smith
jobTitle : Job 1
jobTitle : Job 2
jobTitle : Job 3
worksFor
@type : http://www.example.com/Organization
@id : http://www.example.com/CompanyA
name : Company A
worksFor
@type : http://www.example.com/Organization
@id : http://www.example.com/CompanyB
name : Company B
Run Code Online (Sandbox Code Playgroud)
虽然结构化数据工具以一种看起来正确的方式提供了上述一种选择,另一种看起来错误但看似正确的方式,但很难说谷歌如何真正关联数据。也可能只是架构/数据工具在更基本的层面上假设了这种关系,通常有人不会在多个组织中拥有多个职位......但我只是在这一点上推测。
底线是- 我觉得问题是Organization
只能在person
as下列出worksFor
。jobTitle
只能在 a 下person
,不能在 下Organization
。您可以在asPerson
下进行关联,但这似乎只是在结构化数据工具中以匿名方式推回相关。过去,结构化数据工具已知对 Google 文档存在一些缺陷,因此我不确定您不能 100% 依赖从它看到的内容。Organization
employee
jobTitle
person
归档时间: |
|
查看次数: |
966 次 |
最近记录: |