<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
     xmlns:atom="http://www.w3.org/2005/Atom"
     xmlns:dc="http://purl.org/dc/elements/1.1/"
     xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>The Menugram blog</title>
    <link>https://menugram.bg/blog/en</link>
    <description>Practical writing on QR menus, table ordering, payments and being found by Google and AI assistants — for restaurants, bars and hotels.</description>
    <language>en</language>
    <lastBuildDate>Tue, 04 Aug 2026 12:00:00 GMT</lastBuildDate>
    <atom:link href="https://menugram.bg/blog/en/rss.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Why Google can&apos;t read your PDF menu</title>
      <link>https://menugram.bg/blog/en/why-google-cannot-read-your-pdf-menu</link>
      <guid isPermaLink="true">https://menugram.bg/blog/en/why-google-cannot-read-your-pdf-menu</guid>
      <pubDate>Tue, 04 Aug 2026 12:00:00 GMT</pubDate>
      <dc:creator>The Menugram team</dc:creator>
      <description>A PDF menu is a picture as far as search is concerned — no dishes, no prices, no allergens. Here is what that costs you and what a readable menu looks like.</description>
      <category>seo</category>
      <category>qr-menu</category>
      <content:encoded><![CDATA[<p>You export the menu as a PDF, generate a QR code that points at it, and stick the code on the tables. It works — a guest scans and sees the menu. So far, so good.</p>
<p>The problem is what happens <strong>away</strong> from the table. Someone who has not chosen where to eat yet searches, or asks an assistant. In both cases your menu is not part of the conversation.</p>
<h2 id="what-a-search-engine-actually-sees" class="mg-reveal">What a search engine actually sees</h2>
<p>Google does index PDFs — that much is true, and it gets quoted as though it settles the matter. But it indexes them as <em>documents</em>: it pulls out a title, some text, and stops.</p>

<aside class="mg-stat mg-reveal"><p class="mg-stat-figure">0</p><div class="mg-stat-body"><p>The amount of structured data about a dish, a price or an allergen a crawler can extract from a typical PDF menu. The format has nowhere to put it.</p>
</div></aside>
<p>The difference is between &quot;this file exists&quot; and &quot;this restaurant serves carbonara at £14, no nuts, until 11pm daily&quot;. The second is information an engine can answer a question with. A PDF does not carry it in a machine-readable form — even when the letters are right there.</p>
<p>And if your menu was scanned or exported as an image, even the letters are gone. What is left is a several-megabyte file that means nothing to a machine.</p>
<h2 id="what-the-guest-loses" class="mg-reveal">What the guest loses</h2>
<p>Search aside, a PDF is a poor thing to hand a phone. It opens in a separate viewer, the page is A4 on a screen that is not, and every guest&#39;s first gesture is to pinch.</p>

<aside class="mg-callout mg-reveal"><p class="mg-callout-title">Try it yourself</p><div class="mg-callout-body"><p>Open your current menu on a phone and time how long it takes to read a price without zooming. That is the tax every guest pays at every table.</p>
</div></aside>
<p>A menu that is readable on arrival is not a cosmetic improvement. It is the difference between a guest who browses the whole list and a guest who orders the first thing they managed to read.</p>
<h2 id="what-a-readable-menu-looks-like" class="mg-reveal">What a readable menu looks like</h2>
<p>Three things, in this order:</p>
<ol>
<li><strong>Its own URL.</strong> The menu is a page — <code>yourrestaurant.com/menu</code> — not a file. A page can be linked, shared, indexed and updated.</li>
<li><strong>Real HTML text.</strong> Dish names, descriptions, prices and allergens are text in the page, not pixels in a picture.</li>
<li><strong>Schema.org markup.</strong> <code>Restaurant</code>, <code>Menu</code>, <code>MenuItem</code> and <code>Offer</code> tell a crawler which part is a dish and which part is a price, instead of leaving it to guess.</li>
</ol>
<p>The third is what opens up results for a specific dish rather than only for the name of the place.</p>

<figure class="mg-quote mg-reveal"><blockquote><p>A menu is not a file you hand out. It is the page people find you on.</p>
</blockquote><figcaption>Menugram</figcaption></figure>
<h2 id="and-then-there-is-updating-it" class="mg-reveal">And then there is updating it</h2>
<p>There is a more mundane reason too. You run out of something. With a PDF: open the document, edit, export, upload, wait for the cache, and the old file carries on living in somebody&#39;s phone.</p>
<p>With a page: change the item&#39;s status, and the next person to open the menu sees it. The QR code on the table never changes, because it points at an address rather than at a file.</p>

<div class="mg-cta mg-reveal"><div class="mg-cta-body"><p>Menugram does exactly this — a branded menu on its own URL, readable by Google and by your guests, that you update yourself.</p>
</div><a class="mg-cta-link" href="/">→</a></div>
<p>If you are working out how to lay yours out, <a href="/tasteplace/menu">look at a live menu</a> and then <a href="/">how the platform works</a>.</p>
]]></content:encoded>
    </item>
    <item>
      <title>How restaurants get cited by AI search</title>
      <link>https://menugram.bg/blog/en/how-restaurants-get-cited-by-ai-search</link>
      <guid isPermaLink="true">https://menugram.bg/blog/en/how-restaurants-get-cited-by-ai-search</guid>
      <pubDate>Tue, 28 Jul 2026 12:00:00 GMT</pubDate>
      <dc:creator>The Menugram team</dc:creator>
      <description>ChatGPT and AI Overviews already recommend places to eat. Here is what their crawlers read, what they skip, and the pages you need to be quoted.</description>
      <category>ai-search</category>
      <category>marketing</category>
      <content:encoded><![CDATA[<p>People increasingly do not search for &quot;restaurant in Shoreditch&quot;. They ask: &quot;where should I eat in Shoreditch with a decent vegetarian menu and outdoor seating&quot;. The answer comes back as a paragraph with two or three links, not a list of ten.</p>
<p>That is a different game. A search engine ranks sources; an assistant writes an answer and <em>then</em> decides whom to credit. If it has not read you, it cannot mention you.</p>
<h2 id="what-an-ai-crawler-actually-reads" class="mg-reveal">What an AI crawler actually reads</h2>
<p>Briefly: HTML. That is all.</p>
<p>Googlebot executes JavaScript — late, but it does. The crawlers behind most AI assistants do not. They request the URL, take the response, and move on. If your site paints its content in the browser, what they saw was an empty page.</p>

<aside class="mg-callout mg-reveal"><p class="mg-callout-title">A thirty-second check</p><div class="mg-callout-body"><p><code>curl -A &quot;GPTBot&quot; https://yoursite.com/menu | wc -c</code> — if the number is small and there is not a single dish in the text, the assistant does not know what you serve.</p>
</div></aside>
<p>So the first question is not which keywords to use. It is whether the words are in the server&#39;s response at all.</p>
<h2 id="why-short-sentences-win" class="mg-reveal">Why short sentences win</h2>
<p>An assistant assembles an answer out of fragments. A fragment that is true on its own is safe to quote. A fragment that depends on the paragraph above it is not.</p>
<p>Compare:</p>
<ul>
<li>&quot;As we saw above, this applies to the lunch menu too.&quot;</li>
<li>&quot;The lunch menu at [the restaurant] is served from noon to 4pm on weekdays.&quot;</li>
</ul>
<p>The second can be lifted with nothing around it. The first cannot.</p>

<aside class="mg-stat mg-reveal"><p class="mg-stat-figure">1</p><div class="mg-stat-body"><p>One self-contained sentence per question. It is the format that serves both the person skimming and the model composing an answer.</p>
</div></aside>
<p>In practice: phrase the heading as a question, and answer it in the first sentence underneath. Everything after that is detail for the people who want it.</p>
<h2 id="the-three-files-that-cost-an-afternoon" class="mg-reveal">The three files that cost an afternoon</h2>
<ol>
<li><strong>A <code>robots.txt</code> that lets the right crawlers in.</strong> GPTBot, ClaudeBot, PerplexityBot, OAI-SearchBot, Google-Extended. A blocked agent does not stop answering questions about your neighbourhood — it just answers them without you.</li>
<li><strong><code>llms.txt</code>.</strong> A short markdown map written for an agent: what this place is, which pages matter, how to cite it. <a href="https://llmstxt.org/" target="_blank" rel="noopener noreferrer">The convention</a> is new; the file is fifteen lines.</li>
<li><strong><code>FAQPage</code> and <code>Restaurant</code> markup.</strong> The questions and answers you already wrote for humans become machine-readable without writing anything new.</li>
</ol>
<h2 id="and-the-dullest-thing-which-works" class="mg-reveal">And the dullest thing, which works</h2>
<p>Put an author&#39;s name and a last-updated date on the page. Visible, in the body, not only in a meta tag.</p>
<p>A person and a model, each facing two equally good sources, both take the more recent one with a name under it. That is not a trick — it is the same judgement you would make.</p>

<div class="mg-cta mg-reveal"><div class="mg-cta-body"><p>We write about this regularly. The rest of the posts are here.</p>
</div><a class="mg-cta-link" href="/blog/en">→</a></div>
<p>If you are still assembling the foundations, start with <a href="/blog/en/why-google-cannot-read-your-pdf-menu">your menu</a> — it is the page an assistant will quote first.</p>
]]></content:encoded>
    </item>
  </channel>
</rss>
