ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Sitemap 怎么自动生成

2026/8/4 13:04:03 拓冰建站 浏览量
Sitemap 怎么自动生成 Sitemap 的作用不是让页面“一定被收录”而是告诉搜索引擎这个网站有哪些重要 URL哪些页面更新了哪些页面值得重新抓取。sitemaps.org 的协议说明也明确提到Sitemap 可以为搜索引擎提供页面 URL 和相关元数据但不保证页面一定被搜索引擎收录。当你的站点只有十几个页面时手写sitemap.xml还能接受。一旦你有博客、模板、工具页、集成页、城市页、商品页、文档页Sitemap 就应该自动生成。本文参考了几类官方资料Google Build and Submit a SitemapGoogle What Is a Sitemapsitemaps.org ProtocolNext.js sitemap.xml File ConventionSitemap 应该包含哪些页面Sitemap 不是全站 URL 垃圾桶。应该放进去的是你希望搜索引擎发现、抓取、索引的页面。适合放入首页 核心产品页 博客文章 文档页 模板页 工具页 集成页 分类页 重要专题页 多语言页面不适合放入登录页 后台页面 支付回调 URL 搜索结果页 筛选参数页 重复内容页 草稿页 无索引页面 用户私有页面 临时预览页面Google 的 Sitemap 文档也建议只包含你希望出现在搜索结果中的 URL。每个 URL 要有来源自动生成 Sitemap 的第一步是明确 URL 来源。常见来源静态路由/、/pricing、/about 博客数据库/blog/[slug] 文档系统/docs/[slug] 模板库/templates/[slug] 工具页/tools/[slug] 集成页/integrations/[app-a]/[app-b] 多语言路由/en/...、/zh/...不要在代码里手写一大串 URL。更稳的方式是每类页面都有一个数据源Sitemap 从这些数据源收集“已发布、可索引”的页面。只收录可索引页面自动生成时一定要过滤页面状态。每个内容项至少要有这些字段slug status noindex updated_at locale canonical_url生成时过滤status 必须是 published noindex 不能为 true slug 必须有效 canonical_url 不能指向别的页面 页面不能是私有内容 页面不能是临时预览这一步非常重要。否则你可能把草稿、测试页、重复页、私有页都提交给搜索引擎。XML 字段怎么填标准 Sitemap 里最核心的字段是loc。sitemaps.org 协议要求每个 URL 条目包含loc其他字段如lastmod、changefreq、priority是可选的。常用字段loc完整 URL lastmod页面最后修改时间 changefreq更新频率提示 priority相对优先级提示早期最重要的是loc和lastmod。changefreq和priority不要瞎填。搜索引擎不一定严格使用这些提示错误填写也不会带来神奇加成。Next.js 怎么生成如果你用 Next.js App Router可以用app/sitemap.ts。Next.js 官方文档说明sitemap.(xml|js|ts)是一个特殊文件约定可以用于生成符合 Sitemap XML 格式的文件。一个简化思路import type { MetadataRoute } from next export default async function sitemap(): PromiseMetadataRoute.Sitemap { const baseUrl https://example.com const posts await getPublishedPosts() return [ { url: baseUrl, lastModified: new Date(), }, ...posts.map((post) ({ url: ${baseUrl}/blog/${post.slug}, lastModified: post.updatedAt, })), ] }真实项目里不要把baseUrl写死在多个地方。最好来自环境变量或统一配置。大站要拆分 Sitemapsitemaps.org 协议规定单个 Sitemap 文件最多包含 50,000 个 URL未压缩大小不能超过 50MB。如果你的页面超过这个规模就需要拆分/sitemap.xml /sitemap-posts-1.xml /sitemap-posts-2.xml /sitemap-templates.xml /sitemap-integrations.xml再用 Sitemap index 统一引用这些子 Sitemap。早期站点一般用不到拆分但程序设计时最好留出扩展空间。多语言页面要特别处理如果你有中文、英文、日文等多语言页面Sitemap 不能只放一种语言。需要考虑每种语言是否有独立 URL canonical 是否指向自己 是否需要 hreflang 翻译是否已经发布 不同语言页面是否都可索引不要把未完成翻译或机器翻译草稿直接放进 Sitemap。多语言页面最常见的问题是英文页和中文页互相 canonical 错误或者 Sitemap 里出现大量空壳翻译页。什么时候重新生成Sitemap 不一定要每次请求都实时查数据库。常见策略构建时生成适合静态内容 定时生成适合每天或每小时更新 按需重新验证适合 Next.js ISR 后台任务生成适合大量页面 缓存生成结果适合高访问站点如果内容更新不频繁构建时生成就够了。如果你有大量用户生成内容、模板页或自动生成页面可以用后台任务定期生成并把结果放到对象存储或缓存里。robots.txt 要指向 Sitemap提交 Sitemap 有几种方式robots.txt 中声明 Sitemap Google Search Console 手动提交 站点自动暴露 /sitemap.xmlrobots.txt里可以写Sitemap: https://example.com/sitemap.xml这样爬虫访问 robots.txt 时就能发现 Sitemap。自动化检查自动生成以后还要检查。建议检查是否能访问 /sitemap.xml Content-Type 是否正确 URL 是否都是绝对地址 是否包含草稿和 noindex 页面 lastmod 是否合理 URL 是否返回 200 是否包含重定向 URL 是否混入本地测试域名 是否超过 50,000 URL 或 50MB Search Console 是否能读取Sitemap 不是生成一次就完事。它是 SEO 基础设施需要随着内容系统一起维护。一个最小可用方案独立开发者可以这样做1. 页面数据里加入 status、noindex、updated_at 2. 写一个统一的 getIndexableUrls() 3. 用 app/sitemap.ts 或构建脚本生成 Sitemap 4. 只输出 published 且可索引页面 5. URL 使用生产域名绝对地址 6. robots.txt 指向 /sitemap.xml 7. 提交到 Search Console 8. 每次发布后检查 Sitemap 是否可读这套方案不复杂但可以避免大多数 Sitemap 常见错误。写在最后Sitemap 的核心不是 XML 文件而是“哪些页面值得被搜索引擎发现”的规则。自动生成 Sitemap 时真正重要的是数据源、可索引状态、更新时间、绝对 URL、多语言关系和持续检查。只要这些规则清楚Sitemap 就可以变成稳定的 SEO 基础设施而不是每次上线前手改的文件。下一篇我们继续聊内容分发RSS 有必要做吗。原文链接Sitemap 怎么自动生成 | Harries Blog™