核对抓取限制的核心方法是:先确定限制发生在哪一层,再用“请求—响应—日志”三组证据交叉验证,最后用一次最小化改动做前后对比。抓取限制可能来自robots.txt、页面级meta指令、服务器返回状态码、防火墙或CDN规则,也可能来自站内链接结构过深。不先定位层级就改配置,很容易把“没被抓取”误判成“被抓取但没收录”。
规则声明是站点主动告诉爬虫“不要抓”或“可以抓”,典型是robots.txt和页面里的<meta name="robots">。实际拦截是服务器或中间层在请求到达时拒绝、超时或返回异常,典型是403、429、503、连接重置、防火墙封禁。两者现象可能都是“页面没被抓”,但处理方案完全不同。
判断依据:如果robots.txt里对应路径是Disallow,属于规则声明;如果robots.txt允许,但服务器日志里同一URL频繁出现403或超时,属于实际拦截。只有日志能证明请求真的到达过服务器,没有日志就不能断言是拦截,也可能是链接没被发现。
适用条件:你怀疑页面被主动禁止抓取,或者不确定某条规则是否误伤了目标目录。
Disallow: /news会同时挡住/news和/news-2024这类同前缀路径。<meta name="robots" content="noindex">或nofollow。noindex影响的是收录,不等于禁止抓取,这两个概念要分开。X-Robots-Tag。它对非HTML文件同样有效,容易在只查HTML时被漏掉。验收信号:修改robots.txt后,用抓取测试工具或直接请求该文件,确认返回的是更新后的内容,而不是缓存版本。meta指令的验收要看页面源代码,不是看渲染后的可见文字。
适用条件:robots.txt和meta都允许抓取,但页面长期没有抓取记录,或者抓取量突然下降。
curl -I -A "Mozilla/5.0 (compatible; Googlebot/2.1)" https://example.com/page。这里只是演示请求方法,实际User-agent以你所用工具的说明为准。判断结果:如果带爬虫UA的请求被拒、普通浏览器UA正常,可能是UA识别或反爬规则误伤;如果两种UA都被拒,问题在服务器配置或网络层。
一次改动前后比较时,要考虑季节性和搜索需求变化,也要考虑日志采集口径是否一致。抓取量回升不等于收录或排名一定改善,只能说明限制可能被解除。
下一步:选一个当前抓取异常的具体URL,按上面清单逐项记录证据,再决定是改声明层规则还是联系服务器侧排查拦截。