Schema.org <head> HTML标记:我可以只使用meta标签吗?

6

我在查看Schema.org,需要将我的 <html> 标签更改为这个吗?

<html itemscope itemtype="http://schema.org/Article">

我只能使用标签中的meta标签吗?

<meta itemprop="name" content="The Name or Title Here">
<meta itemprop="description" content="This is the page description">
<meta itemprop="image" content="http://www.example.com/image.jpg">
4个回答

8

属性需要属于一个项。您可以使用 itemscope 属性创建一个项(itemtype 属性可以为此项指定类型)。

如果没有使用 itemscope,您的标记示例将无效。

可以仅在 head 元素中提供微数据,但出于以下两个原因,这不被推荐:

  • 微数据旨在用于现有的标记。虽然通常可以通过在 head 中包含某些 meta/link 元素(使用 itemref,请参见示例),来实现某些元素的使用,但大多数内容通常在 body 中。如果您只想在 head 中使用元素,则必须复制大部分内容。但是,如果您想走这条路,可以考虑使用 JSON-LD

  • 由于 head 不允许使用分组元素(如 div),因此表达微数据变得复杂。您需要为每个属性使用 itemref 并滥用像 style 这样的元素用于每个项(请参见此答案中的第一个片段作为示例)。

您的示例可能如下所示:

<head>
  <style itemscope itemtype="http://schema.org/Article" itemref="p1a p1b p1c"></style>
  <meta id="p1a" itemprop="name" content="The Name or Title Here">
  <meta id="p1b" itemprop="description" content="This is the page description">
  <link id="p1c" itemprop="image" href="http://www.example.com/image.jpg">
</head>

如果您可以在 head 元素上使用 itemscope,那将更好:

<head itemscope itemtype="http://schema.org/Article">
  <meta itemprop="name" content="The Name or Title Here">
  <meta itemprop="description" content="This is the page description">
  <link itemprop="image" href="http://www.example.com/image.jpg">
</head>

但是,一旦你需要多个项目(这通常是情况,例如Organization/Personauthor等),这种方法就不再适用了,你需要像我第一个代码片段中那样的解决方案。
请注意,在body元素内可以使用meta/link元素进行微数据标记。这使得它更加容易,因为你可以使用div元素来标记itemscope。因此,即使你复制内容而不是标记现有内容,也最好在body中这样做。
<div itemscope itemtype="http://schema.org/Article">
  <meta itemprop="name" content="The Name or Title Here">
  <meta itemprop="description" content="This is the page description">
  <link itemprop="image" href="http://www.example.com/image.jpg">
</div>

我将image属性的meta元素替换为link元素,因为使用meta元素不符合此目的的要求


1
@insertusernamehere:Schema.org和Microdata是不同的事物和项目,所以无论Schema.org写了什么,都不会影响Microdata的有效性。 (顺便说一句,在RDFa中它也是有效的。)--Schema.org关于“WebPage”的声明对数据的使用者有意义(他们必须使用无效的数据),但是在我看来,作者不应该隐含使用“WebPage”;我建议作者遵循“WebPage”描述中下一句的建议:“我们建议明确声明[...]”。 - unor
为什么要滥用<style>?难道不能只使用像这样的带有空内容的meta标签吗:<meta content="" itemscope itemtype="http://schema.org/Article" itemref="p1a p1b p1c">?(验证器不会报错) - lucian
@LucianDavidescu:meta 元素必须恰好有以下属性之一:nameitemprophttp-equivcharset - unor
确实,抱歉,我有点困惑。<meta itemprop="hasPart" content="" itemscope itemtype="http://schema.org/Article" itemref="p1a p1b p1c"> 这个怎么样? - lucian
我知道这可能也会让人感到困惑,很抱歉。最好举个例子来说明我的意思:https://pastebin.com/itaps2Ka这段代码可以通过Google结构化数据测试工具进行验证和解析,只有一个警告,似乎是双重归属的问题(第一个是正确的,第二个是无用的)。 - lucian
1
@LucianDavidescu:是的,这适用于子/嵌入项,但不适用于顶级项(无法具有“itemprop”属性)。 - unor

1
根据scheme.org提供的示例,是的,对于Google来说两者都是必需的。
为了验证数据是否被正确捕获,您可以使用此工具: 结构化数据测试工具 通过使用上述工具,您可以看到如果省略itemtype="http://schema.org/Article",数据将无法被捕获。

谢谢提供的信息 :) 是否有一种通用的模式属性可以应用于网站、文章、视频和图片?如果我能应用一个适用于所有内容的itemtype,那就太棒了。目前上面提到的itemtype只适用于文章。 - C0nw0nk
最常见的一个是http://schema.org/CreativeWork,如果可能的话,请尽量缩小范围。 :) - Vincent1989
请注意,模式微数据因其实现混乱而变得过时,因为它会干扰HTML。谷歌建议我们改用JSON-LD,https://developers.google.com/search/docs/guides/intro-structured-data。这样更容易实现。 - Vincent1989

1

whatwg.org上关于Microdata的部分未明确提到HTML文档的head元素中的meta元素。因此,需要使用itemscope以获得有效的标记。

如果您查看schema.org中的描述,您会发现这篇关于 WebPages 的部分:

每个网页都被默认为是WebPage类型,因此可以使用该页面的各种属性(例如面包屑)。如果指定了这些属性,则我们建议进行显式声明,但是如果它们在itemscope之外被发现,将假定它们与页面相关。

有趣的部分在于:

[...]如果它们[属性]在itemscope之外被发现,则将假定它们与页面相关。

根据此,您不需要将itemscope应用于html元素。但它更像是建议而不是明确的规定。
您可以在谷歌的结构化数据测试工具中看到这种行为。当您运行此代码时:
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta itemprop="name" content="The Name or Title Here">
        <meta itemprop="description" content="This is the page description">
        <meta itemprop="image" content="http://www.example.com/image.jpg">
    </head>
</html>

如果您不添加itemscope,则会发现它不会捕获任何数据。一旦添加了itemscope,它将开始捕获数据,而且没有任何错误会出现,结果为未指定类型

Screenshot from Google's tool

使用 itemtype="http://schema.org/Article" 会失败或至少会因为属性过少而抛出错误,因为没有给出足够的 Article 类型的属性。

您可以在scheme.org的网页概述中找到各种不同类型。也许有一种适合整个页面。


越简单和有效越棒 :) 我认为很难让网站修改它们的<html>标签,因为在文章、博客、网站、视频等之间切换是许多网站不使用它的原因,我认为他们会坚持使用opengraph。 - C0nw0nk
1
@C0nw0nk 即使是对于 Open Graph,你实际上也需要 <html prefix="og: http://ogp.me/ns#">,但我认为大多数解析器不需要。请参见 ogp.me - insertusernamehere
你说过,“只有在itemscope与未定义的类型一起存在时才可用。” 你能举个例子来说明未定义的类型是否可用于所有类型,如文章、视频、图片和博客等? - C0nw0nk
@C0nw0nk 我已经更新了答案,并提供了更多关于你的问题的信息。 - insertusernamehere

0

您可以安全地使用<html itemscope itemtype="http://schema.org/Article">。这样可以让您在<head>元素内定义itemprop。

Google Rich Test Snippets和w3验证器都验证了这种方法,我已经测试过了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接