DEV Community

sium_hossain
sium_hossain

Posted on • Edited on

Generating Sitemap XML for Static and Dynamic (from multiple API endpoint) in Nuxt js

In this article I will talk about how can we build static and dynamic sitemap url from single or multiple endpoint from API

First of all we have to install @nuxtjs/sitemap package by -

npm i @nuxtjs/sitemap 
Enter fullscreen mode Exit fullscreen mode

@nuxtjs/sitemap
Then in nuxt.config.js we have to add this module by -

modules: [ //other modules.... '@nuxtjs/sitemap' ], 
Enter fullscreen mode Exit fullscreen mode

Here is the full code -

const axios = require('axios') export default{ ....... sitemap: [ { path: '/public/product/sitemap_index.xml', exclude: [ '/admin/**', '/admin', '/checkout', '/previous-order' ], routes: async () => { let { data } = await axios.get('https://www.openmediabd.com/api/product/') let product = data.results let watchPages = product.map((product) => { return{ url:`/${product.product_slug}`, changefreq:'daily', priority:0.8, lastmod: product.updated } }) let { data:data2 } = await axios.get('https://www.openmediabd.com/api/category/') let category = data2.data let watchPages2 = category.map((category) => { return{ url:`category/${category.title}`, changefreq:'daily', priority:0.9, lastmod: category.updated } }) return [{ url:'/', changefreq:'daily', priority:1, }, { url:'/login', changefreq:'weekly', priority:0.6, }, { url:'/register', changefreq:'weekly', priority:0.6, }, ...watchPages, ...watchPages2 ] }, }, ], } 
Enter fullscreen mode Exit fullscreen mode

Explanation

Here is the path where our xml file will generate.

path: '/public/product/sitemap_index.xml', 
Enter fullscreen mode Exit fullscreen mode

those path will not include in our xml file.

 exclude: [ '/admin/**', '/admin', '/checkout', '/previous-order' ], 
Enter fullscreen mode Exit fullscreen mode

And in my xml I want to generate url from 2 different async route. But you can also generate two different xml file for two routes.

routes: async () => { let { data } = await axios.get('https://www.openmediabd.com/api/product/') let product = data.results let watchPages = product.map((product) => { return{ url:`/${product.product_slug}`, changefreq:'daily', priority:0.8, lastmod: product.updated } }) let { data:data2 } = await axios.get('https://www.openmediabd.com/api/category/') let category = data2.data let watchPages2 = category.map((category) => { return{ url:`category/${category.title}`, changefreq:'daily', priority:0.9, lastmod: category.updated } }) 
Enter fullscreen mode Exit fullscreen mode

And for static url we can do that by -

 return [{ url:'/', changefreq:'daily', priority:1, }, { url:'/login', changefreq:'weekly', priority:0.6, }, { url:'/register', changefreq:'weekly', priority:0.6, }, ...watchPages, //dynamic routes along with static route ...watchPages2 ] 
Enter fullscreen mode Exit fullscreen mode

This guy is awesome, check that out πŸ‘‰πŸΌ

Thank you πŸ‘¨β€πŸ³

Top comments (2)

Collapse
 
kissu profile image
Konstantin BIFERT

Thanks for that one! πŸ™πŸ»
I'll add this link to anybody interested by a solution for Nuxt3.

Collapse
 
siumhossain profile image
sium_hossain • Edited

Most welcome πŸ’•