30 lines
1.5 KiB
JavaScript
30 lines
1.5 KiB
JavaScript
// سیاست ایندکس صفحات لیست (/doctors و /clinics) — یک پیادهسازی مشترک تا دو مسیر واگرا نشوند.
|
|
//
|
|
// هر کوئری جستجو/فیلتر یک صفحهٔ داینامیک با محتوای تکراری میسازد و نباید ایندکس شود.
|
|
// صفحهٔ فرود قابلایندکسِ یک تخصص، /specialties/[slug] است نه /doctors?specialty=.
|
|
// پس فقط لیست خام (/doctors و /clinics) ایندکس میشود.
|
|
//
|
|
// page استثناست: pagination فیلتر جستجو نیست و صفحات ۲+ محتوای واقعاً متفاوتی دارند
|
|
// (یاسوج بهتنهایی ~۳۸ صفحه)؛ noindex کردنشان مسیر کشف پزشکان آن صفحات را میبندد.
|
|
//
|
|
// follow در همهٔ حالتها میماند تا لینکهای داخلی صفحه (پروفایل پزشک، صفحهٔ تخصص) دنبال شوند.
|
|
|
|
const NON_FILTER_KEYS = new Set(["page"]);
|
|
|
|
const isEmpty = (value) =>
|
|
value === undefined || value === null || value === "";
|
|
|
|
/** آیا این صفحهٔ لیست، فیلتر یا جستجوی واقعی کاربر دارد؟ */
|
|
export function hasListingFilters(params) {
|
|
if (!params) return false;
|
|
return Object.entries(params).some(
|
|
([key, value]) => !NON_FILTER_KEYS.has(key) && !isEmpty(value)
|
|
);
|
|
}
|
|
|
|
export function listingRobots(params) {
|
|
return hasListingFilters(params)
|
|
? { robots: { index: false, follow: true } }
|
|
: {};
|
|
}
|