如何为任何网站创建 XML 站点地图

XML 站点地图是一个存放在网站根目录下的普通文件,其中列出了你希望搜索引擎发现的 URL。它不能强制页面被收录,也不是排名因素,但对于新网站、大型网站以及深藏在导航层级中的页面来说,它是你能掌控的最可靠的发现信号之一。本指南将介绍:sitemap.xml 里有什么、哪些可选标签值得填写而哪些会被 Google 忽略、会让搜索引擎默默丢弃站点地图自身主机之外所有 URL 的“单一主机规则”,以及如何用免费的 XML 站点地图生成器构建一份合规文件并提交到 Google Search Console。

什么是 XML 站点地图?

XML 站点地图是一个采用 UTF-8 编码的 XML 文件,通常是网站根目录下的 sitemap.xml,遵循 sitemaps.org 定义的协议——这是 2006 年推出的开放标准,由 Google、Yahoo 和 Microsoft 共同支持。它的格式非常精简:每个 URL 放在一个 <url> 条目里,内含一个 <loc> 子元素,其余全部可选。

<?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-11-02</lastmod>
  </url>
  <url>
    <loc>https://example.com/pricing/</loc>
    <lastmod>2026-10-18</lastmod>
  </url>
</urlset>

搜索引擎会读取这份清单,与自己已经抓取过的内容比对,然后抓取新增的部分。当基于链接的发现机制薄弱时,站点地图的作用最为明显:一个没有任何外链的新站、庞大的目录站、层级很深的存档,或是刚完成迁移的网站。

lastmod、changefreq 和 priority:该填什么、该跳过什么

大多数教程展示的站点地图都塞满了 <lastmod>、<changefreq> 和 <priority> 标签。这三者中有两个在 Google 那里纯属累赘,第三个一旦造假还会帮倒忙。

<lastmod> —— 要填,但只填真实日期。取值采用 W3C Datetime 格式,写成简单的 YYYY-MM-DD 就行。Google 只有在 lastmod 取值“持续且可验证地准确”时,才会将其用于抓取调度;协议要求的是页面最后一次被修改的日期——而不是站点地图生成的日期。如果你的 CMS 记录了真实的修改时间,就填上;如果每次重新构建都会给所有 URL 盖上当天的日期,那就省略这个标签。

<changefreq> —— 跳过。协议把 daily、monthly 这类取值定义为提示而非指令,Google 的文档说得很直白:“Google 会忽略 <priority> 和 <changefreq> 的值。”

<priority> —— 同样跳过。取值范围是 0.0 到 1.0,表示相对于你自己网站上其他 URL 的优先程度。Google 会忽略它们,而把所有 URL 都设成 1.0 则是让这个标签彻底失效的最常见做法。

单一主机规则

站点地图只能包含来自单一主机的 URL,它自身的存放位置决定了哪些 URL 符合条件。位于 https://www.example.com/sitemap.xml 的站点地图可以列出 https://www.example.com/… 的 URL,但不能列出 https://example.com/…(不带 www 就是另一个主机)、https://blog.example.com/…(子域名属于不同的主机),更不能列出其他域名。外来 URL 会被直接丢弃:文件照常被抓取,这些 URL 却被置之不理。当你域名的 www 与非 www 形式都能解析时,站点地图文件本身应放在你选定作为规范地址的那个主机上。

因此,先确定你的规范主机——带 www 或不带 www,且仅使用 HTTPS——让每个 <loc> 都严格采用这一形式,并把站点地图放在网站根目录:协议会把站点地图的作用范围限定在它所在的路径内,所以 /catalog/sitemap.xml 只能覆盖 /catalog/ 下的 URL。

如何一步步创建 XML 站点地图

第 1 步:收集规范 URL

把每个你希望被收录的 URL 以最终的规范形式列出来——来源可以是 CMS 导出数据、统计分析中的热门页面,或一次站点爬取的结果。如果网站全新且规模很小,比如二十来个页面,最快的来源就是你自己的导航:把每个菜单走一遍,逐一手动列出每个页面。收录返回 200 且可被索引的页面;排除重定向、404、noindex 页面和带参数的重复页。重定向和死链会浪费抓取预算;一份简短干净的清单胜过一份冗长混杂的清单。

第 2 步:验证有风险的 URL 能否干净访问

至少检查所有早于上一次迁移或改版的 URL,再抽查其余 URL 中的一部分——死链最喜欢藏在老 URL 里。重定向链检查器一次只处理一个 URL:粘贴一个 URL,点击 Check redirects(检查重定向),确认它在规范主机上返回 200 且没有多余的跳转。凡是不满足这一点的 URL,都替换成它的最终目标地址。

第 3 步:用免费的 XML 站点地图生成器生成文件

打开 XML 站点地图生成器,把你的 URL 粘贴进 Your URLs(你的 URL)输入框,每行一个绝对 URL(最多 500 个)。接着设置三个选项。Last modified date(最后修改日期)下拉框默认是 Use today(使用今天)——除非所有页面今天确实都更新过,否则请切换到 Omit lastmod(省略 lastmod),因为工具会把同一个日期盖到整份清单上;只有当页面恰好在某个日期统一变更时才选 Custom date(自定义日期)。在 Change frequency(更新频率)和 Priority(优先级)下,按前文所说的理由选择 Omit changefreq(省略 changefreq)和 Omit priority(省略 priority)。点击 Generate sitemap.xml(生成 sitemap.xml)并查看检查结果:工具会跳过重复的行、拒绝格式错误的 URL,并在清单混入来自不同主机的 URL 时标记为错误而非警告——这正是提醒你先修正清单的信号。各项检查通过后,使用 Copy code(复制代码)或 Download sitemap.xml(下载 sitemap.xml)——得到的是已完成实体转义、命名空间正确的 XML,可直接原样上传。

URL 超过 500 个?把清单分块,分别生成并上传 sitemap-1.xml、sitemap-2.xml 等文件,再用一个站点地图索引指向它们,并在 Search Console 中提交索引——而不是各个子文件:

<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <sitemap>
    <loc>https://yourdomain.com/sitemap-1.xml</loc>
  </sitemap>
  <sitemap>
    <loc>https://yourdomain.com/sitemap-2.xml</loc>
  </sitemap>
</sitemapindex>

第 4 步:上传到网站根目录并在 robots.txt 中声明

首先确认你到底能不能上传文件。托管型平台会替你维护站点地图:Shopify、Wix 和 Squarespace 都会在 /sitemap.xml 路径下自动提供站点地图。如果你用的正是这类平台,跳到第 5 步直接提交该 URL 即可。否则,通过 SFTP 或主机提供的文件管理器,把文件上传到 https://yourdomain.com/sitemap.xml,然后在 robots.txt 中声明它:

Sitemap: https://yourdomain.com/sitemap.xml

这条指令独立于任何 User-agent 块,并且可以出现多次。如果你本来就要重写 robots.txt,免费的 Robots.txt 生成器生成的文件会自带 Sitemap 行——同时要确认 robots.txt 没有屏蔽你列出的页面,因为站点地图无法推翻 disallow 规则。

第 5 步:提交到 Google Search Console

robots.txt 帮你被发现;Search Console 给你诊断数据。如果你的网站还没有加入 GSC,先添加——Domain(网域)资源(涵盖所有子域名和两种协议)或 URL prefix(网址前缀)资源(仅限一个精确前缀)——并完成所有权验证。然后打开 Indexing → Sitemaps(索引 → 站点地图);资源的地址已预先填好,你只需输入 sitemap.xml 并点击 Submit(提交)。一天之内,报告就会显示 Google 是否抓取了该文件,以及发现了多少个 URL。重大变更之后记得重新提交。两点说明:旧的 /ping?sitemap= 端点已于 2023 年 6 月退役,不要再自动化 ping;另外,Bing Webmaster Tools 可以从 Search Console 导入你的网站(My Sites → Import)——但导入的是网站本身,不包括你的站点地图提交记录,所以还需要在 BWT 的 Sitemaps 页面单独提交站点地图。

XML 站点地图的常见错误

  • 列出重定向或已失效的 URL。每一个都在浪费抓取预算。生成之前先检查有风险的 URL——至少检查所有早于上一次迁移的 URL。
  • 混用主机。www 和非 www 出现在同一个文件里是最典型的情形——协议会丢弃外来 URL。
  • 用构建日期充当 lastmod。重新生成站点地图并不等于修改了页面。Google 只在取值持续准确时才使用 lastmod——注水的日期只会让它有理由无视你的数据。
  • 包含 noindex 或已作规范化处理的页面。信号自相矛盾:“来抓取这个”和“别收录这个”。
  • 放任站点地图过期。三个月前上线的新板块还没出现在文件里?问题出在站点地图身上,而不是 Google。
  • 用 robots.txt 屏蔽它。一条匹配 /sitemap.xml 的 Disallow: 规则,会让遵守该指令的抓取工具看不到这个文件。

常见问题

我的站点地图需要 changefreq 和 priority 吗?

不需要。Google 的文档明确指出,它会忽略 <priority> 和 <changefreq> 的值。它唯一会参考的可选标签是 <lastmod>,而且仅当日期能被证实与页面实际变更时间相符时才会使用。只写 <loc> URL 再配上真实的 lastmod 日期,才是当今的最佳实践。

一个 sitemap.xml 文件最多能包含多少个 URL?

按照 sitemaps.org 协议,单个站点地图文件最多容纳 50,000 个 URL 或 50 MB(未压缩),以先到者为准——你可以以 sitemap.xml.gz 压缩形式提供它,但上限仍按未压缩大小计算。超出之后,就把清单拆分到多个文件,由一个站点地图索引引用,并在 Search Console 中提交该索引。免费生成器把单个文件限制为 500 个 URL;清单更长时,按块生成 sitemap-1.xml、sitemap-2.xml,再按第 3 步的方法用索引包起来。

sitemap.xml 应该放在服务器的什么位置?

放在域名的根目录,让它可以通过 https://yourdomain.com/sitemap.xml 访问。位置还决定内容范围:子目录中的站点地图只能列出该路径下的 URL,而且永远只能列出自身主机的 URL——当 www 和非 www 都能解析时,文件应放在你的规范主机上。放在规范主机的根目录可以一并避开所有这些问题。

我的建站平台会自动生成站点地图吗?多久更新一次?

很可能会。WordPress 从 5.5 版本起就会在 /wp-sitemap.xml 自动生成站点地图,Rank Math、Yoast 等 SEO 插件还会用自己的索引替换它(通常是 /sitemap_index.xml)。Shopify、Wix 和 Squarespace 会自动维护 /sitemap.xml。如果由 CMS 维护,就无需重新生成——只需在 Search Console 中验证,并在插件设置里排除 noindex 的内容类型。如果你是手工构建的文件,那么每当新增或下线重要页面时,就重新生成并重新提交。

提交之后收录需要多久?有保证吗?

抓取报告通常会在一天内更新。收录是另一回事:页面可能要过几天到几周才会出现,而且提交不保证任何结果——站点地图只是发现辅助工具,收录仍然取决于抓取预算、内容质量以及 robots.txt 或 noindex 的屏蔽情况。发现的 URL 远多于已收录的是正常现象;持续存在的收录问题通常出在页面上,而不是文件里。

Search Console 提示无法抓取我的站点地图,该检查什么?

有三种可能。“Couldn’t fetch”(无法抓取)通常意味着文件没有被正确提供:在浏览器中打开 /sitemap.xml,确认返回 200,然后检查 robots.txt——匹配该路径的 Disallow: 规则会拦截 Googlebot。如果个别 URL 显示 “URL blocked by robots.txt”(该 URL 已被 robots.txt 屏蔽),说明站点地图列出了 robots.txt 禁止的页面;把它们从清单或 robots.txt 中移除。格式错误则意味着 XML 已损坏:检查根元素是否为带 sitemaps.org 命名空间的 <urlset>,以及 & 符号是否已转义为 &amp;。