XooCode(){

CafeOrCoffeeShop

CafeOrCoffeeShop is a FoodEstablishment subtype (which extends LocalBusiness) for cafes, coffee shops, and tea houses. Google uses it for local food and drink search, Google Maps, and the business knowledge panel. Using CafeOrCoffeeShop instead of generic LocalBusiness or Restaurant signals to Google the specific business category, which affects how the listing appears in filtered searches.

CafeOrCoffeeShop defines no properties of its own. It is a classification type: it inherits everything from FoodEstablishment (which gives it servesCuisine, hasMenu, acceptsReservations) and LocalBusiness (address, hours, phone, ratings). The value is in the type name itself, which Google maps to the "Cafe" and "Coffee shop" business categories.

Full example of schema.org/CafeOrCoffeeShop json-ld markup

The markup is verified as valid with Rich Results Test from Google.

Highlight legend:Required by GoogleRecommendedOptional
schema.org/CafeOrCoffeeShop
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@id": "https://mainstreetbrew.com#cafe",
  "@type": "CafeOrCoffeeShop",
  "name": "Main Street Brew",
  "description": "Specialty coffee and pastries on Main Street in Dunmore. Single-origin pour-overs, espresso drinks, and fresh baked goods from local bakeries. Free WiFi.",
  "url": "https://mainstreetbrew.com",
  "image": [
    "https://mainstreetbrew.com/images/storefront-1x1.jpg",
    "https://mainstreetbrew.com/images/storefront-4x3.jpg",
    "https://mainstreetbrew.com/images/storefront-16x9.jpg"
  ],
  "telephone": "+1-570-555-0155",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "318 Main Street",
    "addressLocality": "Dunmore",
    "addressRegion": "PA",
    "postalCode": "18512",
    "addressCountry": "US"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": 41.4199,
    "longitude": -75.6329
  },
  "servesCuisine": ["Coffee", "Pastries", "Sandwiches"],
  "hasMenu": "https://mainstreetbrew.com/menu",
  "acceptsReservations": false,
  "priceRange": "$",
  "amenityFeature": [
    { "@type": "LocationFeatureSpecification", "name": "Free WiFi", "value": true },
    { "@type": "LocationFeatureSpecification", "name": "Outdoor Seating", "value": true }
  ],
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
      "opens": "06:30",
      "closes": "18:00"
    },
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Saturday", "Sunday"],
      "opens": "07:30",
      "closes": "16:00"
    }
  ],
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.7",
    "reviewCount": "142",
    "bestRating": "5"
  }
}
</script>

CafeOrCoffeeShop vs Restaurant vs Bakery

All three are FoodEstablishment subtypes and share the same property set. The difference is categorization. Use Restaurant for sit-down dining. Use CafeOrCoffeeShop for coffee-forward businesses where drinks are the main offering, even if they serve food. Use Bakery for businesses that primarily bake and sell baked goods. If the business straddles categories (a bakery-cafe that also serves lunch), pick the primary identity and use that type.

servesCuisine for cafes

servesCuisine on a coffee shop might seem odd, but it is useful. Values like "Coffee", "Tea", "Pastries", "Sandwiches" help Google match the listing to queries like "coffee shop with sandwiches near me". Think of it as "what do you serve" rather than "what cuisine."

hasMenu for coffee shops

Even a small coffee shop benefits from hasMenu. You can use a simple URL string pointing to the menu page, or a structured Menu object with sections (Hot Drinks, Cold Drinks, Food). AI assistants increasingly answer "does [cafe] have oat milk" or "what's the cheapest latte at [cafe]" by reading structured menu data.

Minimal valid version

The smallest markup that still produces a valid CafeOrCoffeeShop entity. Use it as the floor. Reach for the advanced example above when you want search engines and AI agents to understand more about your content.

schema.org/CafeOrCoffeeShop (minimal)
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "CafeOrCoffeeShop",
  "name": "Main Street Brew",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "318 Main Street",
    "addressLocality": "Dunmore",
    "addressRegion": "PA"
  }
}
</script>

Google rich results this unlocks

Markup matching this example makes your page eligible for the following Google Search rich results. The primary target drives the required / recommended property classification in the advanced code block above.

Common CafeOrCoffeeShop mistakes

Mistakes that pass validation but silently fail to earn rich results or mislead consumers walking the graph. Avoid these and your markup will be ahead of most sites in the wild.

  1. 01

    Using Restaurant for a coffee shop

    Wrong
    "@type": "Restaurant" for a cafe that primarily serves coffee and pastries
    Right
    "@type": "CafeOrCoffeeShop"

    Restaurant implies sit-down dining as the main offering. CafeOrCoffeeShop signals a coffee-forward business to Google, which maps to the "Cafe" and "Coffee shop" business categories in local search. Using the wrong type puts you in the wrong category filter.

  2. 02

    Omitting servesCuisine on a cafe

    Wrong
    CafeOrCoffeeShop with no servesCuisine
    Right
    "servesCuisine": ["Coffee", "Pastries", "Sandwiches"]

    servesCuisine is not just for traditional cuisine types. For cafes, use it to describe what you serve: "Coffee", "Tea", "Pastries", "Sandwiches". Google uses these values for filtered queries like "coffee shop with sandwiches near me."

  3. 03

    acceptsReservations set to true for a walk-in cafe

    Wrong
    "acceptsReservations": true (for a counter-service coffee shop that does not take reservations)
    Right
    "acceptsReservations": false

    Most coffee shops are walk-in only. Setting acceptsReservations to true when you do not actually take reservations frustrates users who try to book. Be accurate. If you do take reservations for event space or private bookings, set it to true or provide a URL.

  4. 04

    Missing amenityFeature for WiFi

    Wrong
    Coffee shop with free WiFi mentioned only in description
    Right
    "amenityFeature": [{ "@type": "LocationFeatureSpecification", "name": "Free WiFi", "value": true }]

    Free WiFi is a top search filter for coffee shops. Declaring it in amenityFeature makes it machine-readable for Google and travel apps. Mentioning it only in the description text means it cannot be used for structured filtering.

About the example data

Main Street Brew is a fictional coffee shop next door to Xoo Code Shop Dunmore. The Xoo Code team gets their morning coffee here. It is part of the Dunmore Main Street cluster that also includes The Dunmore Grill, Hotel Dunmore, and Dunmore Community Credit Union.

Comments

Loading comments...

Leave a comment