做蜘蛛池的人大多把精力放在入口頁上,sitemap 往往只是顺手放一個文件,甚至完全不放。但在實际抓取中,sitemap 和入口頁承担的功能並不一样,把两者的分工理清楚,有时比再多铺几百個入口更管用。
sitemap 與入口頁解决的不是同一件事
入口頁的核心作用是被爬到。蜘蛛顺着外鏈、導航或歷史记錄進入你的入口頁,再從入口頁的連結走下一跳。它依赖的是連結關系,蜘蛛必须先把頁面抓下来,才知道里面指向哪里。
sitemap 的核心作用是被知道。它是一份声明式的清單,直接告诉搜尋引擎有哪些 URL 存在,不需要蜘蛛先抓一個頁面才能發現下一個。两者的關系更像是:sitemap 负责把 URL 交出去,入口頁负责让這些 URL 有一條被抓取的路径。
蜘蛛池里 sitemap 的几種常见用法
作為入口頁的补充發現通道
当入口頁數量多、层級深,或者部分入口頁本身很少被抓时,sitemap 可以作為一條平行的發現通道。把入口頁 URL 和需要被發現的目标 URL 放進 sitemap,至少让發現這一步不依赖某條連結鏈是否通畅。
作為入口頁的索引层
如果入口頁是程序化生成、數量很大,可以用分片 sitemap 做索引:一個 sitemap index 指向多個子 sitemap,每個子文件控制在几千條以内。這样既方便滚動更新,也避免單個文件過大導致讀取不全。
作為狀態记錄
sitemap 還有一個實际好處:它是一份可以自己维護的清單。哪些 URL 還在用、哪些已经退役、哪些返回 404,對照 sitemap 一眼能看出来,比翻日誌快得多。
容易被忽略的细节
- sitemap 里的 URL 必须和實际可訪問的 URL 完全一致,包括协议、大小寫、结尾斜杠。
- 只放返回 200 的頁面。404、多跳重定向、需要登入的頁面放進去意义不大。
- lastmod 要如實寫。長期不變的 lastmod 會给抓取調度提供错誤信号。
- sitemap 文件本身要能被正常抓取,返回 200 且是 XML,不要被 WAF 或 CDN 拦掉。
- sitemap 的位置和 robots.txt 里的声明要對應,路径寫错等于没寫。
實操建议
- 入口頁以連結發現為主,sitemap 作為兜底,两者都保留,不要只押一條。
- 目标頁數量大时優先放進 sitemap,別指望靠入口頁一跳一跳带過去。
- 定期清理 sitemap,退役的 URL 要么删掉,要么保留並如實反映其狀態。
- 關注抓取日誌里 sitemap 的抓取频率。如果長期不抓,先排查可訪問性和 robots 声明。
sitemap 只是把 URL 递出去,递出去不等于被收錄。它不能替代内容质量、站点稳定性和正常的連結结构,把它当成發現环节的补充手段就好。
回到蜘蛛池本身,入口頁和 sitemap 的分工可以理解為:入口頁负责给蜘蛛一條走得通的路,sitemap 负责给搜尋引擎一份看得见的清單。两條腿都留着,比只押其中一條更稳。