站点規模上来之後,一份 Sitemap 往往装不下全部 URL。這时會用索引文件把多個分片串起来。分片怎么切、索引怎么寫、更新时動哪一份,會直接影响蜘蛛讀取的效率,也影响後續的核對工作。
先看清两個硬性上限
單個 Sitemap 文件有两個常见限制:URL 條數不超過 5 萬條,未压缩体积不超過 50MB。超過就得拆。拆分之後需要一個索引文件,把各個分片的地址列出来,通常命名為 sitemap.xml,而真正的分片用 sitemap-1.xml 這類名字。
分片文件可以是 gzip 压缩的,但索引文件本身不要压缩。這個细节经常被忽略,结果索引讀不出来,前面拆得再整齐也没有意义。
索引文件的寫法與常见错誤
- 索引里只放分片地址,不要把普通頁面 URL 混進去。索引是“目錄的目錄”,混放會让解析层級變得混乱。
- 不要在一個索引里指向另一個索引。索引嵌套不是标准做法,容易出現讀取中断。
- 分片地址要與站点同域,跨域声明通常會被忽略。
- robots.txt 里如果声明 Sitemap,一般寫索引文件的地址就够了,不必把每個分片都列一遍。
另外,分片地址寫错、文件被删、或者返回 404,都會让整批 URL 失去声明入口。這類問题在服務器日誌里表現為對分片文件的請求返回非 200,值得定期掃一遍。
按什么维度切分片
切分方式没有统一答案,但目标一致:让“更新”集中在少數几個文件里。常见的几種切法:
- 按目錄或栏目切:适合内容板块清晰、更新节奏不同的站点。改版某個栏目时,只需要動對應的分片。
- 按語言或地区切:多語言站点常用,便于分区域核對。
- 按更新频率切:高频更新的頁面單獨一份,低频的另放,减少蜘蛛反复讀取大文件。
- 按時間或 ID 段切:适合内容持續增長、歷史内容基本不動的站点。
如果每天新增几千條 URL,就把所有分片都重寫一遍,索引和分片的最後修改時間會不断變化,蜘蛛需要重新讀取的量也随之上升。让不變的分片保持原样,是拆分最實际的價值。
lastmod 用不用,怎么用
lastmod 的作用是告诉蜘蛛這個地址内容有變動。用它的前提是時間戳真實。如果每次生成分片都把 lastmod 刷成当天,短時間内可能看不出問题,時間一長,這個字段的參考價值就没了,蜘蛛可能干脆忽略它。
真實的時間戳才有意义。把 lastmod 当成“提醒工具”而不是“刷新按钮”,自己核對日誌时也更方便。
還有一種情况:頁面内容没變,但因為模板改動導致整批 lastmod 變化。這類批量變化會在抓取日誌里留下一片密集訪問,核對时容易誤判為大規模更新。
用抓取日誌核對分片
分片寫好並提交之後,可以通過日誌做几項基础核對:
- 分片文件本身被訪問的频率,是否和你的更新节奏大致對應。
- 分片請求的响應碼,是否長期稳定在 200。
- 從分片被讀取,到分片内 URL 被訪問,中間隔了多久。
- 哪些分片几乎没有被讀取過,是否存在地址寫错或長期未更新的情况。
需要說明的是,声明和讀取不等于收錄。分片被讀了,只說明入口被發現;頁面是否進入索引,還要看内容质量、重复度、站点整体表現等因素。分片的作用是把 URL 稳定地、可核對地暴露出来,而不是替代其他工作。
一套简單的维護清單
- 確認索引文件本身未被压缩,且能正常打開。
- 每個分片控制在限制以内,文件名與地址可预测。
- 更新时只重寫有變化的分片,其余保持不動。
- lastmod 只在内容實际變化时更新。
- 定期看分片請求的响應碼與訪問频率。
- 分片结构發生變化时,同步检查 robots.txt 中的声明地址。
把這些基础工作做稳,後面排查“URL 為什么没被發現”之類的問题时,至少可以先排除掉 Sitemap 這一层的不确定性。