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

فهرس المحتويات
ما هو JSON-LD ولماذا هو مهم لتحسين محركات البحث
JSON-LD (ترميز جافا سكريبت للبيانات المرتبطة) هو أسلوب لترميز البيانات المنظمة باستخدام صيغة 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>يتم تصنيف المؤلف والناشر كمنظمة. في المدونات الشخصية، يمكن أن يكون المؤلف شخصًا مع اسم ورابط 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. كل عنصر هو نوع سؤال مع إجابة مقبولة. تدعم 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
يحدد مخطط WebSite و WebPage الرسم البياني الأساسي للكيانات في الموقع. يحدد 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 لاختبار أي رابط أو لصق HTML خام. تؤكد Google أنواع النتائج الغنية المكتشفة وتبرز الخصائص المطلوبة المفقودة.
أداة التحقق الرسمية من الأهلية لدى Google
مدقق ترميز المخطط
يقوم validator.schema.org بفحص ترميزك مقابل مواصفات schema.org بشكل مستقل عن سياسات نتائج Google الغنية، وهو مفيد لاكتشاف أخطاء أسماء الخصائص وعدم تطابق الأنواع.
التحقق من صحة صياغة Schema.org
Google Search Console
يبلغ قسم التحسينات في Search Console عن أخطاء وتحذيرات المخطط على نطاق واسع عبر صفحاتك المفهرسة، استخدمه للمراقبة المستمرة بعد التحقق الأولي.
المراقبة الشاملة بعد الإطلاق