Skip to main content
seofields
docs

Restaurant

The Restaurant schema type identifies a place where food and drink is served — from neighbourhood cafés to Michelin kitchens. It is one of the highest-impact local SEO markups, powering map results, knowledge panels, and reservation prompts.

About Restaurant

Restaurant inherits from LocalBusiness but adds two crucial fields: servesCuisine (so you're found for "best Italian near me") and menu (which Google can crawl for menu rich results). Use acceptsReservations: true to surface a "Reserve" button directly in search.

Fields

FieldTypeRequiredDescription
namestringThe name of the restaurant.
descriptionstringA description of the restaurant.
imagestring | objectPhoto of the restaurant — a URL string or a full ImageObject.
servesCuisinestringThe cuisine of the restaurant, e.g. "Italian", "Japanese".
priceRangestringPrice range indicator, e.g. "$", "$$", "$$$", "$$$$".
telephonestringThe telephone number of the restaurant.
address.streetAddressstringStreet address of the restaurant.
address.addressLocalitystringCity of the restaurant.
address.addressRegionstringState or region of the restaurant.
address.postalCodestringPostal code of the restaurant.
address.addressCountrystringCountry of the restaurant.

Plugin Registration

sanity.config.ts
import { defineConfig } from 'sanity'
import { schemaOrgRestaurantPlugin } from 'sanity-plugin-seofields/schema'

export default defineConfig({
  plugins: [
    schemaOrgRestaurantPlugin(),
  ],
})

Schema Usage

Add theschemaOrgRestaurant field to any document schema:

schemas/restaurant.ts
import { defineField, defineType } from 'sanity'

export default defineType({
  name: 'restaurant',
  title: 'Restaurant',
  type: 'document',
  fields: [
    defineField({
      name: 'schemaOrgRestaurant',
      title: 'Restaurant Schema',
      type: 'schemaOrgRestaurant',
    }),
  ],
})

GROQ Query

GROQ query
*[_type == "yourDocument"][0]{
  schemaOrgRestaurant {
    name,
    description,
    image,
    servesCuisine,
    priceRange,
    telephone,
    address {
      streetAddress,
      addressLocality,
      addressRegion,
      postalCode,
      addressCountry
    }
  }
}

Next.js Component

app/restaurant/page.tsx
import { RestaurantSchema } from 'sanity-plugin-seofields/schema/next'

export default function Page({ data }) {
  return <RestaurantSchema data={data.schemaOrgRestaurant} />
}

JSON-LD Output

Generated JSON-LD
{
  "@context": "https://schema.org",
  "@type": "Restaurant",
  "name": "Trattoria del Borgo",
  "description": "A family-run trattoria serving handmade pasta and wood-fired pizza.",
  "image": "https://example.com/restaurants/trattoria.jpg",
  "servesCuisine": "Italian",
  "priceRange": "$$",
  "telephone": "+39-06-555-0142",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "Via della Lungaretta, 22",
    "addressLocality": "Rome",
    "addressRegion": "RM",
    "postalCode": "00153",
    "addressCountry": "IT"
  }
}

Was this page helpful?