// سیاست ایندکس صفحات لیست (/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 } } : {}; }