Schema.org for Restaurants — a complete setup guide for Joomla

A step-by-step guide to implementing Restaurant Schema.org on a Joomla site — covering the right types, required fields, menu markup, and how to validate your output.

Why Restaurant structured data matters

When someone searches for "Italian restaurant near me" or asks ChatGPT "what's a good restaurant in Belgrade?", the AI systems and search engines that respond need structured, machine-readable information to answer confidently.

A restaurant website without Schema.org structured data is invisible to this layer of the web. The AI cannot verify your cuisine type, your opening hours, your location, your price range, or your rating — so it either does not recommend you, or cites less reliable sources (review platforms, directory listings) instead.

Restaurant Schema.org is also one of the most impactful structured data implementations for traditional SEO: it enables the rich Knowledge Panel in Google Search, the opening hours display, the price range indicator, and the review stars.

The correct Schema.org type for restaurants

Use Restaurant — which extends FoodEstablishment, which extends LocalBusiness. You do not need to declare all three; declaring Restaurant is sufficient because Schema.org types are hierarchical.

{
  "@context": "https://schema.org",
  "@type": "Restaurant",
  "name": "Acme Bistro",
  "url": "https://acme-bistro.com",
  "telephone": "+381 11 123 4567",
  "servesCuisine": "Italian",
  "priceRange": "$$",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "Knez Mihailova 10",
    "addressLocality": "Belgrade",
    "addressCountry": "RS",
    "postalCode": "11000"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": 44.8178,
    "longitude": 20.4569
  },
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday"],
      "opens": "12:00",
      "closes": "23:00"
    },
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Friday", "Saturday"],
      "opens": "12:00",
      "closes": "00:00"
    },
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": "Sunday",
      "opens": "13:00",
      "closes": "22:00"
    }
  ]
}

Required and recommended fields

FieldRequiredDescription
nameYesRestaurant name
addressYesFull postal address
telephoneRecommendedInternational format
urlRecommendedYour website URL
servesCuisineRecommendedCuisine type (e.g., "Italian", "Serbian")
priceRangeRecommended$ to $$$$
openingHoursSpecificationRecommendedDay-by-day hours
geoRecommendedGPS coordinates
imageRecommendedPhoto of the restaurant
aggregateRatingOptionalStar rating with review count
menuOptionalURL of the menu page
acceptsReservationsOptionalBoolean
hasMapOptionalGoogle Maps URL

Adding aggregate ratings

If your restaurant has verified reviews on TripAdvisor, Google, or another platform, include aggregateRating:

"aggregateRating": {
  "@type": "AggregateRating",
  "ratingValue": "4.7",
  "reviewCount": "892",
  "bestRating": "5",
  "worstRating": "1"
}

Important: Only use real, verifiable ratings. Google's policies prohibit self-authored ratings or fabricated review counts. Violations can result in rich result ineligibility.

Menu markup

If you have a digital menu on your site, link to it in the schema:

"menu": "https://acme-bistro.com/menu",
"hasMenu": {
  "@type": "Menu",
  "name": "Main Menu",
  "url": "https://acme-bistro.com/menu"
}

For full menu item markup (individual dishes with descriptions and prices), use MenuSection and MenuItem types. This is advanced but can produce rich results for specific dish queries.

The social and meta layer

Beyond Schema.org, restaurant sites benefit from complete OpenGraph and Twitter Card implementation. When anyone shares your website on Facebook, Instagram Stories, or X, the preview card should show your best photo, your restaurant name, and a compelling description — not a random thumbnail and truncated URL.

Recommended OG image: a high-quality food or interior photo at 1200×630 pixels.

Implementing on Joomla

Implementing Restaurant Schema.org manually on a Joomla site requires editing templates, writing PHP, or managing custom modules. For most restaurant owners, that is not realistic.

AI Boost for Joomla provides a Restaurant preset that configures the correct Schema.org type and all recommended fields through a user-friendly admin interface. You fill in your restaurant name, address, phone, cuisine type, price range, and opening hours through a form — the plugin generates and injects the correct JSON-LD automatically.

The Business Hours widget in AI Boost provides a 7-row weekly table (Mon–Sun) for setting opening hours, with support for individual day configuration, closed day marking, and automatic openingHoursSpecification generation.

After saving, visit your homepage, view source, find the application/ld+json block, and validate it at Google's Rich Results Test. A correctly configured restaurant schema passes the test and qualifies for the Local Business rich result panel.