From ef5da904e37e5f0ea3b687353025fd9849e756eb Mon Sep 17 00:00:00 2001 From: aramesh-site deploy Date: Fri, 9 Oct 2026 23:47:37 +0000 Subject: [PATCH] =?UTF-8?q?fix(seo):=20=D9=86=D9=85=D8=A7=DB=8C=D8=B4=20?= =?UTF-8?q?=D9=85=D8=AA=D8=B1=D8=A7=DA=98=20=D9=88=20=D9=85=D8=B4=D8=AE?= =?UTF-8?q?=D8=B5=D8=A7=D8=AA=20=D9=BE=D8=B1=D9=88=DA=98=D9=87=E2=80=8C?= =?UTF-8?q?=D9=87=D8=A7=20=D8=AF=D8=B1=20=D9=81=D9=87=D8=B1=D8=B3=D8=AA=20?= =?UTF-8?q?/projects=20+=20=D9=BE=DB=8C=D9=88=D9=86=D8=AF=20=D8=A8=D9=87?= =?UTF-8?q?=20=D8=B5=D9=81=D8=AD=D9=87=D9=94=20=D8=AC=D8=B2=D8=A6=DB=8C?= =?UTF-8?q?=D8=A7=D8=AA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit دستیار AI گفت «/projects باز نمی‌شود» و «برای الیسیان و زنیت متراژ پیدا نکردم» — درست بود: فهرست پروژه‌ها فقط نام/موقعیت/سال را می‌داد و زیربنا و طبقات فقط در صفحهٔ جزئیات بود. اکنون هر ردیف فهرست شامل زمین/زیربنا/طبقات/واحد است و نام پروژه به صفحهٔ جزئیات پیوند دارد، تا خزنده بتواند مشخصات کامل را دنبال کند. --- backend/app/seo_pages.py | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/backend/app/seo_pages.py b/backend/app/seo_pages.py index 9525afa..40db4f7 100644 --- a/backend/app/seo_pages.py +++ b/backend/app/seo_pages.py @@ -827,8 +827,30 @@ def _site_content_html(db: Session, page_key: str, lang: str) -> str: title = en(p.title, p.title_en) loc = en(p.location, p.location_en) year = en(p.year, p.year_en) - meta_bits = "، ".join(x for x in (loc, year) if x) - items += f"
  • {esc(title)}" + (f" — {esc(meta_bits)}" if meta_bits else "") + "
  • " + # متراژ و طبقات هم در فهرست می‌آید — بدون این، دستیارهای AI + # نتیجه می‌گیرند «برای پروژه‌ها متراژ ثبت نشده» (فقط صفحهٔ جزئیات داشت) + def num(fa_v: object, en_v: object) -> str: + return str(en_v).strip() if (lang == "en" and str(en_v or "").strip()) else str(fa_v or "").strip() + + specs = [] + if num(p.land_area, getattr(p, "land_area_en", "")): + specs.append(("Land" if lang == "en" else "زمین") + f" {num(p.land_area, getattr(p, 'land_area_en', ''))} m²") + if num(p.area, getattr(p, "area_en", "")): + specs.append(("Built" if lang == "en" else "زیربنا") + f" {num(p.area, getattr(p, 'area_en', ''))} m²") + if num(p.floors, getattr(p, "floors_en", "")): + specs.append(("Floors" if lang == "en" else "طبقات") + f" {num(p.floors, getattr(p, 'floors_en', ''))}") + if num(p.units_residential, getattr(p, "units_residential_en", "")): + specs.append(("Units" if lang == "en" else "واحد") + f" {num(p.units_residential, getattr(p, 'units_residential_en', ''))}") + bits = "، ".join(x for x in (loc, year) if x) + tail = "؛ ".join(specs) + # نام پروژه پیوند به صفحهٔ جزئیات — خزنده می‌تواند مشخصات کامل را دنبال کند + href = f"/en/projects/{p.slug}" if lang == "en" else f"/projects/{p.slug}" + line = f'{esc(title)}' + if bits: + line += f" — {esc(bits)}" + if tail: + line += f" [{esc(tail)}]" + items += f"
  • {line}
  • " parts.append(f"

    {'Our Projects' if lang == 'en' else 'پروژه‌های ما'}

    ") if page_key in ("home", "services"):