多语言 sitemap 的正确结构只有一种:一个 sitemapindex,按语言拆成子 sitemap,每条 URL 带上其他语言版本的 hreflang 注解。混在一个文件里,超过 5 万条会被截断,权重也分散。
结构长什么样
索引文件只列子文件地址:
<sitemapindex>
<sitemap><loc>https://example.com/sitemap-zh.xml</loc></sitemap>
<sitemap><loc>https://example.com/sitemap-en.xml</loc></sitemap>
</sitemapindex>
子文件里每条 URL 带完整语言组:
<url>
<loc>https://example.com/zh/docs/api</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://example.com/en/docs/api"/>
<xhtml:link rel="alternate" hreflang="zh-Hans" href="https://example.com/zh/docs/api"/>
</url>
注意 xhtml 命名空间要声明,漏了整份文件解析失败。
2025 年 12 月那次改造
一个出海 SaaS,40 个语言版本、每个 1500 页左右。之前所有语言塞进一个 sitemap,6 万条 URL 超限被截断,最靠后的 20 个语言版本根本没进文件。hreflang 又只写在 HTML head 里,部分版本模板漏了自引用。
改成分语言 sitemap、URL 级 hreflang、索引文件汇总之后,Google 读到的 URL 从 3.2 万涨到 5.8 万。德语和西语版本的收录率两个月从 30% 到 68%。
三个常见错
- 所有语言混一个文件:超 5 万条截断,且各语言互相稀释。
- sitemap 和 HTML 的 hreflang 不一致:两处都写可以,但必须一致,冲突时以 HTML 为准。
- 没有自引用:语言组里不含自己,整组失效。
40 个版本里,哪些值得进 sitemap
不是所有语言版本都值得提交。判断标准是"有没有独立内容",机翻出来只换了语言、结构和正文都一样的页面,提交了也是重复内容。我们的做法是先给每个语言版本打分:本地化文案、本地案例、本地价格、本地联系方式,四项里占两项以上才进 sitemap,其余的先 noindex,等翻译团队补齐。
那次改造里 40 个版本只提交了 26 个,另外 14 个先挡在 noindex 后面。三个月后补齐内容的 9 个版本陆续放开,收录率都在 60% 以上。
提交和监控
sitemapindex 提交一次就够,子文件增删不用重新提交。GSC 的 sitemap 报告能按子文件看"已发现 URL 数",哪个语言的数字明显偏低,就去看那个语言的模板和 hreflang 组。百度这边对整个 sitemapindex 的支持不如 Google 完善,我们会单独提交几个主力语言的子文件。
生成的工程做法
别手写。让后端按语言和内容类型生成,每次内容发布触发增量更新,lastmod 只改真正变动的那几条。多语言站最怕的是翻译平台回写时把 URL 改了但 sitemap 没跟上,我们在发布流程里加了一步校验:新 URL 必须同时出现在子 sitemap 和对应页面的 hreflang 组里,缺一个就报警。
判断
语言版本少于 5 个的站,不用搞这么复杂,一个 sitemap 加 HTML head 的 hreflang 就够。进入 10 个以上市场、每个市场都有独立内容团队时,sitemap 的组织方式比内容数量更影响收录。
元析智能
为软件公司做 SEO 和 GEO 优化