你的网站日志里,蜘蛛真的来过吗?
你有没有试过:文章发了三天,百度站长平台显示“抓取频次正常”,可收录数纹丝不动?点开日志一看,好家伙——全是/wp-admin/admin-ajax.php和带一长串?s=xxx&ref=xxx的搜索页……蜘蛛根本没碰你最想被收录的那几篇干货。
别靠猜。Linux服务器的日志文件,就是蜘蛛留下的原始打卡记录。今天不讲虚的,直接带你翻日志、找IP、看它到底点了啥。
为什么必须从服务器日志看蜘蛛?
第三方工具给的是“二手消息”:它只能告诉你“大概率有蜘蛛来过”。而你的Nginx或Apache日志,记的是真刀真枪的每一次请求——哪个IP、几点几分、用的什么User-Agent、访问了哪个URL、返回了200还是503。
这些细节直接决定收录结果。比如我帮一个做工业滤网的客户查日志,发现Baiduspider每天来30多次,但80%的请求都卡在/product-list.php?cat=12&page=1这种无限分页上,真正该抓的/product/xx-1000-filter.html反而排在队尾。问题不是蜘蛛不来,是它被带偏了。
第一步:找到你的网站日志文件在哪
先别急着敲命令,得知道去哪翻。Nginx用户,90%的情况日志就在:
/var/log/nginx/access.log
如果开了多站点,可能是:
/var/log/nginx/yourdomain.com.access.log
Apache用户通常在:
/var/log/apache2/access.log
# 或
/var/log/httpd/access_log
实在不确定?直接搜配置文件里的日志路径:
# Nginx
grep "access_log" /etc/nginx/nginx.conf /etc/nginx/sites-enabled/*
# Apache
grep "CustomLog" /etc/apache2/apache2.conf /etc/apache2/sites-enabled/*
输出里带.log的那个路径,就是你要盯的“监控录像”。
核心方法:如何用命令快速筛选蜘蛛IP?
几GB的日志,别打开vim硬啃。三行命令搞定:
grep -i "googlebot\|bingbot\|baiduspider\|bytespider" /var/log/nginx/access.log | awk '{print $1}' | sort -u
说明一下:
grep -i:忽略大小写,防漏掉小写的googlebotawk '{print $1}':默认日志第一列是IP(Nginx标准格式)sort -u:排序+去重,避免同一个IP刷屏
如果你用的是Apache,或者日志格式被改过(比如加了前置时间戳),IP可能在第2列或第3列——那就把$1换成$2试试,再不行就head -1 /var/log/nginx/access.log看看实际格式。
进阶分析:蜘蛛到底在抓取什么页面?
光知道IP没用,得看它点了哪扇门。继续用上面那个grep结果,只换一行:
grep -i "baiduspider" /var/log/nginx/access.log | awk '{print $7}' | sort | uniq -c | sort -nr | head -15
这行命令会输出:127 /article/how-to-choose-filter.html89 /search/?q=filter42 /wp-login.php
一眼就能看出问题:蜘蛛一半时间在搜站内搜索页,还试图登录后台?这时候该去robots.txt加一句Disallow: /search/,或者给搜索页加noindex。
如何验证一个IP是不是真的官方蜘蛛?
网上有爬虫爱装Googlebot。真李逵和假李逵,得验身份证。
Googlebot验证(推荐用host):
假设你从日志里捞到IP 66.249.66.1,执行:
host 66.249.66.1
如果返回 crawl-66-249-66-1.googlebot.com,就是正品。如果返回一堆乱码域名,或者超时——十有八九是冒牌货。
百度蜘蛛验证:
直接去百度搜索资源平台 →「抓取诊断」→「蜘蛛IP段」,下载最新IP段列表(是个TXT),用这个命令比对:
grep "61.135.185" baidu_ip_ranges.txt
只要IP落在列表里,基本可信。封禁前务必走这步,别误伤。
长期监控:怎样自动化跟踪蜘蛛抓取情况?
每天手动跑命令太累?写个5行脚本,让它自己干:
#!/bin/bash
DATE=$(date +%Y%m%d)
grep -i "baiduspider" /var/log/nginx/access.log | awk '{print $1, $7}' > /tmp/baidu_today_$DATE.log
# 再加一行,统计TOP10 URL
grep -i "baiduspider" /var/log/nginx/access.log | awk '{print $7}' | sort | uniq -c | sort -nr | head -10 >> /tmp/baidu_today_$DATE.log
保存为/root/check_spider.sh,然后加进定时任务:
# 每天凌晨2点执行
0 2 * * * /bin/bash /root/check_spider.sh
每周一早上,ls /tmp/baidu_today_*.log,挑最新的文件扫一眼——蜘蛛行为有没有突变,一目了然。
今天下班前就能做完的一件事
现在,打开你的终端,粘贴这行命令(记得把路径换成你自己的):
grep -i "googlebot" /var/log/nginx/access.log | tail -20 | awk '{print $1, $7, $9}'
它会显示最近20条Google蜘蛛的记录:IP、访问的URL、HTTP状态码。
重点看第三列 $9:如果是200,说明顺利抓取;如果是301,说明页面跳转了;如果是404或503……恭喜,你刚定位到一个收录障碍点。
花三分钟,截图发给自己,明天晨会就能说:“咱们首页的canonical标签可能有问题——Googlebot连续三次抓到了带www和不带www的两个版本。”