Skip to main content
seofields
docs
.md

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
namestring✓The name of the restaurant.
descriptionstring—A description of the restaurant.
imagestring | object—Photo of the restaurant — a URL string or a full ImageObject.
servesCuisinestring—The cuisine of the restaurant, e.g. "Italian", "Japanese".
priceRangestring—Price range indicator, e.g. "$", "$$", "$$$", "$$$$".
telephonestring—The telephone number of the restaurant.
address.streetAddressstring—Street address of the restaurant.
address.addressLocalitystring—City of the restaurant.
address.addressRegionstring—State or region of the restaurant.
address.postalCodestring—Postal code of the restaurant.
address.addressCountrystring—Country 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 the schemaOrgRestaurant 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?