const fs = require("fs"); const path = require("path"); const { SitemapStream, streamToPromise } = require("sitemap"); const hostname = "https://shivasakthi.ca"; const addTrailingSlash = true; // Set true if your Next.js has trailingSlash: true // ✅ Utility to control trailing slashes const shouldAddSlash = (url) => { if (url === "/") return false; if (/\.[a-z0-9]{2,6}(\?.*)?$/i.test(url)) return false; return true; }; const formatUrl = (url) => { if (!url.startsWith("/")) url = "/" + url; if (addTrailingSlash && shouldAddSlash(url) && !url.endsWith("/")) { return url + "/"; } if (!addTrailingSlash && url.endsWith("/") && url !== "/") { return url.slice(0, -1); } return url; }; const staticLinks = [ { url: "/", changefreq: "daily", priority: 1.0 }, { url: "/about", changefreq: "weekly", priority: 0.7 }, { url: "/menu", changefreq: "weekly", priority: 0.7 }, { url: "/blog", changefreq: "weekly", priority: 0.7 }, { url: "/contact-south-indian-restaurant", changefreq: "monthly", priority: 0.5 }, ]; // ✅ Dynamic blog posts (example) const blogPosts = [ { slug: "/blog/the-flavors-of-north-india-more-than-just-curries/" }, { slug: "/blog/the-secret-to-perfect-north-indian-curries/" }, { slug: "/blog/the-rich-history-of-south-indian-cuisine/" }, ]; // // Convert blog slugs to sitemap entries const blogLinks = blogPosts.map((post) => ({ url: formatUrl(post.slug), changefreq: "weekly", priority: 0.6, })); const allLinks = [...staticLinks, ...blogLinks].map((link) => ({ ...link, url: formatUrl(link.url), })); async function generateSitemap() { try { const sitemap = new SitemapStream({ hostname }); const writeStream = fs.createWriteStream( path.resolve(__dirname, "../public/sitemap.xml") ); sitemap.pipe(writeStream); console.log("📦 Writing URLs to sitemap:"); allLinks.forEach((link) => { const fullUrl = `${hostname}${link.url}`; console.log(" -", fullUrl); sitemap.write(link); }); sitemap.end(); await streamToPromise(sitemap); console.log("✅ sitemap.xml created successfully!"); } catch (error) { console.error("❌ Error creating sitemap.xml:", error); } } generateSitemap();