XML 站点地图(sitemap.xml)是站点主動交给蜘蛛的一份地址清單。它不保證收錄,也不能替代内鏈和被引用的作用,但它决定了蜘蛛在自行探索之外,還能不能顺着你希望的路径走一遍。清單長期不更新,最直接的结果就是蜘蛛反复訪問已经失效的地址,而新頁面迟迟没人管。
一、先確認蜘蛛真的拿得到這份清單
很多站点地图問题不是内容寫错,而是蜘蛛根本訪問不到。先做三件事:
- 用浏览器無痕模式直接打開你的域名下的 sitemap.xml,確認返回 200,而不是被登入校驗、地域限制或 CDN 規則拦下。
- 检查 robots.txt 里是否有 Sitemap: 這一行,並且寫的是完整绝對地址。有多個站点地图时逐行列清楚。
- 確認服務器没有對蜘蛛的 UA 返回不同结果。部分防護規則會拦批量抓取,顺带把站点地图也拦了。
二、清單里只應该出現可索引的地址
狀態碼要過一遍
把站点地图里的 URL 批量取一次狀態碼,凡是有 3xx、4xx、5xx 的,先弄清楚原因再决定留不留。已经 301 的舊地址應该換成目标地址;已经下线的頁面直接删掉,而不是留在清單里碰运气。
排除不该被抓的頁面
- 登入頁、後台、搜尋结果頁、站内搜尋參數頁。
- 草稿、预览、带临时 token 的地址。
- 被 robots.txt 明确 Disallow 的目錄。Disallow 和 sitemap 同时指向同一批地址,等于發了两條矛盾的指令。
- 設定 noindex 的頁面。既然不想被收錄,就別让它出現在清單里占用抓取。
只放規范版本
同一篇内容如果有 www 與非 www、带斜杠與不带斜杠、带參數與不带參數等多個版本,站点地图里只保留 canonical 指向的那一個。版本混放會让蜘蛛在两個地址之間反复確認,效率很低。
三、lastmod 要寫實情
lastmod 是站点地图里最容易被滥用的字段。有人每次生成时统一刷成当天時間,短期看似活跃,長期會让蜘蛛学會忽略這個信号,因為它發現時間和内容實际變化對不上。
比較稳妥的做法是:把 lastmod 绑定到内容真正更新的時間戳,而不是生成任務执行的時間;模板、導航、頁脚的微調不必触發全站 lastmod 變化;如果确實無法提供准确時間,宁可不寫這個字段,也不要寫假的。
四、分片、數量與格式
- 單個站点地图文件建议不超過 5 萬個 URL,未压缩体积不超過 50MB,超出就拆成多個文件,再用站点地图索引(sitemap index)串起来。
- 索引文件里列出的子文件同样要能返回 200,別出現指向已刪除分片的情况。
- URL 中的特殊字符要按規范轉义,中文路径建议直接使用编碼後的形式。
- 定期確認站点地图的响應头與缓存策略,別让蜘蛛長期拿到一份缓存住的舊版本。
五、可以按月执行的检查流程
- 抓取站点地图文件本身,確認狀態碼、体积和分片數量。
- 提取全部 URL,批量請求响應头,记錄非 200 的條目。
- 對照 robots.txt 和 noindex 清單,剔除冲突項。
- 抽查若干頁面的 lastmod,與頁面實际更新時間比對。
- 把内鏈、外鏈中發現的、站点地图里缺失的有效頁面补進去。
- 把结果记錄下来,下次對比變化,而不是每次都從头猜。
站点地图的價值不在于提交得多,而在于清單和站点現状對得上。一份准确實时的清單,比十份凑數的清單更有用。
小结
把站点地图当成一份需要维護的运营资产:地址有效、版本唯一、時間真實、分片清晰。它不會让頁面自動排到前面,但能减少蜘蛛在無效地址上的消耗,让新内容更快被看见。