發現只是起点,不等于抓取
外鏈出現、Sitemap 里新增一條 URL、站内多了一個 a 标簽,這些動作都只是把地址送到蜘蛛面前。蜘蛛拿到 URL 後,通常不會立刻發起請求,而是先把它放進待抓队列。队列里的 URL 要经過几道篩選,才會變成一次真實的 HTTP 請求。理解這條鏈路,比單纯追求“被蜘蛛看到”更有用。
第一關:URL 規范化與去重
蜘蛛會對 URL 做归一化處理,比如统一协议、主机名大小寫、去掉預設端口、處理末尾斜杠等。如果站内同一内容存在多個寫法,蜘蛛可能只保留一個代表地址,其余版本進入去重逻辑。常见情况包括:
- http 與 https 同时可訪問,且没有跳轉;
- 带 www 與不带 www 都能打開;
- 列表頁同时存在 ?page=1 與無參數版本;
- 大小寫混用的路径被服務器视為不同地址。
這些重复地址會占用队列位置,让真正需要抓取的頁面往後排。站点侧能做的,是尽早确定唯一地址,用 301 把其他寫法收敛過去,並在内鏈和 Sitemap 中保持统一。
第二關:robots 與可抓取性判断
進入队列前,蜘蛛會對照 robots.txt 判断该路径是否允许抓取。如果被 Disallow,URL 可能仍會被發現,但不會产生正常抓取。另一種情况是頁面虽然允许抓取,但返回 noindex 或 canonical 指向別處,蜘蛛會據此調整後續處理優先級。
需要留意的是,robots.txt 只控制抓取,不控制索引。不希望收錄的頁面,更稳妥的做法是允许抓取、再给 noindex;如果直接屏蔽抓取,蜘蛛看不到 noindex,頁面仍可能以其他方式出現在结果里。
第三關:優先級與抓取预算
待抓队列不是先進先出。蜘蛛會參考頁面重要性、更新频率、歷史抓取质量、站内連結位置等因素排序。首頁、栏目頁、近期更新過的詳情頁,通常更容易被優先安排。相反,深藏在多級分頁之後、只有极少内鏈指向的 URL,可能長時間停留在队列里。
抓取预算有限时,站点要避免把队列塞满低價值地址。比如篩選參數组合、站内搜尋结果頁、空结果頁,如果大量暴露给蜘蛛,會稀释重要頁面的抓取机會。可以用 robots.txt 屏蔽高重复參數,或给這些頁面加 noindex,减少無效排队。
第四關:服務器响應與重试
轮到某個 URL 實际抓取时,服務器响應會决定它是否顺利完成。超时、5xx、连接中断,都會让這次抓取失敗。蜘蛛會退避重试,但重试有次數和間隔限制。如果同一批 URL 反复失敗,蜘蛛會降低對该站点的抓取频率,恢复需要時間。
因此,服務器稳定性不是运维單方面的事,它直接影响 URL 從队列走到抓取的成功率。抓取高峰期出現响應變慢,最好先排查資料库、缓存、動態渲染等环节,而不是简單封禁蜘蛛 IP。
站点侧可以配合的几件事
- 统一 URL 寫法,用 301 收敛重复地址,减少队列浪費。
- Sitemap 只放希望被抓取、且返回 200 的規范地址,並保持更新。
- 内鏈指向明确,重要頁面從首頁或栏目頁几次点击可達。
- 對無價值參數頁、搜尋结果頁做屏蔽或 noindex,避免占用预算。
- 监控服務器 5xx 與超时,發現異常及时處理,別让蜘蛛连續碰壁。
被蜘蛛發現是 URL 進入抓取流程的第一步,後面還有去重、權限判断、排序和响應质量几道關卡。把每一關的阻力降下来,比反复提交地址更實际。