SEO for restaurants on WordPress
SEO for restaurants is mostly about three things: a complete Google Business Profile, a menu published as real text on your own site, and opening hours that match everywhere they appear. Most restaurant searches happen on a phone, close to mealtime, with words like "near me", "open now" or a dish name. Google answers them from the map pack, so your website's job is to back up the profile with facts it can read: what you serve, what it costs, when you are open and how to book.
Your WordPress site will rarely outrank review platforms and delivery apps for generic terms. It can win searches for your own name, your signature dishes and your neighborhood, and it is the one listing you fully control.
Pages every restaurants site needs
- Menu page. The page people most want and the one restaurants most often bury in a PDF. Publish each section and dish as HTML text with prices, and link to it from the navigation.
- Location and hours page. The address, a map, parking or transit notes and the hours, stated once in a format that matches your Business Profile. Groups with several sites need one of these per location.
- Reservations or ordering page. A clear path to book or order, with the booking widget embedded and a short text explanation for people and crawlers that cannot run it.
- Private dining and events page. Groups, parties and catering are high-value searches with their own wording, such as "private dining room" plus your area, and they deserve a page rather than a line in the footer.
- About or chef page. The story, the people and the sourcing, which gives food writers something to quote.
Google Business Profile comes first
For "restaurant near me" and "open now" searches, the local pack draws on your Business Profile, not your homepage. Fill in the primary category as specifically as it goes ("Thai restaurant" rather than "Restaurant"), add attributes such as outdoor seating or vegetarian options, link the menu and reservation URLs to your site, and upload photos of the dining room and real plates.
Holiday and special hours cause more lost customers than anything else here. Set them in the profile ahead of time and update your site the same day. Once the profile is right, make your site agree with it character for character: same name, same phone number, same hours. See Google Business Profile and NAP consistency.
Menus that search engines can read
A scanned PDF or a photo of a chalkboard menu tells Google almost nothing. Dish names are exactly what people search for ("birria tacos", "gluten-free pizza"), so they need to exist as text on an indexable page.
- Build the menu in the block editor or a menu plugin that outputs HTML, with one heading per section.
- Include prices. People filter on price, and a menu without them sends diners to a delivery app that shows them.
- Keep one canonical menu URL. Seasonal changes should update that page, not create
/menu-spring-2026/alongside an old one. - If you also offer a PDF for printing, link it from the HTML page instead of replacing the page with it.
- Write dietary labels (vegan, contains nuts) as text, not only icons.
Restaurant schema and reviews
Use the Restaurant subtype (or a narrower one such as CafeOrCoffeeShop or Bakery) with servesCuisine, menu pointing at the menu URL, acceptsReservations and priceRange. In Hydrogen SEO, add Local Business on Hydrogen SEO > Schema with the address, phone, hours and coordinates, and set Display On to the front page or the whole site. It prints a LocalBusiness node linked to your Organization; a developer can switch the @type to Restaurant and add the cuisine fields with the hydrogen_seo_schemas filter.
Star ratings are where restaurants trip. Reviews you collect about your own restaurant and mark up on your own site are self-serving, so they are not eligible for review stars. Quote a favorite review in plain text if you like, but leave aggregateRating out of your LocalBusiness markup. Stars in search come from Google reviews on your profile.
Restaurant schema example
A starting point for your site. Replace every value with your own, and only mark up what is visible on the page.
{
"@context": "https://schema.org",
"@type": "Restaurant",
"@id": "https://example.com/#restaurant",
"name": "Lantern Street Kitchen",
"url": "https://example.com/",
"telephone": "+1-503-555-0188",
"image": [
"https://example.com/images/dining-room.jpg"
],
"servesCuisine": [
"Vietnamese",
"Noodles"
],
"menu": "https://example.com/menu/",
"acceptsReservations": true,
"priceRange": "$$",
"address": {
"@type": "PostalAddress",
"streetAddress": "418 SE Lantern St",
"addressLocality": "Portland",
"addressRegion": "OR",
"postalCode": "97214",
"addressCountry": "US"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 45.51732,
"longitude": -122.65419
},
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": [
"Tuesday",
"Wednesday",
"Thursday",
"Sunday"
],
"opens": "17:00",
"closes": "22:00"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": [
"Friday",
"Saturday"
],
"opens": "17:00",
"closes": "23:30"
}
]
}
Checklist
- Choose the most specific primary category in your Business Profile
- Publish the full menu as HTML text with prices, not only a PDF
- Link the profile's menu and reservation fields to pages on your site
- Set holiday hours in the profile and on the site before the holiday
- Use one menu URL and update it in place when dishes change
- Mark up the restaurant with servesCuisine, menu and acceptsReservations
- Leave self-collected ratings out of the LocalBusiness markup
- Give private dining and catering their own page
- Write alt text for dish photos that names the dish
- Create one page per location if you run more than one site
Common questions
Is a PDF menu bad for restaurant SEO?
Google can read some PDFs, but a PDF is a weak page: slow on phones, hard to update and usually without a title or links. Publish the menu as HTML and offer the PDF as a download.
Can I show star ratings from my own website in Google?
No. Google treats reviews a business collects about itself and marks up on its own site as self-serving, so LocalBusiness and Organization pages are not eligible for review stars. Your Google reviews show on your Business Profile instead.
Should each dish get its own page?
Usually not. A well-structured menu page covers dishes better than dozens of thin pages. A signature dish with a real story, photos and history can justify one.
Do I need Restaurant schema if I have a Business Profile?
They do different jobs. The profile feeds Maps and the local pack, and the markup lets your own site state the same facts in a form machines can check against it.