404 not found的字面意思是服务器收到了请求,但找不到对应资源;而在批量页面只有一部分被发现的情境里,它更常被当作一个信号:被发现的页面返回404,未被发现的页面可能返回200,也可能返回404。要判断“未被发现”到底是抓取问题、索引问题还是内容问题,不能只看发现比例,而要先按可核对的变量划分对照组,再决定保留、改写还是退出。核心做法是:把“被发现”当成结果,把可能影响结果的变量当成分组依据,让每组内部尽量同质,组间差异尽量单一。
对照组不是把页面随便分成两堆。你要先写下一个可证伪的判断,例如:“同一目录下,返回200且正文长度接近的页面,被发现率明显高于返回404的页面。”这句话里,返回状态是自变量,被发现是结果。只有把判断写清楚,分组才有意义。
如果判断写成“页面质量差导致不被发现”,就无法核对,因为质量没有统一口径。可核对的口径包括:HTTP状态码、是否在站点地图中列出、内链数量区间、模板是否相同、发布时间区间、正文长度区间、是否有唯一标题。选择其中一到两个作为分组变量,其余尽量保持一致。
这里有一个容易忽略的前提:站点地图不保证收录,robots.txt的抓取限制也不等于可靠的索引移除。因此,不能把“已提交站点地图”直接当成“应该被发现”的对照组条件,否则分组会混入一个并不成立的假设。
批量页面中,最值得先做的对照组是“返回200的页面”与“返回404的页面”。如果只有一部分被发现,而未被发现的页面里404占比明显更高,那么一个合理解释是:这些页面本身已不可用,发现与否并不构成同一类问题。此时继续优化内链或站点地图,可能只是在处理一个已经失效的集合。
但反过来,404占比高并不能单独证明处理正确。抓取量或发现量归零,也可能来自抓取预算分配变化、站点整体响应变慢、外部链接减少,或者搜索需求本身下降。要区分这些解释,可以再做一层对照:在同一模板下,比较返回200的页面与返回404的页面,看差异是否仍然存在。如果同一模板内差异消失,说明模板或目录结构比状态码更能解释结果。
一个注明假设的短例子:假设某站有A、B两个目录,各100个页面,A目录全部返回200,B目录有60个返回404、40个返回200。若被发现的是A目录80个、B目录50个,其中B目录被发现的50个里有45个是200页面,那么“404集中了未被发现”这一解释就有一定证据。此时下一步不是全站改版,而是先处理B目录中仍返回200却未被发现的页面,并核查它们与A目录在内链和模板上的差异。
对照结果大致会落到三种情形,对应三种动作。
三种动作不是按比例分配,而是按对照结果选择。若一组内既有可保留页面又有应退出页面,就继续拆组,直到每组内的处理动作一致。
分组完成后,不要立刻全量执行。选一组规模可控的页面,做一个可回退的动作,例如:只对“返回200、同一模板、内链少于3条”的这一组,补充从相关已发现页面指向它们的正文内链。动作之后,观察的指标不是排名,而是这组页面是否开始被请求、被访问、被纳入发现集合。若这组出现变化,而对照组没有同步变化,分组假设得到加强;若两组同时变化,说明还有一个未纳入分组的共同变量,例如站点整体抓取节奏或外部链接变化。
这里要避免把统计相关当成因果。发现比例上升可能来自抓取节奏恢复,也可能来自站点地图更新,不能只凭一次对照就断定内链是唯一原因。更稳妥的做法是保留动作前后的URL清单和状态码记录,让下一次判断有可核对的基线。
最后一层划分是把“未被发现”拆成三件事:请求层、抓取层、索引层。请求层看服务器日志或可获得的访问记录;抓取层看页面是否被实际获取;索引层看页面是否出现在结果中。三层混在一起,对照组就会失焦。若请求层没有记录,先检查这些URL是否还在内链或站点地图中;若抓取层有记录但索引层没有,再检查页面返回内容是否与用户看到的一致。
只有当同一组内三层表现一致,且与对照组的差异稳定存在时,才值得把动作扩大到全站。否则,更合理的做法是继续缩小分组,而不是用一个全站结论覆盖所有页面。404 not found在这里不是终点,而是一个用来划分集合的边界:先确认哪些页面真的不可用,再确认哪些页面可用却未被发现,最后才决定保留、改写还是退出。