结论先说:源站返回的页面与内链正常,不代表边缘节点交付给爬虫和用户的版本正常。此时最该保留的不是“源站没问题”的截图,而是边缘层与源站响应不一致的成对证据:同一URL在同一时间、同一请求头下,分别经边缘节点和直连源站取得的完整响应。只有拿到这组对照,才能判断内链结构设计是在哪一层被改写、丢失或替换。
不要用浏览器地址栏随手打开页面就截图。浏览器会携带缓存、Cookie和压缩协商,边缘节点可能因此返回与爬虫不同的版本。选一个内链问题最明显的页面,用固定请求头分别请求边缘节点和源站,例如:
curl -sS -D edge-headers.txt -o edge-body.html -H "User-Agent: 固定测试UA" -H "Accept-Encoding: identity" https://边缘节点/路径
再用同样请求头直连源站,把两组响应头和响应体都存下来。关键动作是同时保存头部与正文:只存正文,无法证明差异来自边缘改写还是源站本身;只存头部,无法看到内链href是否被替换。做完这一步,你手里才有可对照的原始材料,后续判断都基于它,而不是基于印象。
常规做法往往只留一份“异常页面”存档,遗漏了对照项。以下四类要成对保留,缺一项都会让后续排查退回猜测:
这四类证据的作用不同:响应头解释“为什么返回这个版本”,正文快照证明“内链被改成了什么”,时间戳排除缓存时序干扰,请求头锁定复现条件。缺少请求头,证据无法被他人复现;缺少时间戳,无法区分缓存与配置。
假设某页面源站正文含三条站内链接,边缘返回的正文只含两条,且第三条被替换为外部域名。此时不要急着改内链结构设计,先做一次受控对照:
这个对照的价值在于:它把“边缘异常”这个笼统判断拆成可验证的分支。只有直连源站正常、边缘异常、且差异可随请求条件复现,才能把问题定位到边缘层。任何一步不成立,下一步的方向都要改。
抓取量下降、日志中某状态码增多、或某个链接在报表里消失,都不能单独证明边缘节点处理有误。抓取量下降还可能来自源站响应变慢、robots.txt调整、或爬虫自身调度变化;状态码增多可能只是缓存过期集中回源。把这些现象与前面的成对响应证据放在一起看,才能排除合理解释。
同样,边缘节点返回200也不等于内链结构完好——正文可能已被改写。反过来,边缘返回非200也不必然意味着源站故障,可能是边缘自身的规则拦截。判断依据始终是成对证据,而不是单一信号。
证据保留的终点不是存档,而是让下一位处理者能直接复现。建议按URL建一个记录,包含:边缘与源站两组响应头、两组正文中提取的内链清单、两次请求的完整命令与时间戳、以及对照结论(差异在边缘、在源站、还是未能复现)。
这样做的直接结果是:当你把记录交给边缘配置或源站发布方时,对方不需要重新猜测请求条件,能直接在自己的环境里复现。若对照显示差异只在特定请求头下出现,下一步就是核查边缘的分流规则;若差异在直连源站时同样存在,下一步应回到发布流程检查模板或构建产物,而不是继续调整边缘缓存。证据指向哪一层,动作就落在哪一层,这是避免反复试错的关键。