先分清:sitemap 是發現提示,不是收錄開關
搜尋引擎的 sitemap 协议,本质上是站点主動向爬虫提供的一份 URL 清單。它帮助爬虫更快知道“這里有哪些頁面”,但並不改變頁面的质量判断,也不保證這些 URL 會被抓取,更不保證被收錄。在蜘蛛池的场景里這一点尤其重要:入口頁和下一层頁面值不值得抓,最终還是由爬虫根據内容、结构、歷史表現自行决定。把 sitemap 当成“催抓工具”来用,往往會得到相反的结果——清單越長、含金量越低,對它的參考價值就越有限。
更實际的態度是:把 sitemap 当成一份整理好的目錄,而不是一份提交任務的清單。
蜘蛛池里的 sitemap 该放哪些 URL
批量開站时最常见的做法,是把所有能生成的地址一股脑塞進去,包括分頁、标簽、排序參數、空结果頁。這在蜘蛛池里格外危險,因為入口頁本来就多,清單再膨胀,抓取机會會被大量低價值 URL 消耗掉。
更稳妥的取舍是:
- 只放你希望被当作入口使用的頁面,以及入口頁下面少量确實有内容的下一层頁面;
- 不放带參數、带會话、带排序差异的地址,這些通常可以通過頁面上的正常連結被發現;
- 不放空列表頁、空詳情頁,以及内容明顯重复的頁面;
- 如果某個入口頁本身只是過渡性质的跳轉頁,一般不必出現在 sitemap 里,让跳轉關系自己說明即可。
判断标准很简單:這個 URL 如果被抓走一次,你是否愿意它占用一次抓取机會。答案是“不愿意”,就不要寫進去。
格式、規模與分片的實际限制
主流约定是單個 sitemap 文件不超過 5 萬個 URL、未压缩体积不超過 50MB,超過就要用 sitemap index 拆分成多個子文件。蜘蛛池通常入口頁數量多,分片几乎是必然的。
- XML 與纯文本两種格式都被支持,纯文本一行一個 URL,适合结构简單的场景;
- 分片时按域名或按批次切分,便于後續停用某批入口頁时只替換對應文件;
- 文件可以用 gzip 压缩,但要注意文件名後缀與响應头 Content-Type 保持一致;
- sitemap 文件本身也要能正常返回 200,不要被防火墙、鉴權或 CDN 缓存規則挡住。
lastmod:寫假日期不如不寫
lastmod 是 sitemap 里最容易被滥用的字段。批量生成时随手寫成“目前時間”,或者每天全量刷新,短期看似让文件顯得新鲜,但当爬虫發現這個時間和頁面真實變化對不上,對该字段的參考權重就會下降。
比較務實的做法是:只有頁面内容确實變化时才更新 lastmod,模板、样式、頁脚改動通常不算内容變化。如果没法准确记錄,宁可不寫這個字段,也不要批量刷一個假時間。
声明、提交與校驗
寫好的 sitemap 需要让爬虫知道它在哪里。常见方式是:
- 在 robots.txt 里用 Sitemap 指令声明完整地址,多個文件时逐條列出;
- 在各搜尋引擎的站長平台里提交,並观察提交數量與實际抓取數量之間的差异;
- 定期用脚本或工具检查每個文件的可訪問性、URL 數量、是否混入 404 或 5xx 地址。
校驗這件事在蜘蛛池里不能省。入口頁批量上下线,很容易出現 sitemap 指向已停用域名、證书過期地址或返回 403 路径的情况。這類連結長期留在清單里,對整批入口的抓取表現没有好處。
把 sitemap 当成一份需要長期维護的资产,而不是一次性的提交文件。
常见誤区
- 以為提交了 sitemap 就等于被收錄,實际上它只影响發現环节;
- 把全站所有 URL 都塞進去,结果反而稀释了重点入口;
- 用 sitemap 去推送大量内容重复、價值不明确的頁面;
- 文件長期不更新、不校驗,里面堆积大量失效地址;
- 把 sitemap 当成绕過 robots 或訪問限制的手段。
使用建议
如果只是小規模測試,一個纯文本 sitemap 就够了;入口頁成百上千时,建议按批次分片,並让分片關系與上线节奏、止损机制對應起来——哪批入口頁停用,就替換或移除對應文件。每次調整後隔一段時間回看日誌里 sitemap 的抓取次數,以及後續 URL 的抓取變化,比盯着“提交了多少條”更有意义。