Opening hours generator with JSON-LD markup
Your hours as readable text and as JSON-LD markup, from one entry
Opening hours as text
Monday to Saturday : 09:00 to 12:30, 14:00 to 19:00 Sunday : Closed
JSON-LD markup
{
"@context": "https://schema.org",
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": [
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday"
],
"opens": "09:00",
"closes": "12:30"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": [
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday"
],
"opens": "14:00",
"closes": "19:00"
}
]
}Everything is computed in your browser. Nothing is stored.
Opening hours live in at least three places: the Google listing, the site footer and the contact page. They almost always end up diverging. This tool starts from a single entry, handles midday breaks and closed days, then produces two outputs: the text to paste into a page, and the openingHoursSpecification block search engines read to show "open" or "closes in 30 min".
How to use it
How it works
Fill in each day
One slot, two for a midday break, or the closed switch. Identical days can be copied in one click rather than retyped.
The text groups itself
Consecutive days on the same hours are merged, the way you would write them by hand: Monday to Friday, then Saturday on its own.
Copy the markup
The JSON-LD block is ready to paste into a script tag on your page. It follows the schema.org specification, the one Google's documentation cites.
Worth knowing
Four things to keep in mind
The midday break has to show
Declaring 9am to 7pm when you close from 12.30 to 2 sends customers to a locked door. Two slots in the same day are perfectly handled by the markup and by Google.
Special hours are entered at Google
Bank holidays, annual closures, one-off openings: those dates go in the special hours section of your listing, not in the regular hours.
Wrong markup is worse than none
If the JSON-LD contradicts the visible page, search engines sometimes trust the markup and show wrong information. Both outputs here come from the same entry, which removes the risk.
Mind midnight
A bar open from 6pm to 2am spans two days. The slot is declared with a closing time lower than the opening time, which the specification accepts.
FAQ
Frequently asked questions
It is the schema.org property describing a venue's opening hours in a machine-readable way. It replaces the older openingHours property, which is more compact but cannot handle midday breaks properly.
In a script tag of type application/ld+json, anywhere in the page. If you already have a LocalBusiness block, insert the property inside it rather than creating a second, competing block.
It takes it into account for rich results, with no guarantee of display. For the "open" label on your listing, the hours entered in Google Business Profile are what counts, not the ones on your site.
The specification reads the hours in the time zone of the place being described. As long as your address sits in the same markup, there is nothing to add.
Also
Other tools in the same family
Also
What Lokvi does for you
Now imagine all of it running without you
Review collection, replies, posts and loyalty, on your Google Business listing, automatically.
No credit card required: create your account and explore your real data.
14 days free, then 29 €/month, no commitment.