不少站点在上线阶段認真寫過一次 sitemap,之後就再没打開過。過一两年回头看,這份文件里可能還留着早已下线的栏目、換過域名的舊地址,甚至整個地址本身都已经返回 404。需要说清楚的是,sitemap 本身不带来排名,它更像是递给蜘蛛的一張參考清單;一旦清單失真,被消耗掉的是抓取预算和蜘蛛對站点的判断。
先確認這份地图還能被正常打開
最基础的一步反而最常被跳過:把 sitemap 地址直接訪問一次,看狀態碼、看返回内容、看解析结果。很多問题在這一步就能暴露出来。
- 地址返回 200,而不是 301 跳轉、404 或需要登入;
- Content-Type 是 XML 相關類型,而不是被服務器当成纯文本或 HTML 輸出;
- 文件能被 XML 解析器讀通,没有未閉合标簽或未轉义的 & 字符;
- 抽查若干條 URL,確認它們指向的是可訪問的最终地址,而不是又跳一次;
- 確認清單里没有混進已設定 noindex 的頁面,否則等于自己给自己制造矛盾信号。
如果站点同时有多個子域或分区,還要確認 robots.txt 里的 Sitemap 行指向的是索引文件,並且這份索引本身也能被正常訪問。
大站更适合用索引文件拆開
單個 sitemap 文件有數量與体积上的上限,通常是一個文件不超過五萬條 URL、未压缩体积不超過 50MB。内容量一上来,硬塞進一個文件既难维護也容易生成失敗。更稳妥的做法是按栏目、按内容類型或按時間切開,再用一個索引文件把它們串起来。
拆分时值得顺手检查两件事:一是索引里列出的每個子文件都真實存在,没有因為改過命名而留成死鏈;二是拆分维度不要互相重叠,同一個地址出現在两個子文件里虽然不算致命,但會让更新和排查變麻烦。
lastmod 是最容易被滥用的字段
為了让内容看起来更新,有些站点會把 lastmod 批量寫成目前時間,或者每次生成时全量刷新。這種做法短期看似無害,實际會让這個字段彻底失去參考價值——当所有日期都指向同一时刻,就没有任何一條能提供有效信息。
更合理的做法是让它反映内容實质變化的時間:正文有增补、參數有更新、结构有調整时才改;纯粹調整样式、換一張配图,通常不值得動這個時間。同样地,lastmod 不應晚于目前時間,也不该早于頁面的首次發布日期。
生成方式决定了它會不會腐烂
手工维護一個静態 XML 文件,在内容量小的时候可行,但几乎必然随時間失效。相對可持續的方式是让程序或构建流程负责輸出:内容發布、下线、改地址时同步更新地图,並保留定时重新生成的任務,防止出現頁面已變而地图未動的情况。
和 robots.txt、canonical 的分工
這三者常被混為一谈,其實职责不同。robots.txt 决定哪些路径不该被抓取,canonical 告诉蜘蛛同一内容應以哪個地址為准,而 sitemap 只负责列出希望被發現的規范地址。它們之間要保持一致:不该被抓的地址不该出現在地图里,地图里的地址也應当與頁面上的 canonical 指向同一個结果。任何一處打架,都會让判断多绕一圈。
一次可以落地的自查清單
- 直接訪問 sitemap 與索引文件,確認狀態碼與解析正常;
- 抽查各栏目若干條 URL,確認没有 404、410 和多余跳轉;
- 確認清單與 noindex、robots 屏蔽規則没有冲突;
- 检查 lastmod 是否存在批量灌水或未来時間;
- 確認分段文件都在索引中被正确引用;
- 核對 robots.txt 中的 Sitemap 指向;
- 查看站長平台里的已提交與已發現資料,观察長期未處理的數量變化;
- 把重新生成纳入日常流程,並指定一個负责人定期复核。
地图的價值在于准确,而不在于長。一份條目少但都是活地址的 sitemap,比一份塞满舊路径的清單更有用。
把這份自查放進季度运维清單,通常半小时内就能跑完一轮。它不會直接改善什么指标,但能减少蜘蛛在無效路径上的空轉,也让後續的問题排查少一层干扰。