Lokvi
?

Opening hours generator with JSON-LD markup

Your hours as readable text and as JSON-LD markup, from one entry

Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
Closed

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

1

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.

2

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.

3

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.