28 lines
1.5 KiB
JavaScript
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);
|
|
}
|