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}، گردآوری‌شده از منابع معتبر، را می‌بینید. " + + "روی هر شیفت بزنید تا تاریخ، ساعت، پرداخت و راهِ تماسِ مستقیم با مرکز درمانی نمایش داده شود. " + + "برای موارد مرتبط، نقش یا شهر دیگری را از لینک‌های بالا انتخاب کنید."; } }