可以用用试试:# Sitemap 生成规范(通用)
供 AI / Coding Agent 生成 Sitemap 时使用。按需替换占位符(如 `
example.com`、技术栈名)。
---
## 任务
根据项目中的页面列表,生成符合 sitemaps.org 协议的 XML Sitemap,并在 robots.txt 中声明。
---
## 一、协议要点
| 项目 | 规范 |
|------|------|
| 单 Sitemap 限制 | ≤50,000 URL,≤50MB(未压缩) |
| Sitemap Index | 超过限制时拆分,主索引引用子 Sitemap |
| 编码 | UTF-8 |
| URL 格式 | 完整 URL,同一 host,含 `https://` |
| 必选标签 | `<loc>` |
| 可选标签 | `<lastmod>`、`<changefreq>`、`<priority>` |
---
## 二、字段要求
| 字段 | 说明 | 建议 |
|------|------|------|
| url | 完整 URL | `
example.com/path` |
| lastModified | 页面最后修改时间 | 使用页面 metadata,格式 ISO 8601;无数据时用 `YYYY-MM-DD` 或省略 |
| changeFrequency | 更新频率 | 首页 `daily`,列表页 `weekly`,内容页 `monthly` |
| priority | 相对重要性 | 首页 1.0,聚合页 0.9,内容页 0.7–0.8,其他 0.5–0.6 |
### lastmod 细节
- **必须准确**:应为页面实际修改时间,而非 sitemap 生成时间。Google 要求可验证;Bing 统计约 18% 的 sitemap 因 lastmod 错误被忽略。
- **格式**:W3C Datetime(`YYYY-MM-DD` 或 `YYYY-MM-DDTHH:MM:SS+TZD`),如 `2025-01-15`、`2025-01-15T14:30:00+08:00`。
- **避免**:用 `new Date()` 作为 lastmod,会导致所有 URL 时间相同,搜索引擎可能忽略。
- **适用**:内容更新、结构化数据变更、重要链接变更时更新 lastmod。
### changefreq / priority
- **changefreq**:仅为提示,不直接决定爬取频率。常用值:`always`、`hourly`、`daily`、`weekly`、`monthly`、`yearly`、`never`。
- **priority**:0.0–1.0,表示相对重要性,**不影响排名**;重要页面设高值,避免全部相同。
---
## 三、架构与拆分
### 单 Sitemap
- URL ≤50,000 时,直接生成 `/sitemap.xml` 即可。
### Sitemap Index(多子 Sitemap)
- URL 超过限制时,按类型或语言拆分,主索引引用子 Sitemap。
- 示例拆分:`/sitemap/posts.xml`、`/sitemap/pages.xml`、`/sitemap/zh.xml`、`/sitemap/en.xml`。
- 主索引输出 `/sitemap.xml` 或 `/sitemap-index.xml`,其中每项为 `<sitemap><loc>...</loc></sitemap>`。
### 多语言站点
- 按 locale 拆分:`/sitemap/zh.xml`、`/sitemap/en.xml`。
- 或按内容类型 + 语言:`/sitemap/zh-posts.xml`、`/sitemap/en-posts.xml`。
---
## 四、实现方式
| 技术栈 | 实现位置 / 方式 |
|--------|-----------------|
| Next.js App Router | `app/sitemap.ts` 导出 `MetadataRoute.Sitemap` 或 `generateSitemaps` |
| Next.js Pages Router | `pages/sitemap.xml.ts` 或 `getServerSideProps` 返回 XML |
| Astro | `src/pages/sitemap-index.xml.ts` 或 `@astrojs/sitemap` |
| Vite / 静态构建 | 构建脚本生成 `public/sitemap.xml` |
| 其他 | 生成静态 `/sitemap.xml` 或通过 API 动态返回 XML |
### 路由排除
- 若项目有 i18n / middleware 重定向,需排除 sitemap 路径,避免被重定向。示例(Next.js):`'/((?!api|_next|sitemap|sitemap-index|.*\\..*).*)'`。
---
## 五、页面范围
### 需包含
- 首页:`/`
- 各语言/区域首页(如 `/zh`、`/en`)
- 所有可被索引的内容页、列表页、分类页
### 需排除
- `/api/*`、`/admin/*`、`/_next/*`
- 静态资源(图片、JS、CSS 等)
- 登录、后台、草稿等不希望被索引的页面
---
## 六、数据源与维护
- **单一数据源**:URL 列表从配置、CMS 或 metadata 读取,避免在 sitemap 中硬编码。
- **多类页面**:工具页、博客页、营销页等可合并为同一数组后统一生成。
- **新增页面**:只在数据源中添加,sitemap 自动更新;避免多处维护导致遗漏。
---
## 七、robots.txt
在 robots.txt 中增加:
```
Sitemap:
example.com/sitemap.xml
```
多 Sitemap 时,只需声明主索引即可。
---
## 八、输出格式
### 单 Sitemap 示例
```xml
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="
www.sitemaps.org">
<url>
<loc>
example.com/</loc>
<lastmod>2025-01-15</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>
example.com/page</loc>
<lastmod>2025-01-10</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
</urlset>
```
### Sitemap Index 示例
```xml
<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="
www.sitemaps.org">
<sitemap>
<loc>
example.com/sitemap/pages.xml</loc>
<lastmod>2025-01-15</lastmod>
</sitemap>
<sitemap>
<loc>
example.com/sitemap/posts.xml</loc>
<lastmod>2025-01-14</lastmod>
</sitemap>
</sitemapindex>
```
---
## 九、常见问题
| 问题 | 原因 / 处理 |
|------|-------------|
| sitemap 404 | 构建失败、路径错误、未正确导出;检查路由与部署 |
| 页面缺失 | URL 未加入数据源、被过滤或排除 |
| lastmod 异常 | 避免 `new Date()`,改用页面 metadata 中的 `modifiedDate` |
| Google 不索引 | 在 Search Console 提交 sitemap,检查 Coverage 与 robots |
| 中英文 URL 不一致 | 统一数据源,按 locale 生成时共用同一列表 | //
@燕耳Firenze: 哟西 太cool了🐮