Schema markup is structured data that helps search engines understand the content on your restaurant's website. When implemented correctly, it enables rich results in search—including star ratings, price ranges, menu items, and operating hours displayed directly in Google search results.
This guide provides copy-paste ready JSON-LD code for every schema type relevant to restaurants. Each example is tested, validated, and follows Google's current structured data guidelines as of April 2026.
What You'll Learn:
- How to implement Restaurant, Menu, and MenuItem schema with working code
- Which schema properties directly impact rich results eligibility
- How to structure nested schema for complex menus and multi-location restaurants
- Testing and validation tools to ensure error-free implementation
- Advanced schema tactics for competitive advantage
- Common implementation errors and how to fix them
What is Schema Markup?
Schema markup is a standardized vocabulary of tags (microdata) that you add to your HTML to improve how search engines read and represent your page in search results. Think of it as a translation layer between your website content and search engine understanding.
For restaurants, schema markup tells Google explicitly: "This is a restaurant. Here's the cuisine type, price range, location, hours, menu, and customer ratings." Without schema, Google must infer this information from unstructured content, which is error-prone and incomplete.
JSON-LD: The Recommended Format
Schema can be implemented in three formats: JSON-LD, Microdata, or RDFa. Google recommends JSON-LD (JavaScript Object Notation for Linked Data) because it's easier to implement, maintain, and doesn't clutter your HTML.
JSON-LD sits in a <script type="application/ld+json"> tag in your page's <head> section, completely separate from your visible content. This separation makes it trivial to update schema without touching page design.
Basic JSON-LD Structure:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Restaurant",
"name": "Your Restaurant Name",
"description": "Your restaurant description"
}
</script>
Why Schema Markup Matters for Restaurant SEO
Schema markup doesn't directly improve rankings, but it significantly impacts click-through rates and search visibility through rich results. For restaurants, this means star ratings, prices, and menu items appearing directly in search results.
Rich Results Enabled by Schema
Star Rating Snippets
AggregateRating schema displays your average star rating and review count directly in search results.
Impact: Listings with star ratings receive 35% higher click-through rates
Price Range Display
priceRange property shows cost expectations ($ to $$$$) in knowledge panels and local results.
Impact: Manages customer expectations and filters searches by budget
Operating Hours
OpeningHoursSpecification displays when you're open, including special hours for holidays or specific services.
Impact: Reduces friction by showing availability before click
Menu Items in Search
Menu and MenuItem schema can surface specific dishes with prices in search results and Google Maps.
Impact: Menu visibility drives decision-making and increases conversion
Schema and Voice Search:
Structured data is even more critical for voice search. When someone asks Siri or Google Assistant for restaurant recommendations, the assistant pulls heavily from schema markup to provide accurate answers about cuisine, price, ratings, and hours. Our voice search optimization guide covers this in detail.
Types of Schema Markup for Restaurants
Multiple schema types work together to provide comprehensive structured data about your restaurant. Here's which ones matter and when to use each.
| Schema Type | Purpose | Priority |
|---|---|---|
| Restaurant | Core business information: name, address, cuisine, price range | Required |
| LocalBusiness | General business data (Restaurant is a subtype of LocalBusiness) | Required |
| Menu | Menu structure with sections and categories | Recommended |
| MenuItem | Individual dish details: name, description, price, image | Recommended |
| AggregateRating | Average star rating and review count | High Impact |
| Review | Individual customer reviews | Optional |
| OpeningHoursSpecification | Detailed operating hours by day and service type | Recommended |
Restaurant Schema: Complete Implementation
Restaurant schema is the foundation. It provides Google with your core business information including name, address, phone number, cuisine type, price range, and service options.
Complete Restaurant Schema Example
This example includes all recommended properties for maximum rich result eligibility:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Restaurant",
"name": "Bella Napoli",
"image": [
"https://example.com/photos/restaurant-exterior.jpg",
"https://example.com/photos/dining-room.jpg",
"https://example.com/photos/outdoor-seating.jpg"
],
"priceRange": "$$",
"@id": "https://www.example.com",
"url": "https://www.example.com",
"telephone": "+912212345678",
"servesCuisine": ["Italian", "Pizza", "Mediterranean"],
"menu": "https://www.example.com/menu",
"acceptsReservations": "True",
"address": {
"@type": "PostalAddress",
"streetAddress": "123 MG Road",
"addressLocality": "Mumbai",
"addressRegion": "Maharashtra",
"postalCode": "400001",
"addressCountry": "IN"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 18.9388,
"longitude": 72.8354
},
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": [
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday"
],
"opens": "11:30",
"closes": "22:00"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": [
"Saturday",
"Sunday"
],
"opens": "10:00",
"closes": "23:00"
}
],
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.6",
"reviewCount": "234"
},
"paymentAccepted": "Cash, Credit Card, Debit Card, UPI",
"currenciesAccepted": "INR"
}
</script>
Required vs. Recommended Properties
Required Properties (Must Include):
@type- Must be "Restaurant"name- Official restaurant nameaddress- PostalAddress with streetAddress, addressLocality, postalCode, addressCountry
Recommended Properties (Increases Rich Result Eligibility):
image- Array of representative photospriceRange- $ to $$$$ indicatorservesCuisine- Array of cuisine typestelephone- Phone number in international formaturl- Website homepage URLgeo- Latitude and longitude coordinatesopeningHoursSpecification- Detailed hoursaggregateRating- Average rating and countacceptsReservations- True/False
Property Explanations
servesCuisine
List all cuisine types you serve. Be specific but accurate. This affects search matching for cuisine-specific queries.
"servesCuisine": ["Italian", "Pizza", "Pasta", "Neapolitan"]
priceRange
Use $ (inexpensive), $$ (moderate), $$$ (expensive), or $$$$ (very expensive). Based on typical meal cost per person.
"priceRange": "$$"
geo (GeoCoordinates)
Exact latitude and longitude. Use Google Maps to find your precise coordinates. Critical for local search and "near me" queries.
"geo": { "@type": "GeoCoordinates", "latitude": 18.9388, "longitude": 72.8354 }
AggregateRating Schema for Star Ratings
AggregateRating displays star ratings directly in search results. This is one of the highest-impact schema types for click-through rate improvement.
{
"@context": "https://schema.org",
"@type": "Restaurant",
"name": "Bella Napoli",
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.6",
"bestRating": "5",
"worstRating": "1",
"ratingCount": "234"
}
}
Critical AggregateRating Rules:
- • Only use real reviews: Google can detect fake or manipulated ratings and will penalize or remove rich results
- • reviewCount vs ratingCount: Use reviewCount if rating comes from reviews. Use ratingCount if from standalone ratings
- • Minimum count: Google typically requires at least 2 reviews/ratings to display stars
- • Keep updated: Update rating values monthly to reflect current reviews
- • Don't self-review: Including your own reviews or employee reviews violates Google's guidelines
Learn how to ethically generate more reviews that feed into your aggregate rating in our review management guide.
Implementation Methods
There are three main ways to add schema markup to your restaurant website. Choose based on your technical setup and maintenance preferences.
Method 1: Manual HTML Implementation (Recommended)
Add JSON-LD directly to your page's <head> section:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Bella Napoli - Authentic Italian Restaurant</title>
<!-- Restaurant Schema -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Restaurant",
"name": "Bella Napoli",
...
}
</script>
</head>
<body>
...
</body>
</html>
Method 2: WordPress Plugins
If using WordPress, several plugins automate schema markup:
- Rank Math: Free plugin with Restaurant schema support
- Schema Pro: Premium plugin with advanced schema types
- Yoast SEO: Includes basic LocalBusiness schema
Method 3: Google Tag Manager
For sites without direct HTML access, implement schema via GTM custom HTML tags. This allows marketing teams to manage schema without developer involvement.
Testing and Validation
Always test schema markup before publishing. Invalid schema can prevent rich results and may be ignored entirely by Google.
Primary Testing Tools
1. Google Rich Results Test
URL: https://search.google.com/test/rich-results
Tests whether your schema is eligible for rich results. Shows preview of how it will appear in search.
Use for: Final validation before publishing. Shows rich result previews.
2. Schema Markup Validator
URL: https://validator.schema.org/
Official schema.org validator. Checks syntax and structure against schema.org standards.
Use for: Development and debugging. More detailed error messages than Google's tool.
3. Google Search Console
After implementation, monitor "Enhancements" section in Search Console for schema errors and warnings across your entire site.
Use for: Ongoing monitoring. Shows which pages have valid schema and which have errors.
Testing Workflow
- Write schema markup in a text editor or schema generator
- Validate syntax with Schema.org Validator
- Test rich result eligibility with Google Rich Results Test
- Fix any errors or warnings
- Implement on your website
- Re-test live page with Rich Results Test
- Request indexing in Google Search Console
- Monitor Search Console Enhancements for ongoing errors
Common Schema Errors and Fixes
❌ Error: Missing Required Property
Issue: "The property address is required for Restaurant"
Fix: Ensure all required properties for your schema type are included. For Restaurant: name, address
❌ Error: Invalid Value Type
Issue: "The property ratingValue expects a Number, but got a Text"
Fix: Remove quotes from numeric values:
Wrong:
"ratingValue": "4.6"
Correct:
"ratingValue": 4.6
❌ Error: Multiple @type Values
Issue: Having both "Restaurant" and "LocalBusiness" as separate objects
Fix: Use Restaurant only (it's a subtype of LocalBusiness, so you get both)
❌ Error: Self-Serving Reviews
Issue: Google detects reviews from the same domain as the business
Fix: Only include reviews from third-party platforms (Google, Yelp, TripAdvisor). Never include reviews you wrote yourself.
Implement Schema Markup to Maximize Search Visibility
Schema markup is technical SEO that directly impacts how your restaurant appears in search results. While it doesn't improve rankings directly, it dramatically increases click-through rates through star ratings, price information, and menu visibility.
Start with Restaurant schema and AggregateRating, then add Menu and MenuItem schema for maximum impact. Test thoroughly, monitor Search Console for errors, and update regularly to maintain rich result eligibility.
Need Help Implementing Schema?
Our technical SEO team handles complete schema implementation, testing, validation, and ongoing monitoring. We ensure error-free structured data that maximizes rich result eligibility.
Get Schema Implementation Service