Nuxt3动态站点地图sitemap的配置

作者:linkyang
标签:
发布时间:2025年03月04日 22:51:05
更新时间:2025年03月04日 22:51:05

sitemap.xml 是一个 XML 格式的文件,主要作用是帮助搜索引擎(如 Google、Baidu等)更高效地抓取和索引网站的页面。即使没有 sitemap.xml,搜索引擎也能通过链接抓取页面,但有它会更高效。sitemap.xml 是网站与搜索引擎沟通的“地图”,虽不直接影响排名,但能显著提升抓取效率和收录率,是 SEO 基础建设中不可或缺的一环。下面我将记录如何在nuxt3中使用@nuxtjs/sitemap插件动态生成站点地图。

在nuxt3中安装@nuxtjs/sitemap模块

sh
npx nuxi module add @nuxtjs/sitemap

更推荐使用nuxi命令,如果使用npm等工具安装的话则还需要手动导入模块。

在nuxt.config.ts中配置使用@nuxtjs/sitemap

json
 modules: [
     //.......
     '@nuxtjs/sitemap'
     //.......
 ],

配置sitemap

前端技术更新较快,每个版本可能使用方式不一样,我这里使用的是nuxtjs/sitemap@7.2.6的版本,也是我目前在编写博客时该插件的最新版本,配置方式较多,这里主要记录动态去生成站点目录。

将后台接口放置在sitemap下的sources当中例如:

js
//sitemap配置
  sitemap: {
      sources: [
      'https://api.example.com/pages/urls' //这里是你的后台请求路径
    ]
  },

这样配置以后在访问你域名下的sitemap.xml文件时将会自动请求后台接口,我们也可以为这个请求携带参数,将路径使用数组包裹,第二个数组对象中放需要携带的参数,例如:

js
//sitemap配置
  sitemap: {
     sources: [
      ['https://api.example.com/pages/urls', { headers: { Authorization: 'Bearer <token>' } }]
    ]
  },

实现动态站点接口

我项目中集成了prisma,所以我这里直接使用prisma来查出我所有博客的id,关于prisma这里不做过多赘述,有时间单独讲一讲如何使用。

在查出我所有的博客id后就是组装数据了,在#sitemap/types'中导出类型SitemapUrlInput来获取ts语法提示,由于我的每一篇博客访问路径就是*/articleDetails/** 加上文章的id,所以数据处理起来也很简单,这里我贴出我的代码示例仅供参考:

  • 获取所有博客的id和创建时间
ts
//获取所有博客的id和时间集合
export async function getSiteMap() {
  const siteMap = await prisma.blogs.findMany({
    select: {
      id: true,
      createTime: true,
    },
    orderBy: {
      createTime: 'desc',
    }
  });
  return siteMap;
}
  • 拼装站点数据
ts
import type { SitemapUrlInput } from '#sitemap/types'

export async function getSiteMap(event: H3Event) {
  const siteMap = await blogModel.getSiteMap();
  const urls = siteMap.map((item) => {
    return {
      loc: `/articleDetails/${item.id}`,
      lastmod: item.createTime as Date,
      _sitemap: 'page'
    }
  });

  if (!siteMap.length) {
    return [];
  }
  return urls satisfies SitemapUrlInput[]
}

在编写controller的时候注意编写一个GET接口

完成后打开项目在项目根路径下访问sitemap.xml即可验证是否成功

图片
这样一来搜索引擎每一次访问我的站点地图都会根据我数据库的文章动态生成!

登录后可查看并参与评论

Gitee 登录

目录导航

在nuxt3中安装@nuxtjs/sitemap模块
配置sitemap
实现动态站点接口