feat: enhance SEO for listing and specialty pages, fix search autocomplete issue
This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
// سیاست ایندکس صفحات فرود تخصص — منبع مشترک صفحه و 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);
|
||||
}
|
||||
Reference in New Issue
Block a user