Structured data is a way of writing your business details so a machine reads them without guessing. Instead of hoping Google infers from the visible text that “Rodríguez Auto Repair” is a repair shop in San José with certain hours, you tell it directly, in a format that leaves no room for doubt. That format is called JSON-LD, and for a local business the type you want is LocalBusiness.
It isn’t optional if you care about serious technical SEO. And for AI it has a bonus: it confirms the exact same details already in your Google Business Profile, in a format ChatGPT, Perplexity, and Google AI can parse without ambiguity.
What it looks like
Here’s a real, valid example. Copy it, swap every value for your own, and delete any fields that don’t apply (don’t invent hours or an address you don’t have):
{
"@context": "https://schema.org",
"@type": "LocalBusiness",
"@id": "https://yourbusiness.co/#business",
"name": "Rodríguez Auto Repair",
"image": "https://yourbusiness.co/img/shop.jpg",
"url": "https://yourbusiness.co",
"telephone": "+506 2222 3333",
"priceRange": "$$",
"address": {
"@type": "PostalAddress",
"streetAddress": "200 m south of the central park",
"addressLocality": "San José",
"addressRegion": "San José",
"postalCode": "10101",
"addressCountry": "CR"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 9.9281,
"longitude": -84.0907
},
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "08:00",
"closes": "17:00"
}
],
"sameAs": [
"https://www.facebook.com/yourbusiness",
"https://www.instagram.com/yourbusiness"
]
}What each part means
- @type: the kind of business. Use a more specific one when it fits (
Restaurant,Dentist,AutoRepair), and prefer it when one exists. - name, telephone, url: identical to your Business Profile and your site. The exact match matters.
- address: your address with
addressCountryas the two-letter code (CRfor Costa Rica). - geo: latitude and longitude. Get them from Google Maps by right-clicking your location.
- openingHoursSpecification: your real hours. If Saturdays differ, add another block.
- sameAs: links to your real profiles (socials, directories). They help confirm the business is the same everywhere.
Where to put it
It goes inside a <script type="application/ld+json"> tag in the <head> of your page, ideally the home or contact page. Once per page is enough. On WordPress, plugins like Yoast or Rank Math generate it for you from a form, no code required.
How to validate it
Don’t ship it blind. Paste it into Google’s Rich Results Test or the Schema.org validator and check that it flags no errors. A schema with errors is worse than none: it gives Google a reason to ignore the whole thing.
The most common mistakes
- Data that doesn’t match what’s visible on the page. Google treats that as manipulation.
- Invented hours or an address added “to fill it out.” If it isn’t confirmed, leave it off.
- Copying the example and forgetting to change the sample values. Yes, it happens.
- Pasting the same block on 40 pages with generic data instead of once, done right.
Rather have it done and validated in one pass, alongside your robots.txt and llms.txt? It’s part of how we build.