
একই কি-ওয়ার্ড লিখে গুগলে সার্চ দিলে দেখবেন কিছু সাইট শুধু একটা নীল লিংক আর দুই লাইন বর্ণনা নিয়ে পড়ে আছে, আবার কিছু সাইট স্টার রেটিং, দাম, স্টক, রান্নার সময় বা ধাপের তালিকা নিয়ে অনেক বড় জায়গা দখল করে বসে আছে। দ্বিতীয় দলটির লেখা যে প্রথম দলের চেয়ে ভালো তা কিন্তু নয়। পার্থক্যটা হলো তারা পেজের ভেতরে গুগলকে পড়ার মতো একটা আলাদা ভাষা বসিয়ে রেখেছে, যার নাম Structured Data।
এই টিউনে আমরা হাতে কলমে সেই ভাষাটাই বসাব। JSON-LD ফরম্যাটে Article, Product আর BreadcrumbList স্কিমা লিখব, Schema Markup Validator দিয়ে সেটা পরীক্ষা করব, ইচ্ছে করে ভুল কোড দিয়ে দেখব ভ্যালিডেটর কীভাবে ভুল ধরিয়ে দেয়, তারপর WordPress সাইটে বসানোর কোড দেখব। প্রতিটি ধাপের সাথে আসল স্ক্রিনশট দেওয়া আছে, তাই আপনি নিজের স্ক্রিনের সাথে মিলিয়ে এগোতে পারবেন।
একটা ওয়েবপেজে যা লেখা থাকে তা মানুষের চোখে পরিষ্কার। দাম কোনটা, লেখক কে, তারিখ কোনটা, এসব আমরা দেখেই বুঝি। কিন্তু সার্চ ইঞ্জিনের কাছে পুরো পেজটাই এক গাদা টেক্সট। কোন সংখ্যাটা দাম আর কোনটা মডেল নম্বর, সেটা সে অনুমান করে। Structured Data হলো সেই অনুমান বন্ধ করার উপায়। এখানে আপনি নির্দিষ্ট শব্দভাণ্ডার মেনে বলে দেন কোনটা কী। শব্দভাণ্ডারটির নাম schema.org, আর সেটি গুগল, মাইক্রোসফট, ইয়াহু ও ইয়ানডেক্স মিলে তৈরি করেছে।
সার্চ রেজাল্টে যখন শুধু শিরোনাম, লিংক আর বর্ণনা দেখা যায় সেটাকে বলে সাধারণ রেজাল্ট। আর যখন তার সাথে ছবি, স্টার রেটিং, দাম, প্রশ্ন উত্তর বা ধাপের তালিকা যুক্ত হয়ে রেজাল্টটি বড় হয়ে যায়, সেটাকে বলে রিচ রেজাল্ট। রিচ রেজাল্ট আপনার অবস্থান সরাসরি বাড়ায় না, কিন্তু একই পজিশনে থেকেও অনেক বেশি ক্লিক এনে দেয়, কারণ চোখ আগে সেখানেই যায়। এই কারণেই ছোট সাইটের জন্য এটি খুব কার্যকর কৌশল।
স্কিমা লেখার তিনটি ফরম্যাট আছে। Microdata আর RDFa লিখতে হয় HTML ট্যাগের ভেতরে অ্যাট্রিবিউট হিসেবে, ফলে ডিজাইন বদলালেই স্কিমা ভেঙে যায়। JSON-LD আলাদা একটা ব্লকে বসে, HTML এর সাথে তার কোনো সম্পর্ক নেই। গুগল নিজেও JSON-LD ব্যবহারের পরামর্শ দেয়। তাই নতুন করে কাজ শুরু করলে JSON-LD বেছে নেওয়াই বুদ্ধিমানের কাজ, আর পুরোনো সাইটে Microdata থাকলে ধীরে ধীরে সেটাকে JSON-LD এ সরিয়ে আনা যায়।
যেকোনো ব্লগ আর্টিকেল বা নিউজ পেজের জন্য সবচেয়ে দরকারি টাইপ হলো Article। নিচের কোডটি একটি Article স্কিমার সবচেয়ে ছোট রূপ। পুরো অংশটি পেজের head এর ভেতরে একটি script ট্যাগে মুড়ে দিতে হয়, আর সেই ট্যাগের type হবে application/ld+json। এখানে context বলে দেয় শব্দভাণ্ডারটি কোথা থেকে আসছে, আর type বলে দেয় এই পেজটি আসলে কী। পড়ার সুবিধার জন্য নিচের কোডগুলোতে ইন্ডেন্ট দেওয়া হয়নি, কপি করে নিজের এডিটরে বসিয়ে সাজিয়ে নিতে পারবেন।
{"@context": "https://schema.org",
"@type": "Article",
"headline": "টিউনের পুরো শিরোনাম এখানে বসবে",
"image": "https://www.example.com/images/cover.jpg",
"datePublished": "2026-08-15T09:00:00+06:00",
"dateModified": "2026-08-15T09:00:00+06:00"}

শুধু শিরোনাম আর তারিখ দিলে স্কিমাটি দুর্বল থেকে যায়। গুগল জানতে চায় লেখাটি কে লিখেছে এবং কে প্রকাশ করেছে। author এর ভেতরে Person টাইপ বসিয়ে লেখকের নাম ও প্রোফাইল লিংক দিন, আর publisher এর ভেতরে Organization টাইপ বসিয়ে সাইটের নাম ও লোগো দিন। লোগোর জন্য আলাদা করে ImageObject টাইপ ব্যবহার করতে হয়, শুধু লিংক দিলে অনেক সময় ওয়ার্নিং আসে।
"author": {"@type": "Person",
"name": "নাছিরুল হক",
"url": "https://www.example.com/author/nasirul"},
"publisher": {"@type": "Organization",
"name": "Techtunes",
"logo": {"@type": "ImageObject",
"url": "https://www.example.com/logo.png"}}
কোড লেখা শেষ হলেই সেটা সাইটে বসিয়ে দেওয়া ঠিক নয়। আগে validator.schema.org ঠিকানায় গিয়ে Code snippet ট্যাবে পুরো ব্লকটি পেস্ট করুন এবং Run test চাপুন। ডান পাশে গুগল যেভাবে আপনার ডেটা পড়ছে ঠিক সেভাবেই সাজানো তালিকা দেখাবে। উপরে ডান দিকে এরর ও ওয়ার্নিং সংখ্যা দেখাবে। দুটোই শূন্য মানে আপনার স্কিমা পরিষ্কার।

একটা বিষয় খেয়াল করুন, ওখানে বাংলা শিরোনামটিও হুবহু পড়া হয়েছে। অর্থাৎ স্কিমায় বাংলা লিখতে কোনো সমস্যা নেই, ইউনিকোড টেক্সট গুগল ঠিকভাবেই বোঝে। অনেকে ভয়ে ইংরেজিতে শিরোনাম লেখেন, সেটির দরকার নেই।
ভ্যালিডেটরের আসল শক্তি বোঝা যায় যখন কোডে ভুল থাকে। পরীক্ষা করে দেখার জন্য একটি Recipe স্কিমায় ইচ্ছে করে কয়েকটি ভুল বসানো হয়েছিল। name এর জায়গায় লেখা হয়েছিল nam, cookTime এর জায়গায় cookTim, আর Person এর জায়গায় Persson। ফল হাতে হাতে পাওয়া গেছে।

এখানে বোঝার মতো তিনটি জিনিস আছে। প্রথমত, ভ্যালিডেটর কোন লাইনে সমস্যা তা লাল ক্রস দিয়ে দেখায়। দ্বিতীয়ত, বার্তায় স্পষ্ট লেখা থাকে প্রপার্টি ওই টাইপের জন্য স্বীকৃত নয়। তৃতীয়ত, ভুল টাইপ নাম দিলে সে আলাদা করে জানায় ওই নামের কোনো টাইপ স্কিমায় নেই। বানানের একটি অক্ষর ভুল হলেও গুগল পুরো তথ্যটুকু বাদ দিয়ে দেয়, তাই এই ধাপটি বাদ দেওয়া যাবে না।
অনলাইন দোকান চালালে সবচেয়ে লাভজনক টাইপ হলো Product। এখানে offers অবজেক্টের ভেতরে দাম, মুদ্রা ও স্টকের অবস্থা দিতে হয়, আর aggregateRating এ গড় রেটিং ও রিভিউ সংখ্যা দিতে হয়। বাংলাদেশি সাইটের জন্য মুদ্রা হবে BDT।
{"@context": "https://schema.org",
"@type": "Product",
"name": "Xiaomi Redmi Note 14 Pro",
"sku": "RN14P-256",
"brand": {"@type": "Brand", "name": "Xiaomi"},
"offers": {"@type": "Offer",
"priceCurrency": "BDT",
"price": "32999",
"availability": "https://schema.org/InStock"},
"aggregateRating": {"@type": "AggregateRating",
"ratingValue": "4.5",
"reviewCount": "187"}}

একটি সতর্কতা মনে রাখুন। স্কিমায় যে দাম দেখাবেন, পেজেও ঠিক সেই দামই লেখা থাকতে হবে। পেজে এক দাম আর স্কিমায় আরেক দাম থাকলে সেটিকে গুগল বিভ্রান্তিকর মার্কআপ ধরে এবং পুরো সাইটের রিচ রেজাল্ট বন্ধ করে দিতে পারে।
সার্চ রেজাল্টে অনেক সময় লিংকের জায়গায় হোম, বিভাগ, পেজ এভাবে পথ দেখা যায়। ওটাই ব্রেডক্রাম্ব। এর জন্য BreadcrumbList টাইপে ItemListElement এর তালিকা দিতে হয় এবং প্রতিটির position নম্বর ঠিক রাখতে হয়।
{"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [{"@type": "ListItem",
"position": 1,
"name": "হোম",
"item": "https://www.example.com/"},
{"@type": "ListItem",
"position": 2,
"name": "ওয়েব ডেভেলপমেন্ট",
"item": "https://www.example.com/web/"}]}
একটি পেজে Article আর BreadcrumbList দুটোই দরকার হতে পারে। অনেকে দুটি আলাদা script ব্লক বসান, সেটাও চলে। তবে পরিষ্কার উপায় হলো graph ব্যবহার করা। এতে একটি ব্লকের ভেতরেই একাধিক টাইপ রাখা যায় এবং পরে তাদের মধ্যে সম্পর্কও তৈরি করা যায়।
{"@context": "https://schema.org",
"@graph": [{"@type": "Article", "headline": "টিউনের শিরোনাম"},
{"@type": "BreadcrumbList", "itemListElement": []}]}
সব টাইপের জন্য গুগল রিচ রেজাল্ট দেখায় না। কোন কোন ফিচার সমর্থিত তার পুরো তালিকা গুগল সার্চ সেন্ট্রালে রাখা আছে, এবং সময়ের সাথে সেটি বদলায়। তাই কাজ শুরুর আগে ওই তালিকা একবার দেখে নেওয়া ভালো।

তালিকায় Article, Breadcrumb, Carousel, Course list, Dataset সহ অনেকগুলো ফিচার আছে। প্রতিটির নিজস্ব বাধ্যতামূলক প্রপার্টি আছে। যেমন Carousel এককভাবে কাজ করে না, তাকে Recipe বা Movie এর মতো অন্য কোনো ফিচারের সাথে জুড়ে দিতে হয়।
কোনো প্রপার্টি নিয়ে সন্দেহ হলে সরাসরি schema.org এ ওই টাইপের পেজে চলে যান। সেখানে তিন কলামের একটি টেবিল থাকে, প্রপার্টির নাম, কোন টাইপ আশা করা হচ্ছে এবং বর্ণনা। এই টেবিল দেখলেই বোঝা যায় কোন জায়গায় সাধারণ টেক্সট চলবে আর কোথায় আলাদা অবজেক্ট বসাতে হবে।

ওই পেজের উপরে ব্যবহারের একটি পরিসংখ্যানও থাকে। Product টাইপটি এখন এক কোটির বেশি ডোমেইনে ব্যবহৃত হচ্ছে বলে সেখানে দেখানো হয়েছে। এই সংখ্যাটি schema.org নিজেই প্রকাশ করে, তাই এটিকে তাদের দাবি হিসেবেই ধরা উচিত।
WordPress এ তিনটি পথ আছে। এক, Rank Math বা Yoast এর মতো এসইও প্লাগিন ব্যবহার করা, যারা নিজেরাই মৌলিক স্কিমা বসিয়ে দেয়। দুই, থিমের header ফাইলে সরাসরি কোড বসানো, যা থিম আপডেটে মুছে যায় বলে ভালো নয়। তিন, চাইল্ড থিমের functions ফাইলে হুক ব্যবহার করা, যেটিই সবচেয়ে নিরাপদ।
function tt_add_article_schema() {if (!is_single()) return;
$data = array("@context" => "https://schema.org",
"@type" => "Article",
"headline" => get_the_title(),
"datePublished" => get_the_date("c"));
$json = wp_json_encode($data);
wp_print_inline_script_tag($json, array("type" => "application/ld+json"));}
add_action("wp_head", "tt_add_article_schema");
এখানে wp_print_inline_script_tag আর wp_json_encode ব্যবহার করা হয়েছে ইচ্ছে করেই। এটি বাংলা টেক্সট ও উদ্ধৃতি চিহ্ন নিজে থেকেই নিরাপদ করে দেয়, ফলে হাতে লেখা JSON এর মতো ভাঙার ভয় থাকে না।
প্রথম ভুল হলো পেজে নেই এমন তথ্য স্কিমায় বসানো। যে রিভিউ পেজে দেখা যায় না সেটির রেটিং স্কিমায় দিলে সেটি নীতিবিরুদ্ধ। দ্বিতীয় ভুল হলো তারিখের ফরম্যাট। datePublished এ অবশ্যই ISO 8601 ফরম্যাট লাগবে, বাংলা বা দেশীয় ফরম্যাট চলবে না। তৃতীয় ভুল হলো ছবির লিংক আপেক্ষিক পথে দেওয়া, সেখানে সবসময় পূর্ণ ঠিকানা দিতে হবে।
ভুল"datePublished": "১৫ আগস্ট ২০২৬" ভুল"datePublished": "15/08/2026" সঠিক"datePublished": "2026-08-15T09:00:00+06:00"
স্কিমা বসানোর সাথে সাথেই সার্চে বদল আসে না। আগে গুগলকে পেজটি আবার ক্রল করতে হয়, তারপর সে সিদ্ধান্ত নেয় রিচ রেজাল্ট দেখাবে কি না। ছোট সাইটে এতে কয়েক দিন থেকে কয়েক সপ্তাহ লাগতে পারে। আর মনে রাখবেন, বৈধ স্কিমা থাকলেই রিচ রেজাল্ট পাওয়ার নিশ্চয়তা নেই, এটি গুগলের সিদ্ধান্ত। স্কিমা শুধু যোগ্যতা তৈরি করে দেয়।
প্রথমে দেখুন context ও type ঠিক আছে কি না। এরপর দেখুন প্রতিটি বাধ্যতামূলক প্রপার্টি আছে কি না। এরপর ভ্যালিডেটরে চালিয়ে এরর শূন্য করুন। এরপর মিলিয়ে দেখুন স্কিমার তথ্য আর পেজের দৃশ্যমান তথ্য এক কি না। সবশেষে একই পেজে একই টাইপ দুবার বসে যায়নি তা নিশ্চিত করুন, কারণ প্লাগিন আর হাতে লেখা কোড মিলে অনেক সময় দুবার বসে যায়।
কয়েক বছর আগেও FAQPage আর HowTo স্কিমা বসালে সার্চ রেজাল্টে প্রশ্ন উত্তর বা ধাপ ভেঙে দেখানো হতো, আর তাতে ক্লিক অনেক বাড়ত। পরে গুগল এই দুটির দেখানোর নিয়ম অনেকটাই সীমিত করে দেয়। এখন সাধারণ ব্লগ সাইটে এগুলো বসালেও সার্চে আলাদা করে ফুটে ওঠার সম্ভাবনা কম। তার মানে এই নয় যে বসানো নিষিদ্ধ। বৈধ স্কিমা পেজের অর্থ বুঝতে সাহায্য করে, তাই ক্ষতি নেই। তবে শুধু এই দুটির ভরসায় ট্রাফিক বাড়ার পরিকল্পনা করলে হতাশ হতে হবে। বরং Article, Product, BreadcrumbList আর Organization এই চারটিতে সময় দেওয়া বুদ্ধিমানের কাজ।
প্রতিটি টিউনে publisher বসানোর পাশাপাশি পুরো সাইটের জন্য একটি Organization স্কিমা হোমপেজে বসিয়ে রাখা ভালো। সেখানে সাইটের নাম, লোগো, যোগাযোগের ঠিকানা এবং সোশ্যাল প্রোফাইলের লিংকগুলো sameAs তালিকায় দিয়ে দিন। এতে গুগল বুঝতে পারে আপনার ফেসবুক পেজ, ইউটিউব চ্যানেল আর ওয়েবসাইট আসলে একই প্রতিষ্ঠানের। ব্র্যান্ড নাম দিয়ে কেউ সার্চ করলে ডান পাশে যে তথ্যবক্সটি আসে, সেটির ভিত্তিও এই স্কিমা। ছোট সাইটের জন্য এটি একবারের কাজ, অথচ ফল অনেক দিন ধরে পাওয়া যায়।
Structured Data কোনো জাদু নয়, এটি নিছক গুগলের সাথে পরিষ্কার ভাষায় কথা বলার একটা উপায়। একটি Article স্কিমা লিখতে দশ মিনিটও লাগে না, অথচ ঠিকভাবে বসালে সেটি বছরের পর বছর কাজ করে যায়। আজ একটি পেজে বসিয়ে ভ্যালিডেটরে পরীক্ষা করুন, কাজ করলে ধীরে ধীরে পুরো সাইটে ছড়িয়ে দিন। আপনার সাইটে কোন টাইপটি বসাতে চান তা টিউমেন্টে জানাতে পারেন।
আমি নাছিরুল হক। বিশ্বের সর্ববৃহৎ বিজ্ঞান ও প্রযুক্তির সৌশল নেটওয়ার্ক - টেকটিউনস এ আমি 2 দিন 16 ঘন্টা যাবৎ যুক্ত আছি। টেকটিউনস আমি এ পর্যন্ত 14 টি টিউন ও 0 টি টিউমেন্ট করেছি। টেকটিউনসে আমার 0 ফলোয়ার আছে এবং আমি টেকটিউনসে 0 টিউনারকে ফলো করি।
আমি নাছিরুল হক। প্রোগ্রামিং আর প্রযুক্তি নিয়ে ঘাঁটাঘাঁটি করতে ভালোবাসি। টেকটিউনসে মূলত Java প্রোগ্রামিং নিয়ে ধাপে ধাপে হাতে কলমে টিউটোরিয়াল লিখি — JDK ইনস্টল ও এনভায়রনমেন্ট সেটআপ থেকে শুরু করে IntelliJ IDEA, Exception Handling, OOP, Java Swing ও ফাইল হ্যান্ডলিং পর্যন্ত। এছাড়া স্মার্টফোন, ব্যাটারি ও নেটওয়ার্ক নিয়ে সহজ ভাষায় ব্যাখ্যামূলক...