Files
nobat724_front/lib/specialtyIndexing.js
T

28 lines
1.5 KiB
JavaScript

// سیاست ایندکس صفحات فرود تخصص — منبع مشترک صفحه و sitemap تا واگرا نشوند.
//
// تخصصی که زیرشاخهٔ فعال دارد (مثل «داخلی» با فرزند «گوارش و کبد») یک دستهٔ سطح‌بالاست:
// محتوای مستقلی ندارد و با فرزندانش روی همان کوئری رقابت می‌کند → noindex.
//
// اما «والد بودن» به‌تنهایی کافی نیست: تخصص‌هایی مثل «پزشک عمومی» هم parent_id تهی
// دارند و هم هیچ زیرشاخه‌ای ندارند. آن‌ها در عمل برگ‌اند و صفحهٔ واقعی خدمات و
// پزشکان را نشان می‌دهند، پس ایندکس می‌مانند.
import specialtiesData from "@/data/specialties.json";
// فقط فرزندان فعال شمرده می‌شوند؛ زیرشاخهٔ غیرفعال صفحه‌ای ندارد که رقابت کند.
const IDS_WITH_ACTIVE_CHILDREN = new Set(
specialtiesData
.filter((item) => item?.status === 1 && item?.parent_id != null)
.map((item) => Number(item.parent_id))
);
/** دستهٔ سطح‌بالا: بدون والد، ولی دارای زیرشاخهٔ فعال. */
export function isCategorySpecialty(specialty) {
if (!specialty || specialty.parent_id != null) return false;
return IDS_WITH_ACTIVE_CHILDREN.has(Number(specialty.id));
}
export function isIndexableSpecialty(specialty) {
return Boolean(specialty) && !isCategorySpecialty(specialty);
}