出海独角兽
Search Console 提交 sitemap 失败,我用 next-sitemap 补上了
首次提交后列表显示错误。我安装 next-sitemap,写入配置文件和 postbuild,把缺失的生成链路补上。

我把站点加进 Search Console 以后,接着去交 sitemap。页面很快提示站点地图已提交,列表里却出现了一项错误,已发现的网页数是 0。
这一步我当时没走通。原因很直接,我提交了一个站点地图地址,网站上却还没有 sitemap 文件。Google 收到了这个地址,没有文件可读。
我的项目是 Next.js,于是后面用了 next-sitemap。我安装包,在项目根目录新建 next-sitemap.config.js,再把 postbuild 加到 package.json。这条技术路径来自我当时的实际项目,正文不会换成 App Router 的 sitemap.ts。
改完还要重新构建和部署,让线上真的出现 sitemap.xml 和 robots.txt,然后再回 Search Console 重新提交。我的飞书原记录停在配置 postbuild 这一步,没有保存重部署后的线上文件和 Search Console Success 页面。因此这篇只写到修复方案已配好,不写成 Google 已经读取成功。
第一次提交后,列表显示一项错误
我在 Search Console 左侧打开「站点地图」,页面上方有「添加新的站点地图」输入框。

填完地址并提交后,Search Console 弹出「已成功提交站点地图」。这句话很容易让人松一口气,它当时只表示提交动作完成了。

等我看下面的「已提交的站点地图」,这条记录的状态是「1 项错误」,已发现的网页和视频都是 0。

我当时确认的原因是网站还没生成 sitemap。Google 的当前说明也把文件不存在、404 列为 sitemap 无法抓取的一类原因。
用 next-sitemap 生成文件
我在项目目录打开终端,安装 next-sitemap。
npm i -D next-sitemap

接着在项目根目录新建 next-sitemap.config.js。我当时的配置开启了 generateRobotsTxt,把 sitemapSize 设为 5000,并排除 API、404 和 500 路径。
/** @type {import('next-sitemap').IConfig} */
module.exports = {
siteUrl: 'https://www.yourdomain.ink',
generateRobotsTxt: true,
sitemapSize: 5000,
exclude: ['/api/*', '/404', '/500'],
}

siteUrl 要换成你实际对外的主站域名。如果正式地址使用 www,配置里就保持同一种写法。这里的排除项来自我当时的项目,你要按自己真实路由调整,不要直接把示例当成通用答案。
把 next-sitemap 接到构建后
后面还有一步很关键。我在 package.json 的 scripts 里加了 postbuild。
{
"scripts": {
"build": "next build",
"postbuild": "next-sitemap"
}
}

next-sitemap 的项目文档现在仍推荐这种接法。项目执行 next build 后,postbuild 再运行 next-sitemap。
重部署以后,先看线上文件
配置写完还留在本地,Search Console 当然读不到。后面要让部署平台重新构建项目,再直接打开正式域名下的 /sitemap.xml 和 /robots.txt。
两个地址能打开,内容里的域名和路径也正确,再回 Search Console 重新提交 sitemap。Google 官方当前也建议先把 sitemap 放到网站,确保 Google 可以访问,然后在 Sitemaps 报告里提交地址。
我这次留下的飞书截图没有覆盖这一步的最终页面。所以,我不能把它写成线上 sitemap.xml 已经返回正常,也不能写 Search Console 已经显示 Success。我能确认的最后一步,是 next-sitemap.config.js 和 postbuild 都已经写进项目。