Facebook Open Graph,未提供“string”类型所需的属性“og:title”

时间:2014-08-20 13:02:45

标签: php html facebook facebook-graph-api joomla

我有一个Joomla页面(v3.2.4),我用PHP输入了一些动态Open Graph标签,如下所示:

PHP,在标记之前:

$getcid = JRequest::getVar('id');

if(!isset($getcid)) {
$title = "LIVA Kurser";
$description = "Danmarks største udbyder af kurser til såvel offentlige og erhverv samt private.";
$image = "http://www.livakursertestsite.dk/images/liva-logo.jpg";
$type = "website";
} else {
$db = JFactory::getDbo();
$user    = JFactory::getUser();
$query = $db->getQuery(true);
$ogquery = "SELECT DISTINCT * FROM jos_managecourse WHERE state = '1' AND id = '".$getcid."' LIMIT 1";
$db->setQuery($ogquery);
$db->query();
$getcourse = $db->loadObjectList();  

$description = substr(strip_tags($getcourse[0]->details), 0, 247);
$title = $getcourse[0]->course_name;

$description = preg_replace( "/\r|\n/", "", $description );
$description = str_replace( " ", " ", $description );

$image = JURI::root()."administrator/components/com_managecourse/images/".$getcourse[0]->image_url;
$type = "article";
}

在我的标签中我有这个:     

  <!-- Facebook Open Graph -->
  <meta property="fb:app_id" content="502033806595590" />
  <meta property="og:site_name" content="LIVA Kurser" />
  <meta property="og:type" content="<?php echo $type; ?>" />
  <meta property="og:title" content="<?php echo $title; ?>" />
  <meta property="og:url" content="<?php echo JURI::current(); ?>" />
  <meta property="og:image" content="<?php echo $image; ?>" />
  <meta property="og:description" content="<?php echo $description; ?>..." />
  <!-- End Facebook Open Graph -->

当我通过Facebook Object Debugger运行页面时,出现以下两个错误:

  

网址&#39; http://www.livakursertestsite.dk/kurser/babytegn-2&#39;的   键入&#39;网站&#39;是无效的,因为必需的属性&#39; og:title&#39;的   键入&#39; string&#39;没有提供。

第二个错误:

  

卷曲错误:BAD_CONTENT_ENCODING处理内容时出错   取消编码:无效的块类型

我试过了:

  • 移动标题标签
  • 下方和上方的代码
  • 将它移动到head-tag的顶部和底部,但是 既不起作用。
  • 将PHP代码放在head-tag中,但仍然没有。

您可以在此处查看该网站:http://www.livakursertestsite.dk/kurser/babytegn-2

修改

我已从标记中删除了PHP代码,因此它们不再是动态的,看看是否是原因,但它不是。现在代码看起来像这样:

<meta property="og:locale" content="da_DK" />
<meta property="og:type" content="website" />
<meta property="og:title" content="LIVA Kurser" />
<meta property="og:description" content="Beskrivelse..." />
<meta property="og:url" content="http://www.livakursertestsite.dk/kurser" />
<meta property="og:image" content="http://www.livakursertestsite.dk/images/liva-logo.jpg" />
<meta property="fb:app_id" content="502033806595590" />
<meta property="og:site_name" content="LIVA Kurser" />

我现在也尝试过:

  • Googles Rich Snippets testing tool上测试网站,以及 谷歌获取所有数据。
  • 删除所有非强制性Open Graph标记,因此只有四个必填标记(类型,标题,网址和图像)存在。
  • 删除导致Firebug出错的所有javascript。

Facebook调试器仍然无法获取数据。

编辑#2:

在@CBroe的评论之后我修复了页面,所以它可以被验证,没有错误,但仍然没有运气。

2 个答案:

答案 0 :(得分:16)

您可能想尝试禁用任何类型的压缩,例如PHP中的GZIP压缩。这帮助我在Joomla 3.3网站上遇到了类似的问题。

我启用了GZIP压缩,Facebook无法抓取我的网站。禁用GZIP压缩解决了这个问题。

我还没想到它是Joomla问题还是一般的GZIP / PHP问题或facebook刮擦问题。

编辑:通过分享行动,Facebook只会读取您网页的前40k。启用GZIP时,只读取前40k会产生问题,因为它无法解压缩部分内容。

更好的解决方案是仅针对Facebook,LinkedIn等网站禁用GZIP。

你可以使用名为gzip的小插件非常友好控制:http://extensions.joomla.org/extensions/core-enhancements/performance/site-performance/27725

或者使用此codee https://github.com/dgt41/(压缩xml和php文件,然后将其作为插件安装)

请注意:如果您的站点上安装了JCH Optimize模块,则需要禁用该插件提供的gzip压缩。所有其他选项可以保持激活而不会出现任何问题,包括本机Joomla gzip压缩。

干杯, Teeuwis

答案 1 :(得分:1)

我在joomla 3中找到了解决问题的解决方案只修改了joomla核心的2个文件,因此您不必关闭GZIP选项。只有在检测到facebook抓取工具时才会自动关闭。

https://github.com/dgt41/joomla-cms/commit/6eef42e50e3f3e4c78c93285de7f9ecfe8bbfbf5和一个解决问题的插件,但这个对我不好。

https://github.com/dgt41/facebookfix/commit/e1d5aa3a1a94f7751d3b69db78ba1aa02dfc37c6