post
This commit is contained in:
@@ -1,218 +1,13 @@
|
||||
// next-sitemap.config.js
|
||||
/** @type {import('next-sitemap').IConfig} */
|
||||
/**
|
||||
* DISABLED — sitemap داینامیک از App Router سرو میشود:
|
||||
* /sitemap.xml
|
||||
* /sitemaps/static.xml | filters.xml | posts/N.xml | ...
|
||||
*
|
||||
* اسکریپت postbuild دیگر next-sitemap را اجرا نمیکند.
|
||||
* این فایل فقط برای مرجع نگه داشته شده است.
|
||||
*/
|
||||
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',
|
||||
],
|
||||
},
|
||||
};
|
||||
siteUrl: "https://modstagram.com",
|
||||
generateRobotsTxt: false,
|
||||
generateIndexSitemap: false,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user