研究Technical SEO的正确姿势实例 – JS跳转试验
Technical SEO指的是从技术层面来改善网站的搜索引擎友好度,让网站的内容更好地被搜索引擎发现和理解,从而提高展现和排名的SEO手段。
许多网站投入了巨大的时间和精力进行外链建设内容建设但却无法取得期望的效果,这往往就是由于忽略了Technical SEO的影响。
那么什么是Technical SEO的研究方法论呢?本篇笔者将通过在极诣数字营销:maxket.com网站上历时两个多月的实验来带你走进SEO的技术世界。
研究目的 – 各搜索引擎对JavaScript跳转的处理
我们知道,现代搜索引擎不但会分析网页的HTML,还会尝试着把HTML页面“画”出来,这个过程叫作渲染。比如 谷歌会用三年前的Chrome版本41对爬取的网页进行渲染,这个过程被称作WRS(Web Rendering Service)。
在这个渲染的过程中,一般都会运行JS。那么如果我们用了JS跳转,各个搜索引擎能否发现跳转的目的页面呢?
实验准备 – UA(User Agent) + 等待时间
我们假定搜索引擎会运行JS同时会运行一段时间如5秒,那么我们就要来验证这个情况。为此我们设了两个门槛:
- 首先我们要检测搜索引擎是否会去判断if语句里的条件
- 其次我们要检测搜索引擎最长每个页面运行JS的时间是多少
我们按照这个思路建了14个页面:
稍微解释一下jsredirect就是直接跳转,-Xsec代表延迟X秒,而所以含baidu的文件名表示只针对非百度爬虫进行跳转。也就是说:
- jsredirect表示不加条件直接跳转。
- jsredirect-3sec表示三秒后自动跳转。
- jsredirect-baidu-4sec表示四秒后,对非百度爬虫自动跳转。
- jsredirect-ua-non-baidu表示只要不是百度爬虫就自动跳转。
相应地每个页面跳转的目的页面也各不相同:
- jsredirect跳转到just-redirect页面
- jsredirect-Xsec页面跳转到X-sec页面
- jsredirect-ua-non-baidu页面跳转到ua-non-baidu页面
- jsredirect-ua-non-baidu-X-sec页面跳转到ua-non-baidu-X-sec页面
实验原理 – 通过网站访问记录记录爬虫行为
我们知道,服务器的访问请求记录(通常为access.log文件)会包含每个HTTP请求的Response。因此当我们查看特定UA我们便可以了解爬虫的行为了。
比如我们可以看包含baiduspider的UA的表现,这包含了所有百度爬虫的行为。但是我们为了保证实验的可靠性还需要一些额外的工作。
- 保证CDN会对爬虫蜘蛛的访问回源,这样才能在站点访问记录上发现爬虫请求。
- 要过滤掉那些假的蜘蛛。你可以通过用NSLOOKUP + IP的指令来检查爬虫的真实性。
- 要意识到CDN总会屏蔽掉一些“便衣”蜘蛛,就是那些以一般UA访问,实际上是搜索引擎蜘蛛的那些请求。换句话说不是所有的百度搜索爬虫都会在其UA中标识baiduspider的,这样做很多时候是为了反作弊。其他搜索引擎也一样,360的“便衣”蜘蛛更多,所以本次实验未发现360蜘蛛。
- 我们刻意在 robots.txt中屏蔽了谷歌蜘蛛的爬行。因为我们对其能力很确信。值得议题的是极诣还屏蔽了神马,只能怪它曾经带来太大服务器压力。
实验过程 – 开始测试蜘蛛爬行行为
我们把跳转页面和跳转目的页面分别上传服务器后便开始吸引爬虫光顾。最简单的办法是把这些跳转页面的链接放到极诣网页上。除此之外,还可以通过百度资源平台的链接提交工具把跳转页面提交了。
至此,除了跳转页面中获得URL,跳转目的页面没有暴露在任何其他引擎和链接中。
经过两个月左右的数据积累,我们最终可以从访问日志中过滤出与/jsr/目录和/jsrd/目录相匹配的请求。
接下来我们就可以对各个爬虫总结能力和行为。
实验结论 – 各爬虫对JS跳转的不同反应
百度
百度爬虫的爬行还是挺积极的,所有的页面都爬过了。我们可以发现百度只对直接跳转的JS有反应。也就是说一旦我们加入任何条件,或者设定几秒钟后跳转,百度便不会进行下一步爬行。
上图表中我们只发现了一种百度爬虫,这是百度并不认为我们的页面有渲染价值吗?未必。那些带渲染的爬虫一般都只是爬取页面关联的JS文件。这里我们用的是inline的JS代码。因此并不能说百度没有进行渲染,最起码百度对JS代码进行了Parse的过程,不然是无法发现just-redirect.html的。笔者相信由于检测User Agent和停留X秒过于复杂,使得百度即便发现了URL也未去爬行,或者直接就跳过了条件,或者跳过了setTimeout。
总的来说,百度爬虫运行JS投入的资源较少,能力较低。
必应
如果你关心Bing的搜索结果页面的话,开个Chrome开发工具就可以发现Bing对数据分析是相当关心的,它会高频率的将用户行为数据反馈回去。必应的爬虫也是在这次没有谷歌参与的测试中是最优秀的。
实验发现必应的爬虫只有一次通过JS跳转发现了后面的页面,上图我们可以看到,这次是真正的JS运行,前后两个页面相差15秒,笔者相信它真的等待了4秒钟。
必应爬虫在运行页面JS的能力上比其他参与实验的爬虫更强,但是就像我们之前说的, 它的渲染工作的频率非常低,偶尔才看一下。
Ahref,Moz和搜狗
Ahref和Moz(SEMRush长期被屏蔽)以及搜狗有不少请求,但是都没有发现跳转后的目的页。可以认定为无页面渲染能力。
Yandex
Yet-another-indexer!
这是唯一出现HTTP请求中带Referer的爬虫。有意思的是下面三点:
- Yandex的跳转页和跳转目的页的访问前后并不连续,经常相隔好多天。
- 经常会发现跳转页未被请求的情况下直接有跳转目的页的请求,估计是原先被CDN截获。
- 前后两个时段访问这些资源的UA不同,四月开始都是移动爬虫的爬取。
笔者认为,JS跳转一般不会携带HTTP Referer,Yandex是否是有意补上这一信息呢?毛子的思路还真是不一般,用意何在我们不得而知。
不管怎么说,Yandex可能无法运行JS,但至少会Parse JS代码用来发现更多链接。
总结 – 这个实验该如何改进
我们通过一个长达两个多月的实验,发现并证明了一些搜索引擎爬虫面对JavaScript跳转时的反应和行为。这其实是SEO们都应该具备的研究搜索引擎原理的方法论。
我们的这次实验还有一些待改进的地方,比如选择一台未启用CDN的服务器会更好。或者按照IP段更详细地开回源白名单。跳转页面可以多加一些内容并做成自适应页面,这样可以吸引一些带渲染的爬虫。JS也可以不用inline代码,而放到外部文件中。如果你感兴趣,或者愿意在极诣的基础上改进实验,请通过极诣的公众号和我联系。谢谢。