当测试工具显示页面可访问、实际用户却失败时,先不要改配置,而要把“工具成功”拆成可复现的条件:请求来源、解析路径、协议与端口、Cookie或登录状态、地域与网络。最小动作是拿一个受影响URL,在无痕窗口和真实网络下各请求一次,记录状态码、响应头和最终跳转;若两者结果不同,下一步应对比DNS解析结果和TLS握手,而不是直接提交收录或改robots.txt。
测试工具常从固定机房出口发起请求,可能命中缓存、走内部解析,或跳过登录与地域限制。实际用户则从本地运营商出口进入,可能被CDN节点、WAF或重定向规则区别对待。要复现,至少固定三件事:请求的完整URL、请求时携带的Cookie或令牌、发起请求的网络出口。缺少其中任何一项,工具成功都不能推出用户侧正常。
可执行动作:在浏览器开发者工具的Network面板中勾选“保留日志”,用无痕窗口访问目标URL,导出HAR文件;再用测试工具请求同一URL,对比两者的状态码、响应头和最终地址。若HAR显示302跳到登录页而工具显示200,说明差异来自会话状态,而不是页面本身不可访问。
如果无痕浏览器同样失败,而工具成功,优先怀疑网络层。分别执行以下检查,并记录结果:
nslookup或dig查询域名,比较本地与工具侧返回的IP是否一致。curl -I请求目标URL,观察是否在TLS握手阶段就中断。Server、Via、X-Cache,判断请求是否经过不同中间节点。若本地解析到的IP与工具不同,且只有本地IP超时,问题更可能在DNS或CDN节点,而不是页面内容。此时修改页面或提交站点地图不会改变用户侧结果。若TLS握手失败而HTTP可通,则要检查证书链和SNI配置,而不是抓取限制。
复现的目标不是证明谁对,而是找到一个能稳定触发失败的条件。假设某URL在测试工具中返回200,在部分用户处返回403。可以构造对照:同一URL分别带与不带某个Cookie请求,若带Cookie返回403,则失败条件与身份标识相关;若两者都返回200,则继续对比请求头中的User-Agent和Referer。每次只改一个变量,否则无法判断是哪个条件导致差异。
动作与结果的关系很直接:如果去掉某个请求头后失败消失,下一步就应检查服务端对该头的处理规则,而不是先改robots.txt。robots.txt只表达抓取偏好,不控制用户访问,也不等于索引移除;用它来解释用户403会走错方向。
没有服务器日志或CDN后台权限时,仍可做三件事:
这些动作能帮助区分“全网失败”和“特定条件失败”,但不能推出根因。若只有个别用户失败,且无法获取其请求头,就不能断言是WAF拦截或DNS污染。此时可先记录待验证条件,等拿到更多样本再决定是否调整配置。站点地图不保证收录,HTTPS也不保证无漏洞或排名,这两点与用户访问失败不是同一层面的问题。
根据对照结果选择动作:若失败只出现在带登录态的请求,检查会话校验和重定向规则;若只出现在特定解析IP,检查DNS记录和CDN回源;若只出现在特定地域,检查地域限制或合规拦截。每次调整后,用同一组条件重新请求,确认失败是否消失。若条件无法复现,应保留原始请求记录,而不是凭测试工具的成功结果直接判定问题已解决。不同搜索引擎对抓取和索引的支持情况须分别核查,用户访问失败与收录状态也不能互相替代。