সংক্ষেপে উত্তর
এই লেখায় যা আছে (10)
Google-এ কিছু product result-এর নিচে দাম, "In stock" আর তারকা rating দেখা যায়, আর কিছু result শুধু নীল title আর দুই লাইন লেখা। এই পার্থক্যের পেছনে একটা বড় কারণ হলো Product schema — page-এর ভেতরে রাখা structured data, যা Google-কে পরিষ্কারভাবে বলে "এটা একটা product, এর দাম এত, stock-এ আছে"। এই গাইডে দেখবেন Product, Offer ও AggregateRating কী, একটা সঠিক JSON-LD দেখতে কেমন, আর WooCommerce ও Laravel site-এ কীভাবে বসাবেন ও test করবেন।
Product schema কী, আর কেন দরকার
Schema হলো schema.org-এর নির্ধারিত একটা শব্দভান্ডার, যা দিয়ে page-এর তথ্যকে machine-readable করা হয়। Customer page-এ দেখেন "দাম: ৳১,৮৫০, stock-এ আছে" — Google-ও text পড়ে বুঝতে পারে, কিন্তু structured data থাকলে কোনটা দাম, কোনটা currency, কোনটা stock অবস্থা তা নিয়ে সন্দেহ থাকে না।
এর ফলে কী পেতে পারেন:
- Rich result: search result-এ দাম, availability, rating দেখানোর যোগ্যতা।
- Merchant listing: যেখানে সরাসরি কেনা যায় এমন product-কে Google-এর shopping-ধরনের জায়গায় দেখানোর যোগ্যতা (structured data থেকে, আর Merchant Center feed থাকলে তার সাথে মিলিয়ে)।
- পরিষ্কার বোঝাপড়া: Google ও AI-নির্ভর search tool page-এর তথ্য সঠিকভাবে পড়তে পারে।
একটা সতর্কতা: schema দিলে rich result নিশ্চিত নয়। Google যোগ্যতা যাচাই করে এবং নিজের বিবেচনায় দেখায়। আর schema নিজে ranking factor হিসেবে সরাসরি position বাড়ায় না — তবে result আকর্ষণীয় হলে click-এর সম্ভাবনা বাড়ে।
মূল অংশগুলো: Product, Offer, AggregateRating
| Type/Property | কী বোঝায় | উদাহরণ |
|---|---|---|
| Product → name | product-এর নাম | লাল সুতি কাজ করা Kurti |
| image | product ছবির URL (এক বা একাধিক) | https://.../kurti-red.webp |
| description | সংক্ষিপ্ত বর্ণনা | ১০০% সুতি, হাতের কাজ |
| sku / gtin / mpn | পরিচয় নম্বর | নিজের SKU; brand product-এ barcode থাকলে gtin |
| brand | brand নাম | নিজের brand বা manufacturer |
| Offer → price | বর্তমান বিক্রয়মূল্য (শুধু সংখ্যা) | 1850 |
| priceCurrency | ISO currency code | BDT |
| availability | stock অবস্থা | https://schema.org/InStock |
| AggregateRating | গড় rating ও সংখ্যা | 4.6, 23টা review |
Availability-র সাধারণ মান: InStock, OutOfStock, PreOrder, BackOrder। Pre-order-এ বিক্রি করলে সেটাই দিন — "In stock" লিখে পরে customer-কে ১৫ দিন অপেক্ষা করানো বিশ্বাস নষ্ট করে।
একটা সম্পূর্ণ JSON-LD উদাহরণ
Google JSON-LD format পছন্দ করে, যা page-এর <head> বা <body>-তে একটা script tag-এ বসে:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": "লাল সুতি কাজ করা Kurti",
"image": [
"https://example.com.bd/img/kurti-red-1200.webp"
],
"description": "১০০% সুতি কাপড়, গলায় হাতের কাজ, M/L/XL size।",
"sku": "KRT-RED-014",
"brand": { "@type": "Brand", "name": "Example Fashion" },
"offers": {
"@type": "Offer",
"url": "https://example.com.bd/product/lal-suti-kurti",
"price": "1850",
"priceCurrency": "BDT",
"availability": "https://schema.org/InStock",
"itemCondition": "https://schema.org/NewCondition"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.6",
"reviewCount": "23"
}
}
</script>
লক্ষ্য করুন: price-এ ৳ চিহ্ন বা কমা নেই, শুধু সংখ্যা। Currency আলাদা করে BDT। উপরের rating সংখ্যাগুলো শুধু উদাহরণ — আপনার page-এ আসলে যত review দেখানো আছে, সেটাই দিতে হবে।
Shipping ও return তথ্য
Google merchant listing-এর জন্য shippingDetails (delivery খরচ ও সময়) এবং hasMerchantReturnPolicy (return নীতি) দেওয়ার পরামর্শ দেয়। বাংলাদেশে ঢাকা ও ঢাকার বাইরে delivery charge আলাদা হলে সেটা এখানে প্রকাশ করা যায়। এগুলো product-প্রতি Offer-এর ভেতরে দেওয়া যায়; পুরো shop-এর একটাই নীতি হলে Organization markup-এর ভেতরে (hasShippingService, hasMerchantReturnPolicy) একবার দেওয়া যায়, আবার Search Console-এর shipping ও return settings বা Merchant Center-এও সেট করা যায়। একাধিক জায়গায় দিলে Google-এর নিয়মে Search Console/Merchant Center-এর settings markup-এর চেয়ে অগ্রাধিকার পায়, তাই সব জায়গায় একই তথ্য রাখুন। শুরুতে মূল Product/Offer ঠিক করুন, তারপর এগুলো যোগ করুন।
Variant (size/color) থাকলে
একই kurti-র ৩টা size ও ২টা color থাকলে, আর প্রতিটার দাম একই হলে একটা Offer যথেষ্ট। দাম আলাদা হলে AggregateOffer (lowPrice/highPrice) ব্যবহার করা যায়, অথবা Google-এর সমর্থিত ProductGroup কাঠামো (productGroupID, variesBy যেমন size/color, আর hasVariant-এর ভেতরে প্রতিটা variant-এর আলাদা Product ও Offer) ব্যবহার করা যায় — product snippets ও merchant listings দুটোই variant markup সমর্থন করে। কোনটা আপনার site-এর জন্য ঠিক, তা developer-এর সাথে বসে ঠিক করুন।
WordPress/WooCommerce-এ Product schema
WooCommerce নিজেই product page-এ মৌলিক Product structured data যোগ করে (name, price, availability, review থাকলে rating)। Yoast (WooCommerce add-on সহ) বা Rank Math-এর মতো SEO plugin এটা আরও সমৃদ্ধ করে — brand, gtin ইত্যাদি। মূল কাজ হলো একটাই সুসংগত schema নিশ্চিত করা।
- 1যেকোনো একটা product page-এর URL Google Rich Results Test-এ দিন এবং কী কী item ধরা পড়ছে দেখুন।
- 2একাধিক Product item বা conflict থাকলে কোন plugin/theme থেকে আসছে খুঁজে বের করে অতিরিক্তটা বন্ধ করুন।
- 3প্রতিটা product-এ SKU পূরণ করুন; brand product হলে barcode (GTIN) থাকলে সেটাও দিন।
- 4SEO plugin-এর settings-এ brand field বা attribute ঠিক করুন।
- 5Sale price চালু করে test করুন — schema-র price যেন page-এ দেখানো দামের সাথে মেলে।
- 6Out of stock product-এর availability schema-তে OutOfStock দেখাচ্ছে কিনা দেখুন।
- 7Search Console-এর Merchant listings ও Product snippets report-এ কয়েক সপ্তাহ পর error/warning দেখুন।
Custom site (Laravel)-এ Product schema
Laravel-এ product model থেকে একটা PHP array বানিয়ে JSON-এ রূপান্তর করাই সবচেয়ে নিরাপদ — হাতে string জোড়া দিলে quote বা কমার ভুলে JSON ভেঙে যায়।
@php
$schema = [
'@context' => 'https://schema.org',
'@type' => 'Product',
'name' => $product->name,
'image' => [$product->image_url],
'sku' => $product->sku,
'offers' => [
'@type' => 'Offer',
'url' => url()->current(),
'price' => (string) ($product->sale_price ?: $product->price),
'priceCurrency' => 'BDT',
'availability' => $product->stock > 0
? 'https://schema.org/InStock'
: 'https://schema.org/OutOfStock',
],
];
@endphp
<script type="application/ld+json">
{!! json_encode($schema, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_HEX_TAG) !!}
</script>
JSON_HEX_TAG দেওয়ায় product-এর নামে < বা > থাকলেও তা escape হয়ে যায়, ফলে script tag ভাঙে না; আর {!! !!} ব্যবহার করা হয়েছে যাতে Blade আবার HTML-escape না করে। Column-এর নাম (sale_price, price, stock, image_url) আপনার database অনুযায়ী বদলে নিন। Rating যোগ করবেন শুধু তখনই, যখন site-এ আসল review system আছে এবং review page-এ দেখা যায়। Review না থাকলে aggregateRating অংশটা বাদ দিন — খালি বা ০ rating দেবেন না।
সাধারণ ভুলগুলো
Schema-র বাইরেও যা জরুরি
Schema হলো page-এর তথ্যকে গুছিয়ে Google-কে বলার উপায় — কিন্তু তথ্যটাই যদি দুর্বল হয়, schema বাঁচাতে পারবে না। ভালো title, মৌলিক description, স্পষ্ট ছবি ও দাম থাকলে তবেই পুরো লাভ পাবেন। পুরো ছবি পেতে পড়ুন Product SEO গাইড ও product description SEO। Google Shopping-এ product দেখাতে চাইলে Google Merchant Center setup-ও দেখুন — schema আর feed-এর তথ্য একই হওয়া দরকার। Product page-এ প্রশ্নোত্তর রাখলে FAQ schema নিয়ে বাস্তব চিত্রও জেনে নিন।
এখন কী করবেন
আপনার ৩টা best-selling product-এর URL Rich Results Test-এ দিন। দেখুন Product item আছে কিনা, price/currency/availability ঠিক আছে কিনা, আর duplicate আছে কিনা। সমস্যা পেলে প্রথমে duplicate সরান, তারপর SKU ও brand পূরণ করুন, সবশেষে shipping ও return তথ্য যোগ করার পরিকল্পনা করুন।
Checklist: Product Schema: Google-এ দাম, Stock ও Rating দেখানোর JSON-LD গাইড

