很多站点並不是没有内容,而是内容所在的頁面,蜘蛛走不到。抓取路径连通性,说的是從站点的入口頁出發,能不能沿着一條條連結,稳定、连續地走到目标頁面。它不决定頁面是否被收錄,但會明顯影响 URL 被發現的效率和抓取的顺畅程度。
一條完整的抓取路径長什么样
把抓取路径拆開看,通常经過三层:入口层(首頁、频道頁)、分發层(列表頁、分頁、聚合頁)、落地层(詳情頁、文章頁)。蜘蛛從入口進来,靠内鏈一层层往下走,同时參考 Sitemap 里提交的 URL 作為补充线索。
這三层只要有一层出問题,後面的頁面被訪問的机會就會减少。實际排查时,與其盯着某一個頁面,不如沿着這條路径走一遍,看它在哪一步断掉。
三层里最常见的断点
入口层:入口太少或太單一
- 首頁只鏈到少數几個栏目,其他栏目要靠站内搜尋或導航展開才能到達。
- 频道頁内容量很大,但連結都放在需要交互(点击、悬停、滚動加载)之後才出現。
- 入口頁返回狀態碼不稳定,蜘蛛首轮拿到空内容,後續不再深入。
分發层:列表與分頁被截断
- 列表頁只輸出第一頁的連結,第二頁之後依赖按钮或脚本請求,蜘蛛拿不到。
- 分頁用的是带參數的地址,參數组合過多,蜘蛛容易在同一個列表里反复打轉。
- 預設篩選條件生成大量相似列表,把抓取引到了重复内容上。
落地层:詳情頁之間没有横向连接
- 詳情頁只有返回列表的連結,没有相關推荐、上下篇、同栏目連結。
- 相關推荐由前端异步加载,首轮 HTML 里是空的。
- 正文中的連結用了跳轉脚本或不可识別的方式,蜘蛛無法顺着繼續走。
服務器與响應時間對路径的影响
路径再顺,也架不住服務器拖後腿。响應時間波動大、間歇性返回 5xx,或某些目錄被訪問策略拦截,都會让蜘蛛在這一段主動降低抓取量。表現是:入口頁抓得不少,越往下越少,日誌里能看到同一個目錄反复返回错誤。
所以排查时要把两件事分開看:一是連結结构本身通不通,二是路径上的节点能不能稳定响應。前者改模板和内鏈,後者要看服務器、缓存和訪問策略。
一份可执行的检查清單
- 關閉 JS,用纯文本方式抓取首頁,看看能發現多少個連結、指向哪些栏目。
- 從首頁出發,手動模拟点到目标詳情頁,记錄需要几次点击、中間经過哪些頁面。
- 检查這些中間頁面是否都返回 200,是否存在重定向鏈過長或返回空内容的情况。
- 核對 Sitemap 中的 URL 與内鏈能到達的 URL 是否一致,有没有大量只出現在 Sitemap 里的孤岛地址。
- 在抓取日誌中按目錄統計訪問量,找出“入口多、下游少”的那一段。
- 观察服務器响應時間的高峰时段,和抓取量下滑的時間点是否重合。
修复的先後顺序
通常先修入口和分發层,因為這两层的改動收益比較直接:让更多頁面在更少的跳轉内被連結到,抓取路径會明顯變短。再處理落地层的内鏈,把同主题頁面互相连起来,减少只能靠列表頁才能到達的頁面。
Sitemap 适合做补充,而不是替代内鏈。内鏈负责“走得通”,Sitemap 负责“提醒還有哪些”。两者不一致时,優先相信内鏈能到的那部分。
抓取路径的問题,多數不是“蜘蛛不来”,而是“走到一半没路了”。把路径一段段走通,比反复提交 URL 更有效。