
做网站运维和SEO的人,大多都在服务器日志里见过形形色色的境外爬虫。它们不分昼夜地遍历站点页面,有的批量扒取内容,有的漫无目的地扫漏洞,既带不来真实用户,也不是主流搜索引擎的蜘蛛,平白占用了大量带宽和服务器资源。很多站点本身就没有海外业务,平白被这些垃圾蜘蛛拖慢访问速度,实在得不偿失。
这些所谓的“蜘蛛”成分很杂,有专门做内容采集的爬虫,有不知名的小型搜索引擎,还有带着扫描漏洞目的的恶意爬虫。它们大多不会遵守robots协议,你写不写禁止规则,它该爬还是爬。对中小站点来说,这类流量毫无价值,反而会挤占正常用户和正规搜索引擎的访问资源。
屏蔽的方法有很多种,从简单到进阶,可以根据自己的技术能力和需求选。
最基础的是修改robots.txt文件。在文件里写明禁止对应爬虫抓取,指定User-agent和Disallow规则就行。但这个方法只对愿意遵守协议的爬虫有用,大部分恶意垃圾蜘蛛根本不会理会,只能挡掉一部分还算规矩的小型爬虫,算是聊胜于无的基础操作。
效果更好的是在Web服务器层面拦截。比如用Nginx的话,可以直接匹配User-Agent关键词,遇到特征相符的请求直接返回403。这种方式比robots更直接,请求还没走到程序层面就被拦住了,对服务器资源的消耗小很多。适合已经确认了特征的垃圾蜘蛛,定期往规则里补充新的特征就行。
如果站点完全没有海外用户,最省事的方式是直接封禁境外IP段。可以通过服务器防火墙,或者用CDN的地域拦截功能,直接把非国内的访问请求拦在外面。这样一劳永逸,绝大多数国外垃圾蜘蛛都进不来,连带海外的恶意扫描也能一起挡住。但前提是你的业务真的不需要海外访问,不然会误杀正常用户。
不过屏蔽蜘蛛有两个很重要的坑一定要避开。
第一是别误封了正规搜索引擎的蜘蛛。谷歌、必应这些官方爬虫,很多IP都在境外。如果直接全封境外IP,或者盲目匹配关键词,很容易把正规蜘蛛挡在外面,直接影响站点的收录和排名。甄别正规蜘蛛最靠谱的方法是反向解析IP,看是不是官方域名,而不是只看User-Agent——毕竟UA是可以随便伪造的。
第二是不用追求百分百拦截。垃圾蜘蛛的IP和UA一直在变,想全拦住根本不现实。只要把那些消耗资源最多、最猖獗的挡住,服务器负载降下来了,目的就达到了。过度堆砌规则反而会增加服务器的判断开销,得不偿失。
说到底,屏蔽垃圾蜘蛛本质上是个成本收益的事。花少量精力把主要的无用爬虫拦住,把服务器资源留给真实用户和正规搜索引擎,就足够了。不用在这件事上过度纠结,比起和爬虫斗智斗勇,做好内容和用户体验才是站点的核心。