蜘蛛断线,通常断在两個地方
排查抓取問题时,第一反應往往是看服務器、看 robots.txt、看有没有被拦截。這些确實要查,但更常见的情况是:服務器一切正常,蜘蛛也来過,只是它在某個頁面停下了,或者压根没能走到那個頁面。孤岛頁和死胡同,就是站内連結结构里最常见的两種断点。
孤岛頁指的是這样一個 URL:它能被訪問、能返回 200,但站内没有任何一個正常渲染的連結指向它。蜘蛛要發現它,只能依赖外部来源——別人给的連結、Sitemap 里的登记,或者手動提交。死胡同則相反:蜘蛛進来了,頁面上却没有可繼續前進的站内連結,走到這里线索就断了。
孤岛頁的几種常见成因
- 連結寫在了脚本里。点击能跳轉,是因為頁面執行时生成了連結;但如果連結不是以 a 标簽出現在 HTML 中,蜘蛛讀到的就只是一段没有目标的脚本。
- 只能從站内搜尋结果進。搜尋頁對用戶是入口,對蜘蛛往往不是,這類 URL 通常是參數拼接出来的,不會被当作稳定入口。
- 只在篩選、日歷、排序等交互後才出現。列表頁的預設狀態里没有這些連結,蜘蛛看到的第一层自然也不會有。
- 只在登入後、只在表單提交後才能進入。這類頁面基本無法顺着連結抵達,只能靠 Sitemap 或主動提交。
- 改版或換模板时漏掉。導航、面包屑、相關推荐在改版中少了一两條,頁面就悄悄變成了孤岛。
死胡同的几種形態
- 頁面上挂的全是出站連結,站内一個也没有。
- 正文很長,但相關推荐、上下篇、分類入口都没有渲染出来。
- 無限滚動的列表:向下滚動才加载更多,而 HTML 里没有可点進下一頁的連結。
- 頁面里大量連結指向 404,或者统统跳轉到同一個地址,蜘蛛跟着走几步就回到了原点。
- 目錄层級過深,中間层缺失,只剩從首頁一路点到底的那一條路,而這條路本身又常常不够稳定。
怎么確認問题出在連結结构,而不是別處
- 先看服務器日誌或抓取統計里,這個 URL 到底有没有被抓過。從来没出現過,和抓到了却不被采用,是两件不同的事。
- 再查有没有真實内鏈指向它。把全站的 a 标簽抓下来按目标 URL 归並,看這個地址能數出几條。
- 观察蜘蛛是從哪個頁面走到它的。如果入口總是同一條、而且那條路径本身很浅,可以试着換一條更稳的路径重新引過去。
- 最後再排除 robots、noindex、狀態碼、WAF 這些因素。顺序反了容易白折腾。
孤岛頁和死胡同有個共同点:從日誌上看,往往不是没抓,就是抓了就停。两者都指向同一件事——入口不足。
修复顺序:先补入口,再补出口
补入口的目标是让蜘蛛能顺着普通連結走到頁面。最有效的做法通常不是新加一個专门的蜘蛛入口,而是把連結放回用戶本来就會用到的地方:分類導航、面包屑、正文里的自然引用、相關推荐、上一篇下一篇。這些位置同时服務用戶和蜘蛛,改動成本也最低。
Sitemap 可以作為一個补充入口,對登入後頁面、深层頁面和數量較多的頁面尤其有用。但它更像登记,而不是路径——蜘蛛不會因為 Sitemap 里列了某個 URL,就把它当成常規抓取對象。
补出口則是给頁面留几條繼續向前的路。哪怕只是底部放上分類入口和相關阅讀,也比一個只有正文、点到头就結束的頁面好很多。分頁列表如果要靠滚動加载,至少在 HTML 里保留可点下一頁的連結。
一個務實的检查节奏
不用每次改版都全站重审。把這几件事固定下来就够了:新頁面上线时確認它至少有一條普通内鏈指着它;改版後抽查導航和面包屑是否還在 HTML 里;每隔一段時間跑一次内鏈审計,看有没有 URL 的入鏈數掉到零。剩下的交给正常的内容更新节奏,不必為了抓取去刻意堆砌連結。