diff --git a/package.json b/package.json index 00184e8..ef28a85 100644 --- a/package.json +++ b/package.json @@ -3,8 +3,9 @@ "private": true, "type": "module", "scripts": { - "build": "npm run build:remix && npm run build:server", + "build": "npm run sitemap && npm run build:remix && npm run build:server", "build:remix": "react-router build", + "sitemap": "node scripts/generate-sitemap.mjs", "build:server": "node scripts/build-server.mjs", "db:generate": "dotenv -- drizzle-kit generate", "db:migrate": "dotenv -- drizzle-kit migrate", diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 0000000..c32db83 --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,10 @@ +User-agent: * +Allow: / + +Disallow: /admin/ +Disallow: /api/ +Disallow: /onboarding +Disallow: /settings +Disallow: /user-profile + +Sitemap: https://brackt.com/sitemap.xml.gz diff --git a/public/sitemap.xml b/public/sitemap.xml new file mode 100644 index 0000000..b6a4162 --- /dev/null +++ b/public/sitemap.xml @@ -0,0 +1,39 @@ + + + + https://brackt.com/ + 2026-05-25 + weekly + 1.0 + + + https://brackt.com/how-to-play + 2026-05-25 + monthly + 0.8 + + + https://brackt.com/rules + 2026-05-25 + monthly + 0.8 + + + https://brackt.com/sports + 2026-05-25 + weekly + 0.8 + + + https://brackt.com/support + 2026-05-25 + monthly + 0.6 + + + https://brackt.com/privacy-policy + 2026-05-25 + yearly + 0.4 + + diff --git a/public/sitemap.xml.gz b/public/sitemap.xml.gz new file mode 100644 index 0000000..a29fde1 Binary files /dev/null and b/public/sitemap.xml.gz differ diff --git a/scripts/generate-sitemap.mjs b/scripts/generate-sitemap.mjs new file mode 100644 index 0000000..b29bd12 --- /dev/null +++ b/scripts/generate-sitemap.mjs @@ -0,0 +1,40 @@ +import { gzipSync } from "zlib"; +import { writeFileSync } from "fs"; +import { join, dirname } from "path"; +import { fileURLToPath } from "url"; + +const __dirname = dirname(fileURLToPath(import.meta.url)); +const publicDir = join(__dirname, "..", "public"); + +const BASE_URL = "https://brackt.com"; + +const urls = [ + { loc: "/", changefreq: "weekly", priority: "1.0" }, + { loc: "/how-to-play", changefreq: "monthly", priority: "0.8" }, + { loc: "/rules", changefreq: "monthly", priority: "0.8" }, + { loc: "/sports", changefreq: "weekly", priority: "0.8" }, + { loc: "/support", changefreq: "monthly", priority: "0.6" }, + { loc: "/privacy-policy", changefreq: "yearly", priority: "0.4" }, +]; + +const today = new Date().toISOString().split("T")[0]; + +const xml = ` + +${urls + .map( + ({ loc, changefreq, priority }) => ` + ${BASE_URL}${loc} + ${today} + ${changefreq} + ${priority} + ` + ) + .join("\n")} + +`; + +writeFileSync(join(publicDir, "sitemap.xml"), xml); +writeFileSync(join(publicDir, "sitemap.xml.gz"), gzipSync(xml)); + +console.log(`Sitemap generated: ${urls.length} URLs`);