先别把它当成抓取故障。入口页面正常而深层链路失效,最常见的断点不在服务器,而在“链接是否真的存在于可渲染、可爬取的HTML里”,以及“这条路径是否被某一条规则单独截断”。判断顺序应当是:先确认深层页面本身是否返回正常内容,再确认从入口到深层的每一跳链接是否以可跟随形式出现,最后把责任边界从“站点整体”缩小到“某一条链路”。
三类断点的证据不同,处理动作也不同。内容不可达指深层URL本身返回错误状态或空内容;链接不可跟随指页面存在,但入口到它之间的<a>标签缺失、被脚本延迟注入,或指向了不可解析地址;路径被规则截断指页面和链接都正常,但中间某一跳被robots.txt禁止抓取,或带上了nofollow类属性。
可以这样区分:直接请求深层URL,如果返回正常内容,说明断点在链路而不是页面本身;如果返回错误,先修页面,不必继续追链接。若深层URL正常,再逐跳检查入口页面的HTML源码,看目标链接是否在初始响应中。若源码里有链接但抓取工具仍不进入,才需要检查规则文件与属性。
多个角色对同一现象有不同理解时,争论往往停留在“我觉得能点到”和“工具说抓不到”。此时不要先跑全站报告,而是选一条最短的入口到深层路径,逐步复现。
这个动作的结果会直接决定下一步:如果所有URL都返回正常,但初始HTML里没有链接,问题属于链接呈现方式;如果初始HTML有链接而抓取仍不进入,问题属于规则或属性;如果中间某一跳返回错误,问题属于该跳页面本身,与深层页面无关。
保留适用于链路本身成立、只是当前工具或角色没有观察到的情况。例如链接存在于初始HTML,目标页面返回正常,只是某次抓取统计没有覆盖到。此时不应改动结构,而应换一种核对方式,比如直接请求目标URL、检查服务端日志中的访问记录。注意,请求量或抓取量归零不能单独证明链路已断,它也可能是抓取预算分配、访问频率限制或统计口径变化造成的。
改写适用于链接存在但形式不可跟随的情况,比如依赖脚本注入、使用不可解析的相对路径、或被属性阻断。改写的前提是目标页面本身正常,且改写不会破坏现有可用路径。动作可以是在初始HTML中补一个可跟随的<a>,然后重新核对同一链路。结果若使目标URL在下次请求中被正常访问,说明断点确实在链接形式;若仍无变化,则要回到规则层继续查。
退出适用于该深层链路本身没有保留价值,或修复成本高于重建一条新路径。退出不是删除页面,而是不再把它当作主要入口链路,改由其他已确认可用的路径承担。前提是已经确认原链路断点无法在合理范围内修复,且新路径能覆盖同一批目标页面。
假设入口页A链接到中间页B,B再链接到深层页C。A和C单独请求都返回正常内容,B也返回正常内容,但抓取工具始终不进入C。按上面的核对表逐格填写后可能发现:A的初始HTML里有指向B的链接,B的初始HTML里也有指向C的链接,但B被robots.txt禁止抓取。此时断点在B这一跳,而不是C。
处理动作是检查这条禁止规则是否确有必要。如果B只是过渡页,可以解除限制或改由A直接链接C;如果B必须保留限制,则应新增一条不经过B的路径。这个例子的关键不在于数字,而在于核对顺序:先确认C正常,再确认A到B、B到C的链接存在,最后才检查规则。跳过前两步直接改规则,可能改错对象。
定位完成后,至少留下三项可复核内容:断点所在的具体跳数、支持该判断的证据类型、以及本次采取的动作。证据类型要写清楚是状态码、初始HTML中的链接、规则文件命中,还是属性阻断。这样下次同类现象出现时,可以先用同一顺序复核,而不是重新争论。
需要提醒的是,robots.txt的抓取限制不等于可靠的索引移除,站点地图也不保证收录。深层链路修复后是否被处理,仍取决于目标页面本身的质量与可访问性。把断点定位准确,只是让后续判断有一个干净的起点。