# A Restaurant Site Audit That Actually Understands Menus, Hours, and Reservations

Restaurant sites break in different places than SaaS sites. Menu schema Google reads. Opening hours that match Google Maps. A reservation path. A delivery path. This audit covers the restaurant-specific layer your general SEO tool misses.

Author: J.A. Watte
Published: April 21, 2026
Source: https://jwatte.com/blog/blog-tool-restaurant-audit/

---

I've audited a lot of restaurant sites. The failure pattern is almost always the same. The chef (or the chef's nephew) built the site on Squarespace or Wix five years ago. Opening hours are baked into an image so Google Maps can't read them. The menu is a linked PDF so Google can't read it. There's no reservation widget because "people just call us." There's no delivery link because "we don't do delivery" (except they're on DoorDash via the aggregator without knowing it). The photos are from 2019.

The [Restaurant Site Audit](/tools/restaurant-audit/) runs the restaurant-specific checks that a general SEO audit misses.

## What the tool checks

Schema first, because schema is what Google uses for the rich results restaurants rank for.

- **Restaurant JSON-LD** (or a subtype: CafeOrCoffeeShop, BarOrPub, BreweryOrBrewpub, FastFoodRestaurant, Winery, IceCreamShop, Bakery). This is the single highest-signal mark. Restaurant rich results depend on it.
- **Menu schema** (or a "hasMenu" URL link). Google reads this for the "View Menu" rich-result button in the local pack.
- **openingHoursSpecification**. Every day of the week, opens, closes. Google Maps reads it. If it's wrong on your site but right on Maps, you still rank — but inconsistent hours signal an untrustworthy listing.
- **PostalAddress** with streetAddress, addressLocality, addressRegion, postalCode, addressCountry.
- **telephone** property + a tel: link in the header. Most restaurant inquiries come by phone on mobile.
- **priceRange** (e.g., "$$" or "$15-$35"). Google uses this for the price-filter SERP feature.
- **aggregateRating** if you display on-site reviews (don't fake this — Google catches and penalizes mismatches).
- **areaServed** for neighborhood targeting ("Capitol Hill, Ballard, Fremont").

## Reservation + delivery platform detection

Reservations: OpenTable, Resy, Tock, Yelp Reservations, SevenRooms. Each fits a different restaurant type.

- **OpenTable** for mid-high-end, established restaurants with a reservation book.
- **Resy** for newer, design-forward spots with a younger audience.
- **Tock** for prix-fixe / ticketed / wine-dinner formats where reservations include prepayment.
- **SevenRooms** for fine-dining with CRM needs.
- **Yelp Reservations** as a fallback if you're Yelp-heavy already.

Delivery: DoorDash, GrubHub, UberEats, Postmates (now UberEats), Toast/Otter, ChowNow, Slice (pizzeria-specific), Square Online. The audit flags missing delivery links even when the restaurant is on a platform — because if you don't link to it from your own site, you're leaving commission-free order flow on the table.

## Food photography alt text

Restaurant sites rank on image search for "best [neighborhood] [cuisine type]" queries. The audit checks image alt text for food-related keywords. "IMG_2384.jpg" with no alt is invisible. "Grilled salmon with asparagus and lemon rice at Copper River Grill, Seattle" shows up in every relevant image search.

## The fix prompt

For each finding, the prompt asks the LLM to emit actual JSON-LD with realistic sample data the owner can replace. Not `{{PLACEHOLDER}}` tokens — fully-formed example values like "123 Main Street, Anytown, CA 94016" so the owner can see the shape and swap in real values.

Also emits:

- A menu schema snippet (embedded or linked) matched to the restaurant's current menu structure.
- A footer delivery-platform strip with alt text Google can read.
- A Google Business Profile checklist.
- A review-response cadence recommendation.
- A neighborhood-keyword landing-page strategy if the restaurant serves multiple areas.
- A photography reshoot priority list (hero dish, dining room, exterior-with-sign).

## The one fix that almost always pays for the audit

Adding Menu schema with a linked menu URL (or embedded menu JSON-LD) and accurate openingHoursSpecification in one pass. The restaurant immediately becomes eligible for richer local-pack results. On the three restaurants I've tested this against, organic traffic from local queries rose 20 to 40 percent within six weeks.

## When to run

Before submitting the site to Google for indexing. After any menu update. After any hours change. Quarterly, because menus drift and photos age.

## Related reading

- [Law Firm Site Audit](/tools/law-firm-audit/), the adjacent vertical audit
- [NAP Consistency](/tools/nap-consistency/), name-address-phone consistency across listings
- [Google Maps Audit](/tools/google-maps-audit/) for the Google Business Profile layer
- [Platform Audit](/tools/platform-audit/) if the site runs on Shopify, Squarespace, Wix, Webflow, or Ghost

## Fact-check notes and sources

- schema.org documentation on Restaurant and the FoodEstablishment subtype tree.
- Google Search Central structured-data guidelines for restaurant rich results.
- OpenTable, Resy, Tock, DoorDash, GrubHub, UberEats, and ChowNow public partner documentation.
- Google Business Profile help center on menu and hours syncing.

_This post is informational, not SEO-consulting or legal advice. All third-party reservation and delivery platforms are trademarks of their respective owners, referenced under nominative fair use. Restaurant compliance (health codes, licensing, menu-labeling laws) varies by jurisdiction; consult a local professional before making compliance-sensitive changes._


---

Canonical HTML: https://jwatte.com/blog/blog-tool-restaurant-audit/
RSS: https://jwatte.com/feed.xml
JSON Feed: https://jwatte.com/feed.json
Hero image: https://jwatte.com/images/blog-tool-restaurant-audit.webp
