sitemap 的作用是“告知”,不是“保證收錄”
很多站点把 sitemap 当成收錄開關:只要 URL 寫進去,就等着它出現在索引里。實际情况是,sitemap 只是一種發現入口,它告诉蜘蛛“這個地址存在”,但要不要抓、抓了要不要進索引,仍然取决于頁面质量、重复情况和站内结构。把 sitemap 寫得又大又满,並不會让收錄量自動上涨,反而可能稀释蜘蛛對重要頁面的注意力。
單文件寫多少條 URL 比較合适
主流搜尋引擎對單個 sitemap 文件的 URL 條數和文件体积都有上限约定,通常是不超過 5 萬條、未压缩体积不超過 50MB。這是硬性邊界,不是推荐值。實际运营中更常见的做法是遠遠低于這個數:
- 几百到几千條的小站点,一個文件寫完全部 URL 即可,维護成本最低。
- 上萬條的中型站点,按栏目或内容類型拆分,一個文件對應一個可獨立维護的集合。
- 内容量持續增長的站点,按時間或分部拆分,避免每次更新都重寫整個文件。
數量本身不是問题,把不同優先級、不同更新节奏的 URL 混在一起才是問题。当新闻頁和帮助文档同處一個文件,蜘蛛很难從 sitemap 层面判断哪些值得優先抓。
分片拆分的原則:按业務逻辑,不按凑數
分片(sitemap index 指向多個子 sitemap)的意义在于让每個文件有清晰的语义。可以考虑這几種切分方式:
- 按内容類型:商品、文章、分類、标簽各一個文件,便于單獨观察各類頁面的收錄表現。
- 按更新频率:高频更新的列表頁放一起,几乎不變的静態頁放一起。
- 按站点分部:多語言或多地区站点,按語言目錄或子域拆分,方便排查某一分部的抓取異常。
不推荐單纯為了“每個文件不超過 N 條”而机械切割,那样拆出来的文件没有业務含义,出問题时無法定位。
lastmod 该寫多准
lastmod 是 sitemap 里最容易被滥用的字段。常见两種极端:
- 全部頁面都寫当天日期,或者每次生成时统一刷新一遍。
- 完全不寫,让蜘蛛自己判断。
前者會让這個字段失去參考價值——当所有 URL 都顯示“刚刚更新過”,蜘蛛會逐渐忽略它。後者虽然不算错,但放弃了向蜘蛛传递更新信号的机會。比較稳妥的做法是只在頁面正文确有實质變化时更新 lastmod,例如模板微調、广告位轮換、頁脚年份變化這類改動不應触發更新。如果做不到精确到每個頁面,宁可只给真正會變的栏目加這個字段。
一個可用的判断标准:這個改動,用戶重新訪問时會察觉到吗?察觉不到,就不必改 lastmod。
怎么判断 sitemap 有没有被用上
提交之後不要只看“已提交”狀態,可以從几個方向驗證:
- 服務器日誌:观察蜘蛛是否按 sitemap 里的 URL 發起抓取,抓取的時間分布是否集中在你预期的栏目上。
- 索引报告:看“已發現但未编入索引”的 URL 是否大多来自 sitemap。如果比例很高,說明發現問题解决了,但质量問题没解决。
- 抓取频次與响應碼:如果 sitemap 里的 URL 大量返回 3xx、404 或 5xx,先把這些地址清理掉,否則蜘蛛會降低對该文件的信任。
几個容易忽略的细节
- sitemap 里只放返回 200 且允许被抓取的規范 URL,被 robots.txt 屏蔽或带 noindex 的地址不必放進去。
- 寫進去的應该是頁面的最终規范地址,而不是带跟踪參數、會话 ID 的變体。
- 更新 sitemap 後不必频繁 ping 提交入口,稳定更新比高频触發更有意义。
- 索引文件本身的 URL 保持固定,不要每次改名,否則蜘蛛需要重新發現入口。
把 sitemap 当成一份需要長期维護的清單,而不是一次性的提交動作,它才能真正帮上 URL 發現的忙。