آموزش اسکیما و داده ساختاریافته
داده ساختاریافته چند خط کد است که به زبان ماشین می گوید این صفحه درباره چیست: یک محصول، یک مقاله، یک کسب و کار. گوگل قالب JSON-LD را پیشنهاد می کند و یک قاعده دارد که همه چیز از آن شروع می شود: چیزی را علامت نزنید که روی صفحه دیده نمی شود.
- درس ۱۰ از ۱۵
- میانی
- رایگان، بدون ثبت نام
چهار تکه ای که بدون هم ناقص اند
داده ساختاریافته وقتی کار می کند که هر چهار تکه سر جایشان باشند. تکه اول همیشه صفحه است و نه کد.
-
صفحه
اطلاعاتی که خواننده می بیند، پیش از هر کدی
-
موجودیت
صفحه واقعا چیست: محصول، مقاله، کسب و کار
-
نشانه گذاری
JSON-LD با ویژگی های اجباری همان نوع
-
نتیجه
واجد شرایط شدن برای نمایش غنی، نه بیشتر
تکه چهارم تضمین نیست. علامت گذاری درست صفحه را واجد شرایط می کند و تصمیم نمایش با گوگل است.
آخرین بررسی: فکت ها و نام ابزارهای این درس در همین تاریخ با منابعشان بازبینی شده اند.
گوگل با این کد چه می کند؟
گوگل می نویسد از داده ساختاریافته ای که روی وب پیدا می کند برای فهمیدن محتوای صفحه استفاده می کند، و همچنین برای جمع کردن اطلاعات درباره وب و جهان: آدم ها، کتاب ها، شرکت ها. یعنی این کد در درجه اول یک زبان مشترک است و نه یک تکنیک سئو.
سه قالب پشتیبانی می شود: JSON-LD، Microdata و RDFa. گوگل می نویسد هر سه برای او یکسان اند به شرطی که درست پیاده شده باشند، و در بیشتر موارد JSON-LD را توصیه می کند، چون یک بلوک جدا داخل تگ script است و لای HTML صفحه پخش نمی شود. عملا هم همین یکی را می نویسند.
و انتظاری که باید کوتاه شود: نوشتن این کد به معنی گرفتن نتیجه غنی نیست. علامت گذاری درست، صفحه را واجد شرایط نمایش غنی می کند و تصمیم نمایش با گوگل است. صفحه ای که چیزی برای گفتن ندارد، با اسکیما هم چیزی برای گفتن ندارد.
و یک قدم جلوتر: خود آن نمایش ها هم برداشته می شوند. گوگل در تغییرات مستنداتش نوشت نتیجه غنی پرسش و پاسخ از ۷ می ۲۰۲۶ دیگر در نتایج ظاهر نمی شود، و بعد مستندش را کلا حذف کرد؛ برای نتیجه غنی «چگونه انجام دهیم» هم همین کار را کرده بود. یعنی نشانه گذاری ای که در سال ۱۴۰۲ ارزش نوشتن داشت، امروز همان کد است و همان اعتبار را دارد ولی هیچ چیزی در نتایج نشان نمی دهد. همین سایت هم روی صفحه هایی که پرسش و پاسخ دارند FAQPage چاپ می کند و بعد از آن تاریخ، نتیجه غنی ای از آن در نمی آید؛ ماندنش اشکالی ندارد چون محتوای واقعا دیده شدنی را توصیف می کند، ولی انتظار داشتن از آن اشتباه است.
کدام نوع اسکیما مال صفحه شماست؟
جواب کوتاه است: نوعی که صفحه واقعا هست. یک صفحه فروش هاست، Product است. یک نوشته وبلاگ، Article. یک صفحه تماس، Organization یا LocalBusiness. یک صفحه خدمت، Service. انتخاب نوع بر اساس اینکه کدام نتیجه غنی قشنگ تر است، همان اشتباهی است که بعدا به اقدام دستی ختم می شود.
هر نوع چند ویژگی اجباری دارد و چند ویژگی پیشنهادی، و این ها در مستند خود گوگل برای همان نوع فهرست شده اند. مثلا نوع LocalBusiness دو ویژگی اجباری دارد: نشانی و نام. گوگل می نویسد همه ویژگی های اجباری آن نوع باید باشند تا صفحه واجد شرایط نمایش غنی شود.
روی یک صفحه بیشتر از یک نوع هم می تواند باشد و این طبیعی است: یک نوشته وبلاگ همزمان Article است، مسیر راهنمای صفحه BreadcrumbList است و ناشرش Organization. راه تمیز نوشتن این چند تا، گراف است: یک بلوک JSON-LD که چند نود دارد و نودها با شناسه به هم ارجاع می دهند. آن وقت «سازمان» یک بار تعریف می شود و بقیه نودها به همان اشاره می کنند.
یک نمونه کوچک که هر سه ایده را کنار هم دارد: نوع درست، ویژگی اجباری، و ارجاع با شناسه.
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Organization",
"@id": "https://example.com/#org",
"name": "نام کسب و کار",
"url": "https://example.com/"
},
{
"@type": "Article",
"@id": "https://example.com/post/#article",
"headline": "همان عنوانی که روی صفحه نوشته شده",
"datePublished": "2026-09-05",
"publisher": { "@id": "https://example.com/#org" }
}
]
}
سه چیز در همین چند خط دیده می شود. اول اینکه هر نود یک شناسه دارد و آن شناسه یک نشانی است، پس ارجاع دادن به آن از هر جای دیگری ممکن است. دوم اینکه ناشر مقاله دوباره تعریف نشده و فقط به شناسه سازمان اشاره کرده؛ همین کار جلوی دو توصیف متفاوت از یک چیز را می گیرد. سوم اینکه عنوان مقاله همان عنوانی است که روی صفحه چاپ شده و نه نسخه بهینه شده اش، که مستقیما به قاعده بخش بعد می رسد.
چرا نباید چیزی را علامت بزنید که روی صفحه نیست؟
گوگل این را در دو جای جدا نوشته و در هر دو صریح است. در راهنمای کلی: «محتوایی را که برای خوانندگان صفحه دیده نمی شود علامت گذاری نکنید.» و در صفحه معرفی: صفحه خالی فقط برای نگه داشتن داده ساختاریافته نسازید و درباره اطلاعاتی که کاربر نمی بیند نشانه گذاری اضافه نکنید، حتی اگر آن اطلاعات درست باشند.
آن سه کلمه آخر جایی است که بحث تمام می شود. رایج ترین توجیهی که می شنویم این است که «خب این عدد واقعا درست است، فقط روی صفحه ننوشته ایمش». از نظر سیاست، فرقی نمی کند.
عاقبتش هم اسم دارد: «مشکل داده ساختاریافته» یکی از اقدام های دستی است که در سرچ کنسول اعلام می شود. اثرش این است که صفحه واجد شرایط نمایش غنی نمی ماند. یعنی چیزی که با نشانه گذاری زیادی به دست آورده اید، همان چیزی است که از دست می دهید.
راه درست هم ساده است و همیشه یک طرفه است: اول اطلاعات را روی صفحه بنویسید، بعد علامتش بزنید. هیچ وقت برعکس.
چه چیزی را علامت بزنید و چه چیزی را هرگز
روی صفحه هست، پس علامت بزنید
- قیمتی که بازدیدکننده می بیند
- ساعت کاری نوشته شده روی صفحه تماس
- پرسش و پاسخی که کاربر می تواند بخواند
- نویسنده ای که نامش زیر عنوان آمده
روی صفحه نیست، پس هرگز
- امتیازی که هیچ جای صفحه دیده نمی شود
- امتیاز خودجمع کرده روی نوع کسب و کار یا سازمان
- پرسش و پاسخی که فقط داخل کد وجود دارد
- نوعی که صفحه نیست، چون نتیجه اش قشنگ تر است
ستون دوم نکته سلیقه ای نیست. «مشکل داده ساختاریافته» یکی از اقدام های دستی گوگل است.
چرا امتیازی که خودتان جمع کرده اید ستاره نمی گیرد؟
این همان جایی است که بیشترین اسکیمای غلط در بازار فارسی نوشته می شود. مستند گوگل درباره نمایش نظر و امتیاز یک بند دارد که باید عینا خواند: اگر موجودیتی که درباره اش نظر داده شده، خودش نظرها را کنترل کند، صفحه هایی از آن که از LocalBusiness یا هر نوع دیگری از Organization استفاده می کنند واجد شرایط قابلیت ستاره نیستند.
مثالی که خود گوگل می زند دقیقا حالت رایج ماست: نظری درباره کسب و کار الف که روی سایت خود الف نشسته، چه مستقیم داخل داده ساختاریافته اش و چه از طریق ویجت شخص ثالث. یعنی جعبه نظرهای سایت خودتان، حتی وقتی نظرها واقعی اند.
دقت کنید این محدودیت به دو نوع بسته شده و نه به همه نوع ها. نمایش امتیاز روی نوع هایی مثل Product و Software App همچنان پشتیبانی می شود؛ چیزی که گوگل بسته، امتیاز خودجمع کرده روی نوع کسب و کار و سازمان است. برای نوع LocalBusiness هم جداگانه نوشته که ویژگی امتیاز فقط برای سایت هایی پیشنهاد می شود که نظرها را درباره کسب و کارهای دیگر جمع می کنند.
و یک قاعده دیگر که کمتر دیده می شود: نظری که علامت می زنید باید از همان صفحه در دسترس بازدیدکننده باشد و باید فورا برایش روشن باشد که صفحه نظر دارد. اگر امتیاز کلی را در اسکیما می نویسید، همان امتیاز باید روی صفحه دیده شود.
چطور تست می کنید و روی یک صفحه چند بلوک دارید؟
گوگل دو مرحله جدا را نام می برد و این تفکیک مهم است. هنگام ساخت، آزمون نتایج غنی؛ بعد از انتشار، گزارش وضعیت نتایج غنی در سرچ کنسول، چون نشانه گذاری معمولا نه موقع نوشتن بلکه بعدا و به خاطر قالب و شکل سرو شدن صفحه خراب می شود. ابزار بازرسی نشانی هم برای این است که ببینید گوگل داده ساختاریافته شما را اصلا پیدا کرده یا نه. برای بررسی نحوی خود کد، بدون سوال «آیا واجد شرایط نمایش غنی هست»، اعتبارسنج خود schema.org هست.
حالا تله ای که ابزارها نشانتان نمی دهند: یک صفحه می تواند بیشتر از یک بلوک JSON-LD داشته باشد و معمولا دارد، چون قالب یکی چاپ می کند و هر افزونه هم یکی. روی یکی از صفحه های خودمان در ۵ سپتامبر ۲۰۲۶ چهار بلوک جدا شمردیم: یک گراف پنج نودی از قالب، به علاوه سه بلوک مستقل که افزونه ها چاپ کرده اند. با یک دستور بشمارید:
curl -s -A "Mozilla/5.0" "https://example.com/page/" \
| grep -c 'application/ld+json'
چرا مهم است؟ چون وقتی چند بلوک روی یک صفحه اند، یک چیز می تواند دو بار و به دو شکل مختلف توصیف شود. روی همان صفحه ما دو نود مسیر راهنما هست که با هم فرق دارند: یکی دو پله دارد و دیگری سه پله. این دقیقا همان چیزی است که این چک برای پیدا کردنش هست و ما هم آن را روی سایت خودمان پیدا کردیم. قاعده درست این است که برای هر موجودیت یک منبع حقیقت داشته باشید و بقیه به آن ارجاع بدهند. روی سایتی که چند افزونه همزمان اسکیما چاپ می کنند، همین یکی کردن معمولا اولین کاری است که در یک پروژه سئو سایت باید انجام شود.
ترتیب تست کردن، از کد تا بعد از انتشار
دو مرحله اول قبل از انتشارند و دو مرحله بعد، بعد از آن. جدا کردنشان همان چیزی است که گوگل توصیه می کند.
-
۱
اعتبارسنج schema.org
کد نحوی درست است و نودها به هم می خورند؟
-
۲
آزمون نتایج غنی
گوگل این نوع را می شناسد و ویژگی اجباری کم ندارد؟
-
۳
بازرسی نشانی
گوگل روی نسخه ای که واقعا دریافت کرده، این کد را دیده؟
-
۴
گزارش وضعیت در سرچ کنسول
بعد از انتشار خراب شده؟ اینجا معلوم می شود
هیچ کدام از این ابزارها نمی گویند نتیجه غنی نمایش داده می شود؛ فقط می گویند مانعی هست یا نه.
مسیر سریع با هوش مصنوعی
مدل های زبانی JSON-LD را روان می نویسند و همین خطرناکشان می کند: خروجی همیشه معتبر به نظر می رسد، حتی وقتی ویژگی هایی دارد که روی صفحه وجود ندارند. راه سریع و امن، وارونه کردن ترتیب کار است. اول از مدل یک جدول شواهد بخواهید و بعد فقط از سطرهایی که شاهد دارند کد بسازید. برای این کار مدل ارزان و سریع کافی است، چون کار تطبیق متن است؛ انتخاب فعلی ما در بخش <a class="text-link" href="/ai/">هوش مصنوعی</a> هست.
- متن دیده شدنی صفحه را با دستور نسخه بیرون بکشید. کد کامل صفحه را ندهید؛ اگر سایت سی اس اس را داخل صفحه بگذارد، حتی بخش سر صفحه هم برای مدل بزرگ است.
- نوع اسکیما را خودتان تعیین کنید و فهرست ویژگی های اجباری و پیشنهادی همان نوع را از مستند گوگل کپی کنید. انتخاب نوع کار مدل نیست.
- مرحله اول نسخه را اجرا کنید: جدول شواهد. هر ویژگی یک سطر، با جمله ای از خود صفحه که آن مقدار را ثابت می کند، یا صراحتا «روی صفحه نیست».
- سطرهای «روی صفحه نیست» را حذف کنید، بعد مرحله دوم را اجرا کنید تا از باقی مانده کد ساخته شود. آخرش خروجی را یک بار پارس کنید و در آزمون نتایج غنی بگذارید.
نسخه آماده کپی
U="https://example.com/page/"
curl -s -A "Mozilla/5.0" "$U" > p.html
python3 -c '
import re, html, sys
h = open("p.html", encoding="utf-8", errors="replace").read()
m = re.search(r"<main.*?</main>", h, re.S)
b = m.group(0) if m else h
b = re.sub(r"<(script|style|nav|footer)[^>]*>.*?</\1>", "", b, flags=re.S)
t = html.unescape(re.sub(r"<[^>]+>", " ", b))
print(re.sub(r"[ \t]+", " ", t).strip())'
# شمردن بلوک های موجود و پارس کردن خروجی مدل:
grep -c 'application/ld+json' p.html
python3 -c 'import json,sys; json.load(open("out.json")); print("JSON OK")'
---- مرحله ۱: جدول شواهد ----
نقش: بازبین داده ساختاریافته. در این مرحله هیچ کدی ننویس.
نوع اسکیما: {نوع}
ویژگی های اجباری و پیشنهادی این نوع، از مستند گوگل:
{فهرست ویژگی ها}
متن دیده شدنی صفحه:
{خروجی دستور بالا}
برای هر ویژگی یک سطر بنویس با سه ستون: نام ویژگی، مقدار، شاهد.
ستون شاهد باید جمله ای عینا از متن بالا باشد که آن مقدار را ثابت می کند. اگر
چنین جمله ای نیست، در هر دو ستون مقدار و شاهد بنویس «روی صفحه نیست».
قواعد:
- هیچ مقداری را از دانش عمومی خودت پر نکن، حتی اگر مطمئنی درست است.
- واحد، ارز و تاریخ را همان طور بنویس که روی صفحه آمده و تبدیل نکن.
- ویژگی ای اضافه نکن که در فهرست بالا نیست.
- در این مرحله JSON ننویس.
---- مرحله ۲: ساختن کد ----
حالا فقط از سطرهایی که شاهد دارند، یک بلوک JSON-LD بساز.
قواعد:
- سطرهای «روی صفحه نیست» را کامل بینداز بیرون. جایگزینشان نکن.
- اگر ویژگی اجباری این نوع شاهد ندارد، کد نساز و فقط بنویس کدام ویژگی اجباری
روی صفحه نیست.
- خروجی فقط JSON باشد، بدون توضیح و بدون متن اضافه.
قبل از اعتماد به خروجی: دو چیز را قبل از انتشار خودتان چک کنید. اول اینکه جمله های ستون شاهد واقعا در صفحه باشند؛ اگر مدل جمله ای ساخته باشد، جدول شواهد دقیقا همان چیزی می شود که قرار بود جلویش را بگیرد. دوم اینکه صفحه از قبل بلوک دیگری نداشته باشد که همان موجودیت را جور دیگری توصیف کند؛ دستور شمارش برای همین در نسخه هست. و کد ساخته شده را در آزمون نتایج غنی بگذارید: پارس شدن JSON فقط می گوید نحو درست است و نه اینکه معنایش با صفحه می خواند.
هوش مصنوعی در این کار
اسکیما یکی از معدود جاهای سئوست که مدل زبانی واقعا در آن سریع تر از آدم است، چون خروجی ساختار مشخصی دارد و ورودی اش متن است. مشکل جای دیگری است: مدل وقتی چیزی را نمی داند، آن را می سازد، و ساخته اش دقیقا شبیه بقیه کد است.
ابزارهایی که واقعا کمک می کنند
- Claude برای مرحله جدول شواهد مناسب است، چون وقتی از او نقل قول عینی می خواهید کمتر بازنویسی می کند. ایران در هیچ کدام از دو فهرست کشورهای پشتیبانی شده انتروپیک نیست.
- Gemini برای تولید خود بلوک JSON از روی جدول تاییدشده کافی است. صفحه خودمان می نویسد ایران در فهرست کشورهای پشتیبانی شده گوگل نیست؛ راه پرداخت در <a class="text-link" href="/ai/buy/">خرید هوش مصنوعی</a> آمده.
- Rich Results Test هوش مصنوعی نیست و جای هیچ کدام از بالایی ها را نمی گیرد. تنها جایی است که می گوید گوگل این نوع را می شناسد و ویژگی اجباری کم ندارید.
کجا نتیجه معکوس می دهد
ریسک مشخص اینجا ساده و مکانیکی است: مدل ویژگی هایی می نویسد که روی صفحه وجود ندارند، چون از نوشته های مشابه یاد گرفته که آن ویژگی ها معمولا هستند. امتیاز ۴.۸ که هیچ جای صفحه نیست، تعداد نظری که هیچ کس نشمرده، تاریخ انتشاری که نوشته نشده. راهنمای گوگل صریح است که نباید چیزی را که برای خواننده دیده نمی شود علامت گذاری کرد، حتی وقتی درست است، و «مشکل داده ساختاریافته» یکی از اقدام های دستی است. لایه دوم ریسک، ویژگی هایی است که اصلا وجود ندارند یا برای آن نوع تعریف نشده اند؛ این ها را ابزار می گیرد، ولی همان ها هم وقت شما را می برند. قاعده ای که ما به آن پایبندیم و همان قاعده آژانس ماست: فقط چیزی را نشانه گذاری کن که روی صفحه دیده می شود.
منبع ها: Google Search Central: structured data general guidelines Google Search Central: introduction to structured data markup Google Search Console Help: manual actions report
حد این توصیه
داده ساختاریافته رتبه نمی آورد. کاری که می کند این است که صفحه را برای نمایش غنی واجد شرایط می کند و به ماشین می فهماند صفحه درباره چیست؛ گوگل هیچ جا نگفته این کد خودش سیگنال رتبه است. اگر صفحه ای محتوای درستی ندارد، اسکیما آن را درست نمی کند. و نتیجه غنی هم تضمین شدنی نیست: تصمیم نمایش با گوگل است و می تواند برای همان صفحه از این هفته به هفته بعد فرق کند.
از تجربه خود ما
روی همین سایت، اسکیمای پیش فرض افزونه سئو با یک خط فیلتر خاموش شده و قالب گراف JSON-LD خودش را چاپ می کند، تا همه نودها یک جا و سازگار ساخته شوند. جالب تر تصمیم دوم است: امتیاز کلی فقط روی هشت صفحه تزریق می شود که واقعا نود سطح صفحه واجد شرایط دارند، یعنی هفت صفحه هاست و SSL که Product دارند و یک صفحه ابزار که SoftwareApplication دارد. روی صفحه های خدمات و درباره ما و نوشته ها، ستاره داخل صفحه دیده می شود ولی هیچ اسکیمای امتیازی تولید نمی شود، چون همان قاعده گوگل درباره نظرهای خودجمع کرده جلویش را می گیرد. سه صفحه دامنه هم از فهرست بیرون اند چون اصلا نود Product ندارند، و چهار صفحه ابزار دیگر بیرون اند چون SoftwareApplication را فقط از کاتالوگ سازمان می گیرند که آیتم آن صفحه نیست. یک شرط آخر هم در کد هست که همه چیز را جمع می کند: اگر تعداد نظرها صفر باشد، هیچ امتیازی تولید نمی شود، چون اسکیمای امتیاز بدون نظر خودش خطای سرچ کنسول است. به همین دلیل نود Product صفحه هاست لینوکس امروز که این درس نوشته شد، قیمت دارد و امتیاز ندارد. خودتان باز کنید و ببینید.
سوال هایی که واقعا پرسیده می شوند
اسکیما رتبه سایت را بالا می برد؟
گوگل می گوید از داده ساختاریافته برای فهمیدن محتوای صفحه استفاده می کند و صفحه را واجد شرایط نمایش غنی می کند. جایی نگفته که خود این کد سیگنال رتبه است. اثری که در عمل دیده می شود معمولا از نرخ کلیک می آید و نه از جابه جایی در نتایج.
اسکیما را با افزونه بنویسم یا دستی؟
برای بیشتر سایت ها افزونه کافی است و کار درست همان است. دستی نوشتن وقتی معنا پیدا می کند که چند افزونه همزمان اسکیما چاپ کنند و توصیف ها با هم نخوانند، یا نوع صفحه چیزی باشد که افزونه نمی شناسد. اگر دستی می نویسید، اول خروجی فعلی را بشمارید تا دو توصیف موازی نسازید.
نظرهای واقعی مشتری دارم؛ چرا نمی توانم ستاره بگیرم؟
چون قاعده گوگل به واقعی بودن نظر کار ندارد، به این کار دارد که چه کسی نظرها را کنترل می کند. نظری که درباره خودتان روی سایت خودتان جمع شده، روی نوع کسب و کار یا سازمان واجد شرایط ستاره نیست. نظرها را نگه دارید چون برای بازدیدکننده ارزش دارند؛ فقط روی آن دو نوع اسکیمای امتیاز نسازید.
حالا که نتیجه غنی پرسش و پاسخ برداشته شده، FAQPage را حذف کنیم؟
لازم نیست. آن کد هنوز معتبر است و محتوایی را توصیف می کند که واقعا روی صفحه هست، پس نه جریمه ای دارد و نه خطایی. فقط دیگر چیزی در نتایج نشان نمی دهد، و اگر تنها دلیل نوشتنش همان نمایش بوده، برداشتنش هم ضرری ندارد.