旁路服务处理AJAX数据保证搜索引擎抓取

相信即使是刚刚入门的SEO人员也会知道一个事情:就是搜索引擎对JS的识别特别之差,虽然谷歌和百度官方都声称在技术上已经实现了。但目前从SEO实战的角度来看,效果并不好~

于是我们需要思考,旁路服务处理AJAX数据的角度,如何保证搜索引擎抓取呢?

旁路服务处理AJAX数据保证搜索引擎抓取

ajax 接口方式 与 源码输出方式

通过上面的分析,目前大部分搜索引擎只能分析服务器给到的源码,即我们在浏览器右键查看源码得到的内容,这种我们通常成为源码输出方式。所以在项目中,需要把用 ajax 接口方式获取的数据嵌在源码中输出。

比如一个列表,本身为了照顾用户体验,分页通过 ajax 拉取数据,这样可以实现无跳转刷新。但是这对于爬虫来说,就拿到什么信息了。于是改成降低体验,将 ajax 接口方式换成源码输出方式,数据直接嵌在在服务器返回的源码中才行。

如何得到更简单的实现形式?

更简单的实现形式可以用以下几点概括:

既然蜘蛛不会执行 JS,那么由服务器帮助蜘蛛执行 JS 后返回网页内容。

这样我们只需要启用实现一套方案,帮助我们将客户端运行的代码返回给蜘蛛就可以了。省去了对现有项目中的 ajax 接口方式输出数据的排查与更改。

具体的实施方案:

那么这套方案怎么设计呢?关键就在于 PhantomJs。

一,判断请求来源

一般蜘蛛的请求来源都有特殊的 UA 加以区别,比如百度的 Baiduspider,我们可以通过 UA 判断请求是否来自搜索引擎厂商的蜘蛛。

二,配置代理

在接入层将蜘蛛的请求代理向与正常用户不同的访问地址,即一个旁路服务。

三,获取客户端运行脚本后的网页内容

在旁路服务中,由后端程序调用无头浏览器 PhantomJs 打开请求的 URL。页面加载后会自行执行 JS,当 ajax 数据拉取成功后,将网页内容返回给蜘蛛。那么如何判断页面执行 ajax 拉取数据成功?下面会和大家探讨。

疑难问题

敏感数据不想被爬虫抓取?

有些数据是敏感数据,比如登录用户的账户信息等。这当然不能直接给蜘蛛了,生成了快照可怎么办?这里想了个办法,就是对敏感数据在源码的数据容器 DOM 上加一个特殊的 class,比如 privacy。在 PhantomJs 返回数据之前将带有 privacy 的整个 DOM 字符串从内容中去除。

如何判断 ajax 拉取数据完成?

有一个方案是计算所有的资源请求数,在所有请求完成后,延迟 500ms 用于网页渲染,然后捕获网页代码。这种方案最大的好处是无需对业务逻辑做修改,但是人为设定的 500ms 延迟是否最优有待商榷。

接入层如何设置代理?

您可以选择一种方式赞助本站

支付宝转账赞助

九天

目前评论:2   其中:访客  2   博主  0

  1. avatar 上品户外

    谢谢博主分享 支持 欢迎回访 上品户外

  2. avatar hostus

    兄弟,交换链接吗?

评论加载中...

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

图片 表情