Rocky_Mountain_Vending/app/sitemap.ts
DMleadgen 46d973904b
Initial commit: Rocky Mountain Vending website
Next.js website for Rocky Mountain Vending company featuring:
- Product catalog with Stripe integration
- Service areas and parts pages
- Admin dashboard with Clerk authentication
- SEO optimized pages with JSON-LD structured data

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-12 16:22:15 -07:00

177 lines
4.5 KiB
TypeScript

import { MetadataRoute } from "next"
import { businessConfig } from "@/lib/seo-config"
// Required for static export
export const dynamic = 'force-static'
import { getAllLocationSlugs } from "@/lib/location-data"
export default function sitemap(): MetadataRoute.Sitemap {
const baseUrl = businessConfig.website
const currentDate = new Date().toISOString()
// Get all location pages
const locationSlugs = getAllLocationSlugs()
const locationPages = locationSlugs.map((slug) => ({
url: `${baseUrl}/vending-machines-${slug}`,
lastModified: currentDate,
changeFrequency: "monthly" as const,
priority: 0.9,
}))
// Static pages with priorities and change frequencies
const staticPages = [
{
url: baseUrl,
lastModified: currentDate,
changeFrequency: "weekly" as const,
priority: 1.0,
},
{
url: `${baseUrl}/contact-us`,
lastModified: currentDate,
changeFrequency: "monthly" as const,
priority: 0.9,
},
{
url: `${baseUrl}/about-us`,
lastModified: currentDate,
changeFrequency: "monthly" as const,
priority: 0.8,
},
{
url: `${baseUrl}/about/faqs`,
lastModified: currentDate,
changeFrequency: "monthly" as const,
priority: 0.7,
},
// Services
{
url: `${baseUrl}/services`,
lastModified: currentDate,
changeFrequency: "monthly" as const,
priority: 0.9,
},
{
url: `${baseUrl}/services/service-areas`,
lastModified: currentDate,
changeFrequency: "monthly" as const,
priority: 0.8,
},
{
url: `${baseUrl}/services/repairs`,
lastModified: currentDate,
changeFrequency: "monthly" as const,
priority: 0.8,
},
{
url: `${baseUrl}/services/moving`,
lastModified: currentDate,
changeFrequency: "monthly" as const,
priority: 0.8,
},
{
url: `${baseUrl}/services/parts`,
lastModified: currentDate,
changeFrequency: "monthly" as const,
priority: 0.8,
},
// Vending Machines
{
url: `${baseUrl}/vending-machines`,
lastModified: currentDate,
changeFrequency: "monthly" as const,
priority: 0.9,
},
{
url: `${baseUrl}/vending-machines/machines-we-use`,
lastModified: currentDate,
changeFrequency: "monthly" as const,
priority: 0.8,
},
{
url: `${baseUrl}/vending-machines/machines-for-sale`,
lastModified: currentDate,
changeFrequency: "monthly" as const,
priority: 0.8,
},
// Who We Serve
{
url: `${baseUrl}/warehouses`,
lastModified: currentDate,
changeFrequency: "monthly" as const,
priority: 0.7,
},
{
url: `${baseUrl}/auto-repair`,
lastModified: currentDate,
changeFrequency: "monthly" as const,
priority: 0.7,
},
{
url: `${baseUrl}/gyms`,
lastModified: currentDate,
changeFrequency: "monthly" as const,
priority: 0.7,
},
{
url: `${baseUrl}/community-centers`,
lastModified: currentDate,
changeFrequency: "monthly" as const,
priority: 0.7,
},
{
url: `${baseUrl}/dance-studios`,
lastModified: currentDate,
changeFrequency: "monthly" as const,
priority: 0.7,
},
{
url: `${baseUrl}/car-washes`,
lastModified: currentDate,
changeFrequency: "monthly" as const,
priority: 0.7,
},
// Food and Beverage
{
url: `${baseUrl}/food-and-beverage/healthy-options`,
lastModified: currentDate,
changeFrequency: "monthly" as const,
priority: 0.7,
},
{
url: `${baseUrl}/food-and-beverage/traditional-options`,
lastModified: currentDate,
changeFrequency: "monthly" as const,
priority: 0.7,
},
{
url: `${baseUrl}/food-and-beverage/suppliers`,
lastModified: currentDate,
changeFrequency: "monthly" as const,
priority: 0.7,
},
// Service Areas Page
{
url: `${baseUrl}/service-areas`,
lastModified: currentDate,
changeFrequency: "monthly" as const,
priority: 0.9,
},
// Manuals Page
{
url: `${baseUrl}/manuals`,
lastModified: currentDate,
changeFrequency: "weekly" as const,
priority: 0.8,
},
]
// Combine all pages, removing duplicates by URL
const allPages = [...staticPages, ...locationPages]
const uniquePages = allPages.filter((page, index, self) =>
index === self.findIndex((p) => p.url === page.url)
)
return uniquePages
}