Sitemap 网站地图:格式、生成、提交与多语言配置
如果说 robots.txt 告诉搜索引擎"哪里不要去",那么 sitemap 就是告诉它"这里有什么值得看"。XML Sitemap 是一份你主动提交给搜索引擎的页面清单,帮助它更快、更完整地发现你网站上的重要内容。这篇文章从格式标准讲到生成、提交和多语言配置,帮你把 sitemap 这块做对、做全。
什么是 sitemap#
Sitemap(网站地图)是一个列出网站上重要页面的文件,用来告诉搜索引擎哪些 URL 可供抓取。最常见的形式是 XML Sitemap,它遵循 sitemaps.org 协议,被所有主流搜索引擎支持。
需要区分两个容易混淆的概念:
| 类型 | 面向对象 | 作用 |
|---|---|---|
| XML Sitemap | 搜索引擎 | 机器可读的 URL 清单,帮助抓取与收录 |
| HTML 网站地图 | 用户 | 页面上给访客浏览全站结构的导航页 |
本文聚焦的是 XML Sitemap,它是技术 SEO 的标准配置。
为什么需要 sitemap#
搜索引擎主要通过链接发现页面。如果你的内部链接结构清晰,理论上爬虫能顺着链接找到所有页面。但 sitemap 在以下场景中价值明显:
- 大型网站:页面数量庞大,光靠爬虫顺链接发现效率低,容易遗漏深层页面。
- 新网站:外部链接少,爬虫缺少发现入口,sitemap 能加速首次收录。
- 内链稀疏的页面:那些没有足够内部链接指向的"孤岛"页面,sitemap 是它们被发现的重要途径。
- 内容频繁更新:通过
lastmod告诉搜索引擎哪些页面有更新,引导优先重新抓取。 - 富媒体内容:图片、视频等可以通过专门的 sitemap 扩展提供额外信息。
XML Sitemap 标准格式#
一个标准的 XML Sitemap 以 <urlset> 为根元素,每个 URL 用一个 <url> 条目表示:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://example.com/</loc>
<lastmod>2026-06-24</lastmod>
</url>
<url>
<loc>https://example.com/about.html</loc>
<lastmod>2026-06-20</lastmod>
</url>
</urlset>
标签说明
| 标签 | 必需 | 说明 |
|---|---|---|
<loc> | 是 | 页面的完整绝对 URL,必须经过 XML 转义(如 & 写成 &) |
<lastmod> | 否 | 最后修改时间,W3C 日期格式(如 2026-06-24)。准确维护时 Google 会参考 |
<changefreq> | 否 | 更新频率提示。Google 已忽略 |
<priority> | 否 | 相对优先级(0.0–1.0)。Google 已忽略 |
loc 和准确的 lastmod。如果 lastmod 不准确(比如每次构建都改成当天),Google 会逐渐不再信任它。大小限制与 sitemap 索引#
单个 sitemap 文件有两条硬性限制:
- 最多 50,000 个 URL
- 未压缩时文件大小不超过 50MB
超出限制时,需要拆分成多个 sitemap,再用一个 sitemap 索引文件(sitemap index)统一组织。索引文件以 <sitemapindex> 为根元素:
<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap>
<loc>https://example.com/sitemap-articles.xml</loc>
<lastmod>2026-06-24</lastmod>
</sitemap>
<sitemap>
<loc>https://example.com/sitemap-products.xml</loc>
<lastmod>2026-06-22</lastmod>
</sitemap>
</sitemapindex>
即使没有超出限制,按内容类型拆分(文章、产品、分类等)也是好做法:它让 Search Console 的覆盖率报告能按类型查看收录情况,更容易定位问题。一个 sitemap 索引文件本身最多可引用 50,000 个 sitemap。
sitemap.xml.gz)。50MB 的限制针对的是解压后的大小,所以压缩主要节省传输带宽。大型 sitemap 推荐压缩。扩展类型:图片、视频、新闻#
标准 sitemap 之外,针对特定内容类型还有专门的扩展命名空间,可以提供额外的元数据。
| 扩展 | 命名空间用途 | 适用场景 |
|---|---|---|
| 图片 sitemap | 声明页面中的图片信息 | 图片是重要内容的站点(图库、电商) |
| 视频 sitemap | 提供视频时长、缩略图、标题等 | 有视频内容、想进视频搜索结果 |
| 新闻 sitemap | 提供发布时间、标题等新闻元数据 | 已加入 Google News 的新闻站点 |
以图片 sitemap 为例,在 <url> 条目中嵌入图片信息:
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">
<url>
<loc>https://example.com/gallery.html</loc>
<image:image>
<image:loc>https://example.com/photo-1.webp</image:loc>
</image:image>
</url>
</urlset>
多语言 sitemap 与 hreflang#
多语言网站可以直接在 sitemap 中声明每个页面的语言版本对应关系,这是配置 hreflang 的三种方式之一(另两种是 HTML <link> 标签和 HTTP 响应头)。在 sitemap 中配置的好处是集中管理、便于批量维护。
做法是用 xhtml:link 元素,为每个 URL 列出它所有的语言版本(包括自身):
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<url>
<loc>https://example.com/zh/about.html</loc>
<xhtml:link rel="alternate" hreflang="zh"
href="https://example.com/zh/about.html"/>
<xhtml:link rel="alternate" hreflang="en"
href="https://example.com/en/about.html"/>
<xhtml:link rel="alternate" hreflang="x-default"
href="https://example.com/en/about.html"/>
</url>
</urlset>
注:本站当前只有中文版本,但目录结构(/articles/zh/...)已为多语言预留,未来加入其他语言时可直接在 sitemap 中补充 hreflang 关系。
如何生成 sitemap#
根据网站规模和技术栈,生成 sitemap 有几种主流方式:
| 方式 | 适用场景 | 说明 |
|---|---|---|
| CMS 插件 | WordPress 等 | Yoast SEO、Rank Math 等自动生成并维护 |
| 框架内置 | Next.js、Astro、Hugo 等 | 构建时自动生成,与页面同步 |
| 在线工具 | 小型静态站 | 抓取站点生成,一次性或定期手动更新 |
| 构建脚本 | 自定义静态站 | 遍历页面文件,自动产出 XML |
对像 MagicSEO 这样的纯静态站,最可靠的做法是写一个构建脚本:遍历文章目录,读取每个页面的路径和文件修改时间,自动输出 sitemap.xml。这样新增文章时 sitemap 会自动更新,不会遗漏,lastmod 也始终准确。
如何提交 sitemap#
生成 sitemap 后,需要让搜索引擎知道它的存在。有两种主要方式,建议两者都做:
1. 在 robots.txt 中声明
在 robots.txt 中加一行 Sitemap 指令,所有支持的爬虫都会自动发现:
User-agent: *
Disallow:
Sitemap: https://example.com/sitemap.xml
2. 在 Google Search Console 提交
- 登录 Google Search Console,选择你的资源(站点)。
- 在左侧菜单点击"站点地图"(Sitemaps)。
- 在"添加新的站点地图"输入框中填入 sitemap 路径(如
sitemap.xml),点击提交。 - 提交后等待 Google 处理,状态会显示"成功"以及已发现的 URL 数量。
Bing Webmaster Tools 的提交流程类似。提交后不需要反复重新提交——只要 sitemap 内容更新,搜索引擎会按自己的节奏重新抓取这个文件。
更多细节参见 Google 官方文档:构建并提交站点地图。
在 Search Console 监控#
提交后,Search Console 的"站点地图"报告和"网页"(索引)报告能帮你监控 sitemap 的健康状况:
- 读取状态:确认 sitemap 能被成功读取,没有解析错误或无法访问。
- 已发现 URL 数:与你预期的页面数量对比,差距过大说明可能有遗漏或格式问题。
- 覆盖率:在"网页"报告中按"由站点地图提交"过滤,查看其中有多少已收录、多少被排除及排除原因。
重点关注"已提交但未收录"的页面——这通常指向内容质量、重复或规范问题,而不是 sitemap 本身的问题。
常见错误#
| 错误 | 后果 | 修正 |
|---|---|---|
| 放入 noindex / 被屏蔽的 URL | "已提交但被排除"告警,降低信任度 | 只放可收录的规范 URL |
| 使用相对 URL | sitemap 无效或解析失败 | <loc> 必须是完整绝对 URL |
| URL 未做 XML 转义 | 解析错误(尤其含 & 的参数 URL) | & 写成 & |
| lastmod 造假(每次都改) | Google 不再信任 lastmod | 仅在内容真正变化时更新 |
| 混入非规范版本 | 规范信号冲突 | 每个内容只放 canonical 版本 |
| 新增页面忘记更新 sitemap | 新页面发现延迟 | 用脚本/插件自动生成 |
本站的 sitemap 策略#
MagicSEO 是纯静态内容站,页面规模在数百以内,远低于 50,000 的上限,因此采用单文件 sitemap 即可:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://magic-seo.com/</loc>
</url>
<url>
<loc>https://magic-seo.com/articles/zh/technical-seo/sitemap.html</loc>
<lastmod>2026-06-24</lastmod>
</url>
</urlset>
articles/ 目录自动生成:只收录返回 200 的最终页面,lastmod 取自文件实际修改时间,URL 全部为绝对路径且与 canonical 一致。sitemap 地址同时写入 robots.txt 并在 Search Console 提交。目录结构已按语言分层(/zh/),未来扩展多语言时可无缝加入 hreflang。配置清单#
- sitemap.xml 可通过绝对 URL 访问,返回 200
- 只包含可收录的规范 URL(200、允许索引、canonical 指向自身)
- 所有 loc 为完整绝对 URL,并做 XML 转义
- lastmod 真实反映内容修改时间
- 单文件不超过 50,000 URL / 50MB,否则用 sitemap 索引
- 不包含 changefreq / priority(Google 已忽略)
- robots.txt 中声明 Sitemap 地址
- 已在 Google Search Console 提交
- 多语言站点配置了 hreflang 且双向对应
- 新增页面时 sitemap 自动更新
常见问题#
小网站也需要 sitemap 吗?
如果你的网站只有几十个页面、内部链接结构清晰,Google 通常能自己发现所有页面,sitemap 的作用有限。但提交 sitemap 没有坏处:它能加快新页面的发现、帮助 Google 了解页面的更新时间,还能在 Search Console 中提供收录覆盖率报告。对绝大多数网站,提供一个 sitemap 都是推荐做法。
sitemap 里的页面一定会被收录吗?
不一定。sitemap 只是帮助搜索引擎发现 URL,它是一个发现信号,不是收录保证。页面能否被收录仍然取决于可访问性、是否允许索引、内容质量和规范信号。把 URL 放进 sitemap 不能让一个低质量或被 noindex 的页面被收录。
一个 sitemap 文件最多能放多少 URL?
单个 sitemap 文件最多包含 50,000 个 URL,且未压缩时文件大小不超过 50MB。如果超出这个限制,需要拆分成多个 sitemap 文件,再用一个 sitemap 索引文件(sitemap index)把它们组织起来。
changefreq 和 priority 标签还有用吗?
Google 已经明确表示忽略 changefreq 和 priority 标签,它会根据实际抓取数据自行判断页面的更新频率和重要性。lastmod 标签如果准确维护,Google 仍会参考。因此现代 sitemap 通常只需要保留 loc 和准确的 lastmod,不必纠结 changefreq 和 priority。