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>
177 lines
4.5 KiB
TypeScript
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
|
|
}
|
|
|