Cafe Opening Hours That Tell the Truth: Holidays and Sold Out
Hours are the field a cafe website gets wrong most often and most expensively. How to hold them in one place, handle holidays, and be honest about selling out.
- Operations
- 11 min read
- 2,593 words
- 5 questions answered

Opening hours are the highest-consequence piece of information on a cafe or bakery website, and they are the one most likely to be wrong. Being wrong here does not cost a ranking position or a percentage point of engagement. It costs a specific person who drove across town and is now standing at a locked door reading a sign that contradicts the website they checked twenty minutes ago. This is how to hold hours so they stay true, what to do about holidays, and why the harder problem is not the hours at all but what is left when somebody arrives.
One source of truth, rendered everywhere
On a typical independent cafe site, opening hours appear in at least four places: the footer of every page, the contact page, the location page, and a line somewhere on the homepage. On sites we audit before a rebuild, those four are in agreement roughly half the time.
It is not carelessness. It is what happens when hours are typed as text into four separate templates. Somebody changes the winter Sunday hours, updates the contact page because that is the page they were looking at, and the footer keeps saying the old thing on every single page of the site for the next eight months.
The fix is structural rather than disciplinary. Hours are data: a list of days, each with an open time and a close time, held once. Everything that shows hours reads from that list. Changing Sunday means changing Sunday once, and the footer, the contact page, the location page and the machine-readable version all move together.
This sounds like a technical detail and is really an operational one. It is the difference between an update taking thirty seconds and an update requiring somebody to remember all four places, which over two years means it will not happen.
What the list should contain
For a single-location shop, the list is short: seven days, each either a pair of times or closed. Two additions make it substantially more useful.
The first is a distinction between the door being open and a particular service running. A bakery counter that stops at two inside a cafe that runs to five is two different facts, and publishing only one of them creates the disappointment this article is about. Where your operation genuinely has two schedules, hold two schedules.
The second is a short note field per day. “Kitchen until 2” or “Wholesale collections from 6” is information a customer wants and that no pair of times can carry.
Multi-location makes it mandatory
For a group, each location has its own hours, and they are rarely identical. The moment hours are a shared block of text rather than per-location data, one of two bad things happens: either every location publishes the same hours and at least one of them is lying, or the locations page becomes a grid of times that nobody maintains.
Each location page reads its own hours from its own record. This is the same argument as the single source of truth, applied at the point where the cost of getting it wrong multiplies.
Holidays: the part everyone forgets in January and regrets in December
Holiday hours are the failure mode with the sharpest edge, because holidays are exactly when people search for somewhere open. A visitor on a public holiday is not casually browsing; they are specifically looking for a cafe that is trading today. A site or profile that confidently says you are open is capturing that visit and then wasting it.
Overrides, not edits
The wrong way to handle a holiday is to edit the regular hours to say closed and then remember to change them back. It fails in two directions: people forget to change them back, and the site loses the information that Wednesday is normally a trading day.
The right way is a dated override. A separate small list of specific dates with specific hours, or closed, which takes precedence on those dates and otherwise does nothing. After the date passes, normal hours resume with no action required.
Schema.org’s specialOpeningHoursSpecification exists for precisely this and works the same way: dated entries that override the regular specification for their validity period. Google’s own hours documentation describes the same two-layer model on the profile side, where they are called special hours.
Do the year in one sitting
The practical recommendation is to sit down once, early in the year, with a calendar, and enter every planned closure and every altered day for the next twelve months. Public holidays, the days you close between Christmas and New Year, the week you shut for maintenance, the mornings you open late after a late event, the day of the local festival when you open early.
It takes about twenty minutes. It removes an entire category of recurring failure, in one go, for the whole year.
Say it before it happens, not on the day
A closure that appears on the site the morning it happens is not much use. A closure visible a week ahead changes somebody’s plan.
The mechanism is simple: a short, dismissable notice in the site’s own voice, scheduled to appear a few days before and disappear afterwards. Not a pop-up, not an overlay. A line at the top of the page, or a clearly marked block on the hours section, saying what is happening and when normal service resumes.
The 4pm problem
Here is the harder version of this problem, and the one that is specific to food.
A shop can be genuinely, accurately open and still be a disappointment to somebody who arrives. The bakery that opens at seven and closes at six is open at half past four. What it has at half past four is two scones and no bread. The website says open until six. The customer who came for bread is not going to be persuaded that the website was technically correct.
This is the gap between the hours as a fact and the hours as a promise, and every cafe and bakery has some version of it.
Name the pattern, do not hide it
The instinct is to say nothing, on the theory that saying “the bread usually goes by ten” will stop people coming for bread. The opposite happens. A shop that says so gets people arriving at nine instead of half past four, and the person who comes at half past four for coffee and a sit-down is not disappointed because they were not expecting bread.
The practical version is a short honest line where the hours or the menu items live: which items typically sell out, roughly when, and what is reliably there all day. This costs nothing, is true, and converts a disappointment into a plan.
Distinguish the parts of the day properly
For most cafes the real shape of the day is not one pair of times. It is a morning with a full case and a queue, a middle stretch that is quieter and where most of the seating trade happens, and a late stretch which is either a wind-down or a completely different business.
A site that publishes one undifferentiated set of hours flattens all three into the same promise. A site that reflects the shape, showing what is on in the morning, what the afternoon is for, and what the evening looks like where there is one, sets accurate expectations for every one of those visitors.
This is not extra maintenance. The three stretches are stable. It is the individual items inside them that move.
Closing time is not last orders
Two more facts that customers want and most sites omit: when the kitchen stops, and when the last coffee gets made. A shop that closes at six and stops making coffee at half past five is being reasonable, and the person who walks in at twenty to six is not being unreasonable either. The website is where that gets resolved before it happens.
Keeping the website and the listings in step
The website is not the only place your hours are published. There is the Business Profile, the map listing, the delivery platform, the social profile, and possibly a directory or two.
The workable rule is a hierarchy. The website is the master copy. Everything else is a copy of it, updated from it, and never edited independently. When hours change, the sequence is: update the site, then the profile, then anything else, in one sitting, on the day.
The reason for the hierarchy is that without one, updates happen wherever the person happened to be looking, and the platforms drift apart. The reason the website is the top of it is that it is the only one you fully control and the only one that can hold the whole picture, including the notes and the seasonal pattern.
It is worth knowing that on some platforms members of the public can suggest changes to your hours, and those suggestions can go live. A profile that was correct in March being wrong in June, with nobody at the shop having touched it, is a known situation rather than a mystery. Checking monthly catches it.
Seasonal patterns and the week the schedule changes
Most cafes and bakeries do not have one set of hours. They have a summer set and a winter set, and frequently a third pattern for whatever the local season is: a university term, a tourist season, a market day.
The way this normally gets handled is badly. The hours are changed on the day the new pattern starts, or a few days after somebody notices, and nothing anywhere says that a change happened.
Two improvements are cheap. The first is to treat the seasonal switch as a planned event rather than a surprise: put the two dates in the same January session where the holidays get set, so the change is scheduled rather than remembered. The second is to publish the change before it happens. “From the 4th of September we are back to winter hours, closing at four” is a useful sentence to a regular and an invisible one to nobody.
There is a specific trap in the week either side of a switch. A shop that changes hours on a Monday will have people arriving on the Tuesday with last week’s expectation, and a shop that changes hours quietly will have regulars who continue to assume the old pattern for a month. The notice is what closes that gap, and it only needs to run for a week.
Closing, moving, or changing what you are
The hardest hours question is not a holiday. It is what the website says when something structural changes.
A permanent closure. Do not delete the site. A page that has vanished turns every saved link, every listing and every search result into a dead end, and the last impression of the business becomes a browser error. Leave the site up with a clear, dated note on the homepage and the location page saying what has happened and, if there is one, where people should go instead. Mark the business closed on the listings rather than deleting the profile, so the record stays accurate.
A move. Publish the new address, the last trading day at the old one, the first trading day at the new one, and the gap between. Keep the old location page alive with a pointer to the new one rather than removing it, because a great many links to the old page exist in places you cannot edit.
A temporary closure. Refurbishments, staffing, an equipment failure. Say the reason in one plain sentence, say the expected return date if you have one, and say what to do in the meantime. The absence of a date is worse than a date you later have to move, because an undated closure reads as an unplanned one.
A change in what you are. A cafe that stops doing food, a bakery that stops opening on Sundays, a shop that becomes wholesale only. These need the same treatment as hours: stated on the site, matched on the listings, and announced a little before they take effect rather than discovered by somebody who drove over.
In every one of these cases the underlying rule is the same as the rest of this article. The website is where people check. Whatever is true, put it there first, put it there early, and make sure the listings agree.
Making hours machine readable
Once hours exist as data on the site, describing them in structured form is a small additional step with a specific payoff.
Google’s local business structured data documentation covers the shape, and OpeningHoursSpecification is the type that carries days and times. The value is that it removes interpretation: instead of a machine reading “Mon to Fri 6:30am until 4, weekends from 8” out of a styled paragraph, it reads a list of days with opening and closing times.
Three things make this worth doing for a cafe specifically. Hours are the single piece of information most likely to be surfaced without a click, so precision matters more here than almost anywhere else on the site. Holiday overrides have their own type, so a closure can be stated rather than implied. And for multi-location groups it is the mechanism that keeps each shop’s hours attached to that shop rather than to the brand.
As always, the markup describes what the page already says. It is not a place to publish hours that do not appear in the visible page, and it does not substitute for getting the visible hours right.
A short checklist
Hold hours once. One record, rendered in the footer, the contact page, the location page and the structured data.
Use dated overrides for holidays. Never edit the regular pattern for a one-off.
Set the whole year in January. Twenty minutes, once.
Publish closures a few days ahead. A line on the page, not a pop-up.
Say what sells out and roughly when. Honesty here buys trust and moves people earlier in the day.
Publish last orders, not just closing time. Including when the kitchen stops.
Update the site first, then every listing, the same day. One direction, one sitting.
Check the listings monthly. Because other people can change them.
None of that is difficult. All of it is the difference between a website that is technically accurate and one that a neighbourhood actually relies on, and for a shop that trades on regulars, being relied on is the entire business.
Sources
Frequently asked questions
Where should a cafe's opening hours actually live?
In one place in the website's own data, rendered everywhere hours appear: the footer, the contact page, the location page and the structured data. If hours are typed separately into four templates, at least one of them will be wrong within a year.
How do I handle holiday hours on a website?
Set them as dated overrides rather than editing the regular hours, so the normal pattern returns automatically afterwards. Do the same on your Business Profile with special hours, and set the whole year in one sitting rather than remembering each holiday.
Should a bakery website say when items usually sell out?
Yes, if it is reliably true. A line saying the sourdough usually goes by ten sets a correct expectation, whereas a menu that lists it all day teaches people that the page cannot be trusted, which costs more than the honesty does.
What is the 4pm problem?
It is the gap between being technically open and having anything left worth coming in for. A shop that closes at six but has an empty case after four is open on paper and disappointing in person, and the website is where that gap should be explained rather than discovered.
Do opening hours need structured data?
It removes ambiguity. Marking hours up with OpeningHoursSpecification, and holiday overrides with specialOpeningHoursSpecification, states them as data rather than leaving them to be read out of a styled paragraph that may be formatted three different ways across the site.
Want a site like the one described here? Book a demo with GetCafeWebsite.