From 142136ebc9b2ac02f89406a70e34826a57862689 Mon Sep 17 00:00:00 2001
From: "soroush.asadi"
Date: Sat, 20 Jun 2026 18:07:32 +0330
Subject: [PATCH] Landing pages: unique intro paragraph (avoid thin content)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Role/city landing pages were heading + list only — thin-content risk that hurts
ranking. Add a short, unique-per-page intro (built from the dynamic heading) on
the Jobs/Shifts landing pages, with internal-link guidance. Generic /Jobs and
/Shifts stay as-is.
Improvement 4 of the backlog (SEO).
Co-Authored-By: Claude Opus 4.8
---
src/JobsMedical.Web/Pages/Jobs/Index.cshtml | 4 ++++
src/JobsMedical.Web/Pages/Jobs/Index.cshtml.cs | 7 +++++++
src/JobsMedical.Web/Pages/Shifts/Index.cshtml | 4 ++++
src/JobsMedical.Web/Pages/Shifts/Index.cshtml.cs | 7 +++++++
4 files changed, 22 insertions(+)
diff --git a/src/JobsMedical.Web/Pages/Jobs/Index.cshtml b/src/JobsMedical.Web/Pages/Jobs/Index.cshtml
index 804b46a..2db769e 100644
--- a/src/JobsMedical.Web/Pages/Jobs/Index.cshtml
+++ b/src/JobsMedical.Web/Pages/Jobs/Index.cshtml
@@ -14,6 +14,10 @@
— مرتبشده بر اساس نزدیکترین به شما 📍
}
+ @if (!string.IsNullOrEmpty(Model.PageIntro))
+ {
+ @Model.PageIntro
+ }
diff --git a/src/JobsMedical.Web/Pages/Jobs/Index.cshtml.cs b/src/JobsMedical.Web/Pages/Jobs/Index.cshtml.cs
index 8e42687..82c96b3 100644
--- a/src/JobsMedical.Web/Pages/Jobs/Index.cshtml.cs
+++ b/src/JobsMedical.Web/Pages/Jobs/Index.cshtml.cs
@@ -34,6 +34,9 @@ public class IndexModel : PageModel
/// Dynamic page heading/H1 + title, set from the active role/city for SEO.
public string PageHeading { get; private set; } = "موقعیتهای استخدامی";
+ /// A short unique intro shown on role/city landing pages (avoids thin-content).
+ public string? PageIntro { get; private set; }
+
public async Task OnGetAsync()
{
Cities = await _db.Cities.Where(c => c.IsActive).OrderBy(c => c.Name).ToListAsync();
@@ -103,5 +106,9 @@ public class IndexModel : PageModel
ViewData["Description"] = role is not null || city is not null
? $"جدیدترین آگهیهای {PageHeading} در همکادر؛ مشاهده فرصتها و تماس مستقیم با مراکز درمانی."
: "موقعیتهای استخدامی کادر درمان (پزشک، پرستار، ماما، تکنسین) در بیمارستانها و کلینیکهای تهران — همکادر.";
+ if (role is not null || city is not null)
+ PageIntro = $"در این صفحه جدیدترین فرصتهای {PageHeading}، گردآوریشده از منابع معتبر، را میبینید. "
+ + "روی هر آگهی بزنید تا جزئیات، شرایط و راهِ تماسِ مستقیم با مرکز درمانی نمایش داده شود. "
+ + "برای فرصتهای مرتبط، نقش یا شهر دیگری را از لینکهای بالا انتخاب کنید.";
}
}
diff --git a/src/JobsMedical.Web/Pages/Shifts/Index.cshtml b/src/JobsMedical.Web/Pages/Shifts/Index.cshtml
index b2a2f11..3ce1ae6 100644
--- a/src/JobsMedical.Web/Pages/Shifts/Index.cshtml
+++ b/src/JobsMedical.Web/Pages/Shifts/Index.cshtml
@@ -14,6 +14,10 @@
— مرتبشده بر اساس نزدیکترین به شما 📍
}
+ @if (!string.IsNullOrEmpty(Model.PageIntro))
+ {
+ @Model.PageIntro
+ }
diff --git a/src/JobsMedical.Web/Pages/Shifts/Index.cshtml.cs b/src/JobsMedical.Web/Pages/Shifts/Index.cshtml.cs
index d6133b3..053816e 100644
--- a/src/JobsMedical.Web/Pages/Shifts/Index.cshtml.cs
+++ b/src/JobsMedical.Web/Pages/Shifts/Index.cshtml.cs
@@ -40,6 +40,9 @@ public class IndexModel : PageModel
/// Dynamic page heading/H1 + title, set from the active role/city for SEO.
public string PageHeading { get; private set; } = "شیفتهای خالی";
+ /// A short unique intro shown on role/city landing pages (avoids thin-content).
+ public string? PageIntro { get; private set; }
+
public async Task OnGetAsync()
{
var today = DateOnly.FromDateTime(DateTime.UtcNow);
@@ -121,5 +124,9 @@ public class IndexModel : PageModel
ViewData["Description"] = role is not null || city is not null
? $"جدیدترین {PageHeading} در همکادر؛ مشاهده شیفتها و تماس مستقیم با مراکز درمانی."
: "شیفتهای خالی کادر درمان (پزشک، پرستار، ماما، تکنسین) در بیمارستانها و کلینیکهای تهران — همکادر.";
+ if (role is not null || city is not null)
+ PageIntro = $"در این صفحه جدیدترین {PageHeading}، گردآوریشده از منابع معتبر، را میبینید. "
+ + "روی هر شیفت بزنید تا تاریخ، ساعت، پرداخت و راهِ تماسِ مستقیم با مرکز درمانی نمایش داده شود. "
+ + "برای موارد مرتبط، نقش یا شهر دیگری را از لینکهای بالا انتخاب کنید.";
}
}