【问题标题】:Generating xml sitemap for dynamic routes in Nuxt app在 Nuxt 应用程序中为动态路由生成 xml 站点地图
【发布时间】:2020-06-07 18:50:44
【问题描述】:

所以我目前正在为一个具有多个店面的网站实施站点地图。

我使用nuxt sitemap module 为静态页面生成了一个/sitemap/sitemap.xml 文件,例如主页、条款和条件以及隐私政策。

现在网站还包含每个店面的动态路线,例如:mysite.com/store1 & mysite.com/store2

当前的任务是为每个商店创建一个/sitemap.xml,所以最终结果类似于:mysite.com/store1/sitemap.xml

此站点地图将包含与商店相关的所有内容,包括每个产品的动态子路线。

我目前不知道有任何可能的方法来做到这一点,我已经搜索了很多,但我找不到任何关于此的内容。有什么想法吗?

【问题讨论】:

    标签: vue.js seo nuxt.js xml-sitemap


    【解决方案1】:

    您可以按如下方式创建站点地图索引:

    {
      sitemap: {
        hostname: 'https://example.com',
        path: '/sitemap.xml',
        sitemaps: [
          {
            path: '/sitemap/sitemap.xml',
          },
          {
            path: '/store1/sitemap.xml',
            exclude: ['/**'],
            routes: () => { /* return array of url for store #1 */ }
          },
          {
            path: '/store2/sitemap.xml',
            exclude: ['/**'],
            routes: () => { /* return array of url for store #2 */ }
          }
        ]
      }
    }
    

    你会得到这样的结果:

    • /sitemap.xml => 站点地图索引(爬虫的入口点)
    • /sitemap/sitemap.xml => 所有静态路由
    • /store1/sitemap.xml => 仅适用于商店 #1 的动态路由
    • /store2/sitemap.xml => 仅适用于商店 #2 的动态路由

    【讨论】:

    • 看起来不错,但主要问题是,商店条目(store1、store2、myStore3...)的数量是未知的,并且它们经常增加/减少,并且随机名称也不同。 @Nicolas Pennec
    • 一定要加上这个:exclude: ['/**'],因为静态路由和动态路径合并...
    【解决方案2】:

    试试这个,它对我有用

      sitemap: {
        path: '/sitemap.xml',
        hostname: process.env.BASE_URL,
        cacheTime: 1000 * 60 * 15,
        gzip: true,
        generate: false,
        sitemaps: [
          {
            path: '/sitemap/sitemap.xml',
          },
          {
            path: '/store1/sitemap.xml',
            exclude: [],
            routes: async () => {
                let apiUrl = 'your site url' // or API url
                const { data } = await axios.get(`${apiUrl}store1`)
                return data.data.map(v => `/${v.id}`)
              }
          },
          {
            path: '/store2/sitemap.xml',
            exclude: [],
            routes: async () => {
                let apiUrl = 'your site url' // or API url
                const { data } = await axios.get(`${apiUrl}store2`)
                return data.data.map(v => `/${v.id}`)
              }
          },
          {
            path: '/store3/sitemap.xml',
            exclude: [],
            routes: async () => {
                let apiUrl = 'your site url' // or API url
                const { data } = await axios.get(`${apiUrl}store3`)
                return data.data.map(v => `/${v.id}`)
              }
          },
        ]
      }
    

    【讨论】:

    • 谢谢@Jimmy Kiarie,但是如果我不知道那里有多少家商店以及它们的名字怎么办?有很多动态命名的商店(不是 store1、store2、store3 - 这是一个示例,抱歉)
    猜你喜欢
    • 1970-01-01
    • 2020-08-12
    • 2020-03-17
    • 2021-02-21
    • 1970-01-01
    • 1970-01-01
    • 2016-08-29
    • 2022-11-21
    • 2010-12-22
    相关资源
    最近更新 更多