Für wen ist dieser Artikel? Für alle, die ein lokales Unternehmen betreiben oder SEO für Kunden mit physischen Standorten machen: Zahnarztpraxen, Restaurants, Handwerksbetriebe, Einzelhändler, Fitnessstudios, Kosmetikstudios - überall wo Öffnungszeiten eine Rolle spielen. Außerdem relevant für alle, die das LocalBusiness Schema bereits nutzen und es jetzt um präzise Öffnungszeiten erweitern möchten.
Was ist OpeningHoursSpecification?
OpeningHoursSpecification ist ein Schema.org-Typ, der detaillierte Öffnungszeiten für Unternehmen und Orte beschreibt. Im Gegensatz zum vereinfachten openingHours-Property (das nur einfache Zeitangaben wie "Mo-Fr 09:00-18:00" unterstützt) ermöglicht OpeningHoursSpecification:
- Unterschiedliche Öffnungszeiten für einzelne Wochentage
- Sonderöffnungszeiten an Feiertagen
- Temporäre Schließungen (z.B. Urlaub)
- Mehrere Öffnungs-Perioden am selben Tag (z.B. Mittagspause)
- Gültigkeitszeiträume (validFrom / validThrough)
Google nutzt diese Daten, um in den lokalen Suchergebnissen und im Knowledge Panel anzuzeigen, ob ein Unternehmen aktuell geöffnet oder geschlossen ist - eine Information, die direkt die Klickrate beeinflusst.
Warum OpeningHoursSpecification für lokales SEO entscheidend ist
In der lokalen Suche konkurrierst du nicht nur über Keywords, sondern über Relevanz im Moment der Suche. Wenn jemand um 17:45 Uhr sucht "Zahnarzt in der Nähe geöffnet", zeigt Google bevorzugt Praxen, die jetzt noch offen sind - und das erkennt Google durch strukturierte Öffnungszeiten-Daten.
Laut einer Analyse von BrightLocal sehen über 70% der Nutzer die Öffnungszeiten als entscheidend für ihre Auswahl eines lokalen Unternehmens. Fehlende oder falsche Öffnungszeiten in Google My Business oder auf der Website kosten nachweislich Besucher und Conversions.
Unser Google My Business Optimierungs-Guide zeigt, wie du Öffnungszeiten dort pflegst - dieser Artikel erklärt, wie du dasselbe auf deiner Website per Schema Markup abbildest, für optimale Sichtbarkeit in allen Google-Oberflächen.
Properties von OpeningHoursSpecification im Überblick
| Property | Typ | Pflicht? | Beschreibung |
|---|---|---|---|
dayOfWeek |
DayOfWeek | Empfohlen | Wochentag (Monday, Tuesday, ..., Sunday) |
opens |
Time (HH:MM) | Empfohlen | Öffnungszeit im 24h-Format |
closes |
Time (HH:MM) | Empfohlen | Schließzeit im 24h-Format |
validFrom |
Date (ISO 8601) | Optional | Beginn der Gültigkeit (für Sonderzeiten) |
validThrough |
Date (ISO 8601) | Optional | Ende der Gültigkeit (für Sonderzeiten) |
Wochentag-Werte: Korrekte Schreibweise
Google erfordert exakt diese Werte für dayOfWeek:
| Deutsch | Schema.org-Wert | Kurzform (veraltet) |
|---|---|---|
| Montag | https://schema.org/Monday oder Monday |
Mo |
| Dienstag | Tuesday |
Tu |
| Mittwoch | Wednesday |
We |
| Donnerstag | Thursday |
Th |
| Freitag | Friday |
Fr |
| Samstag | Saturday |
Sa |
| Sonntag | Sunday |
Su |
Tipp: Du kannst sowohl den vollständigen URI (https://schema.org/Monday) als auch den Kurzwert (Monday) verwenden - beide werden von Google akzeptiert.
Vollständiges JSON-LD-Beispiel: Zahnarztpraxis
Eine Zahnarztpraxis mit unterschiedlichen Öffnungszeiten pro Wochentag und Mittagspause am Freitag:
{
"@context": "https://schema.org",
"@type": "Dentist",
"name": "Zahnarztpraxis Dr. Müller",
"url": "https://zahnarzt-mueller-berlin.de",
"telephone": "+49 30 12345678",
"address": {
"@type": "PostalAddress",
"streetAddress": "Hauptstraße 42",
"addressLocality": "Berlin",
"postalCode": "10115",
"addressCountry": "DE"
},
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday"],
"opens": "08:00",
"closes": "18:00"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": "Friday",
"opens": "08:00",
"closes": "13:00"
}
]
}
Shortcut: Wenn mehrere Tage dieselben Öffnungszeiten haben, kannst du sie als Array angeben: "dayOfWeek": ["Monday", "Tuesday", "Wednesday"]. Das spart Code und ist vollständig valide.
Mittagspause abbilden: Zwei Öffnungsperioden pro Tag
Viele Handwerksbetriebe, Arztpraxen und Behörden haben eine Mittagspause. Dafür einfach zwei OpeningHoursSpecification-Einträge für denselben Wochentag erstellen:
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "08:00",
"closes": "12:00"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday"],
"opens": "14:00",
"closes": "18:00"
}
]
Freitag öffnet in diesem Beispiel nur vormittags (08:00–12:00), nachmittags ist geschlossen.
Restaurant-Beispiel mit Wochenend-Öffnungszeiten
{
"@context": "https://schema.org",
"@type": "Restaurant",
"name": "Ristorante Bella Italia",
"url": "https://bella-italia-hamburg.de",
"telephone": "+49 40 9876543",
"address": {
"@type": "PostalAddress",
"streetAddress": "Colonnaden 15",
"addressLocality": "Hamburg",
"postalCode": "20354",
"addressCountry": "DE"
},
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Tuesday", "Wednesday", "Thursday"],
"opens": "11:30",
"closes": "22:00"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Friday", "Saturday"],
"opens": "11:30",
"closes": "23:30"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": "Sunday",
"opens": "12:00",
"closes": "21:00"
}
]
}
Montag ist Ruhetag - er taucht im Schema einfach nicht auf. Google interpretiert fehlende Tage als geschlossen.
Sonderöffnungszeiten für Feiertage und Urlaub
Mit validFrom und validThrough kannst du zeitlich begrenzte Öffnungszeiten definieren. Das ist ideal für:
- Feiertagsöffnungszeiten (Weihnachten, Ostern)
- Urlaubszeiten (komplett geschlossen)
- Sommeröffnungszeiten (andere Zeiten als üblich)
Beispiel: Urlaubsschließung im August
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "09:00",
"closes": "18:00"
},
{
"@type": "OpeningHoursSpecification",
"validFrom": "2026-08-01",
"validThrough": "2026-08-21",
"opens": "00:00",
"closes": "00:00"
}
]
Geschlossen signalisieren: Wenn opens und closes beide auf "00:00" gesetzt sind (und kein dayOfWeek angegeben ist), interpretiert Google das als "im gesamten Zeitraum geschlossen". Das Weglassen des dayOfWeek-Feldes bedeutet: gilt für alle Tage im angegebenen Zeitraum.
Beispiel: Weihnachten - verkürzte Öffnungszeiten
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"validFrom": "2026-12-24",
"validThrough": "2026-12-24",
"dayOfWeek": "Thursday",
"opens": "09:00",
"closes": "12:00"
},
{
"@type": "OpeningHoursSpecification",
"validFrom": "2026-12-25",
"validThrough": "2026-12-26",
"opens": "00:00",
"closes": "00:00"
}
]
24-Stunden-Betrieb abbilden
Für Unternehmen, die rund um die Uhr geöffnet sind (z.B. Tankstellen, Notaufnahmen):
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": [
"Monday", "Tuesday", "Wednesday", "Thursday",
"Friday", "Saturday", "Sunday"
],
"opens": "00:00",
"closes": "23:59"
}
Alternativ: "closes": "00:00" (Mitternacht) - beide Varianten werden akzeptiert, aber "23:59" ist eindeutiger.
OpeningHoursSpecification in LocalBusiness einbinden
OpeningHoursSpecification wird als Property innerhalb des LocalBusiness-Schemas verwendet - nie als eigenständiges Schema. Das bedeutet: Du brauchst immer einen übergeordneten Typ wie LocalBusiness, Restaurant, Dentist, AutoRepair usw.
Vollständiges LocalBusiness-Beispiel für einen Friseur
{
"@context": "https://schema.org",
"@type": "HairSalon",
"name": "Salon Schöner Schnitt",
"url": "https://salon-schoener-schnitt.de",
"telephone": "+49 211 555 1234",
"image": "https://salon-schoener-schnitt.de/images/salon.jpg",
"priceRange": "€€",
"address": {
"@type": "PostalAddress",
"streetAddress": "Königsallee 88",
"addressLocality": "Düsseldorf",
"postalCode": "40215",
"addressCountry": "DE"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": "51.2217",
"longitude": "6.7762"
},
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Tuesday", "Wednesday", "Friday"],
"opens": "09:00",
"closes": "19:00"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": "Thursday",
"opens": "11:00",
"closes": "20:00"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": "Saturday",
"opens": "08:00",
"closes": "16:00"
}
],
"sameAs": [
"https://www.google.com/maps/place/...",
"https://www.instagram.com/salon_schoener_schnitt"
]
}
Beachte: Montag und Sonntag sind in diesem Beispiel Ruhetage. Sie erscheinen nicht im Schema - Google zeigt sie dann als geschlossen an.
Häufige Fehler und wie du sie vermeidest
Fehler 1: 12-Stunden-Format statt 24-Stunden-Format
Falsch: "opens": "9:00 AM" - Schema.org erfordert HH:MM im 24-Stunden-Format.
Richtig: "opens": "09:00"
Fehler 2: Öffnungszeiten nur im alten openingHours-Format
Das veraltete openingHours-Format ("Mo-Fr 09:00-18:00") funktioniert noch, aber OpeningHoursSpecification ist deutlich präziser und unterstützt Sonderzeiten. Nutze stattdessen immer OpeningHoursSpecification.
// VERALTET: openingHours-String
"openingHours": ["Mo-Fr 09:00-18:00", "Sa 10:00-14:00"]
// BESSER: OpeningHoursSpecification
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"],
"opens": "09:00",
"closes": "18:00"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": "Saturday",
"opens": "10:00",
"closes": "14:00"
}
]
Fehler 3: Öffnungszeiten ohne übergeordnetes LocalBusiness-Schema
OpeningHoursSpecification als eigenständiges Schema auf einer Seite ist ungültig. Es muss immer innerhalb eines LocalBusiness-Typs eingebettet sein. Das LocalBusiness Schema Generator Tool von Shift07 erzeugt automatisch das korrekte übergeordnete Schema mit Öffnungszeiten.
Fehler 4: Zeitzonen im opens/closes-Feld
Die Zeiten in opens und closes sind immer als Lokalzeit des Unternehmens zu verstehen - ohne Zeitzonenangabe. Google ermittelt die Zeitzone automatisch aus der address oder den geo-Koordinaten.
// FALSCH: Zeitzone im Zeitwert
"opens": "09:00+02:00"
// RICHTIG: Nur Uhrzeit, Zeitzone aus Adresse
"opens": "09:00"
OpeningHoursSpecification mit Google My Business synchronisieren
Eine häufige Frage: Reicht es, Öffnungszeiten in Google My Business (GMB) einzupflegen? Die Antwort: GMB-Daten und Website-Schema sind komplementär, nicht redundant. Google nutzt beide Quellen und kombiniert sie.
- GMB-Öffnungszeiten erscheinen im lokalen Knowledge Panel und Google Maps
- Website-Schema-Öffnungszeiten helfen Google, die Website selbst als vertrauenswürdige Quelle zu erkennen
- Wichtig: Beide Quellen sollten konsistent sein - Abweichungen zwischen GMB und Website-Schema können zu verwirrenden SERP-Darstellungen führen
Mehr zu Google My Business erklärt unser GMB-Optimierungs-Leitfaden. Zum Thema NAP-Konsistenz (Name, Adresse, Telefon) haben wir einen separaten Artikel: NAP-Konsistenz für lokales SEO.
Schema-Markup testen: So validierst du OpeningHoursSpecification
Das Testen von Öffnungszeiten-Schema hat eine Besonderheit: Du siehst die Auswirkung erst in den SERPs oder im Knowledge Panel, nicht im Rich Results Test (da OpeningHoursSpecification kein eigenständiges Rich Result, sondern ein LocalBusiness-Signal ist).
Drei Validierungsschritte:
- Schema.org-Validator: validator.schema.org - prüft ob das JSON-LD syntaktisch korrekt ist und alle Pflichtfelder vorhanden sind
- Google Rich Results Test: search.google.com/test/rich-results - prüft ob das LocalBusiness-Schema erkannt wird (Öffnungszeiten werden dabei mit validiert)
- Google Search Console: Unter "Verbesserungen" → "Unternehmen" (falls vorhanden) - zeigt Erkennungsfehler auf deiner Website
Für schnelle Tests direkt im Browser eignet sich unser JSON-LD Structured Data Validator - du kannst dort das Markup direkt prüfen.
Branchen-spezifische Tipps
Arztpraxen und Zahnarztpraxen
Nutze Dentist oder MedicalClinic als @type. Definiere Sprechzeiten präzise - Mittagspause und abweichende Tage sind hier die Regel, nicht die Ausnahme. Patienten suchen oft dringend und wollen sofort wissen, ob die Praxis erreichbar ist.
Restaurants und Cafés
Nutze Restaurant, CafeOrCoffeeShop oder FoodEstablishment. Beachte: Küchenschluss (Bestellannahme) und tatsächliche Schließung können unterschiedlich sein. Wenn du Küchenschluss abbilden willst, nutze Schließzeit = Küchenschluss und ergänze es im Text.
Handwerksbetriebe
Nutze HomeAndConstructionBusiness oder einen spezifischeren Untertyp. Viele Handwerker haben keine regulären Bürozeiten - hier kann das Weglassen der Öffnungszeiten oder "nach Vereinbarung" besser sein als falsche Zeiten. Scheibe lieber nichts als etwas Falsches: Google bestraft inkonsistente Daten.
Checkliste: OpeningHoursSpecification korrekt implementieren
Checkliste:
- ✅ OpeningHoursSpecification ist innerhalb eines LocalBusiness-Typs definiert
- ✅ Uhrzeiten im 24h-Format (HH:MM), keine Zeitzone
- ✅ Wochentage als vollständige englische Namen (Monday, Tuesday, ...)
- ✅ Ruhetage sind nicht im Schema (nicht als "geschlossen" eingetragen)
- ✅ Mittagspause als zwei separate OpeningHoursSpecification-Einträge
- ✅ Feiertage/Urlaub mit validFrom + validThrough abgebildet
- ✅ Öffnungszeiten stimmen mit Google My Business überein
- ✅ JSON-LD ist statisch im <head> gerendert
- ✅ Mit Schema.org-Validator und Rich Results Test geprüft
- ✅ Konsistent mit Öffnungszeiten-Text auf der Website
Fazit
OpeningHoursSpecification ist eines der direktesten SEO-Signale für lokale Unternehmen: Es zeigt Google exakt, wann du erreichbar bist - und Google zeigt das den Nutzern direkt in den Suchergebnissen. Gerade bei mobilen "in der Nähe"-Suchen ist der Unterschied zwischen "Jetzt geöffnet" und "Geschlossen" oft entscheidend für den Klick.
Die Implementierung ist technisch überschaubar. Der häufigste Fehler ist nicht das falsche Format, sondern Inkonsistenz: Wenn Website-Schema, GMB-Eintrag und tatsächliche Öffnungszeiten auseinanderlaufen, leidet die Vertrauenswürdigkeit bei Google.
Kombiniere OpeningHoursSpecification mit einem vollständigen LocalBusiness Schema, NAP-Konsistenz und einem gepflegten Google My Business-Eintrag - das ist das Fundament für starkes lokales SEO.
Möchtest du wissen, welche Schema-Fehler deine Website aktuell hat? Die kostenlose Shift07-Analyse zeigt dir alle technischen SEO-Probleme auf einen Blick.