抓取路径不是“有一条链接”就算通
很多站点在排查 URL 发现问题时,习惯先看 Sitemap 是否提交、首页是否挂了链接。这些当然重要,但蜘蛛实际走过的是一条路径:从某个入口页出发,经过一层层链接,最终到达目标 URL。路径上任何一环断开,后面的页面都可能长时间停留在“未发现”状态。
把抓取路径理解为一条链,更容易定位问题:入口页是否可访问,链接是否真实存在,点击后返回什么状态码,页面内容是否需要渲染,服务器响应是否稳定。下面按这几个环节依次看。
第一关:入口页和链接是否真实可达
入口页不一定是首页。分类页、聚合页、Sitemap、甚至外部链接,都可能成为蜘蛛进入站点的起点。入口页本身如果被 robots.txt 屏蔽、返回错误状态,或者需要登录才能看到链接,蜘蛛就难以继续往下走。
链接可达性则要检查两点:
- 链接是否出现在 HTML 中。如果链接由 JavaScript 在点击后才生成,或者放在需要交互才展开的菜单里,蜘蛛未必会执行到那一步。
- 链接地址是否写错。相对路径、大小写、多余空格、参数拼接错误,都会让链接指向一个不存在的地址。
一个常用做法是,把目标 URL 的完整路径画出来,从入口页开始逐个点击,观察每一步是否都能正常打开。不要只看首页,因为很多断点发生在二级或三级页面。
第二关:状态码和重定向是否干净
链接能点开,不代表蜘蛛愿意继续走。返回 404、410 的地址通常会被放弃;返回 503 的地址可能被暂时搁置;返回 200 才是比较理想的继续条件。
重定向也要注意。一次 301 跳转通常可以接受,但多级跳转、跳转到无关页面、跳转链里夹杂 302 或 JavaScript 跳转,都会增加蜘蛛判断成本。有些蜘蛛在遇到过多跳转时,会降低对这条路径的信任,甚至不再沿该路径继续发现新 URL。
排查时可以把重定向链完整展开,确认每一跳都指向最终目标,并且最终页面返回 200。
第三关:渲染之后链接还在不在
现代站点大量使用前端渲染。蜘蛛虽然能执行部分 JavaScript,但执行时机、执行深度和渲染结果并不完全可控。如果链接只存在于客户端渲染后的 DOM 中,而且没有服务端渲染或预渲染兜底,蜘蛛可能看到的是一个空壳页面。
检查方法不复杂:用抓取工具关闭 JavaScript 后访问页面,看看链接是否还在。如果关闭 JS 就找不到链接,那这条路径对蜘蛛来说就是断的。导航、正文、相关推荐、分页,这些最需要被发现的区域,尽量保证链接在初始 HTML 里就存在。
第四关:服务器响应是否拖住了路径
即使链接、状态码、渲染都没问题,服务器响应慢也会影响抓取路径的连通性。蜘蛛访问一个页面时,如果连接超时、响应时间过长、频繁断开,抓取器可能提前结束这次访问,后面的链接自然不会被继续发现。
这种情况在流量高峰、数据库压力大、CDN 回源慢的时候更明显。可以关注几个指标:
- 目标页面的平均响应时间是否明显高于站点其他页面;
- 抓取日志里是否出现大量超时或连接重置;
- 同一路径下的页面是否集中出现抓取失败。
服务器稳定性不是一次性工作,而是抓取路径能否长期通行的基础。至少保证蜘蛛常走的入口页、分类页和重要详情页有稳定的响应能力。
按顺序排查,比逐个猜更有效
当新 URL 迟迟没有被发现时,可以按抓取路径的顺序排查:
- 找到可能通向该 URL 的入口页,确认入口页本身可访问、未被屏蔽。
- 在入口页里找到指向目标 URL 的链接,确认链接真实存在且地址正确。
- 点击链接,查看状态码和重定向链,确认最终页面返回 200。
- 关闭 JavaScript 再访问一次,确认链接和内容在初始 HTML 中可见。
- 查看服务器响应和抓取日志,排除超时、连接失败等稳定性问题。
这套顺序不能保证 URL 立刻被抓取,但可以把明显断点先排除掉。很多时候,问题并不是蜘蛛“不想来”,而是路径中间某一环没有走通。把路径修好,蜘蛛才有机会继续往下发现。