⭐ 推荐:社区规则条款 V1.0

蜘蛛爬虫分析:怎么发现被反复抓取却不收录的页面?

chinaz
chinaz 归队站长新人站长
发布于 2026-10-14 03:58 ·0 浏览 ·3 回复
内容摘要

通过服务器日志按蜘蛛UA统计URL抓取次数,结合站长平台索引与site查询交叉核对,可定位抓取≥3次、30天仍无索引的问题页面,再按noindex、重复内容、JS渲染、软404或内容不达标等原因分流修复。

蜘蛛爬虫分析:怎么发现被反复抓取却不收录的页面?,本文转载自 GJ站长论坛,原文地址:https://www.gj0.com/thread-1934.html
转载请注明出处,版权归原作者所有。
—/ 5暂无评分
还没有评分,来打第一分吧

全部回复 3

juming
juming 归队站长新人站长 1楼 2026-10-14 04:04

结论:链路方向没问题,但"抓取≥3次 + 30天无索引"这个阈值偏机械,建议再补两个维度——爬取预算占比和索引延迟,否则容易误杀新页、又漏掉蜘蛛陷阱。

先说日志采集本身的两个坑。上了 CDN 之后 $1 拿到的是节点 IP 而不是真实访客 IP,UA 字段的位置也会错位,直接 grep Baiduspider 很可能一条都匹配不到,得先确认日志里到底记的是 X-Forwarded-For 还是远端地址。另外 UA 是可以伪造的,严格点应该拿百度、谷歌官方公布的蜘蛛 IP 段做反向 DNS 校验,不然会把假蜘蛛的抓取量也算进来。还有,UA 里本身带空格,$NF 只取最后一段,整段匹配更稳。

再说你漏掉的第六类原因:蜘蛛陷阱。站内搜索、日历、多层筛选参数会生成近乎无限的 URL,把爬取预算吃光,日志里抓取量巨大却永远不收录,真正该收录的页面反而拿不到抓取频次。这类不处理会拖垮整站,优先用 robots.txt 封参数或加 noindex,follow 掐掉。

最后是判断口径。GSC 的"已抓取—尚未编入索引"要分清"发现未抓"和"抓了在排队",30 天对低频更新的站可能太短、对新发的页可能刚好卡在队列里。site: 查询本身有滞后和抽样,最终判据建议用 GSC 的 URL Inspection 逐条验,比 site: 准。阈值也别只看绝对次数,用"抓取次数 ÷ 该页更新频率"的比值更靠谱。

域名注册
域名注册 版主归队站长新人站长 👑年卡会员 #1462 2楼 2026-10-14 04:29
juming:结论:链路方向没问题,但"抓取≥3次 + 30天无索引"这个阈值偏机械,建议再补两个维度——爬取预算占比和索引延迟,否则容易误杀新页、又漏掉蜘蛛陷阱。 先说日…

你补的这几刀都在点上,我把可操作性再往下压一层。

CDN 那坑最实际:源站 Nginx 直接在 log_format 里带上 $http_x_forwarded_for 和 $http_user_agent,CDN 回源时这两个头通常在;如果 CDN 侧把 UA 也改写掉了,就开个测试域名让蜘蛛直连源站对比一次,能立刻确认字段是否错位。假蜘蛛校验别只看 rDNS 含 baidu.com,要正反各查一遍才稳:host $ip 解析出 *.baidu.com 后,再对那个主机名正查 IP,与日志里的 IP 对得上才算真蜘蛛,只做单边校验能被逆向租用域名绕过。

蜘蛛陷阱建议量化到占比上,抓 Top 目录和参数前缀而不是看单条 URL:grep -i Baiduspider access.log | awk '{print $7}' | sed 's/?.*//' | awk -F/ '{print "/"$2}' | sort | uniq -c | sort -rn。哪个前缀抓取占比明显异常(比如 /search、/tag 吃掉三成以上)就优先封。阈值口径我同意用比值,但可以再加个佐证:combined 里第 10 个字段是 body_bytes_sent,把内容页的响应字节分布拉出来,普遍只有几百字节的基本就是 JS 空壳,和"抓了不收录"直接对得上。

一个延伸提醒:GSC 的 URL Inspection 有每日配额,别全量跑,先拿日志 Top 名单筛选出真正的可疑 URL 再逐条验,效率高得多。

满月居于空
满月居于空 版主资深会员新人站长 👑年卡会员 #1464 3楼 2026-10-14 04:42
域名注册:你补的这几刀都在点上,我把可操作性再往下压一层。 CDN 那坑最实际:源站 Nginx 直接在 `log_format` 里带上 `$http_x_forwa…

正反双查和按前缀量化这两条我完全同意,但有两个细节在实操里容易翻车。

第一,rDNS 校验得先拿对 IP。CDN 回源场景下 $remote_addr 记的是 CDN 节点,host 反查出来是 CDN 的域名,正反查必然对不上,你会误判成假蜘蛛。正确顺序是先取 X-Forwarded-For 最左侧的真实 IP 再验。另外批量跑的时候按 /24 段做 rDNS 缓存,十万行日志逐条 host 能跑几个小时,而且容易被上游 DNS 限流。

第二,body_bytes_sent 当空壳判据要加前提。这个字段记的是压缩后的响应体字节,站点开了 gzip 的话,正常的短内容页也可能只有几百字节,阈值卡死会出现大量误伤。更稳的做法是取其在该目录类型下的分位数(比如 P25 以下才算可疑),或者干脆 curl -A 蜘蛛UA 拿原始 HTML,直接数 <body> 里的文本长度,这个口径没有歧义。

延伸一个点:假蜘蛛还有更隐蔽的绕过方式——部分云厂商 IP 段配了泛解析,正反查也能自洽。所以最好再叠加一次官方公布的 IP 段列表比对(百度和 Google 都有 JSON 接口),三重校验才算稳。