做站点运营时,很容易把两件事混為一谈:蜘蛛在日誌里出現了一次,就以為這個 URL 已经被抓;在 Sitemap 或内鏈里放了一個新地址,就以為蜘蛛马上會来。實际上“發現”只是這條路的起点,後面還有几道關要過。
發現、抓取、索引是三件獨立的事
把這三個動作拆開看,很多困惑會自己消失:
- 發現:蜘蛛從某個入口知道了這個 URL 存在。入口通常是站内連結、Sitemap、外站連結,或者歷史抓取记錄里出現過的地址。
- 抓取:蜘蛛真的發起了請求,取回了 HTML、狀態碼和响應头。這一步由抓取調度决定,和“知不知道”没有直接關系。
- 索引:抓回来的内容通過了质量與重复判断,才可能進入索引參與展示。
三段路各自有各自的規則。發現靠連結结构,抓取靠調度节奏和 robots.txt,索引靠内容判断。用其中一段的指标去推断另一段的结果,往往會得出错誤结论。
被發現的 URL 只是進了一份待办清單
蜘蛛不會随發現随抓。它更常见的做法是先把這個地址记下来,之後按自己的节奏安排請求。同一天被發現的 URL,抓取時間可能相差很遠,原因通常不在單個頁面上,而在于:
- 站点整体被抓取的频率高低,歷史表現好的站点往往排得更靠前;
- 這個 URL 有多少入口、入口在什么位置,導航和正文里的連結通常比頁脚、深层列表更受重视;
- 上一次抓取這個目錄时的响應情况,如果经常超时,調度會趋于保守;
- URL 本身的形態,带大量參數的地址往往被当成低優先級。
想驗證一個 URL 有没有被抓,看服務器訪問日誌比看收錄结果可靠得多。前者是事實,後者是判断。
robots.txt 管的是抓取,不是索引
很多人把 robots.txt 当成“下架開關”,這是最常见的誤用。Disallow 拦的是抓取動作:蜘蛛不會去取這個頁面。但如果這個 URL 在別處有連結被看到,它仍然可能出現在结果里,只是没有摘要和快照。
真正决定“要不要展示”的是 noindex,而它站在更後面一道。這里有個容易踩的顺序問题:noindex 必须被讀到才生效,而被 robots.txt 拦住的頁面,蜘蛛讀不到那行 meta。所以想让一個頁面既不收錄也不被抓,两個指令要配合使用;如果只想让它不被抓,就別指望 noindex 起作用。
服務器狀態决定 URL 能不能顺利走下去
URL 從清單里被挑出来之後,還要過服務器這一關。持續返回 5xx、连接被中断、响應時間過長,都會让調度對這個目錄甚至整站降低抓取意愿,重试也可能被推迟。常见的影响包括:
- 單個栏目频繁超时,该栏目下新 URL 的抓取會被一起拖慢;
- 間歇性的 5xx 比稳定错誤更难排查,因為抓取记錄看起来时好时坏;
- 抓取高峰时段资源被占满,蜘蛛正好赶上,會誤判站点狀態。
所以服務器稳定性不是一個纯技術指标,它直接影响 URL 從被發現到被取回之間要走多久。
让重要 URL 少绕路的几個做法
- 新頁面別只放進 Sitemap,同时在栏目頁或相關文章里给出真實入口,多一個入口就多一次被發現的机會。
- Sitemap 保持准确,只放返回 200 的地址。塞進大量無效 URL,會让這份文件的可信度下降。
- 新 URL 分批上线,一次放出几百個地址,調度上很难都被同等對待。
- 减少中間跳轉,重要頁面尽量直達,別让蜘蛛穿過好几层重定向才拿到内容。
- 定期看日誌,找出長期没有抓取记錄的目錄,回头检查它們的内鏈入口和响應狀態。
复查是另一條更慢的队列
頁面抓到之後並不結束。内容更新了,蜘蛛還需要再来一次,而复查的节奏通常比首次抓取更慢。Sitemap 里的 lastmod 與實际修改時間保持一致,能帮助它判断哪些頁面值得優先回訪;如果這個字段長期乱寫,反而會被忽略。
把發現、抓取、索引分開看,运营動作就有了明确的落点:入口不足就补内鏈,抓取不来就查 robots 與日誌,抓了不收錄就回到内容本身。混在一起想,只會得出“蜘蛛不爱我的站”這類没有操作價值的结论。