Facebook分享/点赞默认图片、标题、描述文本

7
我们正在为客户的网站使用FB Like/Share功能。在每个要共享的页面上,我们都会在元标记中添加以下内容:
<head id="ctl00_Head1">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Expires" content="0" />
<meta http-equiv="X-UA-Compatible" content="IE=8" />

    <!-- social sharing metadata -->
    <meta property="og:title" content="Our Site Title" />
<meta property="og:description" content="A description to be used in the share dialog." />
<meta property="og:image" content="http://us.oursite.com/images/FB_ShareThumbnail_US.png" />

    <title>Our Page Title</title>

    <!-- favicon -->
    <!-- stylesheet and js links -->
    <!-- inline js -->
</head>

此外,我们还会显示一个带有以下HREF的Facebook图形:
<A href="http://www.facebook.com/sharer.php?u=http%3a%2f%2fus.oursite.com%2fOurPage.aspx%3fid%3d999&amp;t=Our+Site+Title" target=_blank><IMG src="/images/Facebook_icon_20x20.png"></A>

客户希望使用标准的图像、标题和描述,而不考虑实际共享的页面或文章(类似于“品牌控制”)。我们目前已经设置了og: meta标签,以便为每个页面/文章渲染相同的数据。
当用户点击“分享”功能时,他们无法获得页面/文章图片,也没有好的描述或标题(因为我认为标签应该提供这些信息)。
当前共享的页面对匿名用户可用,因此FB机器人可以访问这些页面。在og meta标签中指定的图像也可供匿名用户使用。第一个问题是:为什么这种共享方法似乎没有使用正确的默认共享设置?
下一个问题是,下一个功能请求是允许共享经过身份验证的页面,并具有相同的默认图像、标题、描述。我从服务器角度来考虑这个问题,我会寻找FB机器人并将机器人重定向到一个包含提取图像、标题和描述所需最小标记的“静态”页面。我已经证明这个方法非常有效。但我觉得这可能有点复杂。想知道是否有更好或更佳的共享经过身份验证的页面并使共享功能知道我们的标准图像、标题、描述的方法?
谢谢您的帮助!
更新: 我在StackOverflow上找到了这个相关的问答:Facebook Share doesn't show my description or my thumbnail 当我问“想知道是否有更好或更佳的共享经过身份验证的页面并使共享功能知道我们的标准图像、标题、描述的方法?”时,我指的是这种类型的事情。如果我可以通过查询字符串参数传递所有需要的数据给Facebook sharer.php(而且这不需要任何Facebook爬虫动作),那就太理想了,那么我就不需要编写任何服务器端逻辑来重新路由Facebook爬虫。 我尝试使用上述Q/A中提供的URL,并重新格式化我的数据,但没有成功。想知道这是否在FB上有记录?
3个回答

9

它为什么不使用提供的og元数据可能有许多原因,但除非您分享代码/网址,否则我们只能猜测可能的问题。

  • 确保og元数据位于标签内,因为它不会在其他任何地方寻找。如果您在标签或其他位置定义它们,它将忽略它们。
  • 如果页面在添加元数据之前已经被喜欢过,则需要通过向Facebook linter tool提供URL来刷新Facebook对页面的缓存。

如果这些步骤都无法解决问题,请分享URL /代码。

至于您关于经过身份验证的页面的问题,您可以在公共的、非经过身份验证的页面上添加元数据,而无需检查它实际上是否是Facebook,因为当某人分享页面时,不管查看共享的用户是否有权访问该页面,相同的信息都会变得公开。


就身份验证问题而言,我已经看到过某些网站为未经身份验证的用户弹出身份验证对话框(或其他提示),但使用OG元标记来显示已经身份验证用户将会看到的内容(即无论用户是否可以查看所有内容,都提供相同的元标记)。 - Igy
弹出窗口在这里没有帮助。问题在于Facebook的“机器人”无法进行身份验证(我也不应该期望它能够...)。因此,当机器人尝试访问页面时,很可能会收到401错误,并且无法提取默认图像、标题和描述。 - Brian
@Brian,你试过我提到的那两个步骤了吗?有解决问题吗? - Niklas
@Niklas - 是的,你比我快得多!当你发表最后一条评论时,我正在修改原始帖子。所有的“OG”标签都在<head>中,并且我使用不同的ID值在我们页面查询字符串中进行测试,以强制Facebook刷新数据。对帖子的修订是为了演示浏览器中查看源代码的样子。 - Brian
@Niklas - 关于您的评论“您可以在公共的非身份验证版本页面上添加元数据”。看起来您和Igy对我的问题有相同的理解。问题是Facebook“机器人”(又名Scraper)无法抓取需要身份验证的我们网站上托管的页面。基本上,Facebook Scraper将请求页面以显示默认图像、标题、描述,但由于Facebook不知道如何与我们的网站进行身份验证,因此会从我们的网站返回401。 - Brian
我在我们的QA网站上使用了Linter工具(公开可用,但尚未更新以重定向Facebook爬取器的新代码),并从需要身份验证的页面收到了403。它成功地“linted”了同一域上不需要身份验证的页面。 - Brian

4
经过进一步研究,我找到了一种使用“sharer.php”功能的方法,可以指定要显示的图像、网址、标题和描述,而不依赖于OG元标记。这将适用于匿名访问页面和需要经过身份验证的用户的页面。链接的StackOverflow Q/A(https://dev59.com/0XA85IYBdhLWcg3wF_YO”时,在Facebook开发者论坛(http://forum.developers.facebook.net/)中找到了其他帖子。特别是这个帖子使我达到了目标:http://forum.developers.facebook.net/viewtopic.php?id=101127 本质上,没有必要使用OG元标记。只需确保您的URL部分正确编码,并且使用正确的参数键(即“&p[title] =”而不是“&t =”)。
从我们的网站/页面中删除OG元标记后,我还修改了我们的Facebook共享按钮/链接以呈现以下标记:
<a href="http://www.facebook.com/sharer.php?s=100&amp;p[title]=Our+Site+Title&amp;p[url]=http%3a%2f%2fus.oursite.com%2fdefault.aspx&amp;p[images][0]=http%3a%2f%2fus.oursite.com%2fimages%2fFB_ShareThumbnail_US_90x85.png&amp;p[summary]=Our+facebook+description+that+is+used+on+the+FB+share+page." target="_blank">
    <img src="/images/fb_icon_20x20.png" />
</a>

请注意,我曾经尝试过调查是否能够找到一个参数来指定默认的“消息”,但这对我们来说不是必需的,所以也许以后我会深入挖掘这方面的信息。

我对指定“message”参数的能力很感兴趣。有人找到相关信息了吗?此外,是否有办法在使用此方法的同时仍保留Share书签工具的标准“弹出”行为? - Nathan Loyer
这似乎不再起作用了。在Stack Overflow上搜索了一下,但解决方案都失败了。唯一能成功传递的是URL。 - Scott Sword

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接