站点地图的索引文件和子地图怎么分工,哪些地方容易写错
站点地图的索引文件和子地图怎么分工:子地图负责列出具体内容地址,索引文件负责列出这些子地图的地址。当站内地址数量超过单个文件的上限,协议要求必须拆成多个子地图文件,再由一个索引文件把它们汇总起来。容易写错的三处是子地图的绝对地址、文件编码与转义、以及每个地址对应的修改时间。
协议给单个文件划了哪两条线
单个站点地图文件有两条硬性上限:一是地址条数不得超过 50,000 条,二是未压缩体积不得超过 50MB。任意一条越线,都要拆分。这两条线的作用不是限制站点规模,而是控制单次抓取的解析成本,因此拆分后不需要合并回来,而是让索引文件承担汇总角色。
文件本身必须是 UTF-8 编码,地址中出现的特殊字符要做实体转义。这两点在手工生成时容易被忽略,尤其是标题或栏目名里带中文、空格、& 符号的地址,未转义会直接导致解析失败。
索引文件和子地图各自承担什么
| 角色 | 内容 | 上限约束 | 谁来生成 |
|---|---|---|---|
| 子地图 | 具体页面地址与其修改时间 | 条数与体积两条上限 | 按栏目或分片批次生成 |
| 索引文件 | 各子地图的地址 | 只列子地图,不列内容页 | 汇总所有分片 |
索引文件里不要再重复列出内容页地址。分片之后常见的误解是”索引和子地图都写一遍更保险”,实际效果是同一地址被声明两次,抓取预算被浪费在重复解析上。
另外一个容易忽略的边界:子地图与索引文件必须属于同一主机名。把分片文件放到独立的内容分发域名下,会因跨主机而被判定无效,这类错误在静态文件搬迁之后特别容易出现。
拆分后最容易出错的三件事
第一件是分片边界不稳定。 按文章编号取模分片和按栏目分片,两种做法在内容增长时的表现不同。按编号取模会让每个分片的内容混杂且地址频繁变动,按栏目分片则更贴近站点结构,新增内容通常只影响一个分片。站内自动生成站点地图时,把分片边界保持稳定,子地图的修改时间才有意义。
第二件是 lastmod 写了生成时间。 每次重新生成都把所有地址的修改时间刷成当天,抓取方会误判为全站内容变动,进而提高重抓频率。正确做法是取页面实际发布或最后编辑时间。这一项与时间因子相关:站内支持设定内容定时发布,到点上线的页面应当以上线时刻作为起点,而不是排期录入的时刻。
第三件是提交地址与实际可访问地址不一致。 伪静态开关切换、目录迁移或域名更换之后,索引文件里列的还是旧地址,子地图本身却被重定向到新位置。检查办法是从索引文件逐条取子地图地址请求一次,看返回码是否为成功状态而非重定向。
站内怎么确认产物合格
AnQiCMS 的 SEO 侧能力把这几件事收敛成了自动流程:支持站点地图自动生成,同时提供伪静态 URL、301 重定向、向搜索引擎做主动推送的链接推送管理。产物合格与否不能只看”生成了”,要抽样核对四项:条数与体积是否在上限内、索引是否只列子地图、编码是否为 UTF-8、每个地址的修改时间是否来自页面自身。
抽样的成本很低:从索引里取第一个分片和最后一个分片各查十行,再核对分片边界处的那篇文章有没有被重复计入两片。链接推送的提交记录也要对一次,推送的地址集合应当能在站点地图里找到对应条目,两边不一致通常说明有隐藏栏目或回收站内容被带进了其中一个列表。
常见问题
问:内容不到五万条,要不要直接做索引文件?
答:不是必须。单文件能覆盖时,一个子地图就够了;预留索引结构的好处只在后续扩量时不必重新调整提交地址。
问:删掉的文章还留在站点地图里会怎样?
答:抓取方会拿到失效地址。删除正式文档在系统里是移入回收站而非物理删除,这类未发布或已删除内容不应出现在产物中。
问:新文章要不要靠站点地图通知搜索引擎?
答:站点地图负责完整清单,主动推送负责及时通知,两者角色互补。只靠其中一个,要么缺全量、要么缺时效。