很多人排查抓取問题,习惯直接從單個頁面看起:這頁有没有被抓、返回什么狀態碼。但蜘蛛不是凭空找到頁面的,它是沿着一條條連結走過来的。如果中間某一段路走不通,單個頁面看起来再正常也没用。画一張抓取路径图,就是把“從哪個入口進来、经過哪几层、最後到達目标頁”這件事寫清楚。
先確認蜘蛛有哪些入口
入口通常来自這几類:
- 首頁,權重最高、也最常被抓取的起点;
- Sitemap 里列出的 URL,蜘蛛會按清單直接抓取;
- 站外引用带来的連結,比如外部頁面、社交平台、行业目錄;
- RSS 或其他订阅式輸出。
把這些入口逐個列出来,标注各自能覆盖到哪些栏目。如果所有入口最终都指向同一批頁面,說明路径過于集中,一旦這條线出問题,覆盖范围會整体缩水。
按层級标出每條路径
從入口出發往下画三到四层,把每层用到的連結形式记下来:是導航、面包屑、正文内鏈,還是列表頁翻頁。同一個目标頁如果只有一條路径能到,就在图上标成單点;有三條以上,标成多点。
這一步不用画得多精细,重点是找出两類頁面:只靠一條路径才能到達的,以及路径层級超過四层的。這两類最容易在抓取中被漏掉。
用日誌驗證,而不是靠猜
画完图之後,去服務器日誌里對照。篩選搜尋蜘蛛的 UA,看它實际抓了哪些 URL、抓取顺序是什么、有没有在某一层就停了。常见的情况是:图上画的路径存在,但日誌里蜘蛛压根没走那條线,原因是那段連結由 JavaScript 渲染、被 nofollow 标记,或者被 robots.txt 挡掉了。
另一種情况更隐蔽:蜘蛛走到了某一层,但那一层返回 5xx 或者响應超时,後面的路径就断了。這種情况要看狀態碼統計,而不是只看被抓 URL 的總量。
Sitemap 是补充,不是替代
有人會想,既然 Sitemap 已经把 URL 都列出来了,路径图還有必要吗?两張清單的作用不一样。Sitemap 告诉蜘蛛“有這么些頁面存在”,路径图說明“這些頁面之間是怎么连起来的”。蜘蛛顺着内鏈走的时候,會顺带拿到連結周围的上下文;只靠 Sitemap 單獨喂 URL,頁面的相對位置和重要性就少了參照。比較稳的做法是两者對齐:Sitemap 里的 URL 都應该能通過至少一條内鏈路径走到。
几類常见的断点
- 入口太單一:只有首頁一條线,栏目頁全靠首頁連結,改一次首頁就影响全局。
- 中間层是空壳:列表頁没有可用的静態連結,或者連結指向的參數 URL 被屏蔽。
- 深层頁面無内鏈:詳情頁只在搜尋结果里出現,没有常驻入口。
- 服務器不稳定:同一條路径偶尔 5xx,蜘蛛重试几次後會降低抓取频率。
修的时候按路径顺序来
不要一上来就改内鏈。先修狀態碼和响應速度,保證已有的路是通的;再补入口,给只有一條路径的頁面加第二條;最後才考虑把深层頁面往上提,比如加相關推荐、标簽聚合頁。每改一步,隔几天回日誌里看同一批 URL 的抓取情况,確認路径真的走通了,而不是改了就算完。
路径图不是一次性的文档。站点结构、模板、導航一改,路就變了。定期自己從入口頁出發走一遍全站,比盯着單個頁面的抓取狀態更有用。