canina/frontend/application/app/sitemap.ts
parsa aghaei 6eb45cd467
All checks were successful
Deploy Canina / deploy (push) Successful in 1m55s
refactor: unify domain and contact emails to canina.ir across all apps and seeds
2026-08-19 11:52:36 +03:30

77 lines
2.0 KiB
TypeScript

import { MetadataRoute } from 'next';
import { productService } from '../lib/services/productService';
import { PRODUCTS } from '../lib/data/products';
export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
const baseUrl = process.env.NEXT_PUBLIC_SITE_URL || 'https://canina.ir';
// Static routes
const staticRoutes: MetadataRoute.Sitemap = [
{
url: `${baseUrl}`,
lastModified: new Date(),
changeFrequency: 'daily',
priority: 1,
},
{
url: `${baseUrl}/shop`,
lastModified: new Date(),
changeFrequency: 'daily',
priority: 0.9,
},
{
url: `${baseUrl}/wiki`,
lastModified: new Date(),
changeFrequency: 'weekly',
priority: 0.8,
},
{
url: `${baseUrl}/blog`,
lastModified: new Date(),
changeFrequency: 'weekly',
priority: 0.8,
},
{
url: `${baseUrl}/search`,
lastModified: new Date(),
changeFrequency: 'weekly',
priority: 0.5,
},
{
url: `${baseUrl}/about`,
lastModified: new Date(),
changeFrequency: 'monthly',
priority: 0.6,
},
{
url: `${baseUrl}/contact`,
lastModified: new Date(),
changeFrequency: 'monthly',
priority: 0.6,
},
];
// Dynamic products
try {
const res = await productService.getProducts({ limit: 999 });
const products = res.data && res.data.length > 0 ? res.data : PRODUCTS;
const productRoutes: MetadataRoute.Sitemap = products.map((product) => ({
url: `${baseUrl}/shop/${product.slug || product.id}`,
lastModified: new Date(),
changeFrequency: 'weekly',
priority: 0.8,
}));
return [...staticRoutes, ...productRoutes];
} catch {
const fallbackRoutes: MetadataRoute.Sitemap = PRODUCTS.map((product) => ({
url: `${baseUrl}/shop/${product.slug || product.id}`,
lastModified: new Date(),
changeFrequency: 'weekly',
priority: 0.8,
}));
return [...staticRoutes, ...fallbackRoutes];
}
}