抓取节奏不是凭空来的
搜尋蜘蛛能分给一個站点的訪問次數是有限度的,而且這個額度並不固定。它更像一個動態判断:站点响應干脆、内容稳定、错誤少,蜘蛛就愿意多走几步;一次請求要等好几秒才吐内容,或者拿回来的頁面大得离谱,蜘蛛自然會放慢脚步,甚至走到一半就停下。這也解释了一個常见現象——同一套内鏈结构,放在响應快的站点上能被走得比較深,放在慢站点上却總在浅层打轉。
所以排查"蜘蛛来得少"之前,先別急着改連結,看看每次請求進来之後,站点到底给了什么回應。
先分清是"慢"還是"大"
這两件事经常被混在一起说,但它們對抓取的影响路径不一样,處理方式也不同。
TTFB:等了多久才開始收到内容
TTFB 指的是從蜘蛛發出請求,到服務器返回第一個字节的時間。這段時間里走得越久,蜘蛛的等待成本就越高。首頁或列表頁如果依赖實时查询、遠程接口、复杂的模板拼装,TTFB 很容易被拉長。對蜘蛛来说,它並不能看到你後台發生了什么,它只知道自己在這儿耗着。
常见原因是把動態逻辑放在了蜘蛛最常訪問的入口頁上:每次抓取首頁都要查一遍資料库、調一次推荐接口。這類頁面本身不该這么重。
HTML 体积:一次拿回来多少東西
HTML 文档本身過大,同样會拖慢抓取。典型情况是把整頁資料一次性内联進 HTML,或者模板层层嵌套後輸出了大量重复结构。頁面内容也许没問题,但蜘蛛每次都要下载完整文档、解析完整结构,單位時間内能走的 URL 數量就會下降。
一個實用的判断方法:對比蜘蛛請求的响應体大小。如果發現某些本應很轻的 URL 返回了明顯偏大的文档,就值得回头看模板。
图片、CSS、JavaScript 也是蜘蛛會請求的资源
很多人以為蜘蛛只看 HTML,其實它也會請求頁面引用的其他资源,尤其是用于渲染和识別連結的 CSS、JavaScript。這部分請求會占用同一份抓取額度。
需要留意的两種极端:一是頁面引用了大量零散的静態文件,每個都要走一次請求;二是關键资源放在很慢的 CDN 或第三方域名上,蜘蛛每次都得等。合理安排静態资源的域名與缓存策略,比單纯压缩 HTML 更有效。
另外,如果 JavaScript 体积很大、执行時間很長,蜘蛛要等渲染完成才能發現其中的連結,URL 的發現速度會被明顯推迟。
從日誌里看抓取和响應速度的關系
日誌不只有 URL 和狀態碼,時間字段同样有信息量。可以按下面几個方向對照:
- 同一批 URL 的响應時間分布:是普遍偏慢,還是只有少數几個拖後腿。
- 响應慢的 URL 與蜘蛛訪問频次的關系:是不是被反复抓几次之後就不再出現。
- 静態资源請求占比:如果日誌里 CSS、JS、图片的請求數遠超 HTML,就要看看是否有重复引用或無意义的静態文件。
- 狀態碼與耗时是否叠加:慢並且返回错誤,對抓取节奏的影响最直接。
把這些放在一張表里看,通常能很快定位是入口頁的問题,還是個別模板的問题。
站点侧的調整顺序
- 先盯入口頁。首頁、栏目頁、主要列表頁是蜘蛛最常走的地方,優先让它們轻量化,减少實时查询和遠程調用。
- 再管教静態资源。合並零散文件、開啟缓存、把不參與渲染的资源從關键路径上挪開。
- 然後看渲染成本。確認蜘蛛拿到 HTML 後能較快识別出連結,避免整站依赖重量級前端框架才能出現導航。
- 最後才是结构层面。内鏈、Sitemap、分层深度這些調整,建立在"蜘蛛愿意走"的前提下才有效。
別把提速当成萬能钥匙
响應變快、頁面變轻,确實能让蜘蛛走得更從容,但它只是让抓取顺利發生,並不等于内容會被收錄,也不等于排名會變好。速度解决的是"来不来、走多深"的問题,内容和结构解决的是"值不值得留"的問题。
把蜘蛛当成一個耐心有限、又很守規矩的訪客:它愿意多走几步,前提是每一步都不必等太久。