Local business schema markup

نحوه پیاده‌سازی اسکیما 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> صفحه هدف قرار دهید:

HTML

<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
// تعریف اطلاعات کسب‌وکار در یک آرایه 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 نیز کل اسکیما را برای گوگل نامعتبر می‌سازد. پس از پیاده‌سازی، هرگز به صورت چشمی به کدها اعتماد نکنید.

  1. ابتدا آدرس صفحه هدف (یا کدهای رندر شده) را در ابزار Rich Results Test گوگل وارد کنید.

  2. بررسی کنید که آیتم LocalBusiness توسط ابزار شناسایی شده باشد.

  3. نباید هیچ خطای قرمزرنگی (Error) در گزارش وجود داشته باشد. وجود هشدارهای زردرنگ (Warning) برای فیلدهای اختیاری (مثل PriceRange) طبیعی است و مانع از خوانده شدن اسکیما نمی‌شود، اما فیلدهای اجباری باید بی‌نقص باشند.

چک‌لیست نهایی پیاده‌سازی اسکیما محلی

پیش از انتشار نهایی کدهای توسعه‌یافته روی سرور اصلی (Live Environment)، این ممیزی فنی را تیک بزنید:

  • [ ] آیا نوع دقیق کسب‌وکار (مانند Store یا EducationalOrganization) به جای کلمه عمومی LocalBusiness در فیلد @type انتخاب شده است؟

  • [ ] آیا تمامی اطلاعات (نام، آدرس، تلفن) دقیقاً با اطلاعات مندرج در صفحه تماس با ما و نقشه گوگل مپ یکسان است (قانون NAP)؟

  • [ ] آیا مختصات طول و عرض جغرافیایی (Latitude/Longitude) از روی نقشه استخراج شده و با فرمت اعشاری در فیلد geo وارد شده‌اند؟

  • [ ] آیا لینک شبکه‌های اجتماعی مجموعه در آرایه sameAs قرار داده شده است تا هویت برند (Entity) برای گوگل تثبیت شود؟

  • [ ] آیا در صورت استفاده از کدهای داینامیک PHP، از پارامتر JSON_UNESCAPED_UNICODE برای جلوگیری از به‌هم‌ریختگی حروف فارسی استفاده شده است؟

بدون دیدگاه

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

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