نحوه پیادهسازی اسکیما Local Business در صفحات سایت
در پروژههای پیشرفته طراحی سایت، به ویژه زمانی که پلتفرم را از پایه با کدهای خام و ساختارهای اختصاصی برنامهنویسی میکنید، اتکا به هوش مصنوعی گوگل برای حدس زدن موقعیت مکانی و اطلاعات تماس کسبوکار یک ریسک بزرگ است. موتورهای جستجو برای درک دقیق موجودیتهای فیزیکی، به یک زبان ماشینخوان و قطعی نیاز دارند.
این زبان قطعی، اسکیمای LocalBusiness است. پیادهسازی اصولی این اسکیما، سنگبنای موفقیت در کمپینهای سئو محلی محسوب میشود. وقتی کدهای اسکیما به درستی در صفحات فرود (Landing Pages) یا صفحه تماس با ما قرار گیرند، گوگل به جای تلاش برای استخراج آدرس از میان متون طولانی، اطلاعات طبقهبندیشده و مستقیمی را دریافت میکند که مستقیماً روی نمایش سایت شما در نقشه گوگل (Local Pack) تاثیر میگذارد.
در این راهنمای جامع، ساختار استاندارد JSON-LD را کالبدشکافی کرده و نحوه پیادهسازی دینامیک و استاتیک آن را در صفحات وب بررسی میکنیم.
۱. چرا فقط از فرمت JSON-LD استفاده کنیم؟
دیکشنری Schema.org را میتوان با روشهای مختلفی (مانند Microdata یا RDFa) در لابهلای تگهای HTML پیادهسازی کرد؛ اما گوگل رسماً و قاطعانه فرمت JSON-LD را به عنوان استاندارد برتر معرفی کرده است.
مزیت بینظیر JSON-LD این است که به صورت یک بلوک اسکریپت کاملاً مجزا <script type="application/ld+json"> در صفحه قرار میگیرد. این استقلال باعث میشود تغییرات در رابط کاربری (UI) و قالب سایت، هیچگونه اختلالی در کدهای دیتابیسِ اسکیما ایجاد نکند.
۲. متغیرهای حیاتی در اسکیمای Local Business
برای اینکه گوگل کسبوکار شما را معتبر بشناسد، باید فیلدهای ضروری زیر را در کدهای خود مقداردهی کنید. نقص در این اطلاعات باعث عدم نمایش ریچ اسنیپت (Rich Snippet) خواهد شد.
| نام متغیر (Property) | نوع داده | کاربرد و اهمیت الگوریتمی |
@type |
ثابت (String) | مشخص میکند که موجودیت چیست. میتواند LocalBusiness یا زیرمجموعههای دقیقتر آن (مثل EducationalOrganization یا Store) باشد. |
name |
متنی (String) | نام رسمی برند یا شعبه. دقیقاً باید با نام روی تابلوی فیزیکی مطابقت داشته باشد. |
image |
آدرس وب (URL) | لینک عکسی از نمای ساختمان یا لوگوی مجموعه. |
telephone |
متنی (String) | شماره تماس ثابت همراه با پیششماره (رعایت قانون یکپارچگی NAP). |
address |
آبجکت (Object) | شامل خیابان، شهر، استان و کد پستی. |
geo |
آبجکت (Object) | طول و عرض جغرافیایی دقیق مکان برای نقطهزنی روی نقشه. |
openingHoursSpecification |
آبجکت (Object) | روزها و ساعات دقیق فعالیت مجموعه. |
۳. کالبدشکافی یک نمونه کد استاندارد JSON-LD
کد زیر یک نمونه کامل، بدون خطا و اعتبارسنجیشده برای یک کسبوکار محلی است. این اسکریپت را میتوانید در تگ <head> یا انتهای <body> صفحه هدف قرار دهید:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "LocalBusiness",
"name": "نام کسبوکار شما",
"image": "https://yourdomain.com/images/storefront.jpg",
"@id": "https://yourdomain.com/#business",
"url": "https://yourdomain.com",
"telephone": "+982100000000",
"address": {
"@type": "PostalAddress",
"streetAddress": "نام خیابان و پلاک",
"addressLocality": "تهران",
"addressRegion": "تهران",
"postalCode": "1234567890",
"addressCountry": "IR"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 35.700000,
"longitude": 51.400000
},
"openingHoursSpecification": {
"@type": "OpeningHoursSpecification",
"dayOfWeek": [
"Saturday",
"Sunday",
"Monday",
"Tuesday",
"Wednesday",
"Thursday"
],
"opens": "09:00",
"closes": "18:00"
},
"sameAs": [
"https://instagram.com/yourprofile",
"https://linkedin.com/company/yourprofile"
]
}
</script>
۴. پیادهسازی دینامیک با زبان PHP خام (Native PHP)
هنگامی که معماری سایت را بدون استفاده از فریمورکهای سنگین و مستقیماً با یک ساختار فایلینگ خام و تمیز PHP توسعه میدهید، هاردکد کردن (Hardcoding) اسکیماها کار اشتباهی است. بهترین روش، ایجاد یک آرایه (Array) در PHP و تبدیل آن به فرمت JSON است. این روش مانع از بروز خطاهای سینتکس (مانند فراموش کردن کاما یا کوتیشن) میشود.
در فایل رندر کننده ویو (View) یا هدر سایت، میتوانید کد زیر را به صورت مستقیم اجرا کنید:
<?php
// تعریف اطلاعات کسبوکار در یک آرایه PHP
$schemaData = [
"@context" => "https://schema.org",
"@type" => "LocalBusiness",
"name" => "آژانس دیجیتال مارکتینگ دانتی",
"image" => "https://danti.ir/assets/images/office.jpg",
"url" => "https://danti.ir",
"telephone" => "+982188888888",
"address" => [
"@type" => "PostalAddress",
"streetAddress" => "میدان امام حسین، مجتمع تجاری",
"addressLocality" => "تهران",
"addressRegion" => "تهران",
"addressCountry" => "IR"
],
"geo" => [
"@type" => "GeoCoordinates",
"latitude" => 35.7029,
"longitude" => 51.4542
]
];
// تبدیل امن آرایه به JSON و چاپ آن در قالب اسکریپت
$jsonSchema = json_encode($schemaData, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT);
?>
<!-- چاپ اسکیما در سورس کلاینت -->
<script type="application/ld+json">
<?php echo $jsonSchema; ?>
</script>
این روشِ کدنویسی در ساختارهای اختصاصی بکاند، به شما اجازه میدهد تا اطلاعات شعب مختلف را از دیتابیس استخراج کرده و اسکیمای هر صفحه را به صورت کاملاً داینامیک و بدون خطا (Error-free) تولید کنید.
۵. اعتبارسنجی و تست سلامت کدهای اسکیما
همانطور که یک ارور تایماوت در اجرای اسکریپت سرور میتواند خزش را متوقف کند، یک خطای سینتکس در کدهای JSON-LD نیز کل اسکیما را برای گوگل نامعتبر میسازد. پس از پیادهسازی، هرگز به صورت چشمی به کدها اعتماد نکنید.
-
ابتدا آدرس صفحه هدف (یا کدهای رندر شده) را در ابزار Rich Results Test گوگل وارد کنید.
-
بررسی کنید که آیتم
LocalBusinessتوسط ابزار شناسایی شده باشد. -
نباید هیچ خطای قرمزرنگی (Error) در گزارش وجود داشته باشد. وجود هشدارهای زردرنگ (Warning) برای فیلدهای اختیاری (مثل PriceRange) طبیعی است و مانع از خوانده شدن اسکیما نمیشود، اما فیلدهای اجباری باید بینقص باشند.
چکلیست نهایی پیادهسازی اسکیما محلی
پیش از انتشار نهایی کدهای توسعهیافته روی سرور اصلی (Live Environment)، این ممیزی فنی را تیک بزنید:
-
[ ] آیا نوع دقیق کسبوکار (مانند
StoreیاEducationalOrganization) به جای کلمه عمومیLocalBusinessدر فیلد@typeانتخاب شده است؟ -
[ ] آیا تمامی اطلاعات (نام، آدرس، تلفن) دقیقاً با اطلاعات مندرج در صفحه تماس با ما و نقشه گوگل مپ یکسان است (قانون NAP)؟
-
[ ] آیا مختصات طول و عرض جغرافیایی (Latitude/Longitude) از روی نقشه استخراج شده و با فرمت اعشاری در فیلد
geoوارد شدهاند؟ -
[ ] آیا لینک شبکههای اجتماعی مجموعه در آرایه
sameAsقرار داده شده است تا هویت برند (Entity) برای گوگل تثبیت شود؟ -
[ ] آیا در صورت استفاده از کدهای داینامیک PHP، از پارامتر
JSON_UNESCAPED_UNICODEبرای جلوگیری از بههمریختگی حروف فارسی استفاده شده است؟


بدون دیدگاه