مقالات

آموزش کامل پیاده‌سازی دستی اسکیمای JSON-LD (راهنمای گام به گام برای سئوکاران)

آموزش کامل پیاده‌سازی دستی اسکیمای JSON-LD (راهنمای گام به گام برای سئوکاران)

سلام رفیق! خب، تا اینجای کار با هم یه سفر کامل و عمیق رو طی کردیم. یادت میاد اولش گفتم اسکیما مثل یه «جادو» میمونه؟ مثل یه زبان مخفی که باهاش با گوگل حرف می‌زنیم؟

ما با هم از تعریف JSON-LD شروع کردیم، یاد گرفتیم چطور کد Article رو بنویسیم، از اشتباهات رایج گفتیم، و حتی سراغ کدهای پیشرفته‌تری مثل FAQ و LocalBusiness رفتیم. حالا تو دیگه فقط یه نویسنده محتوا نیستی؛ تو یه «معمار محتوا» هستی!

تو یاد گرفتی که پیاده‌سازی داده‌های ساختاریافته (Structured Data) فقط یه کار فنی و خشک نیست. این یه هنره. هنرِ اعتمادسازی با گوگل و هنرِ واضح‌تر حرف زدن با ربات‌ها. تو داری به گوگل کمک می‌کنی که «ارزش» واقعی کارت رو بفهمه و به کاربرانت بهترین تجربه رو بدی.

قبل از اینکه این بحث رو ببندیم، می‌خوام یه جدول جمع‌وجور بهت بدم که بتونی سریع بفهمی برای هر نوع محتوا، سراغ کدوم اسکیما بری. این جدول رو جایی دم دستت نگه دار، چون قراره حسابی کمکت کنه.

جدول کاربردی: کدام اسکیما برای کدام محتوا؟

این جدول کمکت می‌کنه که بر اساس نوع محتوات، سریع‌ترین و بهترین @type رو انتخاب کنی:

نوع محتوا / هدف نوع اسکیمای پیشنهادی (Type@) چرا از دید «نگین» مهمه؟
پست وبلاگ / مقاله Article (یا BlogPosting) (E-E-A-T): برای اثبات نویسنده (author) و ناشر (publisher) حیاتیه.
سوالات متداول FAQPage (SERP): افزایش فضا در نتایج جستجو و بالا بردن نرخ کلیک (CTR).
کسب‌وکار محلی LocalBusiness (اعتماد): اثبات وجود فیزیکی شما به گوگل (آدرس، تلفن، ساعت کاری).
صفحه محصول Product (CRO): نمایش قیمت، موجودی و ستاره‌های امتیاز در نتایج (Rich Snippet).
دستور پخت Recipe (Rich Snippet): نمایش زمان پخت، کالری و تصویر جذاب در نتایج.
معرفی نویسنده Person (E-E-A-T): ساختن اعتبار برای نویسنده‌ها و لینک کردن مقالات بهشون.
صفحه «درباره ما» Organization (اعتماد): معرفی برند، لوگو و شبکه‌های اجتماعی رسمی به گوگل.

اسکیمای JSON-LD چیست و چرا گوگل آن را به Microdata ترجیح می‌دهد؟

قبل از اینکه بپریم سراغ JSON-LD، باید یه قدم بریم عقب‌تر و بفهمیم «داده ساختاریافته» اصلاً یعنی چی.

داده‌های ساختاریافته (Structured Data) به زبان ساده: چگونه با ربات‌ها صحبت کنیم؟

تصور کن ربات گوگل مثل یه توریسته که وارد سایت تو شده. این توریست می‌تونه کلمات رو «بخونه»، اما لزوماً «معنی» پشت اون‌ها رو درک نمی‌کنه. مثلاً وقتی می‌بینه نوشتی «نگین شیخ الاسلامی»، نمی‌دونه این اسم نویسنده‌ست؟ اسم یه محصوله؟ یا اسم یه نظریه علمی؟

داده ساختاریافته (Structured Data) مثل یه مترجم یا یه تابلوی راهنمای خیلی دقیق عمل می‌کنه. تو با استفاده از یه سری کد مشخص، به گوگل می‌گی:

  • «این متن، اسم نویسنده مقاله‌ست.»
  • «این عدد، قیمت محصوله.»
  • «این متن، دستور پخت یه غذاست.»
  • «این‌ها، سوالات متداول (FAQ) مربوط به این موضوع هستن.»

این کار باعث می‌شه گوگل بتونه محتوای تو رو نه به عنوان یه مشت متن ساده، بلکه به عنوان اطلاعاتی سازمان‌یافته و پر از اطلاعات اصلی و تحلیلی ببینه.

تعریف دقیق JSON-LD (JavaScript Object Notation for Linked Data)

خب، حالا که فهمیدیم داده ساختاریافته چیه، چطور باید پیاده‌سازیش کنیم؟ اینجاست که JSON-LD وارد می‌شه.

JSON-LD (که مخفف JavaScript Object Notation for Linked Data هست) یه «روش» یا یه «فرمت» برای نوشتن اون کدهای مترجمه.

بذار راحت‌تر بگم: JSON-LD یه قطعه کد اسکریپته (شبیه جاوا اسکریپت) که تو معمولاً توی قسمت <head> یا <body> صفحه‌ت قرار می‌دی. این کد جدا از محتوای اصلی HTML توئه.

انگار که تو مقاله‌ت رو نوشتی، و بعد یه «برگه تقلب» جداگونه برای ربات گوگل آماده کردی و بهش گفتی: «اگه حوصله نداری کل متن رو بخونی و حدس بزنی، بیا اینم خلاصه‌ی دقیقش!»

تحلیل تخصصی: مقایسه JSON-LD در مقابل Microdata و RDFa

تا چند سال پیش، اگه می‌خواستی اسکیما پیاده کنی، کارت خیلی سخت‌تر بود. باید از روش‌هایی مثل Microdata یا RDFa استفاده می‌کردی.

راستش رو بخوای، من خودم تجربه کار با Microdata رو داشتم و واقعاً یه کابوس بود. چرا؟

  • Microdata و RDFa (روش‌های قدیمی): توی این روش‌ها، تو باید کدهای اسکیما رو مستقیماً داخل کدهای HTML اصلی صفحه‌ت تزریق می‌کردی. مثلاً باید می‌رفتی تگ <h2> رو پیدا می‌کردی و بهش یه عالمه itemscope و itemprop اضافه می‌کردی تا به گوگل بگی این عنوانه.
  • مشکل چه بود؟ اولاً، کدهای HTML رو فوق‌العاده شلوغ و کثیف می‌کرد. ثانیاً، اگه طراح سایت تصمیم می‌گرفت یه تغییر کوچیک تو ساختار صفحه بده، کل اسکیمای تو به هم می‌ریخت. اینجوری محتوای تو شبیه محتوایی می‌شد که سهل‌انگارانه یا عجولانه تولید شده، چون نگهداریش واقعاً سخت بود.

اما JSON-LD (قهرمان داستان):

JSON-LD اومد گفت: «چرا اینقدر همه‌چیز رو قاطی می‌کنید؟»

همونطور که گفتم، JSON-LD یه بلوک کد جداگانه‌ست. اصلاً کاری به تگ‌های <h2> و <p> تو نداره. این یعنی:

  1. پیاده‌سازی تمیز: کدهای HTML تو تمیز و دست‌نخورده باقی می‌مونن. این نشون‌دهنده کیفیت تولید و نگارش و توجه به جزئیات در سایت توئه.
  2. مدیریت آسان: اگه بخوای اسکیمات رو آپدیت کنی، فقط همون یه تیکه کد رو تغییر می‌دی. دیگه لازم نیست کل ساختار HTML رو زیر و رو کنی.
  3. محبوب گوگل: خود گوگل رسماً اعلام کرده که JSON-LD رو ترجیح می‌ده. چرا؟ چون خوندنش براش راحت‌تره، کمتر دچار خطا می‌شه و مدیریت بهتری داره.

مزایای مستقیم پیاده‌سازی اسکیما برای سئو (کسب Rich Snippets و تقویت E-E-A-T)

خب، رسیدیم به بخش جذاب ماجرا. این همه زحمت برای چی؟

۱. کسب نتایج غنی (Rich Snippets)

این همون «جادویی» بود که اول متن بهت گفتم. وقتی تو از اسکیما درست استفاده می‌کنی، گوگل می‌تونه محتوای تو رو به شکل خیلی جذاب‌تری توی نتایج جستجو نشون بده. مثل:

  • ستاره‌های امتیازدهی (برای محصولات یا مقالات)
  • نمایش قیمت و موجودی کالا
  • سوالات متداول (FAQ) به صورت بازشونده
  • مراحل «چگونه» (How-to)
  • اطلاعات مربوط به دستور پخت (زمان پخت، کالری و…)

این نتایج غنی (Rich Snippets) باعث می‌شن لینک تو توی نتایج جستجو بیشتر به چشم بیاد. این یعنی تو داری ارزش افزوده‌ای نسبت به نتایج دیگر ارائه می‌دی و یه جورایی یه خلاصه توصیفی و مفید از محتوات رو همونجا به کاربر نشون می‌دی.

۲. تقویت E-E-A-T (تجربه، تخصص، اعتبار، اعتماد)

این بخش مورد علاقه منه. E-E-A-T (تجربه، تخصص، اعتبار و اعتماد) ستون فقرات محتوای باکیفیته. اسکیما یه ابزار فوق‌العاده قوی برای اثبات E-E-A-T به گوگله.

چطوری؟

  • اعتبار و اعتماد (Authority & Trust): تو می‌تونی با اسکیمای Organization (سازمان) به گوگل بگی که تو یه کسب‌وکار واقعی هستی.
  • تخصص و تجربه (Expertise & Experience): تو می‌تونی با اسکیمای Author (نویسنده)، مقاله رو به صفحه‌ی معرفی نویسنده لینک بدی. اینجوری به گوگل ثابت می‌کنی که این محتوا توسط یه متخصص یا علاقه‌مند نوشته شده که دانش و تجربه مستقیم در اون زمینه داره.

وقتی تو این اطلاعات رو به صورت ساختاریافته به گوگل می‌دی، داری بهش شواهدی از تخصص و منابع واضح ارائه می‌دی که باعث می‌شه محتوای تو قابل اعتماد به نظر برسه.

پیش‌نیازهای اساسی: درک ساختار و واژگان Schema.org

هر کاری یه سری پیش‌نیاز داره. برای نوشتن اسکیمای JSON-LD هم، ما باید اول دو چیز رو بشناسیم: یکی «لغت‌نامه» و یکی «گرامر». لغت‌نامه ما Schema.org و گرامر ما، ساختار خود JSON-LD هست.

آشنایی با موجودیت کلیدی: Schema.org (کتابخانه واژگان ما)

اون کشور خارجی که گفتم رو یادت بیار. اسم اون کشور و زبان رسمیش هست: Schema.org.

این سایت (Schema.org) یه جورایی مثل یه «دیکشنری» یا یه کتابخونه عظیم و مورد توافقه که توسط خود غول‌های جستجو (گوگل، مایکروسافت، یاهو و…) ساخته شده.

تمام «کلمات» و «مفاهیمی» که ما لازم داریم تا محتوای سایتمون رو به ربات‌ها توصیف کنیم، اونجا تعریف شده. مثلاً:

  • اگه می‌خوای بگی «این یه مقاله است»، باید از لغت Article استفاده کنی.
  • اگه می‌خوای بگی «این یه محصوله»، باید از لغت Product استفاده کنی.
  • اگه می‌خوای بگی «این یه دستور پخته»، باید از لغت Recipe استفاده کنی.

ما اجازه نداریم از خودمون کلمه در بیاریم! باید دقیقاً از واژگانی استفاده کنیم که توی این کتابخونه تعریف شده.

ساختار پایه‌ای یک اسکریپت JSON-LD (تگ <script>)

خب، حالا که دیکشنری رو داریم، چطور باید ازش استفاده کنیم؟

یادت که هست گفتم JSON-LD مثل یه قطعه کد جداگانه‌ست؟ ما این کد رو داخل یه تگ <script> مخصوص توی HTML صفحه‌مون می‌ذاریم (معمولاً توی <head> یا <body>). اینجوری به مرورگر و ربات‌ها می‌گیم: «هی، این یه تیکه کد جاوا اسکریپت عادی نیست، این کد از نوع JSON-LD هست و داره یه سری اطلاعات مهم رو توصیف می‌کنه.»

ساختار کلیش این شکلیه:

HTML
<script type="application/ld+json">
{
  // جادوی ما و صحبت با ربات‌ها اینجا اتفاق میفته...
}
</script>

تشریح اجزای حیاتی: @context, @type و جفت‌های «ویژگی-مقدار» (Property-Value)

عالی! حالا بیا داخل اون آکولاد {} رو باز کنیم و ببینیم چه خبره. هر کد JSON-LD معمولاً از سه بخش حیاتی تشکیل شده:

۱. @context (زمینه یا همون دیکشنری):

این تقریباً همیشه اولین خط کده و به ربات می‌گه: «برای فهمیدن معنی کلماتی که در ادامه استفاده می‌کنم، لطفاً به این آدرس (دیکشنری) مراجعه کن.»

“@context”: “https://schema.org”

این خط یعنی: «داریم با زبون Schema.org حرف می‌زنیم.»

۲. @type (نوع موجودیت):

این مهم‌ترین بخشه. اینجا تو به گوگل می‌گی اصل این صفحه در مورد چیه. داری «نوع» اطلاعاتت رو مشخص می‌کنی.

“@type”: “Article” (یعنی: «چیزی که دارم توصیف می‌کنم، یه مقاله است.»)

یا

“@type”: “Product” (یعنی: «این یه محصوله.»)

۳. جفت‌های «ویژگی-مقدار» (Property-Value):

خب، حالا که به گوگل گفتی این یه «مقاله» است، گوگل می‌پرسه: «خب، این مقاله‌ت چه ویژگی‌هایی داره؟»

اینجاست که تو شروع می‌کنی به توصیف جزئیات. هر ویژگی (Property) یه مقدار (Value) می‌گیره. مثلاً:

  • ویژگی name (اسم مقاله): مقدارش می‌شه "آموزش سئو مقدماتی"
  • ویژگی author (نویسنده): مقدارش می‌شه "نگین شیخ الاسلامی"
  • ویژگی datePublished (تاریخ انتشار): مقدارش می‌شه "2025-10-25"

پس یه نمونه کد ساده اینجوری می‌شه:

JSON
{
  "@context": "https://schema.org",
  "@type": "Article",
  "name": "آموزش کامل اسکیما JSON-LD",
  "author": "نگین شیخ الاسلامی",
  "datePublished": "2025-11-03"
}

چگونه نوع (Type) مناسب را از Schema.org پیدا کنیم؟

این یه سوال عالیه و نشون می‌ده حواست جمعه.

بهترین راه اینه که خودت مستقیم بری توی سایت Schema.org و جستجو کنی. مثلاً اگه یه صفحه معرفی محصول داری، کلمه‌ی “Product” رو جستجو می‌کنی. خود سایت Schema.org بهت می‌گه که چه Type هایی وجود داره و هرکدوم چه «ویژگی‌هایی» (مثل name, description, sku, price) می‌تونن داشته باشن.

یه نکته کلیدی از تجربه من: همیشه سعی کن دقیق‌ترین (Specific) نوع ممکن رو انتخاب کنی.

مثلاً: اگه مقاله‌ت یه مقاله خبریه، به جای Article (که خیلی کلیه) از NewsArticle استفاده کن. اگه مقاله‌ت یه پست وبلاگیه، از BlogPosting استفاده کن.

هرچی دقیق‌تر باشی، به گوگل کمک کردی که محتوای تو رو عمیق‌تر بفهمه. این یعنی داری پوشش جامع و کامل موضوع رو بهش نشون می‌دی و به جای اطلاعات کلی، اطلاعات اصلی و تحلیلی به ربات می‌دی. اینجوری گوگل هم با خیال راحت‌تری به تو اعتماد می‌کنه.

راهنمای گام به گام: نوشتن اولین اسکیمای JSON-LD (مثال: اسکیمای Article)

بیا قدم به قدم پیش بریم.

مرحله ۱: انتخاب @type صحیح (مثال: Article یا BlogPosting)

اولین و مهم‌ترین قدم. باید به گوگل بگیم «نوع» این محتوا چیه.

یادته که گفتیم با @type این کار رو می‌کنیم؟ برای یه مقاله استاندارد، می‌تونی خیلی راحت از "@type": "Article" استفاده کنی.

اما اگه بخوای یه کم حرفه‌ای‌تر عمل کنی و به گوگل سیگنال دقیق‌تری بدی (که من همیشه عاشق این کارم!)، می‌تونی مشخص‌تر باشی:

  • BlogPosting: اگه این یه پست وبلاگه (که معمولاً هم همینه).
  • NewsArticle: اگه یه مقاله خبری فوری و مهمه.
  • TechArticle: اگه یه مقاله فنی و تخصصیه.

استفاده از نوع دقیق‌تر نشون می‌ده که تو داری به جزئیات توجه و مراقبت می‌کنی و کارت رو سهل انگارانه یا عجولانه انجام ندادی.

ما برای این مثال، از همون Article استفاده می‌کنیم که همه‌فهم‌تره.

مرحله ۲: افزودن ویژگی‌های ضروری (مانند headline, image, author)

خب، به گوگل گفتیم این یه «مقاله» است. حالا گوگل می‌پرسه: «خب، در موردش بهم بگو!»

این ویژگی‌ها «ضروری» هستن. یعنی اگه نباشن، اسکیمای تو ناقصه و ارزشی نداره.

  1. headline (عنوان): این همون عنوان مقاله یا H1 توئه. این عنوان باید یه خلاصه توصیفی و مفید از محتوا باشه. یادت باشه، اینجا جای اغراق آمیز بودن و همچنین تکان دهنده بودن نیست.
  2. image (تصویر): باید آدرس تصویر شاخص مقاله‌ت رو اینجا بذاری. گوگل عاشق نمایش تصویر توی نتایج جستجوئه.
  3. author (نویسنده): این بخش مورد علاقه منه! اینجا دقیقاً همون‌جاییه که شروع می‌کنی به ساختن E-E-A-T.

مرحله ۳: افزودن ویژگی‌های توصیه‌شده برای E-E-A-T (مانند publisher, datePublished, dateModified)

اگه فقط مرحله ۲ رو انجام بدی، کارت «قابل قبوله». اما اگه می‌خوای «عالی» باشی و به گوگل ثابت کنی که تو یه مرجع معتبر هستی، باید این ویژگی‌ها رو هم اضافه کنی.

اینجا داریم به گوگل شواهدی از تخصص نویسنده و منابع واضح می‌دیم.

  1. publisher (ناشر): نویسنده (author) کسیه که مقاله رو نوشته، اما ناشر (publisher) اون برند یا سازمانیه که مقاله رو منتشر کرده (مثلاً: «وزیر سئو»). این به شدت به اعتبار سایتت کمک می‌کنه.
  2. datePublished (تاریخ انتشار): تاریخی که مقاله اولین بار منتشر شده.
  3. dateModified (تاریخ ویرایش): این یکی فوق‌العاده مهمه.

یه تجربه شخصی: من سایت‌هایی رو دیدم که فقط تاریخ انتشار رو هر روز آپدیت می‌کنن تا مقاله‌شون «جدید» به نظر برسه، در حالی که محتوا هیچ تغییری نکرده. این کار فاجعه‌ست و اعتماد گوگل رو از بین می‌بره.

تو فقط زمانی باید از dateModified استفاده کنی که واقعاً محتوا رو آپدیت کردی، بهش ارزش افزوده و اصالت قابل توجهی اضافه کردی و اطلاعات جدیدی ارائه دادی. این صداقت، در درازمدت برنده می‌شه.

(کد نمونه) یک قالب آماده و قابل کپی برای اسکیمای Article

خب، بریم سراغ اصل ماجرا. این یه نمونه کامل و تمیز از اسکیمای Article هست که می‌تونی برای مقاله‌هات ازش الگو بگیری. فقط یادت باشه که مقادیرش رو با اطلاعات واقعی خودت جایگزین کنی.

JSON
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "راهنمای کامل اسکیمای JSON-LD برای تازه‌کارها",
  "image": "https://vazirseo.com/images/json-ld-guide.jpg",
  "author": {
    "@type": "Person",
    "name": "نگین شیخ الاسلامی",
    "url": "https://vazirseo.com/author/negin-sheikholeslami/"
  },
  "publisher": {
    "@type": "Organization",
    "name": "وزیر سئو",
    "logo": {
      "@type": "ImageObject",
      "url": "https://vazirseo.com/logo.png"
    }
  },
  "datePublished": "2025-10-20",
  "dateModified": "2025-11-03",
  "description": "توی این مقاله یاد می‌گیریم چطور اسکیمای Article رو قدم به قدم با JSON-LD پیاده‌سازی کنیم تا E-E-A-T سایتمون رو تقویت کنیم."
}
</script>

دیدی؟ اصلاً ترسناک نبود!

ما به گوگل گفتیم:

  • این یه مقاله (Article) است.
  • عنوانش (headline) چیه.
  • نویسنده‌ش (author) یه شخص (Person) به اسم «نگین شیخ الاسلامی» است.
  • ناشرش (publisher) یه سازمان (Organization) به اسم «وزیر سئو» است.
  • و تاریخ انتشار و آپدیتش کی بوده.

همین! تو همین الان یه اسکیمای کامل و حرفه‌ای نوشتی.

(تجربه عملی) اشتباهات رایج در پیاده‌سازی دستی اسکیما که باید از آن‌ها اجتناب کنید

خطای Syntax: فراموش کردن کاما (,) یا آکولاد {}

این رایج‌ترین و همزمان اعصاب‌خردکن‌ترین اشتباه ممکنه. JSON (که JSON-LD بر پایه اونه) به شدت به علائم نگارشی حساسه.

  • فراموش کردن کاما (,): توی JSON، هر «جفت ویژگی-مقدار» باید با یه کاما از بعدی جدا بشه، به جز آخری. من خودم بارها یادم رفته کامای آخرین مورد رو بردارم، یا کامای یکی مونده به آخر رو یادم رفته بذارم و کل کد خطا داده.
  • نبستن آکولاد {} یا براکت []: اگه یه آکولاد باز می‌کنی (مثلاً برای تعریف author) باید حواست باشه دقیقاً سر جای درستش ببندیش.

این خطاها شاید فنی باشن، اما از دید گوگل نشون‌دهنده کیفیت پایین تولیدو توجه ناکافی به جزئیات هستن. این دقیقاً مثل محتواییه که پر از غلط املایی و سهل‌انگارانه نوشته شده.

استفاده از @type اشتباه یا ویژگی‌های منسوخ شده

دیکشنری Schema.org یه موجود زنده و پویاست و دائماً در حال آپدیت شدنه. یه ویژگی (Property) که پارسال عالی کار می‌کرد، ممکنه امسال «منسوخ» (Deprecated) شده باشه.

من دیدم که خیلیا هنوز از @type های خیلی قدیمی استفاده می‌کنن یا ویژگی‌هایی رو به کار می‌برن که دیگه اعتباری ندارن. این کار مثل اینه که تو یه مقاله علمی، به یه منبع ارجاع بدی که ۱۰ سال پیش رد شده. این کار مستقیماً تخصص و به‌روز بودن تو رو زیر سوال می‌بره. همیشه قبل از استفاده، یه سر به خود سایت Schema.org بزن و از اعتبار اون ویژگی مطمئن شو.

عدم تطابق محتوای اسکیما با محتوای قابل مشاهده صفحه (نقض دستورالعمل گوگل)

این یکی دیگه اشتباه فنی نیست؛ این یه جورایی تقلب محسوب می‌شه و گوگل به شدت باهاش برخورد می‌کنه.

تصور کن تو توی اسکیما، امتیاز ۵ ستاره ("ratingValue": "5") برای مقاله‌ت تعریف می‌کنی، در حالی که اصلاً توی صفحه هیچ سیستم امتیازدهی یا نظری وجود نداره که کاربر بتونه ببینه. یا توی اسکیمای FAQ، سوال و جواب‌هایی می‌ذاری که اصلاً اون‌ها رو توی متن صفحه قرار ندادی.

این کار دقیقاً مصداق تولید محتوا برای موتور جستجوئه، نه کاربر. تو داری سعی می‌کنی گوگل رو گول بزنی تا یه Rich Snippet جذاب بگیری. این کار مستقیماً اعتماد  کاربر و گوگل رو از بین می‌بره. یادت باشه، اسکیما باید آینه‌ی محتوای قابل مشاهده‌ی تو باشه، نه یه ویترین دروغین.

این کار دقیقاً مثل استفاده از عناوین اغراق‌آمیز یا دستکاری تاریخ انتشار برای جدید به نظر رسیدن محتواست؛ همه‌شون روش‌های فریبکارانه‌ای هستن که اعتبار تو رو نابود می‌کنن.

مشکل رایج: تودرتو (Nesting) کردن نادرست اسکیماها

این یه اشتباه پیشرفته‌تره اما خیلی اتفاق میفته. بعضی وقت‌ها تو می‌خوای چندتا اسکیما رو با هم ترکیب کنی (Nesting). مثلاً می‌خوای بگی نویسنده (author) خودش یه «شخص» (Person) هست و ناشر (publisher) یه «سازمان» (Organization).

اشتباه رایج اینه که این‌ها رو اشتباهی داخل هم قرار می‌دن. مثلاً author رو زیرمجموعه‌ی publisher تعریف می‌کنن در حالی که باید جدا باشه.

این کار باعث می‌شه ربات گوگل گیج بشه و نتونه روابط معنایی رو درست درک کنه. این نشون می‌ده که تو هنوز تحلیل عمیقی از ساختار اطلاعاتت نداری و نمی‌تونی شواهدی از تخصص خودت رو به درستی به گوگل ارائه بدی.

دیدی؟ اینا خطاهایی هستن که شاید اولش کلافه‌کننده باشن، اما وقتی قلقشون دستت بیاد، دیگه تکرارشون نمی‌کنی. تست کردن، تست کردن و دوباره تست کردن (با ابزارهایی مثل Rich Results Test گوگل) بهترین دوست تو تو این مسیره.

H2: چگونه اسکیمای JSON-LD نوشته‌شده را اعتبارسنجی و تست کنیم؟

معرفی ابزار رسمی گوگل: Rich Results Test (تست نتایج غنی)

این ابزار، خط مقدم ماجراست. من همیشه اول کدم رو میارم اینجا.

Rich Results Test (تست نتایج غنی) ابزار اصلی گوگله که دو تا کار خیلی مهم انجام می‌ده:

۱. بهت می‌گه آیا اسکیمای تو از نظر فنی (Syntax) درسته یا نه.

۲. (و مهم‌تر از اون) بهت می‌گه آیا این اسکیما واجد شرایط دریافت نتایج غنی (Rich Results) هست یا نه.

یادته در مورد ستاره‌های امتیازدهی یا سوالات FAQ توی نتایج جستجو حرف زدیم؟ این ابزار به تو می‌گه که آیا گوگل اسکیمای تو رو برای نشون دادن اون نتایج جذاب قبول کرده یا نه. این ابزار مستقیماً بهت نشون می‌ده که آیا داری ارزش افزوده‌ای نسبت به نتایج دیگر ارائه می‌دی یا نه.

استفاده از ابزار Schema Markup Validator (جایگزین SDTT)

اونایی که مثل من یه کم قدیمی‌ترن، با ابزار محبوب «Structured Data Testing Tool» یا همون SDTT گوگل خیلی خاطره دارن. اون ابزار فوق‌العاده بود چون همه‌چیز رو نشون می‌داد. گوگل چند وقت پیش اون رو بازنشسته کرد و این ابزار جدید (Schema Markup Validator) رو به جاش معرفی کرد.

تفاوتش با Rich Results Test چیه؟

  • Rich Results Test فقط روی اسکیمهایی تمرکز می‌کنه که نتیجه بصری توی گوگل دارن (مثل مقاله، محصول، دستور پخت).
  • Schema Markup Validator اما همه‌ی انواع اسکیما رو اعتبارسنجی می‌کنه، حتی اونایی که نتیجه بصری ندارن (مثل اسکیمای Organization یا Person).

تجربه شخصی من: من همیشه از هر دو استفاده می‌کنم. اول با Rich Results Test چک می‌کنم که نتایج غنی رو می‌گیرم یا نه. بعدش کد رو توی Validator می‌ذارم تا مطمئن شم کل ساختار داده‌هام، حتی اون بخش‌های مربوط به برندینگ و E-E-A-T، درست و منطقی چیده شده.

نحوه خواندن و رفع خطاهای (Errors) و هشدارهای (Warnings) رایج

خب، کد رو وارد یکی از این ابزارها کردی و… یه صفحه پر از نوشته‌های قرمز و نارنجی دیدی! نترس! اینا دشمن تو نیستن، اینا راهنمای تو هستن.

۱. خطاهای قرمز (Errors):

  • معنی: «کد تو شکست!». یعنی یه جای کارت اساسی می‌لنگه و گوگل اصلاً نمی‌تونه اسکیمای تو رو بخونه.
  • علت رایج: ۹۹ درصد مواقع، همون اشتباهات Syntax هست که قبلاً گفتم: کامای اضافه گذاشتی، کاما جا انداختی، آکولاد رو نبستی یا یه علامت نقل قول (") یادت رفته.
  • راه‌حل: اینا «باید» رفع بشن. تا وقتی حتی یه خطای قرمز داری، کل اسکیمای تو بی‌ارزشه.

۲. هشدارهای نارنجی (Warnings):

  • معنی: «کدت درسته و قبولش کردم… اما…»
  • علت رایج: گوگل داره دوستانه بهت می‌گه: «کدت کار می‌کنه، ولی اگه فلان ویژگی (مثلاً dateModified یا publisher.logo) رو هم اضافه کنی، خیلی بهتر می‌تونم درکش کنم و کامل‌تر می‌شه.»
  • راه‌حل: اینا «بهتره» که رفع بشن.

تجربه من می‌گه: خطاها رو باید رفع کنی تا از نظر فنی دقیق باشی. هشدارها رو هم تا جایی که می‌تونی رفع کن تا اعتبار و پوشش جامع موضوع رو به گوگل ثابت کنی.

این تست کردن، همون دقت در نگارش و ویرایش هست که محتوای تو رو از یه محتوای سهل‌انگارانه متمایز می‌کنه.

محل دقیق قرار دادن (Inject) کد JSON-LD در HTML سایت

بهترین روش (توصیه‌شده توسط گوگل): قرار دادن در بخش <head>

این جواب کوتاه و اصلیه. گوگل رسماً توصیه می‌کنه که کدهای JSON-LD رو در بخش <head> سایتت قرار بدی.

چرا؟

  • بارگذاری سریع: بخش <head> معمولاً قبل از هر چیز دیگه‌ای توسط مرورگر و ربات‌های گوگل خونده می‌شه. اینجوری گوگل همون اول کار، تکلیفش رو با محتوای تو می‌دونه و می‌فهمه قراره با چی روبرو بشه.
  • تمیزی و سازماندهی: بخش <head> محلیه برای «فراداده‌ها» (Metadata)؛ یعنی اطلاعاتی درباره‌ی صفحه، نه خود محتوای اصلی. اسکیما هم دقیقاً همینطوره. قرار دادنش اونجا، نشون‌دهنده‌ی دقت در نگارش و سازماندهی کده و HTML اصلی تو (بخش <body>) رو تمیز نگه می‌داره.
  • اولویت ربات‌ها: ربات‌های جستجو عادت کردن که برای پیدا کردن اینجور اطلاعات حیاتی، اول از همه <head> رو اسکن کنن.

آیا می‌توان اسکریپت را در <body> قرار داد؟ (تحلیل مزایا و معایب)

آره، می‌شه. تو می‌تونی کد JSON-LD رو توی بخش <body> هم قرار بدی (مثلاً قبل از تگ پایانی </body>).

مزیتش چیه؟

راستش رو بخوای، مزیت خاصی برای ما (به عنوان تولیدکننده محتوا) نداره. تنها مزیتش اینه که گاهی برای توسعه‌دهنده‌ها راحت‌تره که اسکریپت رو به صورت داینامیک اونجا تزریق کنن، مخصوصاً اگه اطلاعات اسکیما (مثلاً قیمت محصول) توسط یه اسکریپت دیگه در لحظه تولید بشه.

معایبش چیه؟ (و چرا من توصیه نمی‌کنم)

  • ریسک دیده نشدن: این بزرگترین عیبشه. اگه صفحه‌ت خیلی طولانی باشه یا سرعت لودش پایین باشه، این احتمال وجود داره که ربات گوگل قبل از اینکه به انتهای <body> و کد اسکیمای تو برسه، خسته بشه و خزش (Crawl) رو متوقف کنه. در این صورت، انگار اصلاً اسکیمایی ننوشتی!
  • کثیف شدن کد: بخش <body> برای محتواییه که کاربر قراره «ببینه». قرار دادن کدهای اسکریپتی اونجا، ساختار معنایی HTML رو کمی به هم می‌ریزه.

تجربه من: ریسک نکن. تا وقتی یه دلیل فنی خیلی خیلی خاص و پیچیده نداری، همون <head> امن‌ترین و حرفه‌ای‌ترین جاست. اینجوری به گوگل نشون می‌دی که برای توجه به جزئیات وقت گذاشتی.

آموزش اضافه کردن دستی اسکیما در وردپرس (بدون افزونه) از طریق functions.php یا هدر

خب، حالا چطور تو وردپرس این کار رو «دستی» انجام بدیم؟ (البته که افزونه‌هایی مثل Rank Math یا Yoast این کار رو اتوماتیک انجام می‌دن، ولی ما می‌خوایم یاد بگیریم چطور خودمون متخصص باشیم!)

هشدار جدی: قبل از دستکاری این فایل‌ها، حتماً از سایتت بک‌آپ بگیر. یه کامای (,) اشتباه تو فایل functions.php می‌تونه کل سایتت رو از دسترس خارج کنه!

روش ۱: استفاده از functions.php (روش حرفه‌ای و پیشنهادی من)

این روش «درست» ماجراست. ما از «هوک» (Hook) وردپرس استفاده می‌کنیم تا کدمون رو به <head> تزریق کنیم.

  1. برو به بخش «نمایش» > «ویرایشگر پوسته».
  2. از ستون سمت چپ، فایل «توابع پوسته» (functions.php) رو پیدا کن. (نکته طلایی: این کار رو همیشه توی پوسته فرزند (Child Theme) انجام بده تا با آپدیت قالب اصلی، کدهات نپرن!)
  3. این کد رو به انتهای فایل اضافه کن:
PHP
add_action('wp_head', 'negin_add_my_schema');
function negin_add_my_schema() {
  // اول چک می‌کنیم که توی صفحه مقاله هستیم
  if (is_single()) {
    ?>
    <script type="application/ld+json">
    {
      "@context": "https://schema.org",
      "@type": "Article",
      "headline": "<?php echo get_the_title(); ?>",
      "author": {
        "@type": "Person",
        "name": "نگین شیخ الاسلامی"
      }
      // ... بقیه کدهای اسکیمات ...
    }
    </script>
    <?php
  }
}
  • چرا این روش عالیه؟ چون می‌تونی با استفاده از توابع PHP مثل get_the_title() اطلاعات رو داینامیک بخونی و دیگه لازم نیست برای هر مقاله یه کد جدا بنویسی. این یعنی ارائه اطلاعات اصلی و تحلیل‌ها به شکل اتوماتیک!

روش ۲: ویرایش فایل هدر (header.php) (روش سریع ولی خطرناک)

  1. توی همون «ویرایشگر پوسته»، فایل «سربرگ پوسته» (header.php) رو پیدا کن.
  2. کد اسکریپت JSON-LD خودت رو پیدا کن و دقیقاً قبل از تگ پایانی </head> کپی کن.
  • چرا این روش بده؟ چون با هر آپدیت قالب، این کد پاک می‌شه (مگر اینکه از پوسته فرزند استفاده کنی). و اینکه اگه بخوای برای هر صفحه اسکیمای متفاوتی بذاری، کارت خیلی سخت می‌شه. این روش یه جورایی سهل‌انگارانه است و من توصیه نمی‌کنم.

حالا تو بگو. تا حالا جرئت کردی فایل functions.php رو دستی ویرایش کنی؟ یا ترجیح می‌دی این کار رو به افزونه‌ها بسپاری؟ برام بنویس، خوشحال می‌شم تجربه‌ت رو بدونم.

مثال‌های کاربردی پیشرفته: اسکیمای FAQ و LocalBusiness

(کد نمونه) ساختار آماده برای اسکیمای FAQPage (افزایش فضای SERP)

این یکی از محبوب‌ترین‌های منه. چرا؟ چون مستقیماً روی ظاهر تو در نتایج جستجو (SERP) تاثیر می‌ذاره.

وقتی تو از اسکیمای FAQPage (صفحه سوالات متداول) استفاده می‌کنی، به گوگل می‌گی: «هی، من چندتا سوال خیلی مهم که کاربرها دارن رو، همینجا تو صفحه‌م جواب دادم.»

اگه گوگل تشخیص بده که این سوال و جواب‌ها واقعاً مفید و مرتبط هستن (و یادت باشه، باید عیناً توی متن صفحه‌ت هم قابل مشاهده باشن!)، اون‌ها رو به صورت آکاردئونی بازشونده، زیر لینک تو توی نتایج جستجو نشون می‌ده.

این کار معرکه‌ست! چون:

۱. فضای بیشتری رو توی صفحه نتایج اشغال می‌کنی و بیشتر تو چشم میای.

۲. قبل از اینکه کاربر کلیک کنه، بهش ارزش افزوده می‌دی و نشون می‌دی که تو متخصص موضوع هستی و جوابش پیش توئه.

اینم یه قالب آماده:

JSON
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "اسکیمای JSON-LD چیه؟",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "JSON-LD یه فرمت برای نوشتن داده‌های ساختاریافته‌ست که به موتورهای جستجو کمک می‌کنه محتوای صفحه رو عمیق‌تر درک کنن. گوگل این فرمت رو به Microdata ترجیح می‌ده."
      }
    },
    {
      "@type": "Question",
      "name": "اسکیما رو کجا باید قرار بدیم؟",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "بهترین و توصیه‌شده‌ترین مکان، قرار دادن اسکریپت JSON-LD در بخش <head> فایل HTML صفحه‌ست تا ربات‌های گوگل به سرعت بهش دسترسی داشته باشن."
      }
    }
  ]
}
</script>

(کد نمونه) ساختار آماده برای اسکیمای LocalBusiness (حیاتی برای سئوی محلی)

اگه تو یه کسب‌وکار محلی داری (مثل رستوران، فروشگاه، کلینیک یا حتی دفتر «وزیر سئو»!)، این اسکیما حکم نفس کشیدن رو برات داره.

این اسکیما کارت ویزیت دیجیتال تو برای گوگله. تو با این کد، تمام اطلاعات حیاتی کسب‌وکارت رو به صورت ساختاریافته به گوگل می‌دی. اطلاعاتی مثل:

  • اسم دقیق برندت
  • آدرس فیزیکی‌ت (خیلی مهم!)
  • شماره تلفن‌هات
  • ساعات کاری
  • لوگوی رسمی‌ت

این کار یه سیگنال فوق‌العاده قوی برای اعتماد (Trust) و اعتبار (Authority) در E-E-A-T می‌فرسته. تو داری به گوگل ثابت می‌کNI که یه «موجودیت» (Entity) واقعی در دنیای فیزیکی هستی، نه فقط یه سایت بی‌نام و نشون.

اینم یه قالب آماده:

JSON
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "LocalBusiness",
  "name": "مجموعه وزیر سئو",
  "image": "https://vazirseo.com/logo.png",
  "@id": "https://vazirseo.com/",
  "url": "https://vazirseo.com/",
  "telephone": "+98-21-12345678",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "خیابان فلان، پلاک ۱۱۰",
    "addressLocality": "تهران",
    "postalCode": "1234567890",
    "addressCountry": "IR"
  },
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": [
        "Saturday",
        "Sunday",
        "Monday",
        "Tuesday",
        "Wednesday"
      ],
      "opens": "09:00",
      "closes": "17:00"
    },
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": "Thursday",
      "opens": "09:00",
      "closes": "14:00"
    }
  ]
}
</script>

(کد نمونه) نحوه تودرتو کردن اسکیمای Person (نویسنده) در داخل Article

یادته توی مثال Article قبلی، برای author (نویسنده) فقط یه اسم ساده نوشتیم؟ اون کار خوبه، اما عالی نیست.

اگه واقعاً می‌خوای E-E-A-T (مخصوصاً بخش تخصص و تجربه) رو فریاد بزنی، باید به گوگل بگی این نویسنده کیه.

به جای اینکه فقط بگی نویسنده «نگین شیخ الاسلامی» (یه رشته متن ساده) است، ما یه اسکیمای Person (شخص) رو داخل اسکیمای Article خودمون «تودرتو» (Nest) می‌کنیم.

اینجوری به گوگل می‌گیم: «هی، نویسنده‌ی این مقاله، یه شخصیت واقعیه. این اسمشه (name) و اینم آدرس صفحه درباره‌ی اونه (url) که می‌تونی بری و ببینی چقدر متخصصه

این کار شواهد محکمی از تخصص نویسنده به گوگل می‌ده و اعتبار محتوای تو رو چند برابر می‌کنه.

اینم قالب آماده (ترکیب Article و Person):

JSON
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "راهنمای کامل اسکیمای JSON-LD",
  "datePublished": "2025-10-20",
  "image": "https://vazirseo.com/images/json-ld.jpg",
  
  "author": {
    "@type": "Person",
    "name": "نگین شیخ الاسلامی",
    "url": "https://vazirseo.com/author/negin-sheikholeslami/"
  },
  
  "publisher": {
    "@type": "Organization",
    "name": "وزیر سئو",
    "logo": {
      "@type": "ImageObject",
      "url": "https://vazirseo.com/logo.png"
    }
  }
}
</script>

دیدی چقدر قشنگ شد؟ ما حالا یه نویسنده‌ی «ناشناس» نداریم؛ ما یه «متخصص» داریم که گوگل می‌تونه هویتش رو تأیید کنه.

تحلیل نهایی: چه زمانی پیاده‌سازی دستی بهتر از افزونه است؟

مزیت‌ها: کنترل کامل، عدم ایجاد کد اضافه (Bloat-free) و سفارشی‌سازی

ببین، افزونه‌ها مثل لباس‌های آماده (Free Size) هستن. برای خیلیا خوبن، اما هیچوقت دقیقاً اندازه‌ی تو نیستن. اما کدنویسی دستی، مثل اینه که بری پیش یه خیاط ماهر و یه کت‌شلوار دقیقاً برای خودت بدوزی.

۱. کنترل کامل و بدون کد اضافه (Bloat-free):

وقتی از افزونه استفاده می‌کنی، اون یه عالمه کد پیش‌فرض رو به صفحه‌ت اضافه می‌کنه. کدهایی که شاید اصلاً بهشون نیاز نداشته باشی. این همون چیزیه که بهش می‌گیم “Bloat” یا کد اضافه. این کار یه جورایی توجه کم به جزئیات رو نشون می‌ده.

اما وقتی دستی می‌نویسی، کد تو تمیز، سبک و دقیقه. فقط همون چیزیه که لازمه. این یعنی کیفیت تولید و نگارش در بالاترین سطح. تو دقیقاً می‌دونی چه کدی داره اجرا می‌شه.

۲. سفارشی‌سازی بی‌نهایت:

این مهم‌ترین مزیتشه. تو کنترل کامل داری. شاید بخوای یه اسکیمای خیلی خاص و تودرتو (Nested) بسازی که هیچ افزونه‌ای بهت اون قابلیت رو نده. مثلاً اسکیمای نویسنده (Person) رو با Article و Review و FAQPage به یه شکل خاص ترکیب کنی.

اینجاست که تو می‌تونی ارزش افزوده‌ای نسبت به نتایج دیگر خلق کنی و تخصص واقعی خودت رو به رخ گوگل بکشی. افزونه‌ها برای «عموم» طراحی شدن، تو برای «بهترین» بودن.

معایب: نیاز به دانش فنی و زمان‌بر بودن به‌روزرسانی

اما بذار باهات رو راست باشم. اون کت‌شلوار سفارشی، هم گرون‌تره و هم دیرتر آماده می‌شه. کدنویسی دستی هم دقیقاً همینه.

۱. نیاز به دانش فنی:

خب، واضحه. تو باید با ساختار JSON-LD آشنا باشی، حواست به اون کاماهای لعنتی (,) باشه و بدونی چطور با ابزارهای تست، عیب‌یابی کنی. یه اشتباه کوچیک می‌تونه کل ساختار رو خراب کنه و اعتبارسنجی نشه. این کار قطعاً برای کسی که تازه شروع کرده، ترسناکه.

۲. زمان‌بر بودن (مخصوصاً به‌روزرسانی):

فرض کن ۱۰۰ تا مقاله داری و می‌خوای اسکیمای Article رو براشون بذاری. با افزونه ۱ دقیقه طول می‌کشه، دستی شاید چند روز! و فاجعه اصلی، «به‌روزرسانی» هست. اگه گوگل یه ویژگی جدید اضافه کنه یا Schema.org چیزی رو عوض کنه، تو باید دوباره برگردی و اون ۱۰۰ تا مقاله رو دستی آپدیت کنی. این کار به شدت زمان‌بره و نیاز به دقت در نگارش و ویرایش مداوم داره.

جمع‌بندی: استراتژی ما برای استفاده ترکیبی (افزونه برای موارد عمومی، دستی برای موارد خاص)

پس جواب چیه؟ افزونه یا دستی؟ جواب من به عنوان نگین اینه: «هر دو!»

استراتژی حرفه‌ای که ما تو «وزیر سئو» هم ازش استفاده می‌کنیم، «ترکیبی» هست.

۱. افزونه برای موارد عمومی (The 80%):

بذار افزونه (مثل رنک مث) کارای روزمره و عمومی رو انجام بده. مثلاً اسکیمای Article یا BlogPosting ساده برای تمام مقالات وبلاگ، یا اسکیمای پیش‌فرض LocalBusiness برای کل سایت. این کار بهت سرعت می‌ده و جلوی تمرکز بر تولید انبوه به شکل منفی رو می‌گیره.

۲. کد دستی برای موارد خاص (The 20%):

اما… برای اون صفحات کلیدی و پول‌ساز سایتت، آستین‌ها رو بالا بزن. برای لندینگ پیج اصلی، برای صفحه «درباره ما» (با اسکیمای Organization کامل و سفارشی)، برای اون مقاله «مادر» (Pillar Content) که می‌خوای با اسکیمای FAQ و Author و Review بترکونه، یا برای صفحه یه محصول خیلی پیچیده… اونجاها دستی وارد شو.

اونجاها جاییه که تو با ارائه اطلاعات اصلی و تحلیل‌ها و سفارشی‌سازی، برنده‌ می‌شی.

اینجوری هم سرعت افزونه رو داری، هم دقت و کیفیت کد دستی رو. تو هم از فست‌فود استفاده می‌کنی، هم گاهی اوقات اون غذای لوکس و سفارشی رو برای مهمونای خاصت سرو می‌کنی.

این استراتژی ماست. حالا تو بگو، تو کدوم سمتی هستی؟ آدمی هستی که به سرعت افزونه‌ها اعتماد می‌کنی، یا مثل من، وسواس داری که برای صفحات مهم، اون «امضای شخصی» و کد دستی خودت رو داشته باشی؟ تجربه‌ت رو برام بنویس، خوشحال می‌شم در موردش گپ بزنیم.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *