0

我正在创建网站http://Meer.li,当我通过 facebook 调试器运行它时 - http://developers.facebook.com/tools/debug/og/object?q=meer.li - 它不能找到我的元标签。

当我查看 facebook 抓取内容的来源时,它显示了我网站的精简版本,其中更改了文档类型并且没有元标记 - http://developers.facebook.com/tools/debug/og /echo?q=http%3A%2F%2Fmeer.li%2F

我在这里做错了什么?

我正在运行 rails 3.2、ruby 1.9.3 并且整个事情都在带有 mongo 数据库的 Heroku 上运行。

编辑

看来我的应用程序中确实有正确的接受标头...如果我在不同的视图中执行此操作:

<%= request.headers["Accept"] %>

我得到:

text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

如果我们执行 curl -H 和正确的标题,为什么我们可以抓取整个站点?为什么 facebook 不抓取我的网站?

4

1 回答 1

2

在调试器中尝试您的 url,它说响应状态代码是 206,这意味着“部分内容”。

我试图卷曲 url,实际上我得到的响应是部分的,它不包括 html、head 和 body 标签(或它们的结束标签),并且看起来像包裹在 html 中的 jsonp 响应

$("#designs_content").append

我不确定为什么会发生这种情况,也许您的服务器会根据它检查请求和响应的用户代理字符串?


编辑

我不确定这是否与 Heroku 有关,我从未与他们合作过。另外,我对rails一无所知,所以我无能为力。

wget 与此无关,它是您的 Web 服务器根据 http 请求的标头返回的响应。当您使用浏览器发出请求时,它会在请求中添加一些标头以帮助服务器找出一些事情。如果您在 chrome(Safari 等)、网络选项卡(它们都有)或使用网络嗅探器中打开 firebug 或开发人员工具,则可以查看发送的标头。

为了让您的生活更轻松,我检查了导致此问题的标题是什么...试试这个:

curl "http://meer.li/"

您会看到响应是 jsonp 而不是整个 html 页面。现在试试这个:

curl -H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" "http://meer.li/"

您将获得页面的完整 html 版本。

由于 facebook 在废弃您的页面时不会发送“接受”标头,因此当您使用浏览器查看源代码时,响应不是您所看到的。

我不知道如何解决这个问题,因为这肯定与您的特定设置有关,但现在至少您知道问题所在。

于 2012-05-13T14:44:27.767 回答