页面内容没问题,内链也没断,收录却迟迟不见动静,这时候可以把视线往前挪一层:蜘蛛到底有没有真正拿到这个页面。CDN、WAF、防火墙、地区限制这些配置本意是保护站点,但配置得不合适,很容易把正常的抓取请求一起挡在门外。而且这种问题往往不报错,从站长后台看不出明显异常,只有翻日志才能发现。
先确认蜘蛛有没有进来
不要凭感觉判断,先看三处数据。第一处是服务器访问日志,重点看 Googlebot、Bingbot 这类 UA 的出现频率,以及它们请求时返回的状态码。第二处是搜索后台的抓取统计和 URL 检查工具里的实时抓取结果,它能看到蜘蛛视角下拿到的 HTML、状态码和渲染情况。第三处是 CDN 侧的日志与缓存命中记录,有些请求在边缘节点就被处理掉了,根本没到源站。
如果日志里 UA 出现很多,但返回的全是 403、429、503,问题多半在防护层。如果连 UA 都看不到,那要往 DNS、防火墙规则或者 CDN 更前面的环节去找。
几种常见的“被挡住”方式
缓存返回了错误版本
CDN 缓存了旧的 HTML、缓存了错误的状态码,或者把某个访客的登录态页面缓存下来,蜘蛛拿到的就不是你当前的页面。典型表现是:内容明明更新了,索引里还是旧版本;或者抓取工具看到的内容和浏览器打开的不一致。
WAF 按 UA、频率或请求特征拦截
不少防护规则默认把“不像真实用户”的请求当可疑流量处理。抓取密集时容易触发频率限制,返回 429;UA 里带 bot 字样可能被直接拒;还有些规则会拦截没有 Cookie、没有 Referer 的请求,而蜘蛛恰好就是这样来的。
地区限制和登录墙
按 IP 归属地封禁、只对特定国家开放、或者整站需要登录才能看到内容,蜘蛛从境外抓取时就会吃到 403,或者被跳到登录页。这类问题常常在站点做了区域性运营之后才出现,容易被忽略。
JS 挑战与人机验证
一些防护会用一段 JS 跳转或人机验证来确认访问者身份。真人点一下能过,蜘蛛一般过不去,结果就是抓到的内容停留在挑战页,正文一个字都没取到。
怎么判断访问者是不是真蜘蛛
不要只看 UA,UA 是可以伪造的。常用的核对方式是三步连着做:
- 反向 DNS:把来访 IP 做反向解析,看解析出的域名是否属于对应搜索引擎;
- 正向解析回查:把解析出来的域名再解析一次,确认指向的正是原 IP;
- 比对官方 IP 段:Google、Bing 等都会公布自己的 IP 范围,可以对照确认。
只有这几步都对得上,才按真蜘蛛处理。只看 UA 就放行,等于给伪装请求开了口子。
合理的放行做法
- 在 WAF 或 CDN 里给已验证的蜘蛛 IP 段设白名单,而不是简单按 UA 放行;
- 对已验证的蜘蛛关闭人机验证和 JS 挑战;
- 检查缓存规则,确保 HTML 不会被长期缓存,或至少保证回源拿到的是最新版本;
- 把抓取频率限制放宽到不影响正常抓取的阈值;
- 如果业务上确实需要按地区限制,至少给搜索引擎抓取留出例外。
改完之后怎么核对
调整完配置,先别急着看收录数。用 URL 检查工具发起一次实时抓取,确认返回的 HTML、状态码、渲染结果都正常;再回到日志,看蜘蛛请求的返回码是否从 403、429 变成了 200,抓取请求数有没有恢复。搜索后台的抓取统计里,平均响应时间也会跟着变化。
收录本身是滞后的,抓取恢复正常之后,索引还需要一段时间才跟上。所以核对的重点应该放在“蜘蛛能不能稳定拿到正确页面”这件事上,而不是每天盯着收录条数的涨跌。
防护和抓取并不是二选一。合理的做法是让已验证的蜘蛛顺利通过,同时把真正可疑的流量继续挡住。
收录异常的原因往往不止一个,防护层只是其中一条线索。把它放在排查顺序里靠前的位置,能省掉不少“内容明明没问题却怎么都收不进去”的困惑。