为什么我的itemprop ='image'标记不正确?


9

我一直在尝试微数据,并认为可以在我的博客上尝试。原来我使用的模板已经添加了一些标记。那不是很好,所以我固定了我能做的。

为了提高运气,我在最新文章中添加了更多标记,但是Google的结构化数据测试工具(SDTT)对itemprop='image'属性不满意,我不确定为什么。

结构化测试工具错误

结果页

根据我的理解,我忽略了两者之间的所有代码,因此对数据进行了结构化:

<div itemscope='itemscope' itemtype='http://schema.org/BlogPosting'>
  <div itemprop='articleBody'>
    <a href="1.png" itemprop="url"><img itemprop="image sharedContent" src="1.png" /></a>
    <a href="2.png" itemprop="url"><img itemprop="image sharedContent" src="2.png" /></a>
    <a href="3.png" itemprop="url"><img itemprop="image sharedContent" src="3.png" /></a>
  </div>
</div>

在我看来,这是正确的。 BlogPosting可以具有属性,articleBodyimage根据https://schema.org/BlogPosting进行操作,但根据SDTT:

属性itemtype的值无效。

确实,我刚刚使用上面的示例代码尝试了SDTT,但它未能通过验证。

SDTT中的示例代码

因此,我显然缺少了一些东西。我究竟做错了什么?


此问题中的某些链接已删除,因为它们对于回答问题不是必需的。
约翰·康德

为什么要删除广泛使用的标签?
肯·夏普

Answers:


15

schema.org/BlogPosting图片允许ImageObject和URL,但是Google只允许ImageObject,因此是错误的。预期的标记是:

<!-- my code -->
<div itemprop="image" itemscope itemtype="http://schema.org/ImageObject">
  <img src="image.jpg" itemprop="url">
</div>

               

另一个差异是schema.org/ImageObject建议contentUrl,但谷歌建议url,因此以上我的使用。


响应您评论的代码,您的结构仍然不正确。我将逐行介绍:

<!-- your code -->
<div itemscope='itemscope' itemtype='http://schema.org/BlogPosting'>

次要要点,但除非您要使用XHTML,否则itemscope='itemscope'是错误的。使用itemscope(如稍后所述)。

<!-- your code -->
  <div itemprop='articleBody'>
    <div itemscope itemtype="http://schema.org/ImageObject"/>

您的ImageObject是articleBody属性的子级,但是您没有以这种方式关联它。像这样,您有一个没有关联属性的articleBody和一个未关联的ImageObject。你应该用

<!-- my code -->
    <div itemprop="image" itemscope itemtype="http://schema.org/ImageObject">

另外,/>即使您正在尝试使用XHTML,也不正确,因为此元素的确有子元素和closeing </div>。只需使用>上面片段中包含的内容即可。

<!-- your code -->
      <a href="1.png" itemprop="url"><img itemprop="image sharedContent" src="1.png" /></a>

sharedContent在这里做什么?sharedContent在用作SocialMediaPosting的属性时期望CreativeWork —永远不要用作ImageObject的属性,也不要放在img上。

您的其他代码段(按如下所示放置sharedContent属性)也是错误的。

<!-- your code -->
<div itemscope='itemscope' itemtype='http://schema.org/BlogPosting'>
  <div itemprop='articleBody'>
    <div itemprop='sharedContent'>
      <div itemscope itemtype="http://schema.org/ImageObject"/>

尽管sharedContent现在位置正确,但仍需要是CreativeWork。如结构化数据测试工具所示,您的ImageObject仍未与BlogPosting关联。

                                          

以下是正确的代码。

<!-- my code -->
<div itemscope itemtype="http://schema.org/BlogPosting">
  <div itemprop="articleBody">
    <div itemprop="image" itemscope itemtype="http://schema.org/ImageObject">
      <a href="1.png" itemprop="url"><img itemprop="image" src="1.png"></a>
    </div>
    <div itemprop="image" itemscope itemtype="http://schema.org/ImageObject">
      <a href="2.png" itemprop="url"><img itemprop="image" src="2.png"></a>
    </div>
    <div itemprop="image" itemscope itemtype="http://schema.org/ImageObject">
      <a href="3.png" itemprop="url"><img itemprop="image" src="3.png"></a>
    </div>
  </div>
</div>

我知道了。作为子项添加ImageObject失败sharedContentpastebin.com/cSgVZNyE。删除sharedContent让它很高兴:pastebin.com/rieWwSM6。将每个文件包装image在父文件中sharedContentpastebin.com/AmpBDqJs)都会很愉快,但这是否是因为Google的STDD只是忽略了它?该STDD是很高兴,如果contentURL使用以及pastebin.com/23wBvx8F。看来我做对了,而Google做错了吗?那一定是第一个。guess我想我可以通过添加所有相关标签来安抚它们。谢谢!😀–
肯·夏普

1
@Ken请参阅我的编辑以获取对您的代码的反馈。
grg '16

TS使用了一种基本的Blogger模板,因此,如果不修改整个模板,他将无法使用您的代码。更改必须在模板级别而不是结构化数据级别完成。
Evgeniy

再次感谢@grgarside。您肯定是正确的sharedContent-我用错了。我现在已将其删除。再来看看模式,我看到我不需要在.NET中使用它CreativeWork。只需忽略/>,它就匆匆输入了,原始代码是XHTML。我只是在示例中混合了两者(因此有的两个版本itemscope)。最终代码是正确的,诚实!😁–
肯·夏普

@Evgeniy模板正在编辑中,或者根本无法使用。我最初的问题包含任何人都可以轻松检查的链接,但是现在有两个Wallies删除了这些链接,我讨厌编辑它。因此,正如我预料的那样,我在这里再次自我解释。
肯·夏普

2

Google结构化数据测试器将图像标记为无效时,我遇到了类似的问题。显然,它不接受源为localhost域的图像。一旦部署到登台服务器,结构化标记就会通过验证。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.