形成可复用检查清单的关键,不是记住“404要跳首页”这类口诀,而是把每次判断拆成三个可记录项:这个URL本来应该存在吗、现在返回的是什么状态、对用户和抓取分别造成什么结果。把这三项固定成字段,再按页面类型分组,就能在已有项目上反复套用,而不是每次凭感觉改。
很多人把“页面返回404”直接列为需要修复的缺陷,于是批量做301到首页。这个做法在部分场景下有害。404表示资源不存在,是HTTP协议的正常语义;当某个内容确实已删除、且没有等价替代页时,返回404并给出清晰的提示页,比强行跳转到无关首页更合理。真正需要处理的是两类情况:一是本该可访问的URL因配置、重命名或大小写问题变成404;二是大量无效URL被内部链接、站点地图或外链持续指向,浪费抓取并影响用户体验。
因此清单的第一栏不是“是否404”,而是“预期状态”。预期状态判断错了,后面所有动作都会错。
可复用的前提是每一条都能得到是或否、或一个具体值。建议按下面的结构建表,一行一个URL样本,而不是一行一个“问题类型”。
url:完整路径,保留大小写与查询参数。expected_status:预期状态码,如200、301、404、410。actual_status:实际返回的状态码,用命令行或抓取工具读取,不看页面文字。in_sitemap:是否出现在站点地图中。internal_links:站内还有多少处链接指向它。has_equivalent:是否存在内容等价的替代页,填是或否。action:保持、改链、301、返回410、补建页面。字段固定后,判断就变成规则匹配:预期200但实际404,且存在等价页,才考虑301;预期404但实际200,说明有软404或占位页,需要单独核查。
浏览器会把404渲染成自定义页面,肉眼容易误判。用请求头确认更可靠。假设要检查 /old-guide/,可以执行:
curl -I https://example.com/old-guide/
看返回的第一行状态码和 Location 头。如果返回301且Location指向一个内容不相关的首页,这属于需要复查的跳转;如果返回404且页面明确说明内容已移除,并给出相关推荐,通常可以保留。注意这只验证单条URL,批量核查应使用抓取工具导出状态码列表,再与站点地图和内部链接报告交叉比对。
适用条件:站点规模较大、URL经历过改版或迁移时,批量核查优先;只有少量页面时,逐条请求也够用。判断结果:预期与实际一致就标记为通过,不一致才进入动作列。
清单里常被误加的一条是“用robots.txt屏蔽404页面”。robots.txt的Disallow只是限制抓取,不等于可靠的索引移除;被屏蔽的URL仍可能因外链出现在搜索结果中,而且抓取被阻止后,搜索引擎也无法看到页面上的noindex。正确处理顺序是:先让页面可被抓取,再根据情况返回404或410,或使用noindex;只有确认不需要抓取且不介意索引状态时,才考虑屏蔽。
同样,站点地图不保证收录,它只是提交候选URL的渠道。把404 URL留在站点地图里,等于持续向搜索引擎推荐无效地址,应作为清单中的独立检查项。
下一步可以做的具体动作:从现有抓取报告里随机抽20条404 URL,按上面的字段填一张表,先验证“预期状态”这一栏能否被稳定判定。如果同一类URL出现互相矛盾的预期,说明分组规则还需要细化,再扩展到全站。