很多站点遇到的不是“蜘蛛不来”,而是蜘蛛来了却停在半路。首頁、列表第一頁、几個热门詳情頁的抓取记錄都很正常,再往下的頁面几乎查不到訪問。這種情况往往不是抓取配額不够,而是從入口到目标 URL 之間有那么一跳断了——蜘蛛没法沿着連結把這段路走完。
先把蜘蛛走過的路径复原出来
日誌只能告诉你蜘蛛訪問了哪些 URL,不能直接告诉你它是從哪個連結点進来的。所以复原路径要靠两份材料互相對照:一份是抓取日誌,一份是站内連結關系。
做法不复杂。挑三到五個長期没有抓取记錄的頁面,逐個反問几個問题。
- 站内有哪些頁面連結到它?
- 這些頁面自己有過抓取记錄吗?
- 如果有,是在什么時間被抓的,之後有没有再被訪問過?
如果入鏈頁面本身就没被抓過,那目标頁面属于完全没有路可走。把 URL 寫進 Sitemap 只能算一次提名,蜘蛛要不要去走、能不能走通,是另一回事。如果入鏈頁面被抓過,目标頁却始终没有记錄,問题多半出在連結本身,或者路径中間那一跳的响應上。
最常见的三種“断跳”形態
- 連結藏在需要交互才出現的位置。篩選、排序、翻頁中的“加载更多”這類按钮,如果靠脚本触發,連結在初始 HTML 里可能根本不存在,蜘蛛看到的是一個空容器,後面那一层自然就接不上。
- 中間层頁面對蜘蛛不可用。分類頁、标簽頁長期返回 5xx,或者响應時間明顯偏長,蜘蛛走到這一层就不再往下,深层頁面连带失去入口。
- 連結存在,但指向了经過多次跳轉的地址。一两次跳轉通常没問题,鏈路一深,蜘蛛往往選擇放弃繼續跟進,這條路径等于断在中間。
补路径比催抓取更管用
發現深层頁面没有抓取记錄,很多人的第一反應是調整抓取频次、重新提交 Sitemap、想办法加外鏈。這些動作不是没意义,但如果路径本身是断的,增加訪問量只會让蜘蛛在同一個位置反复折返。
更值得先做的是把路补上:
- 在相關度高的正文内容里插入内鏈,而不是只在頁脚堆一排連結;
- 面包屑和上一級導航指向真實可抓的父級頁面,而不是跳回首頁;
- 關键入口尽量用原生連結寫在初始 HTML 中,减少對脚本拼接的依赖;
- 同一批 URL 的連結形式保持一致,避免同一頁面被多條不同路径指向。
蜘蛛能抓多少,取决于它能走到多遠。走不到的地方,抓取配額再宽也没有意义。
服務器稳定性本身就是路径的一部分
路径上的每一跳都要靠一次 HTTP 請求完成。任何一跳慢下来,整條鏈路都會受影响,而這種影响在日誌里往往只表現為“後面没有了”。
可以按层級看响應時間:入口层、中間层、詳情层分別統計。如果中間层某個模板長期偏慢,先優化它的收益通常比調整抓取設定更直接。缓存命中率、動態查询、並發限制,最後都會落在這一层。
狀態碼的稳定性也要留意。同一批 URL 今天返回 200、明天返回 503,蜘蛛對這條路径的信任度會下降,重新试探的間隔也會被拉長,恢复起来比第一次抓取慢得多。
可以固定下来的自查流程
- 列出目标 URL 清單,按所在层級分组;
- 對每個 URL 回溯入鏈,标出直接連結它的頁面;
- 查這些入鏈頁面近期的抓取记錄;
- 確認連結在初始 HTML 中可见,不依赖脚本执行後才出現;
- 检查路径每一跳的狀態碼與响應時間;
- 补齐缺失的入口連結,观察两到四周後再對比日誌變化。
抓取恢复通常不是一次動作就能完成的。路径修好之後,蜘蛛還要按自己的节奏重新走一遍,中間可能隔上几天甚至更久。與其反复提交,不如把這套检查固定成周期動作,定期確認從入口到目标 URL 的每一跳都還在。