【问题标题】:Facebook 'Like' buttons and # URL strings?Facebook 的“赞”按钮和# URL 字符串?
【发布时间】:2012-08-19 00:24:04
【问题描述】:

如果 ajax Web 应用程序中的“Like”按钮指向同一个页面但使用不同的 # 字符串,Facebook 会如何处理它们?

它是否将它们视为“喜欢”的不同页面?

例如,如果我获得 4 次点赞:

mysite.com/articles#story1
mysite.com/articles#story2
mysite.com/articles#story3
mysite.com/articles#story4

用户的新闻源中会出现什么

4 people like mysite.com/articles

dave likes mysite.com/articles#story1
tom likes mysite.com/articles#story2
ben likes mysite.com/articles#story3
nick likes mysite.com/articles#story4

对于 FB 和 # 字符串还有其他需要考虑的事情吗?

【问题讨论】:

    标签: javascript ajax facebook


    【解决方案1】:

    Facebook 的点赞按钮使用嵌入在单个页面的 HTML 标记中的元数据。如果您的 URL 在通过 curl 访问时产生不同的元数据(即没有 JavaScript,我认为这是不可能的,因为在服务器端看不到哈希部分,因此无法对服务器端的哈希字符串值采取行动,那么理论上它会起作用)。

    话虽如此,我会假设 Facebook Like 按钮对于不同的哈希字符串没有不同的行为。看一下 facebook 文档(大部分都很烂)并没有提到这一点,但 facebook 开发者论坛似乎证实了这一点:http://forum.developers.facebook.com/viewtopic.php?pid=240151

    但是,一切都没有丢失。你可以指定一个like按钮的URL,所以只需将URL设置为同一页面的SEO友好URL:http://developers.facebook.com/docs/reference/plugins/like

    更新 - 来自 cmets 的澄清

    所以,现在我们知道您拥有哈希字符串 URLS 的静态版本。以前,您很可能使用以下代码在页面上放置点赞按钮:

    XFBML:

    <fb:like show_faces="false" width="450"></fb:like>
    

    相反,您应该指定 URL 的 SEO 版本。例如,当您在 mysite.com/articles#story4 上时,代码应如下所示:

    XFBML:

    <fb:like href="mysite.com/articles/story/4" show_faces="false" width="450"></fb:like>
    

    【讨论】:

    • 如果您在点击时将新元数据与其他 ajax 内容一起 ajaxing 怎么办?我同意你关于 fb docs/community 的糟糕状态!
    • @Haroldo,AJAX 是 javascript,cURL 不能访问。它需要在任何 javascript 操作之前最初加载的文档中。与搜索引擎相同的规则。
    • 这些并不是对 SEO 友好的链接,而是它们对于正确页面的加载至关重要。它们是必需的,而不是可选的。
    • @Brian,我的意思是 OP 应该制作一个不依赖哈希值的相应页面版本。
    • @mike 是的,我有相应的非 ajax 版本的内容。你是说我可以远程点赞那些页面?
    【解决方案2】:

    Facebook 将删除哈希标签之后的所有内容。 您需要做的是发送您的请求转义 # 符号编码它在 %23

    <iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fmysite.com%2Farticles%2F%23story1" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:px">
    

    【讨论】:

      【解决方案3】:

      Facebook 大多* 支持Google's ajax-crawling spec,这样如果fragment 以感叹号开头,那么Facebook 会对请求进行如下转换,以便服务器获取fragment 并提供预期的内容。

      https://myapp.com/#!/post/2 => https://myapp.com/?_escaped_fragment_=/post/2

      (根据 Google 的规范,用户永远不会看到丑陋的 url,所以我假设 Facebook 将始终以“感叹号”格式存储这些 url。)

      为这些请求提供适当的内容通常很重要。查看更多here

      *元标记触发器不起作用。我在 2012/08/18 测试了它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-02-17
        • 1970-01-01
        • 1970-01-01
        • 2023-03-31
        • 1970-01-01
        • 2012-12-17
        • 1970-01-01
        相关资源
        最近更新 更多