蜘蛛的工作方式很朴素:从一个已知 URL 出发,解析页面里的链接,把新的 URL 放进队列,再一个个访问下去。它没有站点地图,只能靠链接一步步走。所以当某个页面既没有有效内容,也没有通往别处的链接时,蜘蛛就走进了一条死胡同——访问完就停,队列里不会多出任何东西。
单看一个空页面似乎没什么损失,但死胡同往往成片出现,而且多分布在列表页、筛选页、分页这类承担着URL 发现职责的位置上。它们不只是浪费几次抓取,还可能让整片详情页失去入口。
三类最常见的死胡同
空列表页与"暂无内容"
分类下暂时没有商品、标签下只有一篇文章、搜索结果为零——这类页面本身没有错,问题出在它们仍然返回 200 状态码,并且被内链和 Sitemap 反复指向。蜘蛛每次来都空手而归。
- 确认页面是否真的长期为空,还是只是数据同步延迟造成的临时空态。
- 长期为空的列表页,可以从内链和 Sitemap 中撤掉,但保留页面本身供用户从站内搜索进入。
- 如果只是季节性缺货,页面保留链接通常更合适,避免恢复时入口要重新积累。
软 404:返回 200 却没有内容
页面模板还在,主体内容已经删除或迁移,服务器照样回 200。蜘蛛会把它当成正常页面收录,用户点进来却看到空白或一句"内容不存在"。更麻烦的是,这类页面常常还挂着旧的内链,把抓取预算持续引过去。
处理思路是让状态码和内容状态一致:内容确实没了,就返回 404 或 410;有对应的新地址,就做 301。不要用只显示一句提示的 200 页面来替代。
循环与近似无限的路径
日历翻页、筛选参数组合、带 session 或排序参数的链接,很容易互相指向,形成蜘蛛绕不出去的环。典型特征是日志里同一个模板被反复抓取,URL 只差一两个参数,而真正的内容页却更新缓慢。
- 查清哪些参数是内容必需的,哪些只是展示状态。
- 非必需参数用 canonical 指向规范地址,或在 robots.txt 中做有限度的屏蔽。
- 检查分页链路是否存在"下一页"永远指向新的组合 URL 的情况。
死胡同真正的影响在哪里
抓取预算是有限的,蜘蛛每次访问都有成本。死胡同页面的代价不只是这一次访问,而是它占掉的位置本可以去发现新 URL、检查老页面更新。当死胡同集中在深层列表页时,表现往往是:Sitemap 里的新页面迟迟不被抓,而日志里全是老模板的重复访问。
另一个容易被忽略的影响是内链权重。如果导航或面包屑把大量链接指向空页面,通往详情页的路径就被稀释了。
怎么把这些页面找出来
不要凭感觉猜,日志和站点结构能给出比较明确的线索:
- 看日志里的高频模板:同一路径模式被反复抓取,且 URL 参数不断变化,大概率是循环路径。
- 对比抓取量与产生的新 URL:某类页面抓了很多次,却没有带来任何新地址的发现,需要重点检查。
- 抽查页面状态:随机抽取列表页、标签页,确认状态码、正文长度和出链数量是否正常。
- 核对 Sitemap:Sitemap 里是否混入了空列表页或已下线的地址。
判断标准可以简化成一句话:这个页面被蜘蛛访问之后,队列里应该多出什么?如果答案是"什么都没有",它就是一个需要处理的节点。
处理顺序与验证
建议按影响面从大到小来改,而不是一次全动:
- 先处理软 404,因为它同时影响收录质量和用户体验。
- 再断开指向长期空列表页的内链,Sitemap 同步剔除。
- 最后处理参数循环,通常需要 canonical 和 robots 规则配合。
- 改动后观察一段时间日志,确认同类模板的抓取次数下降,详情页抓取比例上升。
验证时不要只看一天的数据。蜘蛛重新计算路径需要时间,尤其是内链调整后的效果,通常要等它把新结构走一遍才能体现。
顺带留意服务器端的表现
有时页面本身结构正常,但蜘蛛走到一半就断了:超时、连接重置、响应过慢导致放弃。这种情况下日志里会出现抓取未完成或状态异常的记录,看起来像死胡同,实际是服务器稳定性的问题。排查时把响应时间、错误状态码和页面结构一起看,避免把两类问题混在一起修。
死胡同不会让站点立刻出问题,但它会一点点削弱蜘蛛走遍站点的能力。定期清理这些节点,比事后追问"为什么新页面没被发现"要省事得多。