Skip to content
metryn

Local business and restaurant website checklist

Why menus in PDFs and hours in images cost you visibility, what LocalBusiness markup needs, and a checklist of the unglamorous basics.

By Metryn · Updated 16 October 2026 · 4 min read

Short answer: put the basics (name, address, hours, phone, menu or services) in plain HTML text, mark them up with the most specific LocalBusiness type, and keep them consistent everywhere. Most local sites lose out because the facts are in an image or a PDF.

Mistakes that come up again and again

  • The menu or price list is a PDF or a photo. Text in an image can't be read as text, so a crawler gets a file name.
  • Opening hours only appear in an embedded widget or an image banner.
  • One page for all locations, so no location has an address a machine can attach to it.
  • A one-page site where every section is a script-driven tab, so nothing has its own URL.
  • The same title ("Home") on every page.

What the markup needs

Google's local business documentation lists name and address as required. Recommended ones include openingHoursSpecification, telephone, geo, the url of the specific location and priceRange. For restaurants, servesCuisine and menu (a URL) are available. It says to use the most specific subtype you can, such as Restaurant, and that each business location is its own item.

{
  "@context": "https://schema.org",
  "@type": "Restaurant",
  "name": "Your Restaurant",
  "url": "https://example.com/",
  "telephone": "+351-000-000-000",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "Street and number",
    "addressLocality": "City",
    "postalCode": "0000-000",
    "addressCountry": "PT"
  },
  "servesCuisine": "Portuguese",
  "menu": "https://example.com/menu",
  "openingHoursSpecification": [{
    "@type": "OpeningHoursSpecification",
    "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
    "opens": "12:00:00",
    "closes": "23:00:00"
  }]
}

Those values are placeholders. Replace every one with your real data, and keep it identical to what visitors see on the page, because a mismatch between your markup and your page is worse than having no markup. Google recommends validating with the Rich Results Test.

Keep the unglamorous parts right

  • Give every location, menu and service its own URL with its own title.
  • Make the menu a normal HTML page. Offer the PDF as an extra, not as the only version.
  • Give images useful alt text, like "Grilled sea bass with potatoes", not "photo1".
  • Say the same address, phone and hours on the site, in the markup and on your other listings.

A note on scope: Google's page covers markup for local results. It doesn't say that adding it guarantees a knowledge panel or a particular position.

Questions people ask

Do I need markup if I already have a Google Business Profile?

They're different things. Google's local business documentation is about markup on your own pages, and says it can use it for knowledge panels and local carousels. It doesn't say the profile makes the markup unnecessary or the reverse. Keeping both consistent is the safe approach.

What if I have several branches?

Google says each business location is defined as its own LocalBusiness, with its own fully qualified url that works. A single page listing all addresses gives machines nothing they can attach to a specific place.

Can I mark up reviews of my own business?

The documentation says aggregateRating and review are meant for sites that capture reviews of other local businesses. Marking up reviews you wrote about yourself isn't what that is for, and Google's general guidelines say structured data must be a true representation of the page.

My menu changes weekly. Is a PDF fine?

It's fine as an extra. As the only version, text inside a file or image is harder for a machine to read than text in the page, and a plain HTML page is easier to update than regenerating a PDF.

What to do this week

  • Put your hours, address, phone and menu in plain text on one page each.
  • Add Restaurant or the most specific LocalBusiness type with the same facts.
  • Check that title, address and phone are identical everywhere you list them.
  • Test the markup with the Rich Results Test.

Check your own site

Paste your address below. The free scan looks at robots.txt, your sitemap, access for the main AI crawlers and structured data, and shows what it found in seconds. It tells you what a machine can fetch and read. It doesn't predict rankings or citations.

Free scan · No account needed · Results in seconds

Sources

Want to check one file yourself? Try the free AI crawler robots.txt checker or the llms.txt validator, or read how the score is built.