Local business (LocalBusiness)

What is local business rich result?

When users search for businesses on Google Search or Maps, they may see a Google knowledge panel with detailed business information or a carousel of related businesses for broader queries like “best NYC restaurants.” To enhance visibility and user experience, businesses can use Local Business structured data to provide information such as business hours, departments, and reviews. Additionally, the Maps Booking API allows businesses to enable reservations, payments, and other actions directly from search results, making it easier for users to engage with the business.

Kindly Refer Google Doc to know more about local business rich result.

What are necessary data for local business rich result?

1. Business Name (rjs-lb-[number]-name)

local-business.html
<div id="rjs-lb-1">
  <p class="rjs-lb-1-name">Hookie Dookie</p>
</div>

2. Image (Thumbnails) (rjs-lb-[number]-img)

đź’ˇ
Any number of images can be added
local-business.html
<div id="rjs-lb-1">
  <img
    class="rjs-lb-1-img"
    src="https://i.imgur.com/3aIBedv.jpeg"
    alt="picture of reception"
  />
 
  <img
    class="rjs-lb-1-img"
    src="https://i.imgur.com/RbIZogg.jpeg"
    alt="another 1"
  />
</div>

3. Location (rjs-lb-[number]-loc)

local-business.html
<div id="rjs-lb-1">
  <!-- geo will be generated from address -->
  <div class="rjs-lb-1-loc">
    <!-- loc-st for street -->
    <!-- any number of loc-st can be created but 2 is good -->
    <p class="stl">008, Papanna street</p>
    <p class="stl">St Mark's Rd</p>
 
    <!-- city -->
    <p class="ct">Bengaluru</p>
 
    <!-- state -->
    <p class="st">Karnataka</p>
 
    <!-- pincode -->
    <p class="pc">560001</p>
 
    <!-- country -->
    <p class="ctry">India</p>
  </div>
</div>

4. Reviews (rjs-lb-[number]-reviews)

Author type classes,

  • authorP - Person type author
  • authorO - Organisation type author
local-business.html
<div id="rjs-lb-1">
  <section class="rjs-lb-1-reviews">
    <!-- userrating instance 1 -->
    <div class="urate">
      <!-- rating value -->
      <p class="rv">4.5</p>
      <!-- max rate -->
      <p class="mr">5</p>
      <!-- author -->
      <p class="raterP">Dean</p>
      <!-- published on -->
      <p class="rpOn">Amazon</p>
    </div>
 
    <!-- userrating instance 2 -->
    <div class="urate">
      <p class="rv">4.5</p>
      <p class="mr">5</p>
      <p class="raterP">Someone</p>
      <p class="rpOn">Noogle</p>
    </div>
  </section>
</div>

5. Telephone & Reservation (rjs-lb-[number]-tel)

local-business.html
<div id="rjs-lb-1">
  <p class="rjs-lb-1-tel" data-reserve="true">+91-84259372x3</p>
</div>

6. Price Range & Currency (rjs-lb-[number]-cost)

đź’ˇ
Alpha-3 code standard for Currency
local-business.html
<div id="rjs-lb-1">
  <p class="rjs-lb-1-cost">INR 200 - INR 500</p>
</div>

7. Work Hours (rjs-lb-[number]-workhours)

Day(s) Wrapper

  • wdr - Range of Working Days
  • wd - Single Working Day

Hour Specification Classes

  • HR - 24-hour format
  • hr - 12-hour format
đź’ˇ

Range separator should be a hyphen (-) between days and times.

local-business.html
<div id="rjs-lb-1">
  <section class="rjs-lb-1-workhours">
    <p class="wdr">
      Sunday - Thursday
      <span class="HR">(10:00 - 21:00)</span>
    </p>
    <p class="wd">
      Saturday
      <span class="HR">(13:00 - 18:00)</span>
    </p>
    <p class="wd">
      Friday
      <span class="hr">(10:00AM - 06:00PM)</span>
    </p>
  </section>
</div>
local-business.html
<div id="rjs-lb-1">
  <a class="rjs-lb-1-menu" href="https://www.restaurant.com/menu">
    <p>Menu</p>
  </a>
</div>

9. Aggregated Rating (rjs-lb-[number]-aggrate)

local-business.html
<div id="rjs-lb-1">
  <div class="rjs-lb-1-aggrate">
    <!-- aggregate rate -->
    <p class="arv">100</p>
 
    <!-- max rate in scale-->
    <p class="mr">100</p>
 
    <!-- total user rate count -->
    <p class="rc">1000</p>
  </div>
</div>

10. Keywords (rjs-lb-[number]-kw)

local-business.html
<div id="rjs-lb-1">
  <p class="rjs-lb-1-kw">
    <span>#Tag1</span>
    <span>#Tag2</span>
    <span>#Tag3</span>
    <span>#Tag4</span>
  </p>
</div>

11. Area Served (rjs-lb-[number]-areaserves)

local-business.html
<div id="rjs-lb-1">
  <p class="rjs-lb-1-areaserves">
    <span>Chennai</span>
    <span>Osur</span>
    <span>Hyderabad</span>
  </p>
 
  <!-- OR -->
 
  <p class="rjs-lb-1-areaserves">Bangalore</p>
</div>

12. URL (Website) (id="rjs-lb-[number]")

đź’ˇ
ID is mandatory in the parent wrapper.
local-business.html
<div id="rjs-lb-1">....</div>

13. Map Iframe (rjs-lb-[number]-map)

đź’ˇ
Use Google Map embed.
local-business.html
<div id="rjs-lb-1">
  <iframe
    class="rjs-lb-1-map"
    src="https://www.google.com/maps/embed?pb (reduced for brevity)"
    width="400"
    height="300"
  ></iframe>
</div>

Function and parameters

đź’ˇ
By default input file is overwriiten with result so destination is optional
This is only for API method. We prefer CLI method for keeping it simpler (refer - Working with API & CLI).
func_params.js
const richResultType = 'localbusiness';
const filePath = 'local-business.html';
const destination = 'dist/local-business.html'; /* optional */
 
richie([richResultType], filePath, destination);

Example of a Instance

local-business.html
<body>
  <div id="rjs-lb-1">
    <!-- name -->
    <p class="rjs-lb-1-name">Hookie Dookie</p>
 
    <!-- image=[] -->
    <img
      class="rjs-lb-1-img"
      src="https://i.imgur.com/3aIBedv.jpeg"
      alt="picture of reception"
    />
 
    <!-- address -->
    <!-- geo will be generated from address -->
    <div class="rjs-lb-1-loc">
      <p class="stl">008, Papanna street</p>
      <p class="stl">St Mark's Rd</p>
 
      <!-- city -->
      <p class="ct">Bengaluru</p>
 
      <!-- state -->
      <p class="st">Karnataka</p>
 
      <!-- pincode -->
      <p class="pc">560001</p>
 
      <!-- country -->
      <p class="ctry">India</p>
    </div>
 
    <!-- review -->
    <section class="rjs-lb-1-reviews">
      <div class="urate">
        <!-- rating value -->
        <p class="rv">4.5</p>
 
        <!-- max rate -->
        <p class="mr">5</p>
 
        <p class="raterP">Dean</p>
 
        <p class="rpOn">Amazon</p>
      </div>
 
      <div class="urate">
        <!-- rating value -->
        <p class="rv">4.5</p>
 
        <!-- max rate -->
        <p class="mr">5</p>
 
        <p class="raterP">Someone</p>
 
        <p class="rpOn">Noogle</p>
      </div>
    </section>
 
    <!-- telephone -->
    <!-- data-reservation="true" for reservation accepted (Boolean)-->
    <p class="rjs-lb-1-tel" data-reserve="true">+91-84259372x3</p>
 
    <!-- cost range -->
    <p class="rjs-lb-1-cost">INR 200 - INR 500</p>
 
    <!-- opening hour specification -->
    <section class="rjs-lb-1-workhours">
      <p class="wdr">
        Sunday - Thursday <span class="HR">(10:00 - 21:00)</span>
      </p>
 
      <p class="wd">Saturday <span class="HR">(13:00 - 18:00)</span></p>
 
      <p class="wd">Friday <span class="hr">(10:00AM - 06:00PM)</span></p>
    </section>
 
    <!-- menu optional menu url-->
    <a class="rjs-lb-1-menu" href="https://www.restaurant.com/menu">
      <p>Menu</p>
    </a>
 
    <!-- aggregate review -->
    <div class="rjs-lb-1-aggrate">
      <!-- aggregate rate that got -->
      <p class="arv">100</p>
      <!-- max possibly rate -->
      <p class="mr">100</p>
      <!-- total user rate count -->
      <p class="rc">1000</p>
    </div>
 
    <iframe
      class="rjs-lb-1-map"
      src="https://www.google.com/maps/embed?pb (reduced for brevity)"
      width="400"
      height="300"
    ></iframe>
 
    <p class="rjs-lb-1-kw">
      <span>#Tag1</span>
      <span>#Tag2</span>
      <span>#Tag3</span>
      <span>#Tag4</span>
    </p>
 
    <p class="rjs-lb-1-areaserves">
      <span>Chennai</span>
      <span>Osur</span>
      <span>Hyderabad</span>
    </p>
  </div>
</body>

Output of a Instance

local-business.html
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "LocalBusiness",
    "name": "Hookie Dookie",
    "address": {
      "@type": "PostalAddress",
      "streetAddress": "008, Papanna street, St Mark's Rd",
      "addressLocality": "Bengaluru",
      "addressRegion": "Karnataka",
      "postalCode": 560001,
      "addressCountry": "IN"
    },
    "image": [
      "https://i.imgur.com/3aIBedv.jpeg",
      "(Reduced for brevity)"
    ],
    "review": [
      {
        "@type": "Review",
        "reviewRating": {
          "@type": "Rating",
          "ratingValue": 4.5,
          "bestRating": 5
        },
        "author": { "@type": "Person", "name": "Dean" },
        "publisher": { "@type": "Organization", "name": "Amazon" }
      },
      {
        "@type": "Review",
        "reviewRating": {
          "@type": "Rating",
          "ratingValue": 4.5,
          "bestRating": 5
        },
        "author": { "@type": "Person", "name": "Someone" },
        "publisher": { "@type": "Organization", "name": "Noogle" }
      }
    ],
    "geo": {
      "@type": "GeoCoordinates",
      "latitude": 12.971167914890476,
      "longitude": 77.5978368737318
    },
    "url": "https://www.cresteem.com/pages/localbusiness#rjs-lb-1",
    "telephone": "+91-84259372x3",
    "priceRange": "INR 200 - INR 500",
    "openingHoursSpecification": [
      {
        "@type": "OpeningHoursSpecification",
        "dayOfWeek": [
          "Sunday",
          "Monday",
          "Tuesday",
          "Wednesday",
          "Thursday"
        ],
        "opens": "10:00",
        "closes": "21:00"
      },
      {
        "@type": "OpeningHoursSpecification",
        "dayOfWeek": ["Saturday"],
        "opens": "13:00",
        "closes": "18:00"
      },
      {
        "@type": "OpeningHoursSpecification",
        "dayOfWeek": ["Friday"],
        "opens": "10:00",
        "closes": "18:00"
      }
    ],
    "acceptsReservations": true,
    "aggregateRating": {
      "@type": "AggregateRating",
      "ratingValue": 100,
      "bestRating": 100,
      "ratingCount": 1000
    },
    "areaServed": ["Chennai", "Osur", "Hyderabad"],
    "menu": "https://www.restaurant.com/menu",
    "keywords": "#Tag1, #Tag2, #Tag3, #Tag4"
  }
]
</script>


Let’s see what’s next!