دليل شامل لتطبيق ترميز JSON-LD لتحسين محركات البحث
تخبر البيانات المنظمة JSON-LD محركات البحث بدقة عن محتوى موقعك. الترميز الصحيح يفتح نتائج غنية في بحث Google مثل قوائم الأسئلة الشائعة، دوارات المقالات، ومسارات التنقل مباشرة من صفحة النتائج.
يغطي هذا الدليل جميع أنواع المخططات الرئيسية مع كود تنفيذ حقيقي بلغة C# والمخرجات الدقيقة بصيغة JSON. كل مثال مأخوذ مباشرة من قاعدة كود Blazor الإنتاجية.

فهرس المحتويات
ما هو JSON-LD ولماذا هو مهم لتحسين محركات البحث
JSON-LD (JavaScript Object Notation for Linked Data) هو أسلوب لترميز البيانات المنظمة باستخدام صيغة JSON. تقرأ محركات البحث مثل Google هذه البيانات لفهم معنى المحتوى وليس فقط الكلمات المفتاحية.
عندما تتمكن Google من تحليل بياناتك المنظمة تصبح مؤهلة للنتائج الغنية — قوائم بحث محسنة بصريًا تعرض التقييمات، قوائم الأسئلة الشائعة، صور المقالات، مسارات التنقل، وميزات أخرى مباشرة في صفحة نتائج البحث. تحقق النتائج الغنية معدلات نقر أعلى من الروابط الزرقاء العادية.
توصي Google رسميًا باستخدام JSON-LD بدلاً من Microdata وRDFa لأنه يمكن وضعه في أي مكان في الصفحة — بما في ذلك الرأس — ولا يتطلب تعديل عناصر HTML الحالية. البيانات المنظمة منفصلة تمامًا عن ترميزك.
الأهلية للنتائج الغنية
الترميز الصحيح للمخطط يجعل صفحاتك مؤهلة لقوائم الأسئلة الشائعة، دوارات المقالات، مسارات التنقل، وميزات غنية أخرى في بحث Google.
نقرات أكثر من نفس الترتيب
وضوح دلالي
البيانات المنظمة تزيل الغموض. صفحة حول موضوع سؤال وجواب تُعلن صراحة كصفحة FAQPage، لذا تعرف Google أن تعرضها كنتيجة غنية للأسئلة الشائعة.
أخبر محركات البحث بدقة عما لديك
بدون تغييرات في HTML
يعيش JSON-LD في وسم سكريبت داخل الرأس. لا يؤثر على HTML المرئي، لذا فإن إضافة أو تحديث المخطط لا يعرض التخطيطات أو إمكانية الوصول للخطر.
فصل واضح للمسؤوليات
JSON-LD مقابل Microdata مقابل RDFa
هناك ثلاث صيغ لتضمين بيانات schema.org المنظمة في صفحات الويب. تفهمها Google جميعًا، لكنها تختلف بشكل كبير في كيفية تطبيقها وصيانتها.
| الصيغة | موقع الصياغة | الصيانة | تأثير تحسين محركات البحث | توصية Google |
|---|---|---|---|---|
| JSON-LD | وسم سكريبت منفصل | سهل — بدون تغييرات في HTML | دعم كامل للنتائج الغنية | موصى به |
| Microdata | سمات HTML مضمنة | مرتفع — مرتبط ارتباطًا وثيقًا بالترميز | دعم كامل للنتائج الغنية | مدعوم |
| RDFa | سمات HTML مضمنة | مرتفع — مرتبط ارتباطًا وثيقًا بالترميز | دعم كامل للنتائج الغنية | مدعوم |
لماذا يفوز JSON-LD في سهولة الصيانة
مع Microdata وRDFa، تنتشر سمات المخطط في جميع أنحاء HTML الخاص بك. قد يكسر تغيير التصميم الذي يعيد هيكلة القالب البيانات المنظمة بصمت. JSON-LD هو كتلة مستقلة — حدّث السكريبت مرة واحدة دون التأثير على HTML.
إتقان تطوير الويب الحديث مع أفضل ممارسات SEO
نصيحة مني وجدت هذه الدورة مفيدة لفهم كيفية تفاعل SEO التقني، والبيانات المنظمة، والمعايير الحديثة للويب في المشاريع العملية.
- تعلم علامات HTML الوصفية، Open Graph، وتنفيذ البيانات المنظمة JSON-LD.
- استراتيجيات SEO عملية لتحسين ظهور وترتيب موقعك في محركات البحث.
- مشاريع تطبيقية تغطي التصميم المتجاوب وتحسين الأداء.
أنواع المخططات الأساسية ومتى تستخدمها
تعرف Schema.org مئات الأنواع لكن القليل منها يغطي معظم محتوى الويب. هذه هي الأنواع التي تفتح النتائج الغنية في بحث Google.
| نوع المخطط | حالة الاستخدام | نوع النتيجة الغنية |
|---|---|---|
| Article | مقالات المدونات، الأدلة، الأخبار | دوار المقالات، الأخبار العاجلة |
| FAQPage | صفحات تحتوي على أزواج سؤال/جواب | قائمة الأسئلة الشائعة في نتائج البحث |
| BreadcrumbList | أي صفحة تحتوي على هيكل تنقل | مسار التنقل أسفل الرابط |
| WebSite / WebPage | الصفحة الرئيسية، صفحات المحور، صفحات الهبوط | صندوق بحث روابط الموقع، التعرف على الكيانات |
| SoftwareApplication | التطبيقات، الأدوات، المنتجات البرمجية | نتيجة غنية للتطبيق مع تقييم وسعر |
مفردات Schema.org
جميع أنواع المخططات معرفة في schema.org. خاصية @context في كل كتلة JSON-LD تخبر المحللات بتفسير أسماء الخصائص وفقًا لمفردات schema.org. يمكنك دمج عدة أنواع مخططات في صفحة واحدة — تعالج Google كل كتلة سكريبت بشكل مستقل.
تطبيق مخطط المقال
مخطط المقال هو الأهم للمواقع المعتمدة على المحتوى. يخبر Google بعنوان المقال، الوصف، تاريخ النشر، المؤلف، والناشر — الحد الأدنى من الخصائص المطلوبة للأهلية للنتائج الغنية.
فئة C# أدناه هي نموذج التسلسل. كل خاصية ترتبط مباشرة بحقل JSON-LD المقابل باستخدام سمات JsonPropertyName.
private class ArticleSchema
{
[JsonPropertyName("@context")]
public string Context { get; } = "https://schema.org";
[JsonPropertyName("@type")]
public string Type { get; } = "Article";
[JsonPropertyName("headline")]
public string? Headline { get; set; }
[JsonPropertyName("description")]
public string? Description { get; set; }
[JsonPropertyName("image")]
public string? Image { get; set; }
[JsonPropertyName("url")]
public string? Url { get; set; }
[JsonPropertyName("author")]
public Organization? Author { get; set; }
[JsonPropertyName("publisher")]
public ArticlePublisher? Publisher { get; set; }
[JsonPropertyName("datePublished")]
public string? DatePublished { get; set; }
[JsonPropertyName("dateModified")]
public string? DateModified { get; set; }
[JsonPropertyName("articleSection")]
public List<string>? ArticleSection { get; set; }
}الخصائص المطلوبة هي: العنوان، الصورة، تاريخ النشر، تاريخ التعديل، المؤلف، والناشر. مصفوفة articleSection اختيارية لكنها موصى بها — تشير إلى نطاق موضوع المقال لـ Google.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "JSON-LD Schema Markup: Complete SEO Implementation Guide",
"description": "Learn how to implement JSON-LD structured data for Article, FAQPage, BreadcrumbList, WebSite, and WebPage schema types.",
"image": "https://ghostlyinc.com/images/web/jsonldguide/opengraph/hero-1200.png",
"url": "https://ghostlyinc.com/en/json-ld-schema-markup-seo-guide/",
"author": {
"@type": "Organization",
"name": "GhostlyInc",
"url": "https://ghostlyinc.com"
},
"publisher": {
"@type": "Organization",
"name": "GhostlyInc",
"logo": {
"@type": "ImageObject",
"url": "https://ghostlyinc.com/images/logo.png"
}
},
"datePublished": "2026-03-28T10:00:00Z",
"dateModified": "2026-03-28T10:00:00Z",
"articleSection": [
"What is JSON-LD and why it matters for SEO",
"JSON-LD vs. Microdata vs. RDFa",
"Core schema types and when to use them",
"Article schema implementation"
]
}
</script>المؤلف والناشر كلاهما من نوع Organization. للمدونات الشخصية، يمكن أن يكون المؤلف من نوع Person مع اسم ورابط URL.
مخطط الأسئلة الشائعة للقصاصات الغنية
مخطط FAQPage ينشئ نتائج غنية للأسئلة الشائعة — أزواج سؤال/جواب قابلة للتوسيع تظهر مباشرة في نتائج بحث Google أسفل قائمتك. هذا يزيد بشكل كبير من المساحة الرأسية التي يشغلها نتيجتك، مما يحسن الرؤية ومعدلات النقر.
فئة FaqPage تحتوي على قائمة من كيانات الأسئلة. يجب أن يحتوي كل كيان على اسم (السؤال) وإجابة مقبولة مع خاصية نص (الإجابة).
private class FaqPage
{
[JsonPropertyName("@context")]
public string Context { get; } = "https://schema.org";
[JsonPropertyName("@type")]
public string Type { get; } = "FAQPage";
[JsonPropertyName("@id")]
public string? Id { get; set; }
[JsonPropertyName("name")]
public string? Name { get; set; }
[JsonPropertyName("mainEntity")]
public List<FaqEntity>? MainEntity { get; set; }
}
private class FaqEntity
{
[JsonPropertyName("@type")]
public string Type { get; } = "Question";
[JsonPropertyName("name")]
public string? Name { get; set; }
[JsonPropertyName("acceptedAnswer")]
public FaqAnswer? AcceptedAnswer { get; set; }
}
private class FaqAnswer
{
[JsonPropertyName("@type")]
public string Type { get; } = "Answer";
[JsonPropertyName("text")]
public string? Text { get; set; }
}المخرجات هي كتلة FAQPage واحدة مع مصفوفة mainEntity. كل عنصر هو من نوع Question مع إجابة مقبولة. تدعم Google حتى عشرة أسئلة في الصفحة للنتائج الغنية.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"@id": "https://ghostlyinc.com/en/json-ld-schema-markup-seo-guide/#faq",
"name": "Frequently asked questions",
"mainEntity": [
{
"@type": "Question",
"name": "What is the difference between JSON-LD and Microdata?",
"acceptedAnswer": {
"@type": "Answer",
"text": "JSON-LD is a separate script block that lives in the head and does not touch HTML. Microdata adds attributes directly to HTML elements. Google recommends JSON-LD for its maintainability."
}
},
{
"@type": "Question",
"name": "How many FAQ questions can I mark up?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Google supports up to ten questions per page for the FAQ rich result. Additional questions are still valid schema but will not appear in the search result enhancement."
}
}
]
}
</script>خاصية @id في كتلة FAQPage تربط المخطط بمقطع URL محدد. هذه أفضل ممارسة للصفحات التي تحتوي على عدة كتل مخطط، لأنها تسمح للمحللات بتحديد كل كيان بوضوح.
مخطط الموقع والصفحة
مخطط الموقع والصفحة يؤسس الرسم البياني الكياني الأساسي للموقع. يحدد WebSite الموقع نفسه — اسمه، رابطه، لغته، وناشره. يصف WebPage الصفحة الفردية ويربطها بالموقع الأب باستخدام علاقة isPartOf.
تتبع كلا الفئتين نفس نمط JSON-LD. خاصية @id في WebSite هي جذر النطاق؛ و@id في WebPage هو رابط الصفحة الكامل.
private class WebSiteSchema
{
[JsonPropertyName("@context")]
public string Context { get; } = "https://schema.org";
[JsonPropertyName("@type")]
public string Type { get; } = "WebSite";
[JsonPropertyName("name")]
public string? Name { get; set; }
[JsonPropertyName("url")]
public string? Url { get; set; }
[JsonPropertyName("inLanguage")]
public string? InLanguage { get; set; }
[JsonPropertyName("publisher")]
public Organization? Publisher { get; set; }
}
private class WebPageSchema
{
[JsonPropertyName("@context")]
public string Context { get; } = "https://schema.org";
[JsonPropertyName("@type")]
public string Type { get; } = "WebPage";
[JsonPropertyName("@id")]
public string? Id { get; set; }
[JsonPropertyName("name")]
public string? Name { get; set; }
[JsonPropertyName("description")]
public string? Description { get; set; }
[JsonPropertyName("url")]
public string? Url { get; set; }
[JsonPropertyName("inLanguage")]
public string? InLanguage { get; set; }
[JsonPropertyName("isPartOf")]
public WebSiteReference? IsPartOf { get; set; }
}خاصية inLanguage تستخدم رموز لغات BCP 47 (مثل en، de، fr). رابط isPartOf يربط WebPage بكيان WebSite بالإشارة إلى @id الخاص بالنطاق. هذا يساعد Google في بناء نموذج كيان كامل لموقعك.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebSite",
"name": "GhostlyInc",
"url": "https://ghostlyinc.com",
"inLanguage": "en",
"publisher": {
"@type": "Organization",
"name": "GhostlyInc",
"url": "https://ghostlyinc.com"
}
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebPage",
"@id": "https://ghostlyinc.com/en/json-ld-schema-markup-seo-guide/",
"name": "JSON-LD Schema Markup: Complete SEO Implementation Guide",
"description": "Learn how to implement JSON-LD structured data for Article, FAQPage, BreadcrumbList, WebSite, and WebPage schema types.",
"url": "https://ghostlyinc.com/en/json-ld-schema-markup-seo-guide/",
"inLanguage": "en",
"isPartOf": {
"@type": "WebSite",
"@id": "https://ghostlyinc.com"
}
}
</script>أفضل ممارسات التنفيذ
طريقة WrapInScriptTag هي النقطة الوحيدة التي تتحول فيها سلاسل JSON إلى كتل JSON-LD صالحة. تغلف أي حمولة مخطط مسلسلة في وسم سكريبت مطلوب بنوع MIME application/ld+json.
هذه هي الطريقة التي تستدعيها جميع منشئي المخططات في الخدمة — حيث يمرر كل من Article وFAQPage وBreadcrumbList وWebSite وWebPage JSON المسلسل إلى هذه الأداة نفسها.
private static MarkupString WrapInScriptTag(string json)
{
var builder = new StringBuilder();
builder.AppendLine("<script type=\"application/ld+json\">");
builder.AppendLine(json);
builder.AppendLine("</script>");
return new MarkupString(builder.ToString());
}كائن SchemaContext هو نقطة الدخول لطريقة BuildSchema. يحمل كل البيانات اللازمة لبناء مجموعة كاملة من كتل المخطط لصفحة — النوع، البيانات الوصفية، قائمة الأسئلة الشائعة، تسلسل مسار التنقل، وبيانات المقال.
public SchemaBuildResult BuildSchema(SchemaContext context)
{
if (context == null) throw new ArgumentNullException(nameof(context));
var jsonLd = new List<MarkupString>();
switch (context.PageType)
{
case PageSchemaType.Home:
jsonLd.Add(WebSite(context));
jsonLd.Add(WebPage(context));
break;
case PageSchemaType.Article:
jsonLd.Add(Article(context.Article!));
break;
case PageSchemaType.Tool:
jsonLd.Add(WebPage(context));
jsonLd.Add(SoftwareApplication(context.SoftwareApplication!));
break;
case PageSchemaType.Hub:
jsonLd.Add(WebPage(context));
break;
}
if (context.Faqs != null && context.Faqs.Count > 0)
{
jsonLd.Add(FAQ(context.Faqs.ToList(), context.FaqTitle, context.Url));
}
if (context.ParentHierarchy.Count > 0)
{
jsonLd.Add(BreadcrumbList(BuildBreadcrumbItems(context)));
}
return new SchemaBuildResult(jsonLd, context.PageType == PageSchemaType.Article);
}مفتاح التوجيه يجعل منشئ المخطط قابلًا للتكوين. تُضاف الأسئلة الشائعة ومسارات التنقل دائمًا إذا كانت موجودة، بغض النظر عن نوع الصفحة. هذا يعني أن أي نوع صفحة يمكن أن يحتوي على كتلة FAQ أو مسار تنقل دون تغيير منطق التوجيه الأساسي.
اختبار والتحقق من صحة المخطط الخاص بك
الصياغة الصحيحة لـ JSON-LD لا تضمن الأهلية للنتائج الغنية. أدوات Google تتحقق من صحة الصياغة وما إذا كان المحتوى يفي بمتطلبات السياسة لكل نوع من النتائج الغنية.
اختبار النتائج الغنية
استخدم search.google.com/test/rich-results لاختبار أي رابط URL أو لصق HTML خام. تؤكد Google أنواع النتائج الغنية المكتشفة وتبرز الخصائص المطلوبة المفقودة.
أداة التحقق الرسمية من الأهلية لدى Google
مدقق ترميز المخطط
يقوم validator.schema.org بفحص ترميزك مقابل مواصفات schema.org بشكل مستقل عن سياسات نتائج Google الغنية. مفيد لاكتشاف أخطاء أسماء الخصائص وعدم تطابق الأنواع.
التحقق من صحة صياغة Schema.org
Google Search Console
يبلغ قسم التحسينات في Search Console عن أخطاء وتحذيرات المخطط على نطاق واسع عبر صفحاتك المفهرسة. استخدمه للمراقبة المستمرة بعد التحقق الأولي.
المراقبة على نطاق واسع بعد الإطلاق