feat: Enhance metadata generation for About Us and Contact Us pages, implement legacy slug resolution for blog posts, and add city-specific intros

This commit is contained in:
hamed
2026-08-09 07:14:15 +03:30
parent 9cfbd2e002
commit 002f388ac8
12 changed files with 334 additions and 28 deletions
+9 -8
View File
@@ -6,19 +6,20 @@ import { findDomainByCityId } from "@/lib/domainHelpers";
// → self-canonical روی همان دامنهٔ شهری (هر شهر محتوای خودش را دارد)
// C1-b موجودیت : /doctor/[uuid]، /clinic/[uuid]، /blog/[slug]
// → دامنهٔ شهرِ همان موجودیت (getEntityCanonical)
// C1-c استاتیک : /about-us، /contact-us، … → دامنهٔ اصلی
// (محتوا روی همهٔ دامنه‌ها یکسان است — تجمیع عمدی اعتبار)
// C1-c استاتیک : /terms، /privacy → دامنهٔ اصلی
// (متن حقوقی روی همهٔ دامنه‌ها کلمه‌به‌کلمه یکسان است)
//
// /about-us و /contact-us از C1-c بیرون آمدند: هر شهر آنجا داده و متن خودش را دارد
// (نام سایت، تلفن، نشانی، شبکه‌های اجتماعی، متن شهری)، پس self-canonical می‌شوند.
// پیش از این هر دو به دامنهٔ اصلی canonical می‌شدند و Search Console آن‌ها را
// «Alternate page with proper canonical tag» گزارش می‌کرد؛ یعنی روی هیچ دامنهٔ شهری
// ایندکس نمی‌شدند.
const DEFAULT_HOST = "nobat724.com";
const MAIN_ORIGIN = "https://nobat724.com";
// C1-c — صفحات با محتوای یکسان روی همهٔ دامنه‌ها
const STATIC_SHARED_PAGES = new Set([
"/about-us",
"/contact-us",
"/terms",
"/privacy",
]);
const STATIC_SHARED_PAGES = new Set(["/terms", "/privacy"]);
// تنها queryهایی که صفحه را از نظر محتوایی متمایز می‌کنند و باید در canonical بمانند.
// بقیه (فیلتر چندگانه، sort، name) حذف می‌شوند تا duplicate نسازند.