diff --git a/src/JobsMedical.Web/Pages/Facilities/Details.cshtml b/src/JobsMedical.Web/Pages/Facilities/Details.cshtml index 17215ed..74aaa39 100644 --- a/src/JobsMedical.Web/Pages/Facilities/Details.cshtml +++ b/src/JobsMedical.Web/Pages/Facilities/Details.cshtml @@ -149,3 +149,12 @@ { } + +@* Place/clinic structured data — only for a real named facility (not the «نامشخص» placeholder). *@ +@if (JobsMedical.Web.Services.SeoJsonLd.HasRealEmployer(f)) +{ + var bu = $"{ViewContext.HttpContext.Request.Scheme}://{ViewContext.HttpContext.Request.Host}"; + @Html.Raw("") +} diff --git a/src/JobsMedical.Web/Pages/Index.cshtml b/src/JobsMedical.Web/Pages/Index.cshtml index 9952e3c..8e97cd0 100644 --- a/src/JobsMedical.Web/Pages/Index.cshtml +++ b/src/JobsMedical.Web/Pages/Index.cshtml @@ -2,7 +2,7 @@ @model IndexModel @{ ViewData["Title"] = null; // use default site title for the home page (best for SEO) - ViewData["Description"] = "همکادر؛ سریع‌ترین راه برای کادر درمان (پزشک، پرستار، ماما، تکنسین) جهت یافتن شیفت و موقعیت استخدامی در بیمارستان‌ها و کلینیک‌های تهران. به‌جای گشتن در کانال‌های تلگرام و بله، همه فرصت‌ها یک‌جا."; + ViewData["Description"] = "یافتن شیفت و موقعیت استخدامی کادر درمان (پزشک، پرستار، ماما، تکنسین) در بیمارستان‌ها و کلینیک‌های تهران — همهٔ فرصت‌ها یک‌جا در همکادر."; }
diff --git a/src/JobsMedical.Web/Services/SeoJsonLd.cs b/src/JobsMedical.Web/Services/SeoJsonLd.cs index 87fcfc2..7924157 100644 --- a/src/JobsMedical.Web/Services/SeoJsonLd.cs +++ b/src/JobsMedical.Web/Services/SeoJsonLd.cs @@ -100,6 +100,26 @@ public static class SeoJsonLd return Fix(JsonSerializer.Serialize(obj, Opts)); } + /// schema.org structured data for a facility page — a Hospital/MedicalClinic with its + /// address, map coordinates, and aggregate review rating, so Google can show a rich place result. + public static string MedicalOrganization(Facility f, string baseUrl, double avgRating = 0, int ratingCount = 0) + { + var schemaType = f.Type == FacilityType.Hospital ? "Hospital" : "MedicalClinic"; + var obj = new Dictionary + { + ["@context"] = "https://schema.org", + ["@type"] = schemaType, + ["name"] = f.Name, + ["url"] = $"{baseUrl}/Facilities/Details/{f.Id}", + ["address"] = new { type = "PostalAddress", addressLocality = f.City?.Name, addressCountry = "IR", streetAddress = f.Address }, + }; + if (f.Lat is double la && f.Lng is double lo) + obj["geo"] = new { type = "GeoCoordinates", latitude = la, longitude = lo }; + if (ratingCount > 0) + obj["aggregateRating"] = new { type = "AggregateRating", ratingValue = Math.Round(avgRating, 1), reviewCount = ratingCount }; + return Fix(JsonSerializer.Serialize(obj, Opts)); + } + public static string Organization(string baseUrl) => Fix(JsonSerializer.Serialize(new Dictionary { ["@context"] = "https://schema.org",