Initial commit - modstagram-next

This commit is contained in:
root
2026-07-05 13:59:41 +03:30
commit 11e73da693
859 changed files with 117640 additions and 0 deletions

218
next-sitemap.config.js Normal file
View File

@@ -0,0 +1,218 @@
// 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://app.modstagram.ir/api/v1"; // آدرس پایه API شما
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',
],
},
};