排查301转向时,日志里最先要核对的是请求行中的状态码、请求URL、响应 Location 头、User-Agent 和请求时间。其中状态码决定这次跳转是否真的按 301 返回,Location 决定跳去了哪里,请求URL决定谁被跳转,User-Agent帮助你区分搜索引擎与普通访客,时间用于判断改动是否生效。人手有限时,先看状态码和 Location,再看请求URL与时间,最后才做细分统计。
不同服务器和日志工具的字段命名不一样,不要直接套用别人的列名。先打开一条原始日志,确认它记录的是访问日志、错误日志还是 CDN 回源日志,再对照字段含义。
GET /old-page HTTP/1.1。Location,它记录跳转目标。若日志不记录响应头,需要从服务器配置或抓包结果补充核对。如果日志只记录状态码,不记录 Location,就不能只凭状态码判断跳转是否正确。此时应优先检查服务器配置中的跳转规则,再用一次实际请求验证响应头。
时间和人手有限时,可以按下面顺序处理。这个顺序的依据是:状态码和 Location 直接决定跳转是否成立,请求URL和时间决定影响范围,User-Agent 决定问题是否发生在搜索引擎抓取环节。
验收信号可以这样判断:旧URL请求返回 301,Location 指向正确的新URL,新URL返回 200,且日志中不再出现旧URL返回 404 或 200 的情况。若旧URL仍返回 200,说明跳转没有生效;若返回 302,说明不是永久跳转;若返回 404,说明规则缺失或路径不匹配。
假设旧地址是 /old-page,新地址是 /new-page。修改规则后,在日志中查找包含 /old-page 的请求行,核对同一行或同一次响应的状态码是否为 301,Location 是否为 /new-page。如果状态码是 301 但 Location 指向 /,说明规则写成了首页跳转,应修正目标路径。如果状态码是 404,说明规则没有匹配到该路径,应检查路径大小写、结尾斜杠和参数处理。
这个例子只适用于你能拿到响应头或服务器配置的情况。若日志不记录 Location,就不能只靠日志下结论,应结合一次实际请求的响应头核对。
日志中出现 301 不等于索引已经更新。robots.txt 的抓取限制不等于可靠的索引移除,站点地图也不保证收录。HTTPS 不保证安全无漏洞或排名。不同搜索引擎对跳转和抓取的处理需要分别核查,不能用一个平台的日志结果推断所有平台。
另外,CDN 缓存可能让旧响应继续出现,回源日志和边缘日志的状态码也可能不同。遇到这种情况,先确认你查看的是哪一层日志,再对比回源结果。若边缘返回 301、回源返回 200,说明跳转发生在边缘层,应检查 CDN 规则而不是源站规则。
下一步:从日志中导出最近一段时间内包含旧路径的请求,按状态码和 Location 分组,先修状态码不是 301 或 Location 不正确的规则,再观察新日志中旧路径是否仍被访问。