Articles
Opening hours and address as structured data for a café: what Google's documentation says
Google's Local business (LocalBusiness) documentation lists two required properties, address and name. Opening hours are a recommended property, written as openingHoursSpecification with dayOfWeek, opens and closes, and telephone and url are recommended too. Google says you must include the required properties "for your content to be eligible for display as a rich result", and also says it "does not guarantee that features that consume structured data will show up in search results". The page has examples for hours past midnight and for seasonal closures. I set them out below as Google gives them, then show a café example of our own.
What is LocalBusiness structured data, by Google's page?
It is a way to tell Google about a business, including its business hours, in a standardized format. Google's page says: "With Local Business structured data, you can tell Google about business hours, different departments within a business, reviews (if your site captures reviews about other businesses), and more." It adds that Search results "may display a prominent Google knowledge panel with details about a business that matched the query". The word is "may". For the type itself, the page says: "Define each local business location as a LocalBusiness type. Use the most specific LocalBusiness sub-type possible; for example, Restaurant, DaySpa, HealthClub, and so on." It also says: "You can add LocalBusiness structured data to any page on your site, though it may make more sense to put it on a page that contains information about your business."
Which properties does Google require, and which does it recommend?
Google's page lists two required properties for LocalBusiness: address and name. The address is described as "The physical location of the business. Include as many properties as possible. The more properties you provide, the higher quality the result is to users." The name is "The name of the business."
The recommended properties on the page are aggregateRating, department, geo (with geo.latitude and geo.longitude), menu, openingHoursSpecification, priceRange, review, servesCuisine, telephone and url. A few are worth reading for a café:
- openingHoursSpecification. "Hours during which the business location is open." It can be an "Array or single object (both supported)".
- telephone. "A business phone number meant to be the primary contact method for customers. Be sure to include the country code and area code in the phone number."
- url. "The fully-qualified URL of the specific business location. The URL must be a working link."
- menu. "For food establishments, the fully-qualified URL of the menu."
On eligibility, the page says: "You must include the required properties for your content to be eligible for display as a rich result. You can also include the recommended properties to add more information about your content, which could provide a better user experience." In its troubleshooting section it says: "Google does not guarantee that features that consume structured data will show up in search results." So the page names two things you must do to be eligible: include the required properties, and follow its guidelines. Google does not promise the feature will show.
How does Google's page show opening hours, including past midnight and special dates?
It shows each case as a small JSON snippet built from openingHoursSpecification. Here is each one as the page gives it.
Ordinary weekly hours. The page says: "Excluding the validFrom and validThrough properties signify that the hours are valid year-round." Its example "defines a business that is open weekdays from 9am to 9pm, with weekend hours from 10am until 11pm":
"openingHoursSpecification": [ { "@type": "OpeningHoursSpecification", "dayOfWeek": [ "Monday", "Tuesday", "Wednesday", "Thursday", "Friday" ], "opens": "09:00", "closes": "21:00" }, { "@type": "OpeningHoursSpecification", "dayOfWeek": [ "Saturday", "Sunday" ], "opens": "10:00", "closes": "23:00" } ]
Past midnight. The page says: "For hours past midnight, define opening and closing hours using a single OpeningHoursSpecification property. This example defines hours from Saturday at 6pm until Sunday at 3am."
"openingHoursSpecification": { "@type": "OpeningHoursSpecification", "dayOfWeek": "Saturday", "opens": "18:00", "closes": "03:00" }
Open all day, or closed all day. The page says: "To show a business as open 24 hours a day, set the open property to "00:00" and the closes property to "23:59".To show a business is closed all day, set both opens and closes properties to "00:00". This example shows a business open all day Saturday and closed all day Sunday."
"openingHoursSpecification": [ { "@type": "OpeningHoursSpecification", "dayOfWeek": "Saturday", "opens": "00:00", "closes": "23:59" }, { "@type": "OpeningHoursSpecification", "dayOfWeek": "Sunday", "opens": "00:00", "closes": "00:00" } ]
Special dates. The page says: "Use both the validFrom and validThrough properties to define seasonal hours. This example shows a business closed for winter holidays." It defines validFrom as "The start date of a seasonal business closure, in YYYY-MM-DD format" and validThrough as "The end date of a seasonal business closure, in YYYY-MM-DD format."
"openingHoursSpecification": { "@type": "OpeningHoursSpecification", "opens": "00:00", "closes": "00:00", "validFrom": "2015-12-23", "validThrough": "2016-01-05" }
One detail I noticed: the property list says opens and closes are "in hh:mm:ss format", while every example on the page writes them as hh:mm, such as "09:00". I have followed the examples. If you want to know how Google treats a bank holiday on your listing rather than in markup, see our article on bank holiday hours on Google.
What would this look like for a café?
Here is a café's block in the same shape as Google's examples. This is our example, not Google's. It uses a made-up café and an invented address, and only properties that appear on Google's page. The weekday, weekend and closure hours are made up too.
{
"@context": "https://schema.org",
"@type": "LocalBusiness",
"name": "Example Café",
"address": {
"@type": "PostalAddress",
"streetAddress": "1 Example Street",
"addressLocality": "Dublin",
"postalCode": "D00 0000",
"addressCountry": "IE"
},
"url": "https://www.example.com",
"telephone": "+353 1 000 0000",
"menu": "https://www.example.com/menu",
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": [ "Monday", "Tuesday", "Wednesday", "Thursday", "Friday" ],
"opens": "08:00",
"closes": "17:00"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": [ "Saturday", "Sunday" ],
"opens": "09:00",
"closes": "16:00"
},
{
"@type": "OpeningHoursSpecification",
"opens": "00:00",
"closes": "00:00",
"validFrom": "2026-12-25",
"validThrough": "2026-12-26"
}
]
}
Google's page uses Restaurant in its first example and says to use "the most specific LocalBusiness sub-type possible". I have used LocalBusiness, the type the page names, because the page does not list a café type and I will not guess at one. Google's steps include "Validate your code using the Rich Results Test and fix any critical errors", and say fixing non-critical issues "isn't necessary to be eligible for rich results". My own advice, not Google's: whatever you write in the markup should match what the page tells a visitor, so if the markup says 8 and the page says 9, fix one.
How can I see whether my café's site has its hours and address as data?
Paste your site's address into our free check. It looks for hours and for phone and address, and says so in its own words. On hours: "Opening hours on your site. Your hours written on the home page, the menu page or a visit or contact page, a day next to a time. Better still, as schema.org data in the page, so "is it open now?" gets a real answer instead of a guess." On phone and address: "Phone and address an assistant can read. Your phone number and address as schema.org data, not only as text or a picture." The check reads your site once, the way an AI crawler does, and keeps nothing. It tells you what it finds on your site.
Sources
- Google Search Central, Local business (LocalBusiness) structured data, last updated 2026-09-08 UTC, read 1 November 2026.
- Cupán Studio, Is my café website AI ready? (cupanstudio.com/check), the six things it checks, read 1 November 2026.
This is a summary of Google Search Central documentation read on 1 November 2026, not legal or tax advice. The café example is ours and is not from Google. Cupán Studio builds websites for cafés in Ireland.
One coffee or café fact a day, drawn. That is what we post on Instagram. @cupanstudio
Can an AI assistant read your café's hours and menu? Paste your address into our free check and see in a few seconds. Nothing is stored.