sitemap 是给蜘蛛看的目錄,不是许愿池
站点地图(sitemap.xml)的作用其實很朴素:把站内希望被發現的 URL 集中列成一份清單,交给搜尋引擎自己去挑。它不保證收錄,也不该被当成“提交了就會来抓”的许愿池。真正麻烦的是,很多站点的 sitemap 属于建站时生成一次、之後無人過問的文件,時間一長,它和站点實际狀態之間的偏差越滚越大。
三類最常见的偏差
一、清單里混進了不该出現的地址
下面這些地址通常不该出現在 sitemap 里:
- 已经返回 404 或 410 的地址;
- 會 301、302 跳走的舊地址(應该直接寫跳轉後的最终地址);
- 頁面本身已設定 noindex 的地址;
- 带篩選、排序、會话、追踪參數的组合地址;
- 後台、登入、測試环境等不希望被公開訪問的路径。
每多一條無效地址,就多占一点抓取资源,也让這份清單的可信度打一次折扣。蜘蛛反复拿到出错的内容,對它的兴趣只會越来越低。
二、lastmod 被当成“顺手改一下”
lastmod 是给蜘蛛判断“這個頁面值不值得再跑一趟”的參考。有些站点為了顯得勤快,每次生成 sitemap 都把全站頁面的 lastmod 刷成当天。後果是:蜘蛛看到每一次都是“新内容”,要么反复白跑,要么干脆不再信任這個字段,退回按自己的节奏来。
更稳妥的做法是让它對應真實的内容變更時間——正文、结构化資料、價格、库存這類實质性改動才更新;僅僅改動頁脚年份、广告位或者無關样式,不必刷新。
三、分片與索引文件長期無人核對
大站通常會拆成 sitemap index 加多個子文件,每個子文件有數量和体积上的常见约束(例如單文件不超過 50000 條、未压缩不超過 50MB)。如果由程序自動拆分,要確認每個子文件都能正常打開、返回正确的内容類型,而不是某個子文件早已 404,索引却還在引用它。索引文件里列出的應当是 sitemap 地址,不要誤寫成普通頁面地址。
一份可以照着做的自查清單
- 直接打開 sitemap 地址,確認返回 200、内容類型為 XML,且没有被登入墙或 CDN 規則拦住。
- 在 robots.txt 里用一行 Sitemap 声明完整地址,方便蜘蛛找到入口。
- 抽查清單首尾與中間若干條 URL,逐個訪問,看狀態碼、是否跳轉、是否带 noindex。
- 核對 lastmod,確認它跟着真實内容變化,而不是跟着生成脚本走。
- 检查是否有孤立頁面不在清單里,尤其是新發布不久、站内連結還没铺開的内容。
- 確認清單中的地址與頁面規范地址完全一致,带不带 www、带不带结尾斜杠保持统一。
- 如果用了 sitemap index,逐個子文件点開,確認没有死鏈與重复。
- 把重新生成排進日常流程,内容有增删後就更新,而不是等想起来再说。
sitemap 只是入口之一,別孤立地看它
站点地图解决的是“告诉你有哪些地址”,但真正影响蜘蛛愿不愿意多来的,還是站点本身:内鏈能不能從首頁顺着点到,頁面打開速度如何,内容是不是持續在更新。如果清單里躺着几千條 URL,而站内几乎没有任何連結指向它們,這份文件的實际作用會大打折扣。
把 sitemap 当作一份需要维護的清單,而不是一項提交完就算收工的任務。
另外,服務器日誌和搜尋资源平台里的抓取資料能反過来說明問题:蜘蛛有没有按清單来、哪些目錄被跳過了、哪些地址反复报错。把這些观察结果回流到清單维護上,比單纯盯着“一共提交了多少條”更有意义。
小结
sitemap 自查不需要多复杂的工具,重点就三件事:清單里的地址真實可用、lastmod 反映真實改動、分片與索引文件没有失效。定期花十几分钟過一遍,比事後排查“為什么新頁面迟迟不来”要省事得多。