LocalBusiness schema markup: the final local optimization layer in 2026
Schema markup is structured tagging (schema.org vocabulary) that Google reads to understand precisely what a page represents: business, product, event, FAQ, recipe, article. For local SEO, the LocalBusiness type and its 80+ subtypes (Restaurant, Dentist, Plumber, Store, Hotel...) are the foundation of rich snippets (stars, price, hours, enriched photos in the SERP).
Google's recommended 2026 format: JSON-LD (JavaScript Object Notation for Linked Data), injected into the page via . Easier to maintain than microdata or RDFa.
Across 100 Dakar SME sites audited in May 2026: 64% had NO Schema markup. Of the 36% that did, 19% had critical errors detected by Google's Rich Results Test.
H2: The 12 essential LocalBusiness properties
| Property | Type | Required | Senegal example |
|---|---|---|---|
| @type | Text | Yes | "Restaurant" |
| name | Text | Yes | "Le Baobab Dakar" |
| image | URL | Yes (recommended) | "https://lebaobab.sn/photos/facade.jpg" |
| @id | URL | Recommended | "https://lebaobab.sn/#localbusiness" |
| url | URL | Yes | "https://lebaobab.sn" |
| telephone | Text | Yes | "+221775969333" |
| address | PostalAddress | Yes | See snippet |
| geo | GeoCoordinates | Recommended | latitude/longitude |
| openingHoursSpecification | Array | Yes | See snippet |
| priceRange | Text | Recommended | "$$" (4 levels) |
| sameAs | Array of URLs | Recommended | Links to FB, IG, GBP |
| aggregateRating | Object | Recommended if reviews | ratingValue + reviewCount |
H2: Base code snippet — Dakar restaurant
`json
{
"@context": "https://schema.org",
"@type": "Restaurant",
"@id": "https://lebaobab.sn/#localbusiness",
"name": "Le Baobab Dakar",
"image": [
"https://lebaobab.sn/photos/facade.jpg",
"https://lebaobab.sn/photos/salle.jpg",
"https://lebaobab.sn/photos/plat-signature.jpg"
],
"url": "https://lebaobab.sn",
"telephone": "+221775969333",
"priceRange": "$$",
"servesCuisine": ["Senegalese", "African", "Fusion"],
"address": {
"@type": "PostalAddress",
"streetAddress": "Route des Almadies, Lot N° 12",
"addressLocality": "Dakar",
"addressRegion": "Dakar",
"postalCode": "BP 12345",
"addressCountry": "SN"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 14.7449,
"longitude": -17.5269
},
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Sunday"],
"opens": "12:00",
"closes": "23:00"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Friday","Saturday"],
"opens": "12:00",
"closes": "01:00"
}
],
"sameAs": [
"https://www.facebook.com/LeBaobabDakar",
"https://www.instagram.com/lebaobabdakar",
"https://www.tripadvisor.com/Restaurant_Review-LeBaobab",
"https://g.page/lebaobabdakar"
],
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.7",
"reviewCount": "342"
},
"hasMenu": "https://lebaobab.sn/menu"
Need a professional website?
Kolonell builds websites that attract clients, optimized for the Sénégalese market. Free quote in 2 minutes.
}
`
H2: Niche variants — 8 ready-to-copy snippets
Dentist (dental clinic)
@type: "Dentist". Add medicalSpecialty: "Dentistry", hasMap (GBP link), acceptsReservations: true. No servesCuisine nor hasMenu.
Plumber
@type: "Plumber". Add areaServed: array of cities (Dakar, Almadies, Plateau, Médina), availableLanguage (French, Wolof, English), hoursAvailable (24/7 if emergency).
LodgingBusiness (Hotel)
@type: "Hotel". Add starRating (object with ratingValue), amenityFeature (array: "Free WiFi", "Pool", "Restaurant", "AC"), checkinTime, checkoutTime, numberOfRooms.
Store (fashion/electronics boutique)
@type: "Store" or "ClothingStore" or "ElectronicsStore". Add paymentAccepted ("Cash, Wave, Orange Money, Credit Card, Wire Transfer"), currenciesAccepted ("XOF, EUR, USD").
AutomotiveBusiness (auto garage)
@type: "AutoRepair" or "AutomotiveBusiness". Add makesOffer (array: "Oil change", "OBD2 diagnostic", "Tires"), brand (handled brands Toyota, Renault, Hyundai...).
Pharmacy
@type: "Pharmacy". Add medicalSpecialty: "Pharmacy", hoursAvailable (24/7 if on duty), availableService: "Home delivery".
MedicalClinic
@type: "MedicalClinic". Add medicalSpecialty (Cardiology, Pediatrics, etc.), physician (Person array), healthPlanNetworkId if covered.
EducationalOrganization (school / training center)
@type: "EducationalOrganization" or "School" or "CollegeOrUniversity". Add alumni (Person), hasCourse (Course array), numberOfStudents.
H2: Where to place JSON-LD in Next.js 14
For a Next.js 14 App Router project (Kolonell stack):
`tsx
// src/app/[locale]/restaurant/[slug]/page.tsx
export default function RestaurantPage({ params }) {
const restaurant = getRestaurant(params.slug);
const jsonLd = {
"@context": "https://schema.org",
"@type": "Restaurant",
"name": restaurant.name,
// ... rest of properties
};
return (
<>
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}
/>
{/* rest of page */}
>
);
}
`
To generate dynamically from Prisma: create a buildLocalBusinessSchema(business) helper in src/lib/seo.ts that returns the object to serialize.
H2: Validation — 3 essential tools
- Google Rich Results Test (search.google.com/test/rich-results) — shows rich snippet eligibility + errors. The only officially Google-validated tool.
- Schema.org Validator (validator.schema.org) — strict syntactic validation vs schema.org vocabulary. More demanding than Google.
- Search Console > Enhancements — detects errors on already-crawled pages + alerts on missing required property.
H2: Common pitfalls to avoid
- Phone without international prefix: "+221" mandatory.
- 12h hours instead of 24h: "23:00" not "11:00 PM".
addressCountryin French: "SN" ISO-3166 not "Sénégal".- Fabricated
aggregateRating: violation of Google Guidelines → manual penalty. Only enter real Google/TripAdvisor/Facebook ratings. - Duplicate JSON-LD on same page (LocalBusiness + Organization with same info) → conflict, Google ignores both.
sameAswith broken links: audit quarterly.
FAQ
Does Schema markup weigh on ranking?
Indirectly. Google confirmed Schema alone isn't a direct ranking factor. But rich snippets improve CTR by +15-30% on average (BrightEdge 2026), and better CTR boosts ranking via behavior signals.
JSON-LD or microdata in 2026?
JSON-LD mandatory. Google is progressively deprecating microdata. No reason to code in microdata in 2026.
How many sameAs properties?
Minimum 3 (GBP, FB, IG). Ideal 5-8 (add LinkedIn, TripAdvisor, YouTube, Wave Business...). Beyond 12: spammy signal.
Can you place multiple LocalBusiness on a multi-branch site?
Yes, recommended: 1 distinct JSON-LD per local branch page (Dakar page, Saint-Louis page, Thiès page). Each branch has its own unique @id.
How to handle special hours (holidays, Eid)?
specialOpeningHoursSpecification property with validFrom + validThrough. Overrides standard openingHoursSpecification for the relevant day.
Let's talk about your case
If you want to implement complete LocalBusiness Schema markup on your Dakar SME site (audit + generation + Next.js/WordPress integration + validation), we can build the solution. WhatsApp +221 77 596 93 33.
Mohamed Bah
Fondateur, Kolonell
Passionate about digital and entrepreneurship in Africa, Mohamed has been helping Sénégalese businesses with their digital transformation since 2020. Founder of Kolonell, he believes every SME deserves a professional and accessible online présence.
