干了这么多年蜘蛛池,有一类问题隔三差五就来一回。池子本来跑得好好的,日抓取量稳在几千上万,突然有一天,蜘蛛日志面板上那条曲线一泻千里,有的直接归零。然后人就慌了,上来就问:“老铁,我的池子不抓取了,怎么办?”
这个问题太大了,就跟去医院跟医生说“我不舒服”一样,可能性太多。但排查这件事是有套路的,你可以一层一层往下挖,绝大多数情况都能定位到根因。
老铁SEO今天把这套排查流程完整写出来。从服务器到域名,从程序到日志,按这个顺序过一遍,不管你是自己搭的池子还是租的池子,至少知道该从哪下手。

一、别慌,先把现象描述清楚
大部分人上来第一句话就是“不抓取了”,但这三个字太笼统。你得先把问题细化:
是全部搜索引擎都不抓了,还是只有百度不抓、谷歌还正常?是池子里所有域名都不被抓了,还是只有部分域名不抓?是完全归零了,还是掉了一半以上但还有一点残余?是什么时候开始的——今天刚发现的,还是已经持续好几天了?出问题之前你有没有做过什么操作——改了配置?换了服务器?更新了程序?批量改过域名解析?
这几个问题先自己回答一遍,排查方向就已经缩窄了大半。如果只有百度不抓,谷歌正常,那大概率不是服务器宕机,而是百度那边把你的域名标记了。如果所有搜索引擎全不抓,那大概率是服务器、网络或域名解析出了问题。如果只有部分域名不抓,很可能是这批域名本身出了问题——证书过期、被墙、被注册商暂停解析。
先把日志面板打开,别只看总量,按搜索引擎、按域名分组看一眼,你马上就有初步判断了。
二、服务器层面排查
如果所有搜索引擎全不抓,先查服务器。服务器是池子的心脏,心脏不跳了啥都别谈。
第一件事:服务器能登录吗?听起来像废话,但老铁SEO自己就犯过这种错——服务器被IDC暂停了,因为没有及时续费。登录不上去,或者登录上去发现系统盘满了,Nginx挂了。SSH连上去,先看uptime,确认系统在正常运行。
系统正常,查Nginx状态。ps aux | grep nginx看Nginx进程还在不在。systemctl status nginx看服务状态。如果Nginx挂了,大概率是配置出错或者被蜘蛛高并发打崩了,错误日志看/var/log/nginx/error.log。如果Nginx没挂但返回502、503,说明后端程序崩了。蜘蛛池如果后端是PHP,多半是php-fpm挂了,重启一下。如果是Go写的程序,看进程还在不在。
Nginx正常,查端口。netstat -tlnp看80和443端口有没有在监听。firewall-cmd –list-ports看防火墙有没有误拦。有时候服务器安全策略自动更新,或者你自己改防火墙忘了加回端口,外部请求全被拦。
端口正常,查网络。从服务器内部curl一下外部网站,看服务器能不能出网。从你自己电脑上curl一下池子域名的页面,看能不能访问。用其他服务器或VPS测试也行。如果外面访问不了,先检查域名解析是不是挂了。dig一下池子任意域名,看DNS解析是否正常。如果解析IP指向错误或解析为空,DNS那边的原因需要进一步排查。如果DNS没有问题但国内访问不了海外服务器域名,有可能是IP被墙了,国内三网测速走一圈看看能不能通。
以上全部正常,查资源消耗。看CPU负载是否被异常进程拉满,内存是否耗尽导致系统OOM,磁盘空间是否被日志撑满。老铁SEO再次强调:蜘蛛池日志量一天几十GB,没有日志轮转的话一两周磁盘必满。df -h看一眼,磁盘满了Nginx写不了日志,服务虽然没挂但日志阻塞也可能导致请求处理异常。
三、程序与调度逻辑排查
服务器没问题,下一步查蜘蛛池程序本身。
程序出问题最常见的几个表现:蜘蛛来了,但返回的全是404或者500。蜘蛛来了,返回200但页面是空白或者乱码。蜘蛛来了,但程序崩了直接白屏。
怎么验证?从你的浏览器访问任意一个池子域名,看页面是否正常加载。如果正常,再用curl带上蜘蛛UA去访问同一个域名:
curl -I -H "User-Agent: Mozilla/5.0 (compatible; Baiduspider/2.0; ...)" http://你的池子域名/。
看返回的HTTP状态码和内容长度。正常应该是200并且有正常的HTML内容。如果返回500或页面空白,说明你的蜘蛛池程序在处理蜘蛛请求时崩了。去看程序错误日志,找最近的报错。
如果你用的是开源蜘蛛池程序,这两天刚更新过版本或改动过配置,先回滚到上一个稳定版本试试,很多问题是你自己改出来的。
调度系统也要排查。调度规则有没有错配导致蜘蛛被导向了不存在的目标站、或者目标站已经不可用、跳转链条出现循环或中断。查看调度日志,找那些返回404或跳转失败比例高的目标页面,直接手动测试目标站是否还活着。
四、域名层面排查
服务器和程序都没问题,那就查域名。域名是最容易被忽视但出问题概率最高的环节。
第一,域名过期没有。老铁SEO见过太多人池子不抓取查了半天,最后发现是域名过期了没续费。whois一下几个不抓取的域名,看到期时间。
第二,DNS解析正常吗。dig域名看A记录是否指向正确的服务器IP。NS服务器本身健康吗,域名所在的DNS服务商最近有没有故障。
第三,域名被墙或阻断了吗。国内服务器curl或者用在线检测工具测一下域名在国内三网的解析和访问状态。如果在国内无法访问,域名确定出问题了。域名被墙只能换域名,没有别的办法。
第四,搜索引擎有没有处罚域名。site:域名在搜索引擎搜一下,如果site结果为零但域名之前有收录,或者在站长平台里收到异常提示,就说明被搜索引擎标记了。
第五,SSL证书过期或异常。HTTPS站点如果证书过期,蜘蛛访问时SSL握手失败,直接放弃抓取。浏览器访问域名看地址栏有没有SSL错误提示。证书没过期但SSL配置有问题——比如中间证书不完整、TLS版本不兼容——也会导致蜘蛛抓取失败。用在线SSL检测工具跑一下,看到底是哪一环有问题。
五、内容层面排查
如果服务器、程序、域名都没问题,但蜘蛛就是不抓或者只抓首页不深入,问题可能在内容本身。
蜘蛛来了但看到什么?全站内容空白、模板没挂上、文章全是乱码。或者蜘蛛看到的内容跟上次来抓时一模一样,没有任何更新——连续多次蜘蛛发现域名没有新内容,会降低抓取频率。
排查方法:用蜘蛛UA访问几个页面,看实际返回的内容是否正常。查一下这些域名最近一次内容更新时间,是不是已经超过一定期限没有更新过了——如果是,先补充新内容。查一下采集源是否已失效、伪原创规则是否出故障、数据库连接是否异常导致内容页空白。
如果域名以前有收录但最近内容批量失效产生了大量死链没有处理,蜘蛛频频碰壁后对整个域名的抓取积极性会大幅下降。按之前死链清理那篇文章的做法处理并提交站长平台。
六、搜索引擎策略变化
前面四层全排查完还找不到原因,那就可能是搜索引擎自己变了。
搜索引擎的算法会不定期调整对站群和链接农场的识别策略。你的池子可能被新算法扫到了。服务器上收到大量429限流请求,或者站长平台上抓取频次被压缩,或者site收录条数连续下降。查一下行业论坛和圈内群,看看最近有没有同行反映类似问题。如果搜索引擎刚好在这段时间更新了算法,你的池子可能是被波及了。具体需要等一段时间再观察,同时针对新的算法特点调整池子架构。
七、排查顺序总结
老铁SEO最后给一个排查顺序,照着来就行:
先查服务器活着没,资源有没有耗尽。再查端口和网络通不通。再查页面返回是否正常。再查域名有效性和解析。再查SSL证书。再查调度规则。再查内容是否还有更新。最后查搜索引擎有没有算法更新。
绝大多数“蜘蛛池不抓取了”的问题,在前面几层就能定位到。位置越靠前的问题越容易修复,位置越靠后的问题越需要时间和策略调整。
八、最后
池子不抓取的时候,人最容易慌,一慌就到处乱动配置,越动越乱。老铁SEO的建议是:先看日志,把现象量化,再按这个顺序一层一层排查,找到根因再动手修。修完后至少留一个稳定窗口观察几天,而不是修完立刻去改另一项配置。
蜘蛛池是一个需要持续关注和维护的系统,出问题很正常。关键是出了问题之后你手里有一套排查的工具和思路,能在一个小时之内定位到问题所在,而不是瞎猜两天最后发现是域名过期了。

评论0