Facebook HTML5的开放图验证

Facebook HTML5的开放图验证,facebook,validation,html,facebook-opengraph,Facebook,Validation,Html,Facebook Opengraph,有没有办法让facebook糟糕的开放图元标记验证我的doctype是否为(HTML5) 除了facebook的Open Graph meta标记之外,我的文档完全可以验证 我真的不想使用,因为这会产生一系列新的问题 下面是一个验证错误的例子 错误行11,第47列:此时元素meta上不允许使用属性属性 <meta property="og:type" content="website" /> 任何帮助都将不胜感激。。。我断断续续地搜索了好几天都没有结果。我倾向于说,不要担心验证

有没有办法让facebook糟糕的开放图元标记验证我的doctype是否为
(HTML5)

除了facebook的Open Graph meta标记之外,我的文档完全可以验证

我真的不想使用
,因为这会产生一系列新的问题

下面是一个验证错误的例子

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

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


任何帮助都将不胜感激。。。我断断续续地搜索了好几天都没有结果。

我倾向于说,不要担心验证,我不相信无效的标记会损害你的搜索引擎排名。e、 谷歌的技术建议没有提到标准。Html5允许你向搜索引擎提供更多的信息,他们可以使用这些信息,但我看不到他们会因为没有验证而排名下降

但是,如果您觉得它有助于验证您是否可以使用

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

要让这些标记出现,并且有一个html文件将通过验证程序。

虽然它将切断非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>

//

它完全验证了这一点。它可以在Windows上显示Firefox、Opera、IE、Chrome、Safari,也可以在Mac上显示Firefox、Opera、Safari,并且可以正常工作。

元标签的解决方案不好。如果用Javascript包装这些内容,那么Facebook Linter将找不到它们。这和根本不把它们放进去是一样的


在脚本中包装类似按钮之类的东西有助于验证XHTML 1.0而不是HTML5。

只有在facebook扫描页面时才需要这些元标记

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

      echo '<meta property="og:type" content=xxxxxxxxxxxxx';
      // continue with the other open graph tags
    }
   ?>


上述标签只有在facebook需要时才会出现——这种使用PHP的方法在所有其他实例(包括W3C验证)中都会完全删除它们

对于HTML5,将其添加到
html
元素中,并保留
og:
前缀属性:

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

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

...
或:


...

一年多过去了,我们得到的最佳解决方案是在某种服务器端验证中封装meta标记

在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.com/images/thumb.jpg" />
<?php } ?>


它确实适用于Facebook。但我真的不喜欢这个主意

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

对于那些建议通过“facebookexternalhit”用户代理以Facebook为目标的人,你必须记住,其他公司正在通过这些标签跟随Facebook。例如,如果首选的Schema.org标记不存在,Google+将退回到OpenGraph标记。由于大多数网站都没有使用Schema.org属性(特别是如果他们花时间正确使用OpenGraph的话),你很容易错过在Google+这样的网站上增强代码片段的机会

随着Facebook的普及,直接针对他们并不是一个好的解决方案——即使他们对实现的选择对开发者来说是有问题的。在站点上寻找解决方案(如堆栈溢出)时,您必须始终记住,这些方法可能会产生不可预见的后果

对于我们的主要站点,为了验证起见,我们一直坚持使用XHTML+RDFa,而且它已经足够好了。我希望随着HTML5使用量的增长,Facebook团队将开始接受这种元数据的有效格式

至于我们为什么关心验证:
我们发现,在可能的情况下,验证有助于提醒我们页面中的错误,因为它不会教我们忽略错误。由于我们都在浏览器中使用验证扩展,我们可以立即知道页面上是否存在验证错误(或警告),并可以调查是否有可能消除它(99%以上的时间是这样)。这为我们节省了处理规范限制性实施的时间,尤其是在当今的边缘和移动平台上。我们已经看到奇怪错误的大幅减少,因为我们知道我们的页面是有效的,并且知道浏览器中发生的事情与无效标记无关,而特定UA可能无法按预期解释无效标记。

好吧,Visual Studio 2011告诉我,“属性”属性无效。然而,W3C似乎更为宽松:

<>你会注意到,我在脸谱网的推荐中添加了打开的图形标签,并没有破坏W3C验证器,我认为它是权威的。
咨询该官员后,很明显,“属性”属性(代替“名称”、“http等价”、“字符集”或“itemprop”属性)的使用是无效的。然而,他们的验证器验证它(???)。我无法解释这种差异。

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

W3C建议(对HTML5的扩展)称为RDFa 1.1和RDFa Lite 1.1(请参阅和),使“属性”属性有效且符合要求。同时(因为这里有较旧的答案),验证器将该属性识别为有效。此外,OpenGraph协议文档已更新,以反映RDFa 1.1(它使用“prefix”属性)

W3C的工作是通过OpenGraph和schema.org等机构的输入来完成的,目的是解决这个问题引起的问题


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

最近的一个解决方案是在html或head标记中注册前缀:

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



摘自-对不起,页面是德语的…

是的。要验证为HTML5,请从以下位置添加
前缀
属性:


有效的HTML5!
<?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.com/images/thumb.jpg" />
<?php } ?>
<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#">
<!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>