Rain's Blog

nextjs sitemap 的应用

Rain, Wed Jun 26 2024back

站点地图可以增加网站的可见性和体验性, 在 nextjs 中添加站点地图有多种方式。

  1. 如果你的网站足够小,那么可以手动维护一个sitemap.xml文件,将文件至于public目录中。

  2. 自动化,每次打包编译自动生成一份xml文件,同样存放于public目录中。

  3. 使用nextjs自身提供的方法,只要在app目录中创建一个名为sitemap的文件,

export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
    const post ={
        slug:"useing sitemap on nextjs",
        date:"2024/06/26 11:09:25"
    }

    return {
        url: `https://rainc.io/post/${post.slug}`,
        lastModified: new Date(post.date).toISOString(),
        priority: 0.7,
        changefreq: "daily",
    }
}

这样访问https://rainc.io/sitemap.xml就能看到生成xml了。

  1. 如果需要生成多个站点地图文件,可以使用 generateSitemaps 函数,需要注意的是不用去导入generateSitemaps,只要保证文件中有这个方法就行
export async function generateSitemaps() {
  const posts = await getMDXs("/post");

  return posts.map((post) => ({
    url: `https://rainc.io/post/${post.slug}`,
    lastModified: new Date(post.date).toISOString(),
    priority: 0.7,
    changefreq: "daily",
  }));
}

export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
  const sitemapEntries = await generateSitemaps();
  return sitemapEntries;
}

generateSitemaps 可以生成多个站点地图 生产环境使用 product.com/sitemap/1 查看,开发环境使用 dev/sitemap/1.xml 查看。 在next14.0.4的版本中即使注释generateSitemaps也会报错,详情见 github