HTML5的Open Graph验证

Sco*_*eld 58 validation html5 facebook opengraph

有没有办法让facebook蹩脚的Open Graph元标记验证我的doctype是否为<!DOCTYPE html>(HTML5)?

除了facebook的Open Graph元标记,我的文档完美验证.

我真的不想使用,<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd">因为这会产生一整套新的问题.

以下是其中一个验证错误的示例...

错误第11行,第47列:此时元素元素上不允许使用属性属性.

<meta property="og:type" content="website" />
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激...我一直在寻找和开启几天无济于事.

Bla*_*ise 13

对于HTML5,将其添加到您的html元素,如ogp.me中所述,并保留您的og:前缀属性:

<!doctype html>
<html prefix="og: http://ogp.me/ns#">
<head>
     <meta property="og:type" content="website" />
     ...
Run Code Online (Sandbox Code Playgroud)

对于XHTML(如OP的问题),请使用name属性而不是property属性.Facebook lint将发出警告,但元值仍将被识别和解析.

<meta name="og:title" content="Hello Facebook" />
Run Code Online (Sandbox Code Playgroud)

  • 这实际上并没有验证. (11认同)

Jus*_*tin 12

是的.要验证为HTML5,请prefixOpen Graph文档添加属性:

<!DOCTYPE html>
<html prefix="og: http://ogp.me/ns#">
<head>
<title>Valid HTML5!</title>
<meta charset="utf-8"/>
<meta property="og:title" content="">
</head>
<body></body>
</html>
Run Code Online (Sandbox Code Playgroud)

将上面的内容复制并粘贴到w3验证器上进行检查.

生产就绪 - Apple在apple.com上使用这种方法.

  • 即使没有`prefix`属性,这也没有错误验证.'前缀'属性是否仍然必要? (2认同)
  • 一个小补充:我有一个无效的`&lt;html prefix="og:http://ogp.me/ns#"&gt;`。虽然 `&lt;html prefix="og: http://ogp.me/ns#"&gt;` 是有效的。不同之处在于 og: 和 http 之间的空间字符。 (2认同)

jus*_*eez 11

简短的回答是不,不是在这个时候.所有其他答案都是变通方法,黑客攻击,或者只是简单的疯狂.唯一的长期解决方案是Facebook需要创建一个有效HTML5的替代语法.

对于那些通过"facebookexternalhit"用户代理推荐Facebook目标的人,你必须记住其他公司正在跟随这些标签的Facebook领先.例如,如果不存在首选的Schema.org标记,则Google+将回退到OpenGraph标记.由于大多数网站都没有使用Schema.org属性(特别是如果他们花时间正确使用OpenGraph),您可以通过遵循此建议轻松地错过在Google+等网站上增强您的代码段.

随着Facebook的无处不在,直接针对它们确实不是一个好的解决方案 - 即使他们选择的实现对开发人员来说也是有问题的.在Stack Overflow等网站上寻找解决方案时,您必须始终记住这些方法可能会产生无法预料的后果.

对于我们的主要网站,我们坚持使用XHTML + RDFa进行验证,并且它运行良好.我希望随着HTML5的使用增长,Facebook团队将开始接受这种元数据的有效格式.

至于为什么我们关心验证: 我们发现,如果可能的话,验证有助于提醒我们页面中的错误,而不是教我们忽略它们.既然我们都在我们的浏览器使用的验证信息,我们立即知道,如果有一个页面上的验证错误(或警告),并可以研究是否有可能消除它(它是时间,这99 +%).这节省了我们处理规范的限制性实现的时间,特别是在现今的边缘和移动平台上.我们已经看到奇怪错误的大幅减少,因为我们知道我们的页面是有效的,并且知道浏览器中发生的事情与特定UA可能无法按预期解释的无效标记无关.


小智 5

仅当facebook扫描页面中的这些标记时才需要这些元标记.

    <? 
    if(eregi("facebookexternalhit", $_SERVER['HTTP_USER_AGENT'])){

      echo '<meta property="og:type" content=xxxxxxxxxxxxx';
      // continue with the other open graph tags
    }
   ?>
Run Code Online (Sandbox Code Playgroud)

只有当facebook需要它们时才会出现这些标签 - 这种方法使用PHP将其完全删除,以用于包括W3C验证在内的所有其他实例.

  • Facebook并不是Open Graph标签的唯一消费者. (24认同)
  • 是的,twitter卡也使用它们 (2认同)

Wra*_*nny 5

这里的许多答案已经过时了。请不要窥探标题或通过 JavaScript 编写(因为处理器可能不会评估 JS)。

W3C 建议(HTML5 的扩展)称为 RDFa 1.1 和 RDFa Lite 1.1(参见http://www.w3.org/TR/rdfa-lite/http://www.w3.org/TR/rdfa-primer/ ) 使“属性”属性有效且符合要求。与此同时(因为这里有较旧的答案)验证器http://validator.w3.org/check将属性识别为有效。此外,开放图谱协议文档http://ogp.me/已更新以反映 RDFa 1.1(它使用“前缀”属性)。

W3C 的工作是在 OpenGraph 和 schema.org 等人的意见下完成的,以解决这个问题引发的问题。

简而言之,确保您的 OG 标签符合 RDFa 并且您是金子。