我对Facebook's 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>
这看起来很棒,简单,兼容爬虫和用户友好。但这对我来说似乎有些 hackish ,并且在IE 7/8中不起作用,因为在DOM中忽略了noscript
标记的内容。这将涉及这些浏览器的一些肮脏的特殊情况。
然后,我更仔细地研究了Facebook的作用。似乎他们也在做同样的事情。页面在我的浏览器中进行了优化,但不在Google的缓存中。我试图清除所有浏览器缓存和cookie,并再次请求该页面。无论如何,我都会通过BigPipe获取内容。他们没有使用任何基于cookie的技术。
然后,问题很简单:Facebook如何做到这一点?第一种方法是否会被视为隐藏真实内容,还是仅适用于Facebook,因为它是Facebook?或者我错过了其他什么?
感谢。
答案 0 :(得分:2)
简单的答案是Facebook歧视搜索机器人并为他们提供不同的内容。这可以通过用户代理(我认为你暗示在你的Q中)或通过查找IP地址来查看它是否与Google地址范围匹配。
完全静态版本将是我的首选,因为它还允许您优化速度,这是Google(以及其他人)在其索引中包含的内容。