跳到主内容
返回全部文章

出海独角兽

Search Console 提交 sitemap 失败,我用 next-sitemap 补上了

首次提交后列表显示错误。我安装 next-sitemap,写入配置文件和 postbuild,把缺失的生成链路补上。

Search Console 提交 sitemap 失败,我用 next-sitemap 补上了封面

我把站点加进 Search Console 以后,接着去交 sitemap。页面很快提示站点地图已提交,列表里却出现了一项错误,已发现的网页数是 0。

这一步我当时没走通。原因很直接,我提交了一个站点地图地址,网站上却还没有 sitemap 文件。Google 收到了这个地址,没有文件可读。

我的项目是 Next.js,于是后面用了 next-sitemap。我安装包,在项目根目录新建 next-sitemap.config.js,再把 postbuild 加到 package.json。这条技术路径来自我当时的实际项目,正文不会换成 App Router 的 sitemap.ts

改完还要重新构建和部署,让线上真的出现 sitemap.xmlrobots.txt,然后再回 Search Console 重新提交。我的飞书原记录停在配置 postbuild 这一步,没有保存重部署后的线上文件和 Search Console Success 页面。因此这篇只写到修复方案已配好,不写成 Google 已经读取成功。

第一次提交后,列表显示一项错误

我在 Search Console 左侧打开「站点地图」,页面上方有「添加新的站点地图」输入框。

我当时进入 Search Console 的站点地图页

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

Search Console 提示站点地图已提交

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

首次提交后站点地图列表显示一项错误

我当时确认的原因是网站还没生成 sitemap。Google 的当前说明也把文件不存在、404 列为 sitemap 无法抓取的一类原因。

用 next-sitemap 生成文件

我在项目目录打开终端,安装 next-sitemap

npm i -D next-sitemap

我当时在项目里安装 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'],
}

我当时的 next-sitemap 配置文件

siteUrl 要换成你实际对外的主站域名。如果正式地址使用 www,配置里就保持同一种写法。这里的排除项来自我当时的项目,你要按自己真实路由调整,不要直接把示例当成通用答案。

把 next-sitemap 接到构建后

后面还有一步很关键。我在 package.jsonscripts 里加了 postbuild

{
  "scripts": {
    "build": "next build",
    "postbuild": "next-sitemap"
  }
}

我当时在 package.json 加入 postbuild

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.jspostbuild 都已经写进项目。

参考资料

出海独角兽

继续记录海外账户、支付接入,以及真实项目里的操作经验。

继续看文章