将 schema.org 标签添加到站点的 header:如何以及使用哪种架构?
Adding schema.org tags to a site's header: how and which schema?
我有一个提供运输服务而不是产品的网站(我的意思是我们不销售这个品牌的小部件,其他型号......;我们只提供一种运输服务)。我有点不清楚我应该如何将 schema.org 微数据添加到我的站点,所以我基本上查看了 Ryanair 在做什么(因为我们的产品最像他们的)并复制了他们的标记(将其更改为我们公司的名字,很明显)。他们的标记是这样的:
<meta content="IE=edge" http-equiv="X-UA-Compatible"/>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type"/>
<meta content="#22356b" name="theme-color"/>
<meta content="Book Cheap Flights direct at the official Ryanair website for Europe's lowest fares. Fully allocated seating and much more now available online" name="description"/>
<meta content="summary" name="twitter:card"/>
<meta content="@ryanair" name="twitter:site"/>
<meta content="Cheap Flights | Cheap Flights to Europe | Ryanair" name="twitter:title"/>
<meta content="Book Cheap Flights direct at the official Ryanair website for Europe's lowest fares. Fully allocated seating and much more now available online" name="twitter:description"/><meta content="@ryanair" name="twitter:creator"/>
<meta content="/static/images/seo/seo-logo-200.png" name="twitter:image:src"/>
<meta content="https://www.ryanair.com" name="twitter:domain"/>
<meta itemtype="http://schema.org/Product" itemscope="itemscope"/>
<meta content="Cheap Flights | Cheap Flights to Europe | Ryanair" property="og:title"/>
<meta content="Cheap Flights | Cheap Flights to Europe | Ryanair" itemprop="headline"/>
<meta content="Book Cheap Flights direct at the official Ryanair website for Europe's lowest fares. Fully allocated seating and much more now available online" property="og:description"/>
<meta content="Book Cheap Flights direct at the official Ryanair website for Europe's lowest fares. Fully allocated seating and much more now available online" itemprop="description"/>
<meta content="http://www.ryanair.com/en/" property="og:url"/>
<meta content="/static/images/seo/seo-logo-200.png" property="og:image"/>
<meta content="/static/images/seo/seo-logo-200.png" itemprop="image"/>
<meta content="article" property="og:type"/>
<meta content="Ryanair" property="og:site_name"/>
<meta content="" property="fb:admins"/><link href="https://plus.google.com/" rel="publisher"/>
<meta content="INDEX,FOLLOW" name="robots"/>
<meta content="NOYDIR" name="Slurp"/>
<meta content="NOODP" name="Robots"/>
<meta content="Copyright Ryanair.com 2014" name="dcterms.rightsHolder"/>
然而,Google 网站站长工具在以下行中向我显示错误:
<meta itemtype="http://schema.org/Product" itemscope="itemscope" />
说需要一个"name"属性.
我该如何添加?我看过的所有示例都适用于您拥有多种产品并且需要标记每一种产品的情况。此外,我看到的所有示例都是在网页的 body 中添加标记,而不是在 header 中添加标记。哪一个是正确的?
更新: 以下回答不完全正确。 可以在 head
元素中表达每个微数据,head
或 html
元素上不需要父项。例如,请参阅 my comment on a related Schema.org issue 中的这个片段,它使用 style
元素创建顶级项目:
<head>
<style itemscope itemtype="http://schema.org/Thing" itemref="i1a i1b"></style>
<meta id="i1a" itemprop="name" content="Top-level item 1" />
<meta id="i1b" content="" itemprop="image" itemscope itemtype="http://schema.org/ImageObject" itemref="i1b-1a i1b-1b" />
<meta id="i1b-1a" itemprop="name" content="Nested item 1" />
<link id="i1b-1b" itemprop="contentUrl" href="image.png" />
</head>
这不是一个好的做法,并且由于所有需要的 itemref
/id
值而变得混乱,但它是有效的。
根据您在问题中包含的片段,只有这些元素包含微数据:
<meta itemtype="http://schema.org/Product" itemscope="itemscope"/>
<meta content="Cheap Flights | Cheap Flights to Europe | Ryanair" itemprop="headline"/>
<meta content="Book Cheap Flights direct at the official Ryanair website for Europe's lowest fares. Fully allocated seating and much more now available online" itemprop="description"/>
<meta content="/static/images/seo/seo-logo-200.png" itemprop="image"/>
此代码无效,未达到他们可能想要实现的目的。
如果你只想在 head
元素中提供微数据(这没有多大意义,但让我们假装)你需要一个可以有子元素的元素。否则您无法创建顶级微数据项。
唯一的候选者是 head
元素本身,因此您只能在 head
中提供 一个 项目,并且它不能有任何属性以另一个项目作为价值。对于属性,您将使用 link
元素(如果值是 URI)和 meta
元素(如果值不是 URI)。
所以它必须是(省略 headline
属性,因为 Product
不允许):
<head itemscope itemtype="http://schema.org/Product">
<meta content="…" itemprop="description"/>
<link href="…" itemprop="image"/>
</head>
这非常有限。因此,如果您想使用微数据(或 RDFa),您很可能想利用整个文档(html
、head
和 body
).使用 Microdata/RDFa 的全部意义在于利用您现有的内容,而不必复制它。如果您不想 "annotate" 您现有的内容,您可以使用 JSON-LD 并简单地在 script
元素中提供所有属性,例如 head
。
关于缺少name
属性:如果Google的结构化数据测试工具说缺少属性,那只是意味着Google 将不会 对您的标记做 如果它丢失了。这并不意味着没有它代码将无效,因为 Schema.org 没有必需的属性。
我有一个提供运输服务而不是产品的网站(我的意思是我们不销售这个品牌的小部件,其他型号......;我们只提供一种运输服务)。我有点不清楚我应该如何将 schema.org 微数据添加到我的站点,所以我基本上查看了 Ryanair 在做什么(因为我们的产品最像他们的)并复制了他们的标记(将其更改为我们公司的名字,很明显)。他们的标记是这样的:
<meta content="IE=edge" http-equiv="X-UA-Compatible"/>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type"/>
<meta content="#22356b" name="theme-color"/>
<meta content="Book Cheap Flights direct at the official Ryanair website for Europe's lowest fares. Fully allocated seating and much more now available online" name="description"/>
<meta content="summary" name="twitter:card"/>
<meta content="@ryanair" name="twitter:site"/>
<meta content="Cheap Flights | Cheap Flights to Europe | Ryanair" name="twitter:title"/>
<meta content="Book Cheap Flights direct at the official Ryanair website for Europe's lowest fares. Fully allocated seating and much more now available online" name="twitter:description"/><meta content="@ryanair" name="twitter:creator"/>
<meta content="/static/images/seo/seo-logo-200.png" name="twitter:image:src"/>
<meta content="https://www.ryanair.com" name="twitter:domain"/>
<meta itemtype="http://schema.org/Product" itemscope="itemscope"/>
<meta content="Cheap Flights | Cheap Flights to Europe | Ryanair" property="og:title"/>
<meta content="Cheap Flights | Cheap Flights to Europe | Ryanair" itemprop="headline"/>
<meta content="Book Cheap Flights direct at the official Ryanair website for Europe's lowest fares. Fully allocated seating and much more now available online" property="og:description"/>
<meta content="Book Cheap Flights direct at the official Ryanair website for Europe's lowest fares. Fully allocated seating and much more now available online" itemprop="description"/>
<meta content="http://www.ryanair.com/en/" property="og:url"/>
<meta content="/static/images/seo/seo-logo-200.png" property="og:image"/>
<meta content="/static/images/seo/seo-logo-200.png" itemprop="image"/>
<meta content="article" property="og:type"/>
<meta content="Ryanair" property="og:site_name"/>
<meta content="" property="fb:admins"/><link href="https://plus.google.com/" rel="publisher"/>
<meta content="INDEX,FOLLOW" name="robots"/>
<meta content="NOYDIR" name="Slurp"/>
<meta content="NOODP" name="Robots"/>
<meta content="Copyright Ryanair.com 2014" name="dcterms.rightsHolder"/>
然而,Google 网站站长工具在以下行中向我显示错误:
<meta itemtype="http://schema.org/Product" itemscope="itemscope" />
说需要一个"name"属性.
我该如何添加?我看过的所有示例都适用于您拥有多种产品并且需要标记每一种产品的情况。此外,我看到的所有示例都是在网页的 body 中添加标记,而不是在 header 中添加标记。哪一个是正确的?
更新: 以下回答不完全正确。 可以在 head
元素中表达每个微数据,head
或 html
元素上不需要父项。例如,请参阅 my comment on a related Schema.org issue 中的这个片段,它使用 style
元素创建顶级项目:
<head>
<style itemscope itemtype="http://schema.org/Thing" itemref="i1a i1b"></style>
<meta id="i1a" itemprop="name" content="Top-level item 1" />
<meta id="i1b" content="" itemprop="image" itemscope itemtype="http://schema.org/ImageObject" itemref="i1b-1a i1b-1b" />
<meta id="i1b-1a" itemprop="name" content="Nested item 1" />
<link id="i1b-1b" itemprop="contentUrl" href="image.png" />
</head>
这不是一个好的做法,并且由于所有需要的 itemref
/id
值而变得混乱,但它是有效的。
根据您在问题中包含的片段,只有这些元素包含微数据:
<meta itemtype="http://schema.org/Product" itemscope="itemscope"/> <meta content="Cheap Flights | Cheap Flights to Europe | Ryanair" itemprop="headline"/> <meta content="Book Cheap Flights direct at the official Ryanair website for Europe's lowest fares. Fully allocated seating and much more now available online" itemprop="description"/> <meta content="/static/images/seo/seo-logo-200.png" itemprop="image"/>
此代码无效,未达到他们可能想要实现的目的。
如果你只想在 head
元素中提供微数据(这没有多大意义,但让我们假装)你需要一个可以有子元素的元素。否则您无法创建顶级微数据项。
唯一的候选者是 head
元素本身,因此您只能在 head
中提供 一个 项目,并且它不能有任何属性以另一个项目作为价值。对于属性,您将使用 link
元素(如果值是 URI)和 meta
元素(如果值不是 URI)。
所以它必须是(省略 headline
属性,因为 Product
不允许):
<head itemscope itemtype="http://schema.org/Product">
<meta content="…" itemprop="description"/>
<link href="…" itemprop="image"/>
</head>
这非常有限。因此,如果您想使用微数据(或 RDFa),您很可能想利用整个文档(html
、head
和 body
).使用 Microdata/RDFa 的全部意义在于利用您现有的内容,而不必复制它。如果您不想 "annotate" 您现有的内容,您可以使用 JSON-LD 并简单地在 script
元素中提供所有属性,例如 head
。
关于缺少name
属性:如果Google的结构化数据测试工具说缺少属性,那只是意味着Google 将不会 对您的标记做 如果它丢失了。这并不意味着没有它代码将无效,因为 Schema.org 没有必需的属性。