Sitemap 提交之後,不少人會預設“清單里的 URL 都會被訪問”。實际並不是這样。Sitemap 的作用是给蜘蛛一份候選清單,降低 URL 發現的成本;至于某個 URL 什么时候抓、抓不抓,仍由蜘蛛根據自身判断决定。清單里如果堆了太多质量不高的條目,反而會稀释真正需要抓取的那部分頁面。
一、蜘蛛讀 Sitemap 时會做哪些基本篩選
拿到清單後,蜘蛛通常會先做一轮低成本判断,把明顯不值得抓的條目排到後面:
- 狀態碼:長期返回 404、410 的條目,反复確認無果後優先級會下降;返回 5xx 的則會先搁置。
- 可抓取性:被 robots.txt 屏蔽的 URL,即便寫在 Sitemap 里也無法被抓取。
- 索引指令:頁面带 noindex 时,蜘蛛可能仍會来讀取指令,但不會進入索引。
- 重复性:指向同一内容的大量近似 URL,通常只有 canonical 指向的那個更可能被保留。
- 可訪問性:登入墙後、返回 403、需要特定請求头才返回 200 的頁面,抓取價值會被打折。
二、Sitemap 文件本身的寫法問题
有些條目被忽略,原因不在頁面,而在清單文件本身:
- 單文件超過 5 萬條 URL,或未压缩体积超過 50MB,却没有拆分成索引文件。
- 未啟用 gzip 压缩,传輸成本偏高。
- XML 轉义错誤、特殊字符未编碼,導致解析中断。
- 全站 lastmod 被统一刷成同一時間,甚至寫成未来時間。
- 混入带跟踪參數、大小寫不一致的非規范 URL。
- 同时提交 http 與 https、带 www 與不带 www 的多份重复清單。
三、lastmod 的可信度問题
lastmod 是蜘蛛判断“要不要重新来一趟”的參考之一。如果每次生成清單都把全部時間戳刷新一遍,這個字段就失去了区分度,蜘蛛只能把它当預設值處理。跟随内容真實變更而更新的時間戳,才有參考意义。另外,changefreq 與 priority 目前更多是提示性的,不必花太多精力反复調參。
清單越干净,蜘蛛越容易在里面找到真正值得抓的東西。
四、抽样自查可以怎么做
- 從 Sitemap 中随机抽 30 到 50 條 URL,用脚本或爬虫請求一遍,记錄狀態碼與最终落地 URL。
- 對照 robots.txt,確認抽到的 URL 没有被 Disallow 規則誤伤。
- 检查頁面是否带 noindex,或 canonical 指向了另一個地址。
- 在搜尋控制台查看 Sitemap 报告,關注“已提交”與“已编入索引”之間的差距,以及报错提示。
- 在服務器日誌里篩選 Sitemap 文件的請求记錄,看它是否被定期抓取,以及抓取之後是否出現了新 URL 的訪問。
五、什么时候该清理條目
建议按季度,或在站点改版、栏目合並之後清理一次。長期返回 404 或 410、又没有替代頁面的舊地址;被合並掉的分類頁;由篩選參數组合生成的大量無效頁;已经整站迁移走的舊域名路径,都可以從清單里移除。保留狀態碼正常、可索引、有獨立價值的頁面,清單越精简,參考價值越高。
最後提醒一句:Sitemap 只是辅助手段。它既不保證收錄,也替代不了内鏈结构带来的 URL 發現路径。把清單维護干净、把頁面本身做好,才是更稳妥的做法。