feat: auto-generated sitemap and robots.txt

This commit is contained in:
پارسا آقایی 2026-06-12 01:27:02 +03:30
parent 700f93e418
commit 88c3752238
2 changed files with 75 additions and 0 deletions

View File

@ -0,0 +1,19 @@
import { MetadataRoute } from 'next';
export default function robots(): MetadataRoute.Robots {
const baseUrl = process.env.NEXT_PUBLIC_SITE_URL || 'https://canina-iran.com';
return {
rules: {
userAgent: '*',
allow: '/',
disallow: [
'/dashboard/',
'/checkout/',
'/profile/',
'/api/'
],
},
sitemap: `${baseUrl}/sitemap.xml`,
};
}

View File

@ -0,0 +1,56 @@
import { MetadataRoute } from 'next';
import { productService } from '../lib/services/productService';
export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
const baseUrl = process.env.NEXT_PUBLIC_SITE_URL || 'https://canina-iran.com';
// 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,
},
];
// Dynamic products
try {
const products = await productService.getProducts();
const productRoutes: MetadataRoute.Sitemap = products.map((product) => ({
url: `${baseUrl}/shop/${product.id}`,
lastModified: new Date(),
changeFrequency: 'weekly',
priority: 0.7,
}));
return [...staticRoutes, ...productRoutes];
} catch (error) {
console.error("Failed to generate product sitemap:", error);
return staticRoutes;
}
}