Most restaurants are invisible to AI search. This guide shows you why, and how to fix it, whether you run 1 location or 100.
JSON-LD schema markup, structured data, and location enrichment to make restaurants visible in ChatGPT, Perplexity, and Google AI Overviews.
Without geo data
What AI sees: nothing matchable. Zero proximity or cuisine queries answered.
With GeoEnrich
What AI sees: matchable for 30+ query types including "Italian restaurant near the station", "outdoor seating in Jordaan", "family-friendly with parking".
GeoEnrich generates the right column automatically from an address. One API call.
Add this JSON-LD to your restaurant's website and you're immediately visible to AI search engines:
{
"@context": "https://schema.org",
"@type": "Restaurant",
"name": "Gracia Italian Kitchen",
"description": "Authentic Italian restaurant serving handmade pasta, wood-fired pizzas, and seasonal risottos in a cozy Amsterdam neighborhood setting.",
"url": "https://example.com",
"telephone": "+31 20 123 4567",
"address": {
"@type": "PostalAddress",
"streetAddress": "Graciaplein 10",
"addressLocality": "Amsterdam",
"postalCode": "1013 BA",
"addressCountry": "NL"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 52.3876,
"longitude": 4.9041
},
"servesCuisine": ["Italian", "Mediterranean"],
"priceRange": "€€",
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.7",
"ratingCount": "348"
},
"acceptsReservations": true,
"amenityFeature": [
{"@type": "LocationFeatureSpecification", "name": "Outdoor Seating"},
{"@type": "LocationFeatureSpecification", "name": "Wheelchair Accessible"},
{"@type": "LocationFeatureSpecification", "name": "Terrace"}
]
}
Want the full version with menu items, dietary markups, and location enrichment? See the complete restaurant schema in the examples below.
Understanding search intent is crucial for GEO. People don't just ask "restaurants". They ask specific, context-rich questions:
For each of these queries, AI engines scan restaurant data looking for specific attributes:
Your GEO strategy must address all these dimensions.
The Restaurant schema type is your foundation. It tells AI engines exactly what your business is and what makes it special.
Use Restaurant as your primary @type. For more specific matching, use subtypes: FastFoodRestaurant, BarOrPub, or CafeOrCoffeeShop.
Required Fields for Restaurant Schema
name: AI uses exact name to identify and cite your restaurantdescription: AI pulls descriptions to answer "what's special about this place?"address: Enables location-based queries and geographic rankinggeo: Latitude/longitude for nearby searches and map contextservesCuisine: Filters restaurants by cuisine type ("Italian", "Vegan", etc.)priceRange: Matches budget-conscious queriesopeningHoursSpecification: Answers "are they open now?" and "late night options?"aggregateRating: Signals quality and trustworthinessimage: AI may display restaurant imagery in responsestelephone: Contact information for user follow-upWriting Descriptions for AI
Bad description: "We serve delicious food in a comfortable atmosphere. Come visit us today!"
Good description: "Intimate Italian osteria specializing in handmade pasta and wood-fired pizzas from Campania. Open kitchen overlooks intimate dining room with 18 seats. Wine list focuses on lesser-known Piedmont and Tuscany producers. Reservations required. No fixed menu; offerings rotate seasonally based on market availability."
Good descriptions specify cuisine region, describe the dining experience, mention signature preparations, note dining format, and include operational details.
Menus are where restaurant GEO gets powerful. When someone asks "Do you have vegan options?" or "Can I get a main course under 20 euros?", AI searches your menu markup.
{
"@context": "https://schema.org",
"@type": "Menu",
"name": "Gracia Italian Kitchen - Dinner Menu",
"hasMenuSection": [
{
"@type": "MenuSection",
"name": "Starters",
"hasMenuItem": [
{
"@type": "MenuItem",
"name": "Burrata with Heirloom Tomatoes",
"description": "Fresh burrata from Apulia with San Marzano tomatoes, basil, and aged balsamic",
"offers": {
"@type": "Offer",
"price": "12",
"priceCurrency": "EUR"
},
"suitableForDiet": ["VeganDiet", "GlutenFreeDiet"]
}
]
}
]
}
Why Menu Markup Matters for AI
When an AI engine gets a query like "Vegan restaurants in Amsterdam that serve pasta", it filters by location, then by servesCuisine, then searches menu items for suitableForDiet: VeganDiet. Without menu markup, your restaurant won't appear for dietary-specific queries.
Dietary Options to Always Mark:
Reviews are critical for AI citation. When an AI recommends your restaurant, it often cites reviews to support the recommendation.
Always include aggregateRating, even if starting at 0 reviews:
{
"@type": "AggregateRating",
"ratingValue": "4.7",
"ratingCount": "348",
"bestRating": "5",
"worstRating": "1"
}
Pull individual reviews from Google, TripAdvisor, or your own platform. AI engines pull these snippets when answering "what do people say about this restaurant?"
Update aggregateRating regularly. Stale ratings harm credibility.
This is where GEO transforms restaurant visibility. By adding location context, you help AI understand not just what your restaurant is, but why it's worth recommending.
Use additionalProperty to mark nearby resources that add value:
nearest_parking: Addresses "is there parking?" concernnearest_metro: Accessibility for transit usersnearest_bus_stop: Helps with "how do I get there?"attractions_nearby_1km: Context for touristshotels_nearby_500m: Tourism and event hosting contextwalkability_score: "Can I walk around the neighborhood?"nightlife_density_score: "Is there nightlife nearby?"transit_score: "Easy to reach by public transport?"bike_friendly: Amsterdam context (cycling culture)Instead of manually researching every location attribute, use the GeoEnrich API at mapatlas.eu/products-services/geoenrich-api to automatically populate these fields.
Your website content should be structured so AI can parse it easily. Use semantic HTML with proper heading hierarchy and FAQ sections structured for AI extraction.
AI engines extract answers from FAQ sections like:
When an AI recommends your restaurant, it needs to cite you. There are five common citation patterns:
Pattern 1: Direct Business Mention, AI pulls your description directly to answer "Best Italian restaurants in Amsterdam?"
Pattern 2: Attribute-Based Matching, Your menu markup with suitableForDiet: VeganDiet enables matching for "Vegan restaurants in Amsterdam with reservations?"
Pattern 3: Location + Context, Your location enrichment data enables matching for "Where should I eat near the Anne Frank House?"
Pattern 4: Feature Stacking, Your amenityFeature array enables multi-attribute matching for "Date night Italian restaurants in Amsterdam with outdoor seating and private dining?"
Pattern 5: Review Integration, Your Review schema enables AI to cite actual guest feedback when asked about restaurant quality.
Mistake 1: No Menu Schema at All
Many restaurants have beautiful menus on their websites but no structured menu data. Without it, your restaurant won't appear for dietary-specific queries.
Mistake 2: Missing or Vague Opening Hours
Specify dayOfWeek for every day. Vague hours cause AI to answer "are you open now?" incorrectly.
Mistake 3: No Cuisine Type or Overly Broad Type
Use specific cuisine: "servesCuisine": ["Italian", "Mediterranean", "Seafood"], not "Food".
Mistake 4: Template Descriptions
"Welcome to our restaurant. We serve fresh, delicious food." applies to 10,000 restaurants. AI engines see no differentiating information.
Mistake 5: No Dietary or Allergen Information
People with dietary restrictions can't find you. Mark every dietary compatibility with suitableForDiet.
Mistake 6: Missing Precise Coordinates
AI can't determine whether you're "near the museum" or "across the river" without actual restaurant coordinates to 4 decimal places.
Mistake 7: No Location Enrichment
Just address and coordinates misses context-driven recommendations like "restaurants near major attractions with easy parking."
Mistake 8: Stale or Missing Reviews
Last review from 2022 causes AI to see your restaurant as inactive or low-quality.
Mistake 9: Missing amenityFeature Data
Without outdoor seating, wheelchair access, and private dining in amenityFeature, you won't appear for those feature queries.
Mistake 10: Price Range Mismatch
Using "priceRange": "€" when your average entree is 28 euros sets wrong expectations and causes AI to misroute budget-conscious queries.
Before publishing, validate your schema markup.
Using AEO Checker
Visit /aeo-checker to validate your schema. Enter your restaurant URL to get a report checking required fields, valid schema structure, enrichment completeness, and common errors.
Manual Testing
Ask AI engines directly about your restaurant:
If your structured data is correct, AI should answer with precision. If not, you'll see vague or missing details.
Code Inspection
In your browser, right-click > View Page Source. Search for application/ld+json. You should see your Restaurant schema. Copy the JSON and validate it at jsonlint.com to ensure valid JSON.
Automate this at scale
The MapAtlas GeoEnrich API adds coordinates, nearby POIs, transit access, neighborhood context, and schema-ready geo data to every listing automatically, one API call per listing, at any scale.