1

我刚开始使用 schema.org 元标记来突出显示我网站上的结构化数据。

我正在使用 node.js、express 和 jam 来生成我的内容。我正在一些但不是所有页面上设置这些标签。我不想向搜索引擎歪曲未标记的页面。

我还没有找到一种优雅的方法来仅在情境中将itemscope属性插入到我的 html 文档中。

编辑- @martinhepp 建议将属性字符串传递给 Jade 并将其插入标签内。我想这样做,但我不知道怎么做。这是我的尝试和输出。

//node.js
locals.testSchemaTag = 'itemscope itemtype="http://schema.org/Product"';
//jade
p(locals.testSchemaTag) Foo Bar
//rendered HTML
<p locals.testschematag="">Foo Bar</p>

所以这将是可取的。但是,如果这不起作用或没有人知道该怎么做,对于我不想指定特定模式的页面,设置itemscope为 false 就足够了吗?

这就是我现在正在做的事情。

// node.js
res.locals.schema = res.locals.schema || { 
  itemtype: "false", 
  itemscope: "false", 
  properties: [], 
};         
if(res.locals.schema.itemtype !== "false"){
  res.locals.schema.itemscope = "itemscope";
  res.locals.schema.properties = res.locals.schema.properties || []; 
};   

// jade
!!!
html(itemscope=locals.schema.itemscope, itemtype=locals.schema.itemtype)
  head

// rendered output A
<html itemscope="itemscope" itemtype="http://schema.org/Restaurant">

// rendered output B
<html itemscope="false" itemtype="false">

这会混淆搜索引擎还是他们会认识到我在这里禁用了元素的itemscopeitemtype属性?<html>

4

2 回答 2

1

首先:我假设您所说的一切都发生在服务器端。任何客户端 Javascript 将不适用于主流搜索引擎爬虫,仅适用于未来的 schema.org 感知浏览器扩展。

现在,简单的答案是:如果您想在某些情况下禁止标记,只需在 itemscope 和 itemtype 关键字周围放置一个条件子句。

// rendered output A
<html itemscope="itemscope" itemtype="http://schema.org/Restaurant">

// rendered output B
<html>

而已。

另请注意,在大多数情况下, html 元素是 schema.org 类型的错误位置。对于 schema:WebPage,使用 head 元素。对于 schema:Product、schema:Offer 等,请使用模板正文中的相应元素,嗯 h1、div、article、section、...

马丁

于 2013-07-31T12:03:49.357 回答
1

我为 Yandex (yandex.ru/.com - 俄罗斯最受欢迎的搜索引擎) 工作,可以告诉我们如何处理它。我敢打赌,尽管每个 SE 的过程都差不多。

所以这里应该考虑三件事。

1.微数据 W3C 文档

指定了 itemscope 属性的元素会创建一个新项目,即一组名称-值对。

也就是说,如果您将itemscope属性放在 HTML 元素中,它将被视为一个项目。即使在您的情况下(实际上“=false”被忽略)。如果您不想定义新项目,则根本不应该使用itemscope属性。

2.每一个使用标记的搜索引擎都有它自己的验证工具——工具,你可以在其中检查专门针对这个SE的标记处理。对于 Yandex 来说,它就在这里,对于谷歌来说,它就在这里。Bing 也有一个,但它需要先在他们的网站管理员工具中登录。将它用于您对特定 SE 标记处理的每个问题,您将获得非常详细的答案。

因此,您没有提供标记示例,但让我们考虑这个简单的示例。

<div itemscope="false" itemtype="false">
  <span itemprop="name">Not a happy camper</span> -
  by <span itemprop="author">Ellie</span>,
  <meta itemprop="datePublished" content="2011-04-01">April 1, 2011
  <span itemprop="description">The lamp burned out and now I have to replace it. </span>
</div>

因此,Yandex 的验证器说以下内容:

microdata
  WARNING: itemtype false not recognized by validator
  itemType = false
    name = Not a happy camper
    author = Ellie
    datepublished = 2011-04-01
    description = The lamp burned out and now I have to replace it.

如您所见,itemscope="false" 被忽略,并且项目的类型设置为“false”(由于 itemtype="false")。那就是 Yandex 找到了一些实体,但不知道如何处理它(在第三点中对此进行了更多介绍)。

谷歌呢?

Item 
  property: 
  name: Not a happy camper
  author:   Ellie
  datepublished:    2011-04-01
  description:  The lamp burned out and now I have to replace it.

几乎相同,只是它将实体视为完全没有类型。

3.但事实上你不应该真正关心这个:) 不是任何搜索引擎都适用于完整的词汇及其所有类型(schema.org、微格式或任何其他)。也就是说,每个搜索引擎都有它理解的类型列表并有产品。Yandex 列表在这里,Google 在这里,Bing 在这里。如您所见,支持非常有限,但正在积极发展。这实际上意味着什么?即使您的“错误”标记被视为一个对象,它实际上并没有在任何地方使用。所以你可以安全地做到这一点:)

于 2013-08-03T20:35:26.067 回答