抓取日志里有一种常见现象:列表页、频道页被反复访问,但详情页的抓取记录很少。遇到这种情况,先别急着归因于蜘蛛偷懒或抓取预算不足,更可能是 URL 发现路径上有断点。蜘蛛要先在已抓取的页面里看到链接,才会把新 URL 加入待抓队列。链接没出现,或者出现了但被阻止跟进,后续抓取就无从谈起。
先确认蜘蛛是否真的看到了链接
打开一个被频繁抓取的列表页,查看服务器返回的原始 HTML,而不是浏览器渲染后的效果。如果链接只存在于 JavaScript 渲染结果里,或者被放在 iframe、需要点击按钮才展开的内容中,蜘蛛在初次抓取时可能看不到。
- 链接由前端脚本异步插入,原始 HTML 中没有 href。
- 链接放在图片、CSS 背景或表单里,没有可抓取的锚文本。
- 链接需要登录、选择地区或关闭弹窗后才出现。
- 列表页本身返回 200,但正文为空或只有加载骨架。
这些情况下,蜘蛛即使抓了列表页,也拿不到下一步的 URL。比较稳妥的做法,是把重要入口链接直接写进 HTML,至少在首屏或分页导航中保留一份可抓取版本。
链接可见但没被跟进
nofollow 与 robots 的配合
内链上的 nofollow 会提示蜘蛛不必跟进,robots.txt 则可以直接禁止抓取某类路径。两者目的不同:前者影响链接权重和跟进意愿,后者影响抓取权限。如果重要详情页的入口链接被加了 nofollow,或者所在目录被 robots 屏蔽,蜘蛛可能长期不访问。检查时把这两个设置分开看,不要混为一谈。
分页与筛选参数的干扰
分页、排序、筛选参数很容易生成大量相似 URL。蜘蛛可能在参数组合里来回抓取,消耗掉本可以用于详情页的抓取频次。建议限制可抓取的分页范围,对无实质内容的参数页做规范化或屏蔽,同时确保详情页链接在分页中稳定出现。
链接深度与内链结构
从首页到详情页的点击深度越深,蜘蛛发现 URL 的路径就越长。Sitemap 能补充一批 URL,但它更像提交清单,不能完全替代内链的引导作用。把重要栏目放在导航或正文相关推荐中,让详情页有多个入口,比只依赖深层分页更可靠。
服务器与抓取节奏的影响
服务器响应慢、频繁超时或返回 5xx,会让蜘蛛在抓取中途降低频率甚至暂停。后续链接即使存在,也可能因为抓取中断而没被跟进。排查时关注日志中的状态码分布、响应时间和重定向链长度。
- 大量 5xx 或超时:先检查服务器负载、数据库查询和 CDN 回源。
- 重定向链过长:合并跳转,减少蜘蛛到达内容前的等待。
- WAF 或 CDN 误拦:确认蜘蛛 IP 段是否被拦截,观察 403、429 的比例。
一个可执行的排查顺序
- 在抓取日志中搜索目标详情页 URL,确认蜘蛛是否出现过。
- 查看列表页原始 HTML,确认详情链接是否可被抓取。
- 检查 robots.txt、meta robots 和 nofollow,排除主动阻止。
- 检查分页和筛选参数,减少低价值 URL 对抓取频次的占用。
- 检查服务器状态码、响应时间和重定向,排除抓取中断。
- 补内链、更新 Sitemap,并持续观察日志变化。
改善 URL 发现的几个习惯
- 重要链接用标准 a 标签和可读锚文本,放在 HTML 中。
- 保持栏目层级清晰,避免详情页只靠一条深层路径进入。
- 控制分页数量,对无内容参数页做收敛处理。
- Sitemap 及时更新,但不要把它当作唯一发现渠道。
- 服务器保持稳定,减少蜘蛛抓取时的等待和失败。
抓取是发现与调度共同作用的结果。链接可见、路径通畅、响应稳定,蜘蛛才更有可能顺着入口走到详情页。
如果你发现蜘蛛长期只抓列表页,不妨从日志倒推:它看到了什么、被什么挡住、在哪里中断。小步调整内链和服务器配置,再观察后续抓取记录,通常比一次性大改更容易定位问题。