How do I get ChatGPT and Google to recommend my vegan restaurant when people ask "best vegan near me"?
Quick answer
Treat Google and the assistants as two jobs. The map pack still leans an honest Google Business Profile. ChatGPT, Gemini, and similar tools recommend you when GBP, crawlable Restaurant + Menu JSON-LD, reviews, and vegan listing sites all say the same kitchen facts. Do not invent a citation-lift percentage. Do not mark VeganDiet on a vegetarian dish or a "we can veganize it" line. GBP fields: vegan restaurant Google listings. Product JSON-LD: AI product schema.
Vs other Intelligence guides
| Guide | Job |
|---|---|
| Local SEO for green businesses | Retail/service NAP and location pages. Not restaurant schema |
| Vegan restaurant Google listing | GBP category, attributes, menu URL, photos, Q&A |
| AI product schema | Product / Offer JSON-LD on PDPs. Not Restaurant or Menu |
| Vegan menu claims | Ticket language. Schema must copy that matrix |
| This guide | Restaurant + Menu JSON-LD, 15-prompt log, listing-site fact match, monthly re-query |
Two surfaces, one kitchen
| Surface | What feeds it | This week |
|---|---|---|
| Google local pack / Maps | GBP category, hours, attributes, photos, reviews, menu URL | Finish the listing field kit. Schema does not replace it |
| ChatGPT, Gemini, Copilot | GBP plus HTML, Restaurant/Menu JSON-LD, reviews, vegan listing sites, city editorial | Make those sources identical. Then re-query and log what they cite |
Gemini leans Google Search, so a messy GBP shows up twice. ChatGPT still quotes directories when the site is a PDF menu. Do not buy a GEO package that promises a citation percentage.
Restaurant + Menu field kit
One JSON-LD graph in the initial HTML on the homepage or location page. Validate in Google's Rich Results Test. Kill duplicate Restaurant blocks from plugins.
| Field | Put | Do not |
|---|---|---|
@type | Restaurant | Product, or a fake type that is not on schema.org |
NAP, geo, url | Exact GBP name, address, phone, coordinates | A trading-as name GBP does not use |
openingHoursSpecification | Kitchen hours. Seasonal hours with validFrom / validThrough | Bar hours as kitchen hours |
servesCuisine | Cuisine you cook (Thai, bakery, pizza) | Stuffing "Vegan" as cuisine while dairy is on the line |
priceRange | Same band as GBP | A luxury band you do not charge |
menu | Owned HTML menu URL (Google's documented property) | A third-party PDF that goes stale |
hasMenu | Menu object with sections and items | A second menu URL that disagrees with menu |
sameAs | Google Maps URL plus live vegan listing-site profiles | Dead booking or directory URLs |
Google's restaurant carousel is limited access. Ship schema so machines can parse you. Do not brief the owner on a carousel win.
Dish flags (the vegan claim)
| Kitchen truth | On that MenuItem | Banned |
|---|---|---|
| No intentional animal ingredients, including honey, dairy, stock | https://schema.org/VeganDiet (array if also gluten-free) | Whole-menu vegan while one dessert is not |
| Vegetarian (eggs, dairy, or honey) | https://schema.org/VegetarianDiet | VeganDiet "because most people do not notice" |
| Omnivore plate, vegan swap on request | Omit vegan. Describe the swap in HTML only if you run it | Schema says vegan, ticket says "can be made vegan" |
| Shared fryer / cross-contact | Keep the diet enum if ingredients are vegan. No free-from claim | Encoding allergy safety in VeganDiet. See menu claims |
Each item needs name, a short description that matches the ticket, and offers with price plus priceCurrency. Stale prices teach models not to trust you. There is no schema.org enum for nut-free. Put that in visible copy, not a made-up diet URL.
15-prompt assistant log (run this week)
Private window. Paste each line into ChatGPT and Gemini, and search Google as a diner in your city. Log named Y/N, source cited, diet fact, hours/menu URL.
| # | Prompt | Pass |
|---|---|---|
| 1 | Best vegan near me | You appear for the city they assume. Wrong city is a geo fail |
| 2 | Best vegan restaurant in [city] | Right vegan vs vegetarian label |
| 3 | Best vegan [cuisine] in [neighborhood] | Cuisine matches GBP and servesCuisine |
| 4 | Is [name] fully vegan? | Yes or no matches the kitchen |
| 5 | Does [name] use honey, butter, or animal stock? | Named yes/no |
| 6 | Vegan restaurants open now near [landmark] | Hours match GBP and schema |
| 7 | Best vegan brunch in [city] | Only if you serve brunch |
| 8 | [name] vegan menu | Cites your owned menu URL |
| 9 | Gluten-free vegan in [city] | Only if those MenuItems exist |
| 10 | Vegan takeout near me | Service options match GBP |
| 11 | Kid-friendly vegan restaurant [city] | Only if the listing says so |
| 12 | [name] reservations | Same rule as the reservation link |
| 13 | Is [name] vegetarian or vegan? | Trap prompt. Do not let them collapse the two |
| 14 | Best plant-based restaurant [city] | Check they did not downgrade you to "vegan options" |
| 15 | [name] vs [nearest vegan competitor] | No invented dish or wrong hours |
Fix the source of the error that week. Directory says vegetarian: patch the directory. Gemini cites wrong GBP hours: patch GBP. Both invent a vegan dessert: your MenuItem list is missing or stale.
Vegan listing sites and NAP parity
Assistants quote vegan listing sites, booking pages, and city blogs. One row per profile: name, address, phone, hours, website, vegan vs vegetarian vs vegan-friendly, menu URL. Match GBP and schema. Paid placement does not fix a wrong diet label.
- Claim or request edit on every profile that ranks for your name.
- Hours the same day you change GBP.
- Diet label: fully vegan vs vegetarian with vegan dishes vs omnivore with vegan options. "Vegan restaurant" on a cheese board is review bait.
- Menu URL you own. Kill PDFs that disagree with JSON-LD prices.
Monthly re-query and go / no-go
| Call | When |
|---|---|
| No-go | VeganDiet (or vegan directory category) while any intentional animal ingredient is on the menu |
| Go | GBP honest, Restaurant JSON-LD validates, MenuItems match the ticket, listing sites fact-matched, 15-prompt log run once |
| Partial go | GBP and NAP live now. Menu JSON-LD waits until the vegan section is actually vegan |
Each month: re-run the 15 prompts and log cited URLs. Measure named-in-answer and fact-error count, not a ranking percentage.
Schema is a claim surface
If the ticket, GBP, JSON-LD, and a vegan listing site disagree, the angry review and the assistant will pick the worst version. Align the kitchen first, then the markup.
Frequently asked questions
How do I get ChatGPT and Google to recommend my vegan restaurant when people ask "best vegan near me"?
Keep Google Business Profile honest for the local pack. Publish Restaurant and Menu JSON-LD that matches the ticket. Align vegan listing sites and reviews to the same facts. Re-query ChatGPT, Gemini, and Google with a 15-prompt log. Do not invent a citation percentage. Do not mark dishes vegan that are not.
Does Restaurant schema replace Google Business Profile?
No. The map pack is still a GBP job. Schema helps crawlers and assistants parse hours, cuisine, menu URL, and dish-level diet flags. Do both.
Should every dish get VeganDiet in schema?
Only dishes with no intentional animal ingredients. Vegetarian items use VegetarianDiet. Swaps-on-request stay out of VeganDiet until that plate is vegan on the ticket.
How is this different from product schema or retail local SEO?
Product schema is Offer JSON-LD on PDPs. Retail local SEO is NAP and location pages for shops. This is restaurant entity markup plus assistant queries for dining.
Can we pay a vegan listing site instead of fixing schema?
Paid placement does not fix a vegetarian label, stale hours, or a missing menu URL. Assistants quote those fields. Accurate listings plus matching JSON-LD beat a boosted profile that disagrees with GBP.