3

我对Facebook在显示网页时改善用户体验的 BigPipe技术非常感兴趣。缺点是它严重基于 Javascript,而且对搜索引擎一点也不友好。

在我自己的网站上开发类似技术时,我对其进行了设计,以便可以很容易地在服务器端禁用它以提供更多标准页面,而无需启用 BigPipe。现在,我正在寻找一种使它对爬虫友好的方法。

  • 简单的方法是将非 BigPipe 内容提供给搜索引擎爬虫/机器人,并将流水线内容提供给其他人。这不应被视为伪装:内容完全相同,布局相同(在执行 BigPipe 的 javascript 之后)。唯一改变它的交付方式,使其对爬虫更友好。但谷歌会认为这是合法的吗?

  • 第二种方法是使用另一个 Javascript 来解决这个问题。在第一个请求中,发送非 BigPipe 页面,其中包含一些将保存一些 cookie 的 Javascript。在后续请求中,仅在提供 cookie 时才发送 BigPipe 内容。非常第一个页面加载不会被优化,但另一个会。看起来是一个很好的解决方案,但我不太喜欢将 cookie 相乘。

  • 第三种方式是流式传输 BigPipe 内容,而不是像 Facebook 那样使用 HTML 评论,而是使用<noscript>标签。这将使 pagelet 看起来像:

    <noscript id="pagelet_payload_foo">Some content to be indexed here</noscript>
    <script>onPageletArrive({id:'foo', [...]})</script>
    

    而不是 Facebook 的方法:

    <code id="pagelet_payload_foo"><!-- Some content to be indexed here --></code>
    <script>onPageletArrive({id:'foo', [...]})</script>
    

    这看起来很棒,简单,爬虫友好和用户友好。但这对我来说似乎有点骇人听闻,并且在 IE 7/8 中不起作用,因为noscript标记的内容在 DOM 中被忽略了。这将涉及这些浏览器的一些肮脏的特殊情况。

然后,我更仔细地研究了 Facebook 所做的事情。似乎他们也在做同样的事情。页面在我的浏览器中进行了优化,但不在 Google 的缓存中。我试图清除所有浏览器缓存和 cookie,并再次请求该页面。无论如何,我一直通过 BigPipe 获取内容。他们没有使用任何基于 cookie 的技术。

那么,问题很简单:Facebook 是如何做到的?第一种方法会被视为伪装,还是因为它是 Facebook 而只对 Facebook 有效?还是我错过了其他东西?

谢谢。

4

1 回答 1

2

简单的答案是 Facebook 区分搜索机器人并为它们提供不同的内容。这可以通过用户代理(正如我认为您在 Q 中暗示的那样)或通过查找 IP 地址以查看它是否与 Google 地址范围匹配。

完全静态的版本是我的首选,因为它还允许您优化速度,这是 Google(也许还有其他人)在其索引中包含的内容。

于 2012-02-10T09:28:06.500 回答