Source: scripts/generate-sitemap.js

  1. const fs = require("fs");
  2. const globby = require("globby");
  3. // Needs empty line to generate root paths
  4. const skipMatch = [
  5. "!pages/my-dreams.js",
  6. "!pages/account.js",
  7. "!pages/publish",
  8. "!pages/_*.js",
  9. "!pages/api",
  10. "!pages/auth/error.js",
  11. "!pages/auth/verify-request.js",
  12. "!pages/dreams",
  13. "!pages/saved-dreams.js",
  14. "!pages/insights.js",
  15. "!pages/404.js",
  16. "!pages/500.js",
  17. "!pages/inbox.js",
  18. ];
  19. // Important! The following issue has useful information on
  20. // how to handle dynamic routes correctly:
  21. // https://github.com/vercel/next.js/issues/9051.
  22. /**
  23. * Generates an XML URL loc
  24. * @param {string[]} pages - The set of filenames under the pages folder.
  25. */
  26. function generateUrlLoc(pages) {
  27. const routes = pages
  28. .map((page) => {
  29. const path = page.replace("pages", "").replace(".js", "");
  30. const route = path === "/index" ? "" : path;
  31. return `
  32. <url>
  33. <loc>${`https://eutiveumsonho.com${route}`}</loc>
  34. </url>
  35. `;
  36. })
  37. .join("");
  38. return routes;
  39. }
  40. (async () => {
  41. const pages = await globby(["pages/**/*", ...skipMatch]);
  42. const sitemap = `<?xml version="1.0" encoding="UTF-8"?>
  43. <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  44. ${generateUrlLoc(pages)}
  45. </urlset>
  46. <!-- This is a generated file. Don't change this. -->
  47. <!-- For more information, visit this file at scripts/generate-sitemap.js -->
  48. `;
  49. fs.writeFileSync("public/sitemap.xml", sitemap);
  50. console.log("Sitemap successfully generated.");
  51. })();