站点运营

站点地图自查:別让 sitemap 只挂着首頁和几個栏目

sitemap 建好之後最容易被遗忘。本文梳理站点地图常见的覆盖不全、混入废弃地址、lastmod 失真、分片失控等問题,给出一份可直接执行的自查清單,以及自動生成和日誌驗證的實用做法。

站点运营

站点地图自查:別让 sitemap 只挂着首頁和几個栏目

站点地图(sitemap)大概是站点运营里最容易被“建好就不管”的文件。它不像首頁那样每天有人訪問,出了問题也未必有反馈——蜘蛛照样抓別的頁面,訪客毫無感知。等到新栏目上线一两個月還没有動静,或者搜尋资源平台里顯示的已提交數量長期停在两位數,才想起翻出那個 XML 文件,發現里面的地址還停在两年前。

sitemap 上常见的几類問题

覆盖太少,只列了首頁和几個栏目

有些站点只把首頁、几個主栏目寫進 sitemap,大量文章頁、产品頁、标簽聚合頁全靠蜘蛛顺着内鏈自己爬。這些頁面不是抓不到,但被發現的時間會被拉長,新站或者内鏈較浅的頁面尤其明顯。检查方式很直接:把 sitemap 里的 URL 數量和站内“可公開訪問的正文頁”數量做個對比,差距過大就說明覆盖不全。

混進了不该出現的地址

  • 已经刪除、返回 404 的頁面;
  • 设了 noindex 的頁面,和 sitemap 想表達的意思正好相反;
  • 带排序、篩選、會话跟踪參數的重复地址;
  • 已经 301 或 302 跳走的舊地址,sitemap 里應尽量寫最终地址;
  • 後台、登入頁、站内搜尋结果頁等不希望被收錄的地址。

lastmod 不可信

有的站点给所有 URL 填同一個時間,有的干脆不填,還有的每次重新生成就把全部頁面的 lastmod 刷成目前時間。前两種問题不大,最後一種反而有害:蜘蛛會認為這個字段没有參考價值,之後即使内容真的更新了,也懒得当成更新信号。建议只在正文确實發生實质性修改时才動 lastmod,格式用带时区的完整時間,例如 2025-03-11T09:20:00+08:00。

体积和分片失控

單個 sitemap 文件有上限,通常是 5 萬條 URL 且未压缩不超過 50MB,超過就要拆成多個文件,再用 sitemap 索引文件把它們串起来。不少站点是文章量涨上来以後忘了這件事,结果生成脚本报错,或者只生成了前一半。如果站点規模已经不小,建议一開始就按栏目或按月份分片,後續维護會轻松很多。

一份可以直接照做的自查清單

  1. 打開 sitemap 地址,確認返回 200 且 Content-Type 是 XML 或纯文本,不是被 CDN 或安全策略拦下的错誤頁。
  2. 随机抽 10 到 20 條 URL 實际訪問一遍,看是否都能正常打開。
  3. 確認没有 noindex 頁面、參數重复頁和跳轉地址混在里面。
  4. 检查 lastmod 是否符合格式,是否只有真正更新的頁面才變化。
  5. 確認 robots.txt 里寫了 Sitemap 的完整地址,包括分片索引文件。
  6. 如果站点有多語言或多地区版本,確認對應關系标注清楚,別让蜘蛛把不同語言的頁面当成重复内容。

生成與更新:別靠手工维護

手工维護的 sitemap 基本活不過半年。比較稳妥的做法是让程序在内容發布、下线、改地址时自動更新清單,再由定时任務每天或每周重新生成文件。生成逻辑里最好加两條過滤:狀態碼必须是 200,且頁面不能带 noindex。這样即使某天有人誤操作,也不會把一堆废弃地址推给蜘蛛。

提交之後怎么驗證

提交只是開始。可以在搜尋资源平台里看已提交數量和已收錄數量的大致比例,但更實在的是去翻服務器日誌:搜 sitemap 的文件名,看蜘蛛有没有定期来取、返回碼是不是 200、取完之後有没有顺着里面的地址去抓几個頁面。如果日誌里几乎看不到這個文件的訪問记錄,那再規整的 sitemap 也只是躺在服務器上的一個 XML。

需要說明的是,sitemap 只是给蜘蛛的一條线索。頁面能不能被收錄、排在哪里,取决于内容质量、站点整体情况和用戶需求,sitemap 本身並不保證任何结果。把它做好,是為了减少“新頁面迟迟没人發現”這類本可以避免的损耗。

顺带一提,sitemap 也不能替代内鏈。一個頁面如果只有 sitemap 里的一條记錄,站内没有任何入口指向它,蜘蛛即使抓到了,也很难判断它的重要程度。结构清晰的内鏈,加上一份准确、及时更新的 sitemap,才是比較完整的组合。