站点地图(sitemap)的作用是替蜘蛛列出一份可抓地址清單,但它不是收錄開關。很多站点的問题不是没做站点地图,而是做了一份和站点實际狀態脱节的文件:里面混着不该收錄的地址,lastmod 永遠停在生成那一天,地址早就 404 了也没清理。蜘蛛按图索骥抓几次抓不到東西,自然會對這份清單打折扣。
先確認它有没有被正确声明
文件本身寫得再好,没被声明也等于放在角落里。這一步花几分钟就能確認。
- robots.txt 中的 Sitemap 行要用完整绝對地址,包含协议和域名,不要寫相對路径。
- 站点地图數量較多时,用站点地图索引文件统一收口,而不是在 robots.txt 里堆上十几行。
- 声明之後自己用浏览器打開一次,確認返回 200,内容是 XML,而不是错誤頁、登入頁或一長串报错。
- 如果站点有多個域名或子域,確認声明的文件覆盖了真正需要抓取的那部分。
再打開文件本身逐條核對
地址范围
站点地图里只應放你希望被收錄、且目前能正常返回 200 的規范地址。
- 登入頁、註冊頁、後台地址、站内搜尋结果頁、带跟踪參數的推廣地址,一般不该出現。
- 已经被 noindex 的頁面不要寫進站点地图。两邊規則矛盾时,蜘蛛會以頁面上的指令為准,而這份清單的可信度會下降。
- 301、302 跳轉地址和已经返回 404 的地址要清出去,保留最终規范地址。
- 同一内容存在多個參數版本时,只放規范地址,避免让蜘蛛在參數组合里反复绕圈。
lastmod 是不是真的
lastmod 属于選填字段,但填了就要真實。如果每次生成都把全站頁面刷成目前時間,這個字段就失去了參考價值,蜘蛛也不會再依赖它判断哪些頁面值得回訪。更實用的做法是只對确實改過内容的頁面更新這個時間。
分片與体量
單個站点地图文件有地址數量和体积上限,通常為五萬條、未压缩五十兆左右。超過之後要分片,並用索引文件指向各個分片。按栏目切或按發布時間切都可以,關键是每個分片都能正常打開,地址不重复、不遗漏。
和站点實际狀態對齐
文件寫得再整齐,也要和服務器上的真實情况對一遍,否則只是纸面清單。
- 抽一批站点地图里的地址實际訪問一遍,看狀態碼和最终落地地址。
- 反過来從服務器日誌里看蜘蛛是否真的在抓這些地址,以及抓取後的狀態碼分布。
- 確認站点地图的地址數量和站点實际可收錄頁面數量處在同一量級,差得太多通常意味着舊地址没清干净,或者新栏目根本没進文件。
更新與提交的日常做法
站点地图最好由系統在内容發布、下线时自動更新,而不是靠人工维護。規模稍大的站点,手工編輯几乎必然過期。更新之後,可以在搜尋平台的站長工具里提交,但別把它当成唯一的 URL 發現路径。
站点地图的作用是辅助發現,不是保證收錄。内鏈、導航、栏目列表頁仍然是蜘蛛發現地址最稳定的入口,站点地图只是把這些入口补全。
一份可以照着走的自查清單
- robots.txt 是否用绝對地址声明了站点地图或索引文件。
- 打開文件,確認返回 200、编碼正常、XML 结构没有报错。
- 抽查地址:是否為 200、是否為規范地址、是否被 noindex。
- 检查是否混入登入頁、搜尋结果頁、參數頁等不该收錄的地址。
- 检查 lastmod 是否真實,而不是每次生成都全量刷新。
- 核對分片數量與地址總量,確認没有超出單文件上限。
- 確認新發布的内容能進入站点地图,已下线的地址能及时移除。
- 從日誌回看蜘蛛對站点地图地址的實际抓取情况,而不是只看提交成功。
站点地图這件事本身不复杂,难的是让它長期和站点保持一致。把它纳入常規运维节奏,定期花十几分钟核對一遍,比一次性生成一份很大的文件更有意义。