使用方法
- 把要收录的 URL 逐行粘贴到「URL 列表」框,每行一条。输入框已预置 3 条示例(第 3 条带查询参数,用来演示转义),打开页面即可直接生成。
- 按需设置三个可选参数:lastmod 填 ISO 8601 格式的日期(示例
2026-10-01),留空则不输出该元素;changefreq 从 7 个枚举值里选一个(示例 weekly);priority 填 0.0 到 1.0(示例 0.8)。 - 点「生成 sitemap.xml」,或按 Ctrl + Enter,下方输出完整文本。
- 如果某行不是以 http:// 或 https:// 开头、含空格、或超过 2048 个字符,红色提示区会指明第几行、错在哪、怎么改,该行不会进入结果。
- 确认后点「复制结果」,或点「下载 sitemap.xml」保存成 UTF-8 编码的文件,上传到网站根目录即可。
这个XML站点地图生成器能解决什么问题
手工拼 sitemap.xml 最容易在两处翻车:一是 URL 里带查询参数,& 没有写成 &,整份文件过不了 XML 解析;二是行末混进不可见字符或格式不对的行,提交给搜索平台后被整批拒收。这个 XML站点地图生成器把这两类问题都挡在生成之前:每行先过三道校验(协议头、空白字符、2048 字符上限),带行号给出中文错误说明,通过后再统一做 XML 五实体转义,输出的文件可以直接通过 XML 解析器。
典型场景有三个:中小站点改版后要提交一份新的 URL 清单;CMS 不支持自动 sitemap,只有一份导出的 URL 列表;临时给活动页、专题页做一份单独的 sitemap 用 sitemap 索引文件挂到主文件里。本页只负责从 URL 列表生成单份 sitemap 文本——不抓取你的网站确认 URL 是否可达,不做 sitemap 索引文件的拼装,也从 CSV 之类的表格文件里提取 URL 那样的事不归它管。
生成原理与协议规则说明
输出文件遵循 sitemaps.org 0.9 协议,这是 Google、Bing 等搜索引擎共同支持的事实标准。协议对文件的要求可以归纳为三要素加两条上限:
要素一 <loc> 必填:每个 <url> 块必须有且只有一个 <loc>,内容是单个 URL 的规范写法,且必须是 XML 转义后的形式——这是唯一强制转义的位置。XML站点地图生成器对每一行做的就是这道校验加转义的流水线。
要素二 <lastmod> 用 ISO 8601:可选项,格式为 YYYY-MM-DD,或带时间的 YYYY-MM-DDThh:mm:ss 并可带时区后缀(+08:00 或 Z)。本页对输入做同样的正则校验,格式不合规会拒绝而不是原样写进文件——写错的 lastmod 比没有更糟,搜索引擎可能因此低估真实更新时间。
要素三 changefreq 与 priority 可选且只有提示意义:changefreq 只允许 always、hourly、daily、weekly、monthly、yearly、never 这 7 个枚举值;priority 取 0.0 到 1.0,只表示同一站点内页面的相对权重,不会拿来和其他网站比较。需要说明的是,Google 官方文档已注明它会忽略 changefreq 与 priority,lastmod 在内容准确时仍会被使用——所以本页把 lastmod 做成带校验的输入,把 priority 做成可选元素,空值直接不输出。
两条上限:单份 sitemap 解压后不超过 50 MB、不超过 50000 条 <url>。超限时正确做法不是硬塞,而是拆成多份文件再写一个 sitemap 索引文件。转义实现上,五个 XML 实体(& < > " ')必须先替换 & 再替换其余四个,顺序反了会把已经生成的 & 二次转义成 &amp;,这是手写替换逻辑最常见的 bug。
完整示例(数值仅作演示)
示例条件:输入框预置的 3 条 URL,lastmod 2026-10-01、changefreq weekly、priority 0.8。第 3 条 URL 含一个 &,输出里被转义为 &amp;(文件中的真实字符)。生成结果共 21 行、UTF-8 编码下 598 字节:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://liuquan.net/</loc>
<lastmod>2026-10-01</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://liuquan.net/jisuanqi/</loc>
<lastmod>2026-10-01</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://liuquan.net/list?page=2&amp;sort=asc</loc>
<lastmod>2026-10-01</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
</urlset>
转义的体积代价可以量化:一条 47 个字符、含 2 个 & 的 URL,转义后 55 个字符,多出的 8 个字符全部来自两个 &。整个 <url> 块的固定骨架(不含 loc 内容)是 241 字节,这决定了同一条数下文件的最低体积。
转义规则与参数对照表
XML 只有五个预定义实体,逐个对照如下(顺序即替换顺序,& 必须最先):
| 原字符 | 转义后 | 出现的典型位置 |
|---|---|---|
& | & | 查询参数分隔符,URL 里最常见 |
< | < | URL 参数值里极少见,但出现即致命 |
> | > | 同上 |
" | " | 属性值用双引号包裹时必须转义 |
' | ' | 单引号包裹的属性值里必须转义 |
三个可选参数的取值与含义对照:
| 参数 | 允许值 | 留空时 | 说明 |
|---|---|---|---|
| lastmod | YYYY-MM-DD 或带 T 的完整时间加时区 | 不输出该元素 | 格式不合规会被拒绝并指出写法 |
| changefreq | always / hourly / daily / weekly / monthly / yearly / never | 不允许留空(下拉框必有值) | 7 个枚举之外的值协议不允许 |
| priority | 0.0 到 1.0,步长 0.1 | 不输出该元素 | 0.5 是协议文档给出的默认参考值 |
输入范围、边界与上限说明
- 行级三道校验:协议头(http:// 或 https:// 开头的绝对 URL,协议明确要求 loc 不能是相对路径)、空白字符(含行中间的空格与制表符,这类字符肉眼难辨,报错时给出行号)、2048 字符单条上限(协议原文规定 URL 不超过 2048 个字符)。任一道不过,该行不进入结果,其余行照常生成。
- 空行自动跳过:从表格或终端复制出来的列表常带尾随空行,不计入校验也不计入条数。
- 两条文件级上限:条数超过 50000 直接拒绝并提示拆分;输出超过 50 MB(解压后)同样拒绝。实测参考:每条约 50 字符的 URL 加全套可选元素,5 万条约 8.4 MB,距离 50 MB 尚远——单文件通常先撞 50000 条的上限。
- 非 ASCII 字符不转义:中文路径可以直接写入。XML 声明已注明
encoding="UTF-8",解析器按 UTF-8 读取即可,协议只强制那五个实体的转义。 - 协议头之外不做联网检查:404、跳转、HTTPS 证书问题都发现不了,XML站点地图生成器只保证「文件本身合规」这一层,URL 是否真实可达要在站长后台的抓取报告里看。
常见问题
输出里的 & 是错了吗?
不是。你的 URL 里有一个 &,XML 规范要求它在文件里必须写成 &,否则 XML 解析器会把它当成新实体的开头直接报错。搜索引擎读取时会自动还原成原来的 &,提交时不需要手工改回去。
priority 和 changefreq 还有用吗?
对 Google 而言作用有限:官方文档已注明忽略这两个元素。lastmod 不同——只要内容准确就会参与收录判断。所以本页允许这两个参数留空输出更精简的文件,把精力放在把 lastmod 填对上。
URL 超过 50000 条怎么办?
拆成多份 sitemap(每份不超过 50000 条、50 MB),再生成一个 sitemap 索引文件——结构类似,把 <url> 换成 <sitemap>、<loc> 指向各分文件。索引文件本身最多可嵌套一层,不允许索引指向索引。
lastmod 应该填内容更新时间还是文件生成时间?
填该页面内容最后一次实质性变更的时间,不是 sitemap 的生成时间。全站填同一个「今天」等于没提供信息,格式不对还会被解析失败——这也是本页对 lastmod 做正则校验的原因。
需要把全站每个 URL 都放进去吗?
不需要也不建议。只放希望被收录的规范版 URL:带参数的变体、跳转中间页、登录页都应排除;同一内容有多个 URL 时只放规范版那个,否则等于告诉爬虫同一页面有多个副本。
生成的文件放在哪里、怎么告诉搜索引擎?
惯例放在网站根目录命名为 sitemap.xml,然后在 robots.txt 里加一行 Sitemap: https://你的域名/sitemap.xml,或在搜索平台的站长后台直接提交。两种方式任选其一即可,都做也不冲突。
带汉字的 URL 要先做百分号编码吗?
XML 这一层不需要:声明了 UTF-8 后汉字可以直接写。但 HTTP 协议层要求请求行里是编码后的字节,主流搜索引擎对未编码的 IRI 会自行处理,稳妥做法仍是把路径部分按 RFC 3986 百分号编码后再粘进来。
工具会访问我的网站或保存 URL 列表吗?
都不会。校验、转义、生成全部在本页 JavaScript 里完成,没有网络请求,也没有任何存储,刷新页面输入就清空。你可以在开发者工具的 Network 面板核实——点「生成」前后不会出现任何新请求。