求助我的网站在检查友链的时候显示屏蔽了所有蜘蛛

  1. AutoCMS
  2. /
  3. 建站资讯
  4. /
  5. 网站
logo
鲁筠力

网站  2026-08-06 04:00:01   120

求助我的网站在检查友链的时候显示屏蔽了所有蜘蛛

昨天在检查站点友链是否正常时,检测工具突然醒目地提示“屏蔽了所有蜘蛛”,当时心里一沉。友情链接需要搜索引擎蜘蛛定期抓取才能传递权重,如果蜘蛛被拦住,不仅友链效果归零,甚至整个站点的收录都会萎缩。花了大半天排查,最后发现根源在一条看似合理的安全规则上,过程记录如下。

先说一下现象。友链检测工具挂在友情链接页面,抓取时返回的状态码全部是403,页面内容为空。但用浏览器直接访问同一页面,打开完全正常。这说明服务器对特定请求执行了拒绝操作,而区别就在请求头里的User-Agent。多数检测工具会模拟Googlebot、Baiduspider等蜘蛛UA,服务器一旦识别出UA中带有“spider”或“bot”字段,就立刻判定为恶意爬虫并拦截,于是所有蜘蛛都被屏蔽。

第一反应是robots.txt写错了。登录服务器后执行curl -I -A "Baiduspider" https://example.com/links,得到HTTP/1.1 403 Forbidden,而请求robots.txt时返回200。这立刻排除了robots.txt的嫌疑,因为robots协议只能产生Allow或Disallow提示,不会生成403状态码。真正的拦截发生在Web服务器或安全防护层。

打开Nginx配置,在sites-enabled目录里看到一段规则:
  if ($http_user_agent ~* (curl|python|perl|spider) ) { return 403; }
  这段通常被用来防止脚本扫描,但问题很严重。“spider”关键字成了罪魁祸首。Googlebot的UA是Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html),Baiduspider的UA是Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html),两者都包含“spider”,全被拒之门外。友链检测工具自带的模拟UA也常写成SpiderSimulator或LinkDetectBot,同样命中。

修复方案是把spider从拦截规则里摘除,只保留curl和python这些明显不是浏览器的请求,再单独放行主流搜索引擎蜘蛛。修改后的配置类似:
  set $block_bot 0;
  if ($http_user_agent ~* (curl|python|perl) ) { set $block_bot 1; }
  if ($http_user_agent ~* (Googlebot|Baiduspider|Bingbot|YisouSpider) ) { set $block_bot 0; }
  if ($block_bot = 1) { return 403; }
  保存后执行nginx -t确认语法无误,再reload,重新跑curl测试,返回200,友链检测工具跟着恢复。

这类问题的根源,往往是站长为了保护后台或日志,设置了针对非浏览器UA的封锁,但范围划得太大。搜索引擎蜘蛛的UA几乎都包含“bot”或“spider”字样,放在一个正则表达式里一网打尽,误杀在所难免。

还有一种更隐蔽的情况是CDN或安全插件主动拦截。某次在技术社群里看到一个案例,某电商网站开启了宝塔防火墙的恶意UA拦截,默认规则里恰好有一条“禁止包含spider的UA访问”,百度蜘蛛直接进不来,收录量从日均几百降到零,站长一开始还以为是服务器宕机了。还有一个案例是Cloudflare的Bot Fight Mode,这个功能会阻断所有被识别为爬虫的请求,包括Googlebot和Bingbot,导致网站搜索排名断崖式下跌。

遇到友链检测提示屏蔽所有蜘蛛时,不要急着改robots。按以下步骤排查能少走弯路。先模拟蜘蛛UA测试,看返回码是403还是200。如果403,说明是Web服务器或防火墙拦截;如果200但内容为空,可能是程序或CDN层做了特殊处理。顺便看一眼robots.txt,确认没有Disallow: /这样的全站禁止规则,但记住robots不会产生403。然后翻access.log,过滤spider关键字,观察响应码分布。这次故障日志里所有spider请求都是403,浏览器访问全部200,范围一目了然。最后检查CDN和安全插件的爬虫管理功能,把官方蜘蛛UA加入白名单。

关于友链检测工具要额外说一句。很多检测工具使用的是自定义UA,比如LinkDetectBot或SpiderSimulator,并不在谷歌或百度的官方UA列表中。即便你的服务器正确放行了Googlebot和Baiduspider,也不代表这些工具UA能通过。因此检测数据只能作为参考,更可靠的方法是去百度搜索资源平台和Google Search Console里用抓取测试工具,直接看真实蜘蛛能否成功抓取页面。

这次故障持续了大约14个小时。期间百度蜘蛛从每天约1200次抓取直接降到0,修复后第二天恢复到800次左右,第三天完全正常。虽然友链检测工具只模拟了两次请求,但真正的蜘蛛同样被那条Nginx规则挡了14小时,损失可想而知。万幸发现及时,否则长时间屏蔽会严重影响蜘蛛对站点的信任度,甚至导致友链被对方站长单方面撤下。

排查结束后,把这条经验记在了运维笔记里:凡是涉及UA过滤的规则,一定要先列出蜘蛛UA特征,至少包含Googlebot、Baiduspider、Bingbot、YisouSpider和Sogou Web Spider。放行要具体,拦截要精准,宁可漏过几个扫描器,也不能把自己的搜索引擎流量源切断。友链检测提示屏蔽所有蜘蛛,不是一个孤立的小问题,它反映的是服务器配置对搜索引擎的态度。希望这份记录能给遇到同样困扰的人一点方向。