If you are fed up with trying to wrap Microdata html around your pages content then these Local SEO tips for implementing Local Business structured data markup with JSON-LD is for you. I break down Local Business structured data for a selection of Local Business types that can be amended to suit your business type and how to add it sitewide or page level.
Local Business Structured Data Markup with JSON-LD
A couple of things to note:
- Google does not always support schema.org markup as it becomes available. Use Googles structured data testing tool to see what is recognized and supported.
- Most local business structured data out there does not include image and priceRange. I include these in my structured data and so should you if you want an enhanced mobile rich snippet
- I do not include Geo Coordinates because any user can change your PIN marker on maps thereby altering your Geo Coordinates which has caused conflicts in the past. I include hasMap instead which cannot be altered by users
- I include sameAs to add your business social media profiles. You can also add top level business citations, by top level I mean BBB, chamber of commerce, companies house listings or other high authority review sites that you may be using.
Local Business Structured Data Types
Check http://schema.org/LocalBusiness to see if your business type is specifically included, if not use LocalBusiness as default until it is supported.
Local Business Structured Data Markup – Basic Single Location
<script type="application/ld+json"> { "@context": "http://schema.org", "@type": "LocalBusiness", "image": "Image URL", "priceRange" : "Price Range", "address": { "@type": "PostalAddress", "streetAddress": "First Line Address", "addressLocality": "Town", "addressRegion": "State ", "postalCode":"Post Code" }, "description": "Brief Description of Business", "name": "Name of Business", "openingHours": "Mo-Fr 09:00-17:00", "telephone": "0800 000 000", "email": "info@yourdomain", "url": "https://www.yourdomain.co.uk", "hasMap": "https://www.google.com/maps?cid=", "sameAs" : [ "Social media channel url", “Social media channel url” ] } } </script>
Tips:
priceRange in the above is listed as “Best Rate Guaranteed”, depending on your buisness it could also be, “Free Quote Available”, “Priced on Quote” or if you do have an actual product price range you could use “£10 – £25”.
I recommend that single location businesses also include the business contact details within their sites footer, after all you want your customers to find you.
Local Business Structured Data Markup – Business with Two Locations
In this instance it is a Real Estate Agent with two locations.
<script type='application/ld+json'> { "@context": { "@vocab": "http://schema.org/" }, "@graph": [ { "@id": "https://your-domain.co.uk", "@type": "Organization", "name": "Main Business Name", "url": "https://your-domain.co.uk", "logo": "https://your-domain.co.uk/logo.jpg", "sameAs": [ "https://twitter.com/main brand social", "https://www.youtube.com/main brand social", "https://www.facebook.com/main brand social" ] }, { "@type": "RealEstateAgent", "parentOrganization": { "name" : "Name of Main Business" }, "name": "Local Business Name if Different", "description": "Short Business Description", "image": "https://your-domain.co.uk/logo.jpg", "priceRange" : "Monthly - Weekly Rental", "address": { "@type": "PostalAddress", "streetAddress": "Street Address", "addressLocality": "Town / City", "addressRegion": "County or State", "postalCode":"Post Code" }, "openingHours": [ "Mon-Fri 09:00-17:30" ], "telephone": "0800 000 000", "url": "https://your-domain.co.uk/location-page/", "hasMap": "https://goo.gl/maps/from-GMB-listing", "sameAs" : [ "Social Channel for Business Location", "Social Channel for Business Location" ] }, { "@type": "RealEstateAgent", "parentOrganization": { "name" : "Name of Main Business" }, "name": "Local Business Name if Different", "description": "Short Business Description", "image": "https://your-domain.co.uk/logo.jpg", "priceRange" : "Monthly - Weekly Rental", "address": { "@type": "PostalAddress", "streetAddress": "Street Address", "addressLocality": "Town / City", "addressRegion": "County or State", "postalCode":"Post Code" }, "openingHours": [ "Mon-Fri 09:00-17:30", "Sat 10:00-13:00" ], "telephone": "0800 000 000", "url": "https://your-domain.co.uk/location-page/", "hasMap": "https://goo.gl/maps/from-GMB-listing", "sameAs" : [ "Social Channel for Business Location", "Social Channel for Business Location" ] } ] } </script>
Locating your hasMap:
Locate your business listing in Google Maps. Use the hamburger menu (top left search bar), select share or embed.
Local Business Structured Data Markup – Business with Service Area
In this structured data the business is a Taxi service, but it could be a plumber, electrician, locksmith, any business that provides the service within a certain area.
GeoCoordinates Tip:
Make sure you select the mid point of your service area for the GeoCoordinates. The radius is in miles.
Local Business Structured Data Markup – Hotel
This is a basic hotel structured data markup, for variations that include reservations, aggregate ratings and properties within a hotel, like restaurant or spa, please visit my hotel structured data guide.
<script type="application/ld+json"> { "@context": "http://schema.org", "@type": "Hotel", "name": "Aleenta Phuket - Phang Nga Resort & Spa", "alternateName": "Aleenta Phuket", "url": "https://www.aleenta.com/phuket/", "logo": "https://www.aleenta.com/files/6915/9703/2676/logo_aleenta_new.png", "image": "https://www.aleenta.com/files/3615/4260/7256/1.-Aleenta-Phuket---Main-Pool-hero-shot.jpg", "description": "Luxury beach resort in Phang Nga, Phuket", "sameAs": [ "https://www.facebook.com/aleenta.phuket/", "https://www.instagram.com/aleentaphuketresort/" ], "telephone": "+66 76 580 333", "email": "rsvn.aph@akaryn.com", "hasMap": "https://www.google.com/maps?cid=3033405169757760258", "checkinTime": "14:00", "checkoutTime": "12:00", "additionalType": "https://en.wikipedia.org/wiki/Resort_hotel", "areaServed": "https://www.wikidata.org/wiki/Q273306", "address" : { "@type" : "PostalAddress", "streetAddress": "33 Moo 5, Khok Kloi", "addressLocality": "Takua Thung", "addressRegion": "Phang Nga", "postalCode": "82140", "addressCountry": "Thailand" }, "priceRange": "Best Rate Guaranteed Direct", "starRating": { "@type" : "http://schema.org/Rating", "ratingValue": "5" } } } </script>
Training Center Schema
Adding additional type structure to help define what type of training center.
<script type="application/ld+json"> { "@context": "http://schema.org", "@type": "LocalBusiness", "name": "VIVA Training Academy", "url": "https://vivatrainingacademy.co.uk/", "description": "Plumbing and Gas Training Courses", "logo": "https://vivatrainingacademy.co.uk/wp-content/uploads/2019/11/VIVA-Training-Academy-Logo.png", "image": "https://vivatrainingacademy.co.uk/wp-content/uploads/2019/11/44705933_271701403475659_4933754595068346368_o.png", "priceRange" : "£200 - £8000", "openingHours": "Mo-Fr 08:30-18:30", "telephone": "0800 6123177", "email": "hello@vivatrainingacademy.co.uk", "hasMap": "https://www.google.com/maps?cid=8604192792402712362", "additionalType": "https://en.wikipedia.org/wiki/Industrial_training_institute", "sameAs":[ "https://vivatrainingacademy.business.site/", "https://www.facebook.com/vivatrainingacademy/" ], "address": { "@type": "PostalAddress", "streetAddress": "Nertherton Mill, Holdsworth Rd", "addressLocality": "Halifax", "addressRegion": "West Yorkshire", "postalCode":"HX3 6SN" } } } </script>
Adding your Structured Data to Website
For a local business with one or two location I recommend adding it sitewide in one fell swoop. If you are using WordPress this can be added to the header.php file or footer.php file but this will depend on how your site was originally built.
If selecting the header or footer it should be at the end of your file content. In most WP sites dashboard, select >> Appearance >> Editor.
If you cannot locate the header or footer files and the CMS use blocks, add an <HTML> block to your footer and add the structured data within <div> < /div>.
As a last resort you can past on a page by page basis, again by adding within <div> </div> at the bottom of each page.
<div> <script type="application/ld+json"> { "@context": "http://schema.org", "@type": "LocalBusiness", "image": "Image URL", "priceRange" : "Price Range", "address": { "@type": "PostalAddress", "streetAddress": "First Line Address", "addressLocality": "Town", "addressRegion": "State ", "postalCode":"Post Code" }, "description": "Brief Description of Business", "name": "Name of Business", "openingHours": "Mo-Fr 09:00-17:00", "telephone": "0800 000 000", "email": "info@yourdomain", "url": "https://www.yourdomain.co.uk", "hasMap": "Short link direct from your GMB listing", "sameAs" : [ "Social media channel", “Social media channel” ] } } </script> </div>
Test all your implementations with Google’s structured data testing tool.