LocalBusiness (and its more specific subtypes — Restaurant, Dentist, AutoRepair, and dozens more) describes what a business is: its name, address, phone, hours, price range, and geographic coordinates. Organization is the broader, location-agnostic version for the brand itself. Neither is about opinion — that's what Review and AggregateRating are for — but LocalBusiness is the anchor most other markup on a local page nests under or references.
{
"@context": "https://schema.org",
"@type": "LocalBusiness",
"@id": "https://www.example-dental.com/#business",
"name": "Example Family Dental",
"image": "https://www.example-dental.com/office.jpg",
"telephone": "+1-925-555-0142",
"priceRange": "$$",
"address": {
"@type": "PostalAddress",
"streetAddress": "1200 Main St",
"addressLocality": "San Ramon",
"addressRegion": "CA",
"postalCode": "94582",
"addressCountry": "US"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 37.7799,
"longitude": -121.978
},
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday"],
"opens": "08:00",
"closes": "17:00"
}
]
}
Note what's absent: no aggregateRating block. For a business marking up itself, adding one here is the single most common way well-intentioned local SEO markup runs into the self-serving restriction described above. If you want your rating visible in a rich result, the reliable path is a well-optimized, complete Google Business Profile — not an aggregateRating on your own LocalBusiness node.