JSON-LD স্কিমা মার্কআপ: সম্পূর্ণ SEO বাস্তবায়ন গাইড
JSON-LD স্ট্রাকচার্ড ডেটা সার্চ ইঞ্জিনকে আপনার কন্টেন্টের সঠিক বিষয়বস্তু জানায়। সঠিক স্কিমা মার্কআপ গুগল সার্চে FAQ ড্রপডাউন, আর্টিকেল ক্যারোসেল, ব্রেডক্রাম্ব ট্রেইলসহ সমৃদ্ধ ফলাফল আনলক করে।
এই গাইডে প্রতিটি প্রধান স্কিমা টাইপের জন্য বাস্তব C# কোড এবং সঠিক JSON আউটপুট দেওয়া হয়েছে। প্রতিটি উদাহরণ সরাসরি প্রোডাকশন Blazor কোডবেস থেকে নেওয়া।

বিষয়বস্তু সূচি
JSON-LD কী এবং কেন এটি SEO-র জন্য গুরুত্বপূর্ণ
JSON-LD (JavaScript Object Notation for Linked Data) হলো JSON ফরম্যাট ব্যবহার করে স্ট্রাকচার্ড ডেটা এনকোড করার একটি পদ্ধতি। গুগলসহ সার্চ ইঞ্জিনগুলো এই ডেটা পড়ে কন্টেন্টের অর্থ বোঝে, শুধু কীওয়ার্ড নয়।
যখন গুগল আপনার স্ট্রাকচার্ড ডেটা পার্স করতে পারে, তখন আপনার পেজ সমৃদ্ধ ফলাফলের জন্য যোগ্য হয় — যা রেটিং, FAQ ড্রপডাউন, আর্টিকেল ছবি, ব্রেডক্রাম্ব ট্রেইলসহ সরাসরি সার্চ ফলাফলে প্রদর্শিত হয়। সমৃদ্ধ ফলাফল সাধারণ লিঙ্কের চেয়ে বেশি ক্লিক পায়।
গুগল অফিসিয়ালি JSON-LD কে Microdata ও RDFa থেকে বেশি প্রাধান্য দেয় কারণ এটি পেজের যেকোনো স্থানে, বিশেষ করে হেডে রাখা যায় এবং বিদ্যমান HTML পরিবর্তনের প্রয়োজন হয় না। স্ট্রাকচার্ড ডেটা সম্পূর্ণ আলাদা থাকে।
সমৃদ্ধ ফলাফলের যোগ্যতা
সঠিক স্কিমা মার্কআপ আপনার পেজকে গুগল সার্চে FAQ ড্রপডাউন, আর্টিকেল ক্যারোসেল, ব্রেডক্রাম্ব ট্রেইলসহ অন্যান্য সমৃদ্ধ ফিচারের জন্য যোগ্য করে তোলে।
একই র্যাঙ্ক থেকে বেশি ক্লিক
অর্থবোধ স্পষ্টতা
স্ট্রাকচার্ড ডেটা অস্পষ্টতা দূর করে। প্রশ্নোত্তর বিষয়ক পেজ স্পষ্টভাবে FAQPage হিসেবে ঘোষণা করা হয়, তাই গুগল এটিকে FAQ সমৃদ্ধ ফলাফল হিসেবে দেখায়।
সার্চ ইঞ্জিনকে স্পষ্টভাবে জানান আপনার কন্টেন্ট কী
HTML-এ কোনো পরিবর্তন নেই
JSON-LD হেডের একটি স্ক্রিপ্ট ট্যাগে থাকে। এটি আপনার ভিজ্যুয়াল HTML স্পর্শ করে না, তাই স্কিমা যোগ বা আপডেট করলে লেআউট বা অ্যাক্সেসিবিলিটি ভাঙার ঝুঁকি থাকে না।
পরিষ্কার দায়িত্ব বিভাজন
JSON-LD বনাম Microdata বনাম RDFa
ওয়েব পেজে schema.org স্ট্রাকচার্ড ডেটা এমবেড করার জন্য তিনটি ফরম্যাট আছে। গুগল সবগুলো বুঝতে পারে, তবে প্রয়োগ ও রক্ষণাবেক্ষণে পার্থক্য রয়েছে।
| ফরম্যাট | সিনট্যাক্স অবস্থান | রক্ষণাবেক্ষণ | SEO প্রভাব | গুগলের সুপারিশ |
|---|---|---|---|---|
| JSON-LD | স্বতন্ত্র স্ক্রিপ্ট ট্যাগ | সহজ — কোনো HTML পরিবর্তন নেই | পূর্ণ সমৃদ্ধ ফলাফল সমর্থন | প্রস্তাবিত |
| Microdata | ইনলাইন HTML অ্যাট্রিবিউট | উচ্চ — মার্কআপের সাথে ঘনিষ্ঠভাবে যুক্ত | পূর্ণ সমৃদ্ধ ফলাফল সমর্থন | সমর্থিত |
| RDFa | ইনলাইন HTML অ্যাট্রিবিউট | উচ্চ — মার্কআপের সাথে ঘনিষ্ঠভাবে যুক্ত | পূর্ণ সমৃদ্ধ ফলাফল সমর্থন | সমর্থিত |
JSON-LD কেন রক্ষণাবেক্ষণে সেরা
Microdata ও RDFa-তে স্কিমা অ্যাট্রিবিউটগুলো HTML জুড়ে ছড়িয়ে থাকে। টেমপ্লেট পরিবর্তন করলে স্ট্রাকচার্ড ডেটা ভেঙে যেতে পারে। JSON-LD একটি স্বতন্ত্র ব্লক — একবার স্ক্রিপ্ট আপডেট করলে HTML প্রভাবিত হয় না।
এসইও সেরা পদ্ধতি সহ আধুনিক ওয়েব ডেভেলপমেন্ট শিখুন
আমার পরামর্শ এই কোর্সটি আমাকে বুঝতে সাহায্য করেছে কিভাবে টেকনিক্যাল SEO, স্ট্রাকচার্ড ডেটা এবং আধুনিক ওয়েব স্ট্যান্ডার্ড বাস্তব প্রকল্পে একসাথে কাজ করে।
- HTML মেটা ট্যাগ, ওপেন গ্রাফ এবং JSON-LD স্ট্রাকচার্ড ডেটা প্রয়োগ শিখুন।
- সার্চ ইঞ্জিনে ভালো ভিজিবিলিটি ও র্যাঙ্কিংয়ের জন্য কার্যকর SEO কৌশল।
- রেসপন্সিভ ডিজাইন ও পারফরম্যান্স অপটিমাইজেশন নিয়ে হাতে-কলমে প্রকল্প।
মূল স্কিমা টাইপ এবং কখন ব্যবহার করবেন
Schema.org শত শত টাইপ নির্ধারণ করে, কিন্তু কিছুই ওয়েব কন্টেন্টের বেশিরভাগ অংশ কভার করে। এগুলোই গুগল সার্চে সমৃদ্ধ ফলাফল আনলক করে।
| স্কিমা টাইপ | ব্যবহার ক্ষেত্র | সমৃদ্ধ ফলাফল টাইপ |
|---|---|---|
| Article | ব্লগ পোস্ট, গাইড, সংবাদ আর্টিকেল | আর্টিকেল ক্যারোসেল, শীর্ষ খবর |
| FAQPage | প্রশ্নোত্তর যুক্ত পেজ | সার্চ ফলাফলে FAQ ড্রপডাউন |
| BreadcrumbList | যেকোনো নেভিগেশন স্তরযুক্ত পেজ | URL-এর নিচে ব্রেডক্রাম্ব ট্রেইল |
| WebSite / WebPage | হোমপেজ, হাব পেজ, ল্যান্ডিং পেজ | সাইটলিঙ্কস সার্চ বক্স, সত্তা শনাক্তকরণ |
| SoftwareApplication | অ্যাপ, টুল, সফটওয়্যার পণ্য | রেটিং ও মূল্যের সঙ্গে অ্যাপ সমৃদ্ধ ফলাফল |
Schema.org শব্দভাণ্ডার
সমস্ত স্কিমা টাইপ schema.org-এ সংজ্ঞায়িত। প্রতিটি JSON-LD ব্লকের @context প্রপার্টি পার্সারকে schema.org শব্দভাণ্ডারের বিরুদ্ধে প্রপার্টি নাম ব্যাখ্যা করতে বলে। এক পেজে একাধিক স্কিমা টাইপ ব্যবহার করা যায় — গুগল প্রতিটি স্ক্রিপ্ট ব্লক আলাদাভাবে প্রসেস করে।
আর্টিকেল স্কিমা বাস্তবায়ন
আর্টিকেল স্কিমা কন্টেন্ট-ভিত্তিক সাইটের জন্য সবচেয়ে গুরুত্বপূর্ণ। এটি গুগলকে হেডলাইন, বর্ণনা, প্রকাশের তারিখ, লেখক ও প্রকাশক জানায় — যা সমৃদ্ধ ফলাফলের জন্য ন্যূনতম প্রপার্টি।
নিচের C# ক্লাসটি সিরিয়ালাইজেশন মডেল। প্রতিটি প্রপার্টি JsonPropertyName অ্যাট্রিবিউট ব্যবহার করে JSON-LD ফিল্ডের সাথে সরাসরি ম্যাপ করা হয়।
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; }
}প্রয়োজনীয় প্রপার্টিগুলো হলো: headline, image, datePublished, dateModified, author, এবং publisher। articleSection অ্যারে ঐচ্ছিক কিন্তু সুপারিশকৃত — এটি গুগলকে আর্টিকেলের বিষয়বস্তু জানায়।
<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 থাকে।
সমৃদ্ধ স্নিপেটের জন্য FAQ স্কিমা
FAQPage স্কিমা FAQ সমৃদ্ধ ফলাফল তৈরি করে — প্রসারিত প্রশ্নোত্তর জোড়া যা সরাসরি গুগল সার্চ ফলাফলে আপনার পেজের নিচে দেখায়। এটি ভিজ্যুয়াল স্পেস বাড়িয়ে দৃশ্যমানতা ও ক্লিক রেট উন্নত করে।
FaqPage ক্লাসে প্রশ্নের একটি তালিকা থাকে। প্রতিটি আইটেমের একটি নাম (প্রশ্ন) এবং acceptedAnswer নামে একটি টেক্সট প্রপার্টি (উত্তর) থাকতে হয়।
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 টাইপ এবং acceptedAnswer সহ। গুগল প্রতি পেজে সর্বোচ্চ দশটি প্রশ্ন সমর্থন করে।
<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>FAQPage ব্লকের @id স্কিমাকে নির্দিষ্ট URL ফ্র্যাগমেন্টের সাথে যুক্ত করে। একাধিক স্কিমা ব্লক থাকা পেজের জন্য এটি সেরা পদ্ধতি, যা পার্সারকে প্রতিটি সত্তা স্পষ্টভাবে চিহ্নিত করতে সাহায্য করে।
WebSite এবং WebPage স্কিমা
WebSite ও WebPage স্কিমা সাইটের মৌলিক সত্তা গ্রাফ তৈরি করে। WebSite সাইটের নাম, URL, ভাষা ও প্রকাশক নির্ধারণ করে। WebPage পৃথক পেজ বর্ণনা করে এবং isPartOf সম্পর্ক দিয়ে প্যারেন্ট WebSite-র সাথে যুক্ত করে।
উভয় ক্লাস একই JSON-LD প্যাটার্ন অনুসরণ করে। WebSite-এর @id হলো ডোমেইন রুট; WebPage-এর @id হলো সম্পূর্ণ পেজ URL।
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 রেফারেন্স দিয়ে যুক্ত করে। এটি গুগলকে আপনার সাইটের পূর্ণ সত্তা মডেল গঠনে সাহায্য করে।
<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 মেথডের এন্ট্রি পয়েন্ট। এটি একটি পেজের সম্পূর্ণ স্কিমা ব্লক তৈরির জন্য প্রয়োজনীয় সব ডেটা বহন করে — টাইপ, মেটাডেটা, FAQ তালিকা, ব্রেডক্রাম্ব স্তর, এবং আর্টিকেল ডেটা।
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 ও ব্রেডক্রাম্ব থাকলে সবসময় যুক্ত হয়। অর্থাৎ যেকোনো পেজে FAQ ব্লক বা ব্রেডক্রাম্ব ট্রেইল যোগ করা যায় মূল ডিসপ্যাচ লজিক পরিবর্তন ছাড়াই।
আপনার স্কিমা পরীক্ষা ও যাচাই
বৈধ JSON-LD সিনট্যাক্স সমৃদ্ধ ফলাফলের যোগ্যতা নিশ্চিত করে না। গুগলের টুলগুলো সিনট্যাক্স বৈধতা এবং আপনার কন্টেন্টের নীতি পূরণ যাচাই করে।
সমৃদ্ধ ফলাফল পরীক্ষা
search.google.com/test/rich-results ব্যবহার করে যেকোনো URL পরীক্ষা করুন বা কাঁচা HTML পেস্ট করুন। গুগল শনাক্তকৃত সমৃদ্ধ ফলাফল টাইপ নিশ্চিত করে এবং অনুপস্থিত প্রপার্টি দেখায়।
গুগলের অফিসিয়াল যোগ্যতা পরীক্ষক
স্কিমা মার্কআপ ভ্যালিডেটর
validator.schema.org আপনার মার্কআপ schema.org স্পেসিফিকেশনের বিরুদ্ধে গুগলের সমৃদ্ধ ফলাফল নীতির বাইরে যাচাই করে। প্রপার্টি নামের ভুল ও টাইপ মিল না থাকার জন্য উপকারী।
Schema.org সিনট্যাক্স যাচাই
গুগল সার্চ কনসোল
সার্চ কনসোলের Enhancements সেকশন আপনার ইনডেক্স করা পেজে স্কিমা ত্রুটি ও সতর্কতা ব্যাপকভাবে রিপোর্ট করে। প্রাথমিক যাচাইয়ের পর নিয়মিত মনিটরিংয়ের জন্য ব্যবহার করুন।
লঞ্চের পর ব্যাপক পর্যবেক্ষণ