218 lines
8.2 KiB
JavaScript
218 lines
8.2 KiB
JavaScript
// next-sitemap.config.js
|
|
/** @type {import('next-sitemap').IConfig} */
|
|
module.exports = {
|
|
siteUrl: 'https://modstagram.com', // دامنه اصلی سایت شما
|
|
generateRobotsTxt: true, // تولید فایل robots.txt
|
|
sitemapSize: 7000, // حداکثر تعداد URL در هر فایل سایتمپ
|
|
changefreq: 'daily', // فرکانس پیشفرض تغییر صفحات
|
|
priority: 0.7, // اولویت پیشفرض صفحات
|
|
|
|
// تابع transform برای فیلتر کردن و تنظیمات خاص هر مسیر
|
|
transform: async (config, path) => {
|
|
// مسیرهایی که نباید در سایتمپ باشند و نیازی به ایندکس شدن ندارند
|
|
const excludedPaths = [
|
|
'/settings',
|
|
'/auth',
|
|
'/new-post',
|
|
'/offer',
|
|
'/private/', // مسیرهای خصوصی
|
|
// صفحات مربوط به پرداخت و ثبتنام/ورود
|
|
'/projects/payment/success',
|
|
'/projects/payment/failed',
|
|
'/billboards/payment/success',
|
|
'/billboards/payment/failed',
|
|
'/forget-password',
|
|
'/change-passowrd',
|
|
'/login-with-username',
|
|
'/login',
|
|
'/register-otp',
|
|
'/verify-otp',
|
|
'/register',
|
|
'/forget-password-otp',
|
|
'/register/password',
|
|
'/register/fullname',
|
|
'/register/usertype',
|
|
'/register/username',
|
|
'/verify/avatar',
|
|
'/verify/auth',
|
|
'/verify/colors',
|
|
'/verify/confirm',
|
|
'/verify/expertise',
|
|
'/verify/gender',
|
|
'/verify/national-cart',
|
|
'/verify/location',
|
|
'/verify/public-relations',
|
|
'/verify/cooperation-type',
|
|
'/verify/services',
|
|
'/verify/sizes',
|
|
'/new-project', // اگر این یک صفحه فرم داخلی است که نیازی به ایندکس شدن ندارد
|
|
'/billboards/new', // اگر این یک صفحه فرم داخلی است که نیازی به ایندکس شدن ندارد
|
|
'/search', // اگر صفحه جستجو محتوای قابل ایندکس ندارد
|
|
];
|
|
|
|
// اگر مسیر در لیست excludedPaths باشد، آن را از سایتمپ حذف کن
|
|
if (excludedPaths.some(p => path.startsWith(p))) {
|
|
return null;
|
|
}
|
|
|
|
let pageChangefreq = config.changefreq;
|
|
let pagePriority = config.priority;
|
|
|
|
// تنظیمات خاص برای مسیرهای مختلف
|
|
if (path.startsWith('/users/')) { // مسیر برای پروفایلهای کاربران
|
|
pageChangefreq = 'weekly';
|
|
pagePriority = 0.6;
|
|
}
|
|
if (path.startsWith('/projects/') || path.startsWith('/billboards/')) {
|
|
pageChangefreq = 'daily';
|
|
pagePriority = 0.8;
|
|
}
|
|
if (path === '/') { // صفحه اصلی
|
|
pageChangefreq = 'daily';
|
|
pagePriority = 1.0;
|
|
}
|
|
if (path === '/about-us') { // صفحه درباره ما
|
|
pageChangefreq = 'monthly';
|
|
pagePriority = 0.8;
|
|
}
|
|
|
|
return {
|
|
loc: path, // آدرس کامل صفحه
|
|
changefreq: pageChangefreq, // فرکانس تغییر صفحه
|
|
priority: pagePriority, // اولویت صفحه
|
|
lastmod: config.autoLastmod ? new Date().toISOString() : undefined, // تاریخ آخرین تغییر
|
|
alternateRefs: config.alternateRefs ?? [],
|
|
};
|
|
},
|
|
|
|
// تابع additionalPaths برای اضافه کردن مسیرهای داینامیک از API
|
|
additionalPaths: async (config) => {
|
|
const paths = [];
|
|
const BASE_URL_API = "https://api.modstagram.ir/api/v1";
|
|
paths.push({
|
|
loc: '/',
|
|
changefreq: 'daily',
|
|
priority: 1.0
|
|
});
|
|
paths.push({
|
|
loc: '/projects',
|
|
changefreq: 'daily',
|
|
priority: 0.9
|
|
});
|
|
paths.push({
|
|
loc: '/billboards',
|
|
changefreq: 'daily', // یا weekly بسته به میزان تغییر محتوا
|
|
priority: 0.9
|
|
});
|
|
try {
|
|
// واکشی دادههای پروژهها
|
|
const projectsRes = await fetch(`${BASE_URL_API}/projects?limit=500`);
|
|
const projectsData = await projectsRes.json();
|
|
if (projectsData && Array.isArray(projectsData.projects)) {
|
|
projectsData.projects.forEach((project) => {
|
|
if (project.id && project.title) {
|
|
paths.push({
|
|
// مسیر پروژهها (با استفاده از تمپلیت لیتِرال صحیح)
|
|
loc: `/projects/${project.id}/${encodeURIComponent(project.title)}`,
|
|
changefreq: 'daily',
|
|
priority: 0.8
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
// واکشی دادههای بیلبوردها
|
|
const billboardsRes = await fetch(`${BASE_URL_API}/advertising/web?limit=500`);
|
|
const billboardsData = await billboardsRes.json();
|
|
if (billboardsData && Array.isArray(billboardsData.advertisings)) {
|
|
billboardsData.advertisings.forEach((billboard) => {
|
|
if (billboard._id && billboard.title) {
|
|
paths.push({
|
|
// مسیر بیلبوردها (با استفاده از تمپلیت لیتِرال صحیح)
|
|
loc: `/billboards/${billboard._id}/${encodeURIComponent(billboard.title)}`,
|
|
changefreq: 'daily',
|
|
priority: 0.8
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
// واکشی دادههای کاربران (مدلها)
|
|
const usersRes = await fetch(`${BASE_URL_API}/users/web?limit=500`);
|
|
const usersData = await usersRes.json();
|
|
if (usersData && Array.isArray(usersData.users)) {
|
|
usersData.users.forEach((user) => {
|
|
if (user.user_name) {
|
|
paths.push({
|
|
// مسیر پروفایل کاربران (مسیر در Next.js شما /users/[username] است)
|
|
loc: `/users/${encodeURIComponent(user.user_name)}`,
|
|
changefreq: 'weekly',
|
|
priority: 0.6
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
} catch (error) {
|
|
// لاگ کردن خطا در صورت مشکل در واکشی دادهها از API
|
|
console.error('Error fetching additional paths for sitemap:', error);
|
|
}
|
|
|
|
return paths; // بازگرداندن آرایهای از مسیرهای داینامیک
|
|
},
|
|
|
|
// تنظیمات مربوط به فایل robots.txt
|
|
robotsTxtOptions: {
|
|
policies: [
|
|
{
|
|
userAgent: '*', // اعمال سیاستها برای همه رباتها
|
|
allow: '/', // اجازه دسترسی به کل سایت
|
|
disallow: [
|
|
'/api/', // مسیرهای API
|
|
'/_next/', // فایلهای داخلی Next.js
|
|
'/settings', // صفحات تنظیمات
|
|
'/auth', // صفحات احراز هویت (ورود، ثبتنام)
|
|
'/private/', // مسیرهای خصوصی موجود
|
|
'/new-post', // صفحات ایجاد پست جدید
|
|
'/offer', // صفحات پیشنهاد
|
|
// اضافه کردن مسیرهای پرداخت و ثبتنام/ورود به disallow
|
|
'/projects/payment/success',
|
|
'/projects/payment/failed',
|
|
'/billboards/payment/success',
|
|
'/billboards/payment/failed',
|
|
'/forget-password',
|
|
'/change-passowrd',
|
|
'/login-with-username',
|
|
'/login',
|
|
'/register-otp',
|
|
'/verify-otp',
|
|
'/register',
|
|
'/forget-password-otp',
|
|
'/register/password',
|
|
'/register/fullname',
|
|
'/register/usertype',
|
|
'/register/username',
|
|
'/verify/avatar',
|
|
'/verify/auth',
|
|
'/verify/colors',
|
|
'/verify/confirm',
|
|
'/verify/expertise',
|
|
'/verify/gender',
|
|
'/verify/national-cart',
|
|
'/verify/location',
|
|
'/verify/public-relations',
|
|
'/verify/cooperation-type',
|
|
'/verify/services',
|
|
'/verify/sizes',
|
|
'/new-project',
|
|
'/billboards/new',
|
|
'/search', // اگر این صفحه برای ایندکس شدن نامناسب است
|
|
],
|
|
},
|
|
],
|
|
// اضافه کردن آدرس سایتمپ به robots.txt
|
|
additionalSitemaps: [
|
|
'https://modstagram.com/sitemap.xml',
|
|
],
|
|
},
|
|
}; |