Richie JS version 1.1.4 🚀

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 (opens in a new tab) to know more about local business rich result.

What are necessary data for local business rich result?

1. Business name

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

2. Image (Thumbnails)

đź’ˇ
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

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

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

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

đź’ˇ
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

Format Specification classes are,

Day(s) Wrapper

  • wdr - Range of Working days.
  • wd - Single Working day

Hour Specification classes

  • HR - 24 Hours format
  • hr - 12 Hour format
đź’ˇ
Range seperator should be Hyphen(-) in 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>

8. Menu link

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

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

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

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)

đź’ˇ
URL would be deeplink of entity so ID is mandatory in parent wrapper.
local-business.html
<div id="rjs-lb-1">
  ....
</div>

13. Map iframe

đź’ˇ
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!