把 Sitemap 寫好,是让蜘蛛知道站点有哪些 URL 的最省事的方式之一。但很多人寫完一份 sitemap.xml 之後就不再管它,直到某天發現新頁面迟迟没有動静。問题往往不在“有没有 Sitemap”,而在“Sitemap 寫得對不對、拆得合不合理”。
一個 Sitemap 文件能装多少條 URL
按照通行的 Sitemap 协议,單個文件有两個硬性上限:
- URL 條數不超過 50,000 條;
- 未压缩体积不超過 50MB。
這两條是“或”的關系,任意一條超了,就需要拆分。超限的文件可能被直接忽略,或者只讀到一部分,结果就是後面那一大段 URL 既不在 Sitemap 里,也没人知道它們丢了。
如果内容本身结构简單,可以先按体积估算:一條 URL 加上 lastmod 大约几十到一百多字节,5 萬條通常還遠不到 50MB。反過来,如果每條都带較長的标簽或图片信息,体积可能先到顶。
Sitemap 索引文件:把多份 Sitemap 串起来
拆分之後,需要一份索引文件(sitemap index)来匯總。它的结构和普通 Sitemap 不同:
- 根元素是 sitemapindex,下面每個 sitemap 元素包含一個 loc,指向子 Sitemap 的地址;
- 可以带 lastmod,用来表示這份子 Sitemap 的更新時間;
- 索引不能再嵌套索引,只能有一层。
索引文件本身也要遵守同样的條數和体积限制,不過 5 萬份子 Sitemap 這個量級,绝大多數站点一辈子也用不到。
该按什么维度拆分
拆分不只是為了绕過上限,也方便你後續观察。常见的几種切法:
- 按内容類型:文章、商品、分類、标簽各一份。哪一類被抓取得慢,一眼能看出来。
- 按更新時間:新近更新的内容單獨成一份,回訪节奏會更集中。
- 按語言或地区:多語言站点按目錄切分,便于和 hreflang 對應。
- 按數量平均切:内容類型單一时的兜底方案,但观察價值較低。
几種常见的寫法错誤
- 用了相對路径。loc 必须是完整的绝對 URL,包含协议和域名。
- URL 里带未轉义的字符,比如空格、中文、& 等,需要做编碼處理。
- 把 robots.txt 里 Disallow 屏蔽掉的地址也放進去,等于自己和自己打架。
- 把 404、410 或跳轉地址放進去。蜘蛛顺着抓過去只會浪費一次請求。
- 每次生成都刷新所有 lastmod。時間戳全都一样时,這個字段基本失去了參考意义。
- 把大量低质或重复參數頁面塞進去,稀释了真正需要被抓的地址。
放在哪里,蜘蛛怎么找到它
最通用的做法是放在站点根目錄,比如 https://example.com/sitemap.xml,然後在 robots.txt 里用 Sitemap 指令声明完整地址。這样即使蜘蛛是第一次来,也能顺着 robots.txt 找到入口。
除了 robots.txt,站長平台的手動提交也是一個入口,适合刚上线、外鏈還很少的新站。需要注意,這两條路都只是“告诉蜘蛛這里有東西”,並不等于“蜘蛛一定會来抓”。
別把 Sitemap 当成收錄保證
Sitemap 解决的是“蜘蛛知不知道這個 URL”,而不是“蜘蛛會不會抓、會不會收錄”。抓不抓取决于服務器响應、頁面质量、站内结构和整体抓取額度。
一個比較實用的自查顺序是:先確認 Sitemap 文件本身能被正常訪問、格式無誤;再看里面的 URL 是否都能返回 200;接着對比服務器日誌,看這些 URL 有没有被訪問過。如果日誌里几乎看不到 Sitemap 里的地址,那問题多半出在抓取入口或站点整体狀態上,而不是 Sitemap 的寫法。
最後一点:Sitemap 需要跟着内容更新。新頁面加進去、下线頁面移出来,否則時間一長,這份文件就會變成一份過期的地址清單,參考價值越来越低。