feat: enhance SEO for listing and specialty pages, fix search autocomplete issue

This commit is contained in:
hamed
2026-07-20 10:26:03 +03:30
parent 9011b230b3
commit 30c3fe8637
14 changed files with 460 additions and 69 deletions
+4 -1
View File
@@ -6,6 +6,7 @@ import { isRootCity } from '@/lib/rootCity';
import { extractEntityCityId, findDomainByCityId } from '@/lib/domainHelpers';
import { isThinClinic, isThinDoctor } from '@/lib/entityQuality';
import specialtiesData from '@/data/specialties.json';
import { isIndexableSpecialty } from '@/lib/specialtyIndexing';
// sitemap باید در زمان اجرا (per-request) روی سرور production تولید شود، نه در build.
// در build کانتینر به API دسترسی شبکه ندارد → fetch failed. force-dynamic این را قطعی می‌کند.
@@ -165,9 +166,11 @@ async function getClinicUrls(baseUrl, scope) {
// نمی‌شمارد)، و اگر sitemap از یک منبع و خودِ صفحه از منبع دیگر تصمیم بگیرد، صفحهٔ
// ایندکس‌پذیرِ اعلام‌نشده یا برعکس می‌سازیم. این‌طور هیچ فراخوانی اضافه‌ای هم ندارد.
function getSpecialtyUrls(baseUrl, doctors) {
// والدها noindex هستند (lib/specialtyIndexing)؛ اعلامشان در sitemap سیگنال
// متناقض به گوگل می‌دهد، پس اصلاً منتشر نمی‌شوند.
const slugById = new Map(
specialtiesData
.filter((s) => s?.slug && s.status === 1)
.filter((s) => s?.slug && s.status === 1 && isIndexableSpecialty(s))
.map((s) => [String(s.id), s.slug])
);