
Schema markup is a block of code that tells search engines, in a language they read perfectly, what your business is: its name, address, phone, hours, service area and type. For a local business it is one of the cheapest technical SEO fixes available, and one of the most skipped. This guide explains what LocalBusiness schema does, what it does not do, which properties matter, and how to add it to a WordPress site in under fifteen minutes. If you just want the code, jump to our free Local Business Schema Generator; everything it outputs follows the rules below.
What LocalBusiness Schema Actually Does
Google reads your website as text. Text is ambiguous: is “Kaizen” a brand, a street or a philosophy? Is “10–18” an opening time or a price range? Structured data removes the guesswork by labelling each fact with a vocabulary from schema.org. The result is three practical benefits:
- Entity clarity. Google can connect your website, your Google Business Profile and your citations as one business. In our client work this consistency is one of the signals that steadies map-pack rankings.
- Eligibility for rich results. Depending on the type, Google can show opening hours, ratings, price range and menu or booking links directly in search results.
- AI search readiness. AI Overviews and assistants pull facts from structured data when they summarise “best plumber near me” or “is X open on Sunday”. Clean schema is how you make sure the facts are yours.
What it does not do: schema is not a ranking switch. A roofer with perfect markup and no reviews will not outrank a roofer with 200 reviews. Think of it as removing friction, not adding fuel.
Choose the Right Type: Never Just “LocalBusiness”
LocalBusiness is a parent type. Schema.org has dozens of more specific children, and the specific one always wins because it unlocks type-specific properties and matches your Google Business Profile category. The most common ones for our clients:
| Business | Schema type | Useful extra properties |
|---|---|---|
| Restaurant, café, takeaway | Restaurant, CafeOrCoffeeShop, FastFoodRestaurant |
servesCuisine, hasMenu, acceptsReservations |
| Roofer, plumber, electrician, HVAC | RoofingContractor, Plumber, Electrician, HVACBusiness |
areaServed, hasOfferCatalog |
| General contractor, remodeler | GeneralContractor, HomeAndConstructionBusiness |
areaServed, knowsAbout |
| Dentist, clinic, physio | Dentist, MedicalClinic, Physiotherapy |
medicalSpecialty, availableService |
| Salon, spa, barber | HairSalon, DaySpa, BeautySalon |
priceRange, paymentAccepted |
| Law or accounting firm | LegalService, AccountingService |
areaServed, founder |
If your exact type does not exist, use the nearest parent (for example HomeAndConstructionBusiness) and put the specific trade in description and knowsAbout.
The Properties That Matter, in Priority Order
Required by Google for LocalBusiness Rich Results
name: exactly as on your Google Business Profile and your sign.address: aPostalAddresswith street, locality, region, postal code and country code. Service-area businesses that hide their address on Google should still include at least locality and country.image: at least one photo URL of the business, 1200px wide or more.
Strongly Recommended
@id: a stable URL such ashttps://example.com/#businessso every page refers to the same entity.url,telephone(international format, +1 or +44),email.openingHoursSpecification: one entry per day or day group, in 24-hour time. Match your Google profile exactly.geo: latitude and longitude with at least five decimals. Right-click your pin in Google Maps to copy them.priceRange: “$$” style or “$10–$25”. It appears in rich results.sameAs: your Google Maps URL, Facebook, Instagram, Yelp, TripAdvisor. This is how Google ties your profiles together.areaServed: cities or postcodes you cover, essential for trades without a shopfront.hasMap: your Google Maps share link.
Type-Specific
servesCuisine and hasMenu for restaurants; hasOfferCatalog listing your services for contractors; availableService for clinics. These give AI summaries something concrete to quote.
Properties to Leave Out
aggregateRatingcopied from Google reviews. Google’s guidelines prohibit self-serving review markup that is not from your own site, and it can trigger a manual action.FAQPagemarkup. Google withdrew FAQ rich results for almost all sites in 2026; the markup is harmless but no longer earns anything, so spend the time on the FAQ content itself.- Anything you cannot keep accurate. Wrong hours in schema are worse than no hours.
A Worked Example: Restaurant
This is the shape our generator produces for a sushi and Thai restaurant. Names and details are placeholders.
{
"@context": "https://schema.org",
"@type": "Restaurant",
"@id": "https://example-sushi.com/#restaurant",
"name": "Example Sushi & Thai",
"image": "https://example-sushi.com/images/dining-room.jpg",
"url": "https://example-sushi.com/",
"telephone": "+33 3 80 00 00 00",
"priceRange": "€€",
"servesCuisine": ["Sushi", "Thai", "Japanese"],
"acceptsReservations": "True",
"hasMenu": "https://example-sushi.com/menu/",
"address": {
"@type": "PostalAddress",
"streetAddress": "12 Rue Example",
"addressLocality": "Dijon",
"postalCode": "21000",
"addressCountry": "FR"
},
"geo": { "@type": "GeoCoordinates", "latitude": 47.32205, "longitude": 5.04148 },
"openingHoursSpecification": [
{ "@type": "OpeningHoursSpecification",
"dayOfWeek": ["Tuesday","Wednesday","Thursday","Friday","Saturday"],
"opens": "11:30", "closes": "22:30" },
{ "@type": "OpeningHoursSpecification",
"dayOfWeek": "Sunday", "opens": "18:00", "closes": "22:00" }
],
"sameAs": [
"https://maps.google.com/?cid=000000000000",
"https://www.facebook.com/examplesushi",
"https://www.instagram.com/examplesushi"
]
}
Note what is missing: no ratings, no FAQ, no keyword lists. Fewer, accurate properties beat a long block of guesses.
How to Add It to WordPress
- Generate the JSON-LD. Use the schema generator, choose your business type, fill in hours and address, and download or copy the output.
- Place it once, site-wide. Schema for the business belongs in the
<head>of every page, or at minimum on the homepage, contact page and location pages. In WordPress, use your SEO plugin’s “custom schema” or “head code” field, a lightweight header-scripts plugin, or your child theme’sheader.php. Avoid page builders’ HTML widgets for this; they often strip the script tag. - Do not duplicate. If your SEO plugin already outputs an
OrganizationorLocalBusinessnode, either switch it off or extend it. Two conflicting business nodes confuse the parser. - Validate. Paste the page URL into Google’s Rich Results Test and the Schema Markup Validator. The first checks eligibility for rich results; the second checks that the vocabulary is correct. Fix every error; warnings are optional.
- Request indexing. In Google Search Console, inspect the homepage URL and request indexing so the new markup is read within days rather than weeks.
Five Mistakes We Fix Most Often
- Hours that differ from the Google profile. Pick one source of truth and update both the same day.
- Using “LocalBusiness” when “Plumber” exists. You lose the type-specific properties and the match to your Google category.
- Markup on a page that 404s or is noindexed. Google only reads schema on pages it indexes.
- Multiple locations in one node. Each location gets its own page and its own
@id. - Markup that describes a different business. Templates copied from a tutorial still carrying the tutorial’s name or phone number. It happens more than you would think.
Frequently Asked Questions
Does Schema Markup Help Me Rank in the Google Map Pack?
Indirectly. Map-pack rankings are driven mainly by your Google Business Profile, proximity, reviews and your website’s relevance and authority. Schema strengthens the connection between the website and the profile and removes ambiguity, which supports those signals rather than replacing them.
JSON-LD or Microdata?
JSON-LD. Google recommends it, it does not touch your visible HTML, and it is far easier to maintain.
How Many Types Can One Page Have?
As many as are true, connected in one @graph: your business, the WebSite, the WebPage, a BreadcrumbList, and on service pages a Service node whose provider points at the business @id.
I Added It and Nothing Changed. Why?
Check three things: the page is indexed, the Rich Results Test shows no errors, and the markup matches your profile. Then give it four to six weeks. If map rankings are still flat, the limiting factor is elsewhere; a free Local SEO audit will show you where.



