把 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 需要跟着内容更新。新页面加进去、下线页面移出来,否则时间一长,这份文件就会变成一份过期的地址清单,参考价值越来越低。