我对Facebook's BigPipe技术很有兴趣,该技术可改善显示网页时的用户体验。不利之处在于,这很大程度上是基于Javascript的,完全不友好于搜索引擎。
在我自己的网站上开发类似技术时,我对其进行了设计,以便可以在不启用BigPipe的情况下很容易地在服务器端将其禁用以提供更多标准页面。现在,我正在寻找一种使它对爬虫友好的方法。
<noscript>
标签。这会使小页面看起来像:<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中不起作用,因为DOM中忽略了
noscript
标记的内容。对于这些浏览器,这将涉及一些肮脏的特殊情况。 然后,我更加仔细地研究了Facebook的功能。好像他们在做同样的事情。页面在我的浏览器中进行了优化,但不在Google的缓存中。我试图清除所有浏览器缓存和cookie,然后再次请求该页面。无论如何,我一直通过BigPipe获取内容。他们没有使用任何基于cookie的技术。
然后,问题很简单:Facebook如何做到这一点?第一种方法会被视为伪装吗,还是因为它是Facebook而仅对Facebook有效?还是我想念其他东西?
谢谢。
最佳答案
简单的答案是,Facebook区分搜索机器人并为其提供不同的内容。可以通过用户代理(正如我想您所暗示的那样),也可以通过查找IP地址以查看其是否与Google地址范围相匹配。
全静态版本是我的首选,因为它还允许您优化速度,这是Google(可能还有其他)在索引中包含的内容。