Making a restaurant network visible in AI answers: a GEO project, step by step
Guests no longer only search 'restaurant near me'. They ask ChatGPT for a quiet Italian place for six people on Friday, or let Google's AI Mode compare three options. A European hospitality platform with a large network of restaurant websites wanted to know how often that already brings guests, and how to get its restaurants into those answers. This is the anonymised write-up of that project: three phases, assess, select and sprint, from the first baseline to ten ranked experiments and two working proofs of concept. What we measured, what we tried, and what I would do the same way again.
10 min read
1. Phase one, assess: measure before you optimise
The first question was not 'how do we rank in ChatGPT' but 'how much of our traffic already comes from AI, and does it convert?'. Two data sources answer that without new tools. Web analytics shows visits whose referrer is an AI assistant, such as chatgpt.com, perplexity.ai, gemini.google.com or copilot.microsoft.com; a custom channel group keeps them apart from organic search and social. For Google's own AI features the picture is different: according to Google, visits from AI Overviews and AI Mode are counted in Search Console's Performance report under the 'Web' search type, together with regular search.
Put side by side, AI-referred visits and their bookings next to classic search gave the baseline every later experiment was measured against. That baseline matters more than any tool demo: without it, nobody can say in three months whether something worked.
Custom channel group 'AI assistants' (session source matches regex)
^(chatgpt\.com|chat\.openai\.com|perplexity\.ai|gemini\.google\.com|copilot\.microsoft\.com|claude\.ai)$
Google AI Overviews / AI Mode: no separate referrer —
counted in Search Console > Performance > Search type 'Web'2. Prompt research for about 150 landing pages
Keyword lists describe what people type into a search box. AI assistants get whole sentences: who is coming, what they want to eat, the occasion, the budget, the area. So the second step was prompt research. For about 150 landing pages, an LLM read the sitemap and each page and generated the questions a real guest would plausibly ask an assistant to end up on exactly that page. Those prompts went into Semrush for tracking, so we could see over time whether and how the restaurants appeared in AI answers.
Two details matter. The prompts have to sound like guests, not like marketers, so have people who know the restaurants read a sample before you track hundreds. And the generation itself can run on an open model on your own infrastructure when page content or analytics data shouldn't leave the company; I describe that setup in a separate article.
Tip from practice
Write five prompts per page by hand before you generate a hundred. They become the quality bar the model's prompts are judged against.
Interactive
What do your customers ask an AI?
Pick an industry and the intents you care about. These examples come from templates in your browser; real prompt research generates hundreds per page with an open model on your sitemap.
Industry
Intent
- What is the best restaurant in Munich?
- Which restaurant in Munich do locals recommend?
- Compare the top three restaurant options in Munich by price and reviews
- Your brand or another restaurant in Munich: which is better for a small team?
- Where can I book a restaurant in Munich for this weekend?
- Find a restaurant in Munich with availability tomorrow
3. Tools and the questions legal asks
The market for AI-visibility tools changes monthly, so we compared them on a short list of criteria instead of feature sheets: which assistants they actually query, how often, in which countries and languages, whether results can be exported, and what they cost per tracked prompt. The prompt tracking itself ran in Semrush.
Legal and data protection asked the questions they should ask: which data goes to which provider, does any guest data leave the company, where is it processed, can a provider use it for training. Having those answers written down before the first trial saved weeks later. It is also why the generation step from the previous section can run on an open model on own infrastructure when needed.
4. Listings: the facts assistants quote
When an assistant recommends a restaurant, it quotes facts: opening hours, address, cuisine, price range, whether you can book a table for six. Those facts come from the restaurant's own site and from third-party portals, and when they disagree, the assistant either picks one or leaves the restaurant out. So we compared listing platforms that can publish restaurant data to many portals through an API, with one source of truth behind them.
On the website side, structured data does the same job for search engines: a Restaurant or LocalBusiness block per location with hours, address, menu link and reservation options, following Google's local business guidance. Google itself says there are no special optimisations needed for its AI features beyond solid SEO; consistent, structured facts are exactly that.
{
"@context": "https://schema.org",
"@type": "Restaurant",
"name": "Trattoria Example",
"servesCuisine": "Italian",
"priceRange": "€€",
"address": { "@type": "PostalAddress", "streetAddress": "…", "addressLocality": "…" },
"openingHoursSpecification": [{ "@type": "OpeningHoursSpecification", "dayOfWeek": ["Friday", "Saturday"], "opens": "18:00", "closes": "23:00" }],
"acceptsReservations": "True",
"hasMenu": "https://example.com/menu"
}5. Phase two, select: ten experiments, ranked in one workshop
Assessment produces more ideas than any team can try. We wrote each as an experiment with a hypothesis, the metric from the baseline it should move, and an effort estimate, and ranked the list by impact and effort in one workshop with the people who would have to run them. Ten made the cut. The list deliberately mixed technical, content and listing experiments, because nobody knows yet which lever moves AI answers most for a given business, and the honest way to find out is to test a few in parallel.
The workshop also decided what not to do. Anything that couldn't be measured against the baseline, or needed months before the first result, was parked. That keeps a GEO programme from turning into a content factory nobody can evaluate.
6. Phase three, sprint: proofs of concept, not slides
The top experiments ran in sprints, and two became working proofs of concept. The first published restaurant data automatically to third-party portals through a listing API, so a change in one place reaches every portal instead of being maintained in each portal by hand. The second was a generator for SEO and GEO articles: it drafts pages that answer the kinds of questions found in the prompt research, from the restaurant's own facts. Generated pages should always get a human review before they are published.
The point of the baseline from phase one is that every experiment can be measured against it. That loop, measure, select, build, measure again, is the part I would keep for any GEO project, whatever the industry. The GEO readiness check below gives a first rough score for your own site, and my GEO Adaptation Framework guide covers the full process.
Interactive
How ready is your brand for AI answers?
Tick what is already true. What's left is your GEO to-do list, most important first.
0/10 ready
Your next three steps
- Brand facts are identical on the site, Google Business Profile, LinkedIn and directories
- Key pages answer the main question in the first paragraph
- Organization or LocalBusiness structured data on key pages
Takeaway
GEO is not a new magic trick but disciplined measurement: a baseline from the data you have, realistic prompts per page, consistent facts everywhere assistants look, and experiments you can prove or drop.
Real projects behind this
Try it yourself
Sources and official guides
More articles
- 3,025 pull requests in ten months: an AI-assisted delivery process, from the inside
- The EU AI Act for mid-sized companies: what applies to you, and when
- FinOps for AI spend: tokens, caching, routing and budgets that hold
- How this site is built: static where it can be, streaming where it must
- Kubernetes cost on EKS and GKE: the same playbook, different levers
- A landing zone for mid-sized companies, in Terraform or Bicep: the parts that matter
- The legacy migration playbook: waves, parallel runs, and identical row counts and checksums
- MCP security in depth: how to let AI assistants into your product without opening the doors
- Monitoring on business outcomes: green dashboards, empty checkout
- Phone AI agents: the architecture, and the pitfalls nobody shows in the demo
- Restore tests: a backup you have never restored is only a hope
- Streaming AI answers on Azure Static Web Apps: the one header that buffered everything
- Building an AI assistant for WhatsApp, end to end: what it takes beyond the demo
- Air-gapped systems: running critical software with no internet
- Production AI on AWS: Amazon Bedrock and AgentCore in a private setup
- Production AI on Microsoft Foundry: a private reference setup for agents
- /goal, /loop or routines: stop babysitting your coding agent
- Claude's new plans: Max, Ultra and what they mean for teams
- OpenAI Codex at the end of 2026: goal mode, dots and how to lock it down
- GitHub Copilot, Claude Code or Codex? How I'd choose for a company
- GEO basics: how to show up in AI answers
- Production AI on Google Cloud: from Vertex AI to Gemini Enterprise Agent Platform
- Local LLMs in an air-gapped network: AI for your most sensitive data
- I want to run a local LLM: which server should I buy?
- MiniMax M3: an open frontier model you can run yourself?
- Prompt research at scale with an open model
- SEO and GEO together: a practical audit in 6 steps
- Right-size Kubernetes: the playbook that took a cluster from 7 to 4 nodes
- Private AI for sensitive data: a local LLM setup that passes the security review
- From AI prototype to production: the eight layers I add, in order
