Landing pages: unique intro paragraph (avoid thin content)
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 <noreply@anthropic.com>
This commit is contained in:
@@ -14,6 +14,10 @@
|
||||
<span> — مرتبشده بر اساس نزدیکترین به شما 📍</span>
|
||||
}
|
||||
</p>
|
||||
@if (!string.IsNullOrEmpty(Model.PageIntro))
|
||||
{
|
||||
<p class="muted" style="max-width:720px; font-size:13.5px; line-height:1.9;">@Model.PageIntro</p>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -34,6 +34,9 @@ public class IndexModel : PageModel
|
||||
/// <summary>Dynamic page heading/H1 + title, set from the active role/city for SEO.</summary>
|
||||
public string PageHeading { get; private set; } = "موقعیتهای استخدامی";
|
||||
|
||||
/// <summary>A short unique intro shown on role/city landing pages (avoids thin-content).</summary>
|
||||
public string? PageIntro { get; private set; }
|
||||
|
||||
public async Task<IActionResult> 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}، گردآوریشده از منابع معتبر، را میبینید. "
|
||||
+ "روی هر آگهی بزنید تا جزئیات، شرایط و راهِ تماسِ مستقیم با مرکز درمانی نمایش داده شود. "
|
||||
+ "برای فرصتهای مرتبط، نقش یا شهر دیگری را از لینکهای بالا انتخاب کنید.";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,10 @@
|
||||
<span> — مرتبشده بر اساس نزدیکترین به شما 📍</span>
|
||||
}
|
||||
</p>
|
||||
@if (!string.IsNullOrEmpty(Model.PageIntro))
|
||||
{
|
||||
<p class="muted" style="max-width:720px; font-size:13.5px; line-height:1.9;">@Model.PageIntro</p>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -40,6 +40,9 @@ public class IndexModel : PageModel
|
||||
/// <summary>Dynamic page heading/H1 + title, set from the active role/city for SEO.</summary>
|
||||
public string PageHeading { get; private set; } = "شیفتهای خالی";
|
||||
|
||||
/// <summary>A short unique intro shown on role/city landing pages (avoids thin-content).</summary>
|
||||
public string? PageIntro { get; private set; }
|
||||
|
||||
public async Task<IActionResult> 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}، گردآوریشده از منابع معتبر، را میبینید. "
|
||||
+ "روی هر شیفت بزنید تا تاریخ، ساعت، پرداخت و راهِ تماسِ مستقیم با مرکز درمانی نمایش داده شود. "
|
||||
+ "برای موارد مرتبط، نقش یا شهر دیگری را از لینکهای بالا انتخاب کنید.";
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user