打开HTML5的graphicsvalidation

有没有办法让Facebook的蹩脚的开放图元标签来validation,如果我的文档types是<!DOCTYPE html> (HTML5)?

除了facebook的Open Graph元标记之外,我的文档完全validation。

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

这里是一个有问题的validation错误的例子。

错误行11,列47:在此元素meta不允许的属性属性。

 <meta property="og:type" content="website" /> 

任何帮助,将不胜感激…我一直在寻找和closures了几天无济于事。

对于HTML5,将其添加到您的html元素, 就像ogp.me中描述的一样,并保留您的og: prefixed属性的:

 <!doctype html> <html prefix="og: http://ogp.me/ns#"> <head> <meta property="og:type" content="website" /> ... 

对于XHTML(就像OP的问题),使用name属性代替property属性。 Facebook的lint会发出警告,但元值仍然会被识别和parsing。

 <meta name="og:title" content="Hello Facebook" /> 

简短的答案是否定的,目前还不是。 所有其他的答案是变通办法,黑客,或只是普通的疯狂。 唯一的长期解决scheme是Facebook需要创build一个有效的HTML5替代语法。

对于那些build议通过“facebookexternalhit”用户代理来定位Facebook的人,你必须记住其他公司正在用这些标签跟随Facebook的领先地位。 例如,如果他们首选的Schema.org标记不存在,Google +会回退到OpenGraph标记。 由于大多数网站都没有使用Schema.org的属性(特别是如果他们花时间正确使用OpenGraph的话),您可以按照这个build议轻易地错过在Google+等网站上加强您的片段。

随着Facebook的无处不在,它直接针对他们真的不是一个好的解决scheme – 即使他们的实施select是开发人员的问题。 当在堆栈溢出等网站上寻找解决scheme时,你总是要记住,这些方法可能会有不可预见的后果。

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

至于为什么我们关心validation:我们发现validation,如果可能的话,有助于提醒我们在我们的网页中的错误,不教我们忽略它们。 由于我们在浏览器中都使用了validation扩展,因此我们可以立即知道页面上是否存在validation错误(或警告),并且可以调查是否有可能消除validation错误(即99 +%的时间)。 这节省了我们处理规范限制性实施的时间,特别是在现在的边缘和移动平台上。 我们已经看到了一些奇怪的bug,因为我们知道我们的页面是有效的,并且知道浏览器中发生的事情不需要处理无效的标记,特定的UA可能不会像预期的那样解释。

是的 。 要validation为HTML5,请从Open Graph文档添加prefix属性:

 <!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> 

复制并粘贴上面的w3validation器来检查。

这是生产准备 – 苹果公司在apple.com上使用这种方法。

这些meta标签只有在facebook为这些标签扫描页面时才需要。

  <? if(eregi("facebookexternalhit", $_SERVER['HTTP_USER_AGENT'])){ echo '<meta property="og:type" content=xxxxxxxxxxxxx'; // continue with the other open graph tags } ?> 

这些标签只有在facebook需要的时候才会出现 – 这种使用PHP的方法将其完全移除,用于包括W3Cvalidation在内的所有其他实例。

已经过去了一年多了,我们得到的最好的解决scheme就是将元标签包装在某种服务器端的validation中。

在PHP中,我做了:

 <?php if (stristr($_SERVER["HTTP_USER_AGENT"],'facebook') !== false) { ?> <meta property="og:title" content="Title of the page" /> <meta property="og:url" content="http://www.example.com/" /> <meta property="og:type" content="website" /> <meta property="fb:admins" content="123456789" /> <meta property="og:image" content="http://www.example.comhttp://img.dovov.comthumb.jpg" /> <?php } ?> 

它真的适用于Facebook。 但我真的不喜欢这个想法!

这里的许多答案已经过时了。 请不要窥探头或通过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/ )使“财产”属性有效和符合。 与此同时(自从旧的答案在这里)validation程序http://validator.w3.org/check识别该属性为有效的。; 另外,Open Graph Protocol文档http://ogp.me/已经更新,以反映RDFa 1.1(它使用“prefix”属性)。

W3C的工作已经通过OpenGraph和schema.org等的input来解决这个问题引发的问题。

总之,确保你的OG标签符合RDFa,你是金黄的。

最近的一个解决scheme是在html或head标签中注册一个前缀:

 <html prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb#"> 

要么

 <head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb#"> 

从这里采取 – 对不起,页面是在德国…

不好的解决scheme的元标记。 如果你用Javascript包装那么Facebook Linter就不会find它们。 这就像不把它们放在一起。

在脚本中包装像button等,以帮助validation对XHTML 1.0,而不是HTML5。

在JSP中:

 <% String ua=request.getHeader("user-agent").toLowerCase(); if(ua.matches(".*facebookexternalhit.*")){ } %> <meta property="og:image" content="images/facebook.jpg" /> ... <% } %> 

要么:

 <c:set var="ua" value="${header['User-Agent']}" scope="page"/> <c:if test="${ua.matches('.*facebookexternalhit.*')}"> <meta property="og:image" content="images/facebook.jpg" /> ... </c:if> 

那么,Visual Studio 2011告诉我,“属性”属性是无效的。 然而,W3C似乎有点宽松:

http://validator.w3.org/check?uri=http%3A%2F%2Fpacificfoods.com%2F

您会注意到,我在Facebook的推荐标准中添加了Open Graph标签,并且不会破坏我认为具有权威性的W3Cvalidation器。

参考meta标签的官方W3C HTML5规范 ,清楚的是,使用“property”属性(代替“name”,“http-equiv”,“charset”或“itemprop”属性)不是有效。 然而,他们的validation器validation它(???)。 我对这种差异没有任何解释。

我会倾向于说不担心validation,我不相信有无效的标记会伤害您的search引擎排名。 例如,Google技术build议没有提到标准。 http://www.google.com/support/webmasters/bin/answer.py?answer=35769#2 。 Html5允许你提供更多的信息,然后他们可以使用的search引擎,但我不能看到他们根据不validation的排名。

但是,如果你觉得它可以帮助你validation你可以使用

 <script>document.write('<meta property="og:type" content="website" />')</script> 

有这些标签目前,并有一个HTML文件,将通过validation。

虽然它会切断非Javascript用户,但我已经使用过了

 <script type="text/javascript"> //<![CDATA[ document.write('<fb:like href="" send="false" layout="button_count" width="100" show_faces="true" font=""></fb:like>') //]]> </script> 

并完全validation。 它在Firefox,Opera,IE,Chrome,Safari浏览器以及Mac上的Firefox,Opera,Safari上都能正常显示和运行。