站点跑了一段时间,收录数量却卡在一个数字上,新页面迟迟不见动静。这时候最容易犯的错,是直接去改 meta、堆内链,却不知道蜘蛛到底走到哪儿停了。抓取路径巡检的意义,就是先把“没走到”这件事定位清楚,再动手。
第一步:区分“没发现”和“发现了没抓”
打开服务器日志,按蜘蛛 UA 过滤,把最近 7 到 30 天的记录按 URL 归类。结果通常分三类:
- 日志里完全没出现过的 URL——蜘蛛根本没走到,或者走到了但请求被挡在门外(比如被 robots 规则拦住);
- 出现过但状态码异常——404、500、301 循环,这类是路径断了;
- 出现了、返回 200,但内容不是你想让它看到的——比如渲染前是空壳、被登录墙挡住、被模板里的 canonical 指向别处。
这三类问题的修法完全不同。第一类要查入口和内链,第二类要查服务器和跳转配置,第三类多半和前端渲染或模板有关。混在一起改,往往白费力气。
第二步:把三份清单对齐
准备三份名单:日志里蜘蛛实际抓过的 URL、Sitemap 里提交的 URL、站内链接能到达的 URL(可以从首页出发爬一遍,或者用站长工具的内链报告)。三份名单叠在一起,缺口就出来了:
- Sitemap 有、日志没有:提交了但蜘蛛没来,通常是优先级或抓取预算的问题;
- 日志有、内链没有:蜘蛛是从别处(外链、Sitemap、历史记录)进来的,页面在站内其实是孤岛;
- 三份都没有:这个地址在系统里根本没被当成一个可访问页面,检查一下它是不是只在 JS 里拼出来的。
提示:日志里同一路径带不同参数、大小写、末尾斜杠的记录,先归并再统计,否则缺口看起来会比实际大很多。
第三步:沿着路径往回找断点
确认某个重要页面没被抓之后,往回倒推:谁应该链接到它?
- 找到它应该出现的列表页、栏目页或详情页;
- 看那个页面的源码里是否真的有可点击的 a 链接——注意是渲染前的 HTML,不是浏览器里看到的最终效果;
- 确认这条链接没有被 nofollow、没有被 JS 事件拦截、不依赖用户点击才出现;
- 再看那个上级页面本身有没有进过日志。如果上级都没被抓过,问题在更上一层。
这样一层层往回走,通常能在三到四层内找到断点。很多“深层页面不被抓”的案例,根因其实是中间某个栏目页返回了 302,或者被 robots.txt 里一条过宽的规则挡住了。
容易被忽略的两个断点
- 入口页本身:首页、频道页如果响应慢或经常返回 5xx,蜘蛛会降低来访频率,整条路径的抓取都会跟着变慢。
- 列表分页的尾页:分页链接如果只保留“下一页”,蜘蛛很难走到后面几页,靠后的条目自然长期不被发现。
第四步:修复要有先后顺序
断点找到之后,不要一次改几十处。按影响面排序更有效:
- 先修服务器和状态码问题,返回 200 是路径能走通的前提;
- 再修枢纽页的内链,让链接出现在渲染前的 HTML 里;
- 然后处理孤岛页面,把它们接进现有的导航或列表;
- 最后才考虑 Sitemap 的补充和调整。
Sitemap 是辅助发现的手段,不是替代内链的。一个页面如果在站内完全无法通过链接到达,仅靠 Sitemap 提交,被蜘蛛稳定抓到的概率会打折扣。
巡检的节奏
不用天天看日志。新目录上线、改版、迁移域名这类动作之后做一次全面对齐,平时保持每两到四周看一次关键目录的抓取覆盖即可。重点盯两类数字:重要页面的抓取命中率,以及抓取总量里被浪费在参数页、重复页上的比例。前者偏低说明路径不通,后者偏高说明蜘蛛在绕圈。
把这些记录留下来,下次改版时会比任何猜测都有用。