大多數站長看服務器日誌,只關心两件事:狀態碼是不是 200,抓取次數有没有涨。其實每一條蜘蛛請求里還藏着一個字段——Referer,它记錄的是“蜘蛛在抓這一頁之前,待在哪一頁”。把它按時間顺序排開,你看到的就不再是一堆孤立的 URL,而是一條條抓取路径。
Referer 记的是上一步,不是来源網站
對普通浏览器請求,Referer 表示用戶從哪個頁面点過来的。對蜘蛛請求,含义類似:通常是它發現這個連結的那個頁面。所以要分清两種情况:Referer 為空,往往說明這一頁是通過 Sitemap、外鏈或者歷史记錄直接進来的;Referer 是站内某個列表頁,說明它是顺着内鏈一步步走過来的。這两種進入方式,後續的抓取深度完全不一样。
三步把路径大致還原出来
第一步:把蜘蛛請求單獨筛出来
按 User-Agent 或者按已知的蜘蛛 IP 段過滤,得到一個只包含蜘蛛的訪問列表。建议把图片、CSS、JS 這類静態资源請求也保留下来,它們虽然不是頁面,但能反映蜘蛛在抓某一頁时顺手取走了多少東西,對判断頁面复杂度有帮助。
第二步:按 Referer 分组
把站内 Referer 相同的請求归到一组,通常會看到明顯的“扇出”结构:一條列表頁下面挂着一批詳情頁。這时可以观察每個頁面的入鏈来源數量——来源多,說明路径宽、被發現的概率高;只有一條甚至没有,說明内鏈太單薄,一旦那條路断了,頁面就再也没人走。
第三步:找三類異常
- 断头路:蜘蛛走進某頁後,頁面里没有可繼續跟随的站内連結,抓完就离開了。
- 孤儿頁:日誌里几乎不出現,或者只通過 Sitemap 被訪問過一两次。
- 环路:A 只鏈向 B,B 又只鏈回 A,蜘蛛在里面来回打轉,浪費抓取次數。
三種常见的進入方式
- 逐层递進:首頁 → 栏目 → 列表 → 詳情。這是最理想的路径,但要注意层級別太深,跳數一多,後面的頁面被訪問的間隔就會拉長。
- Sitemap 直接投递:路径最短,缺点是看不到内鏈结构的反馈,頁面之間也建立不起關联。
- 外鏈或歷史地址直入:老站改版後很常见,蜘蛛還拿着几年前的 URL 来敲门,结果撞上 404 或者一连串跳轉。
路径断了,多半是這几個原因
改版时把入口連結删掉了;列表頁改成异步加载,連結只存在于脚本里;分頁用了按钮而不是可点击的連結;頁面被加上 nofollow 之後,原本的内鏈也顺手清空了。這些改動的共同点是:頁面本身還在,200 也照常返回,但通往它的那條路没了。
把路接回来:几個小動作
给重要頁面补一條從首頁出發、最多两三次跳轉就能到達的路径;列表和分頁尽量保留普通的 a 标簽;已经下线的頁面用 301 指向内容最接近的替代頁,而不是直接丢一個 404;Sitemap 繼續维護,但不要把它当成唯一入口,内鏈才是蜘蛛日常走的那條主路。改動之後,隔一两周再從日誌里拉一份路径图對比,比反复猜测“蜘蛛為什么没来”要實在得多。
抓取路径不是設定一次就固定的東西,它會随着内容更新、栏目調整、模板改版不断變化。定期看一眼 Referer 分布,是成本很低的一種体检方式。