# Business hours structured data is present

- **Pattern:** `ab-001766` (`marketing-local-seo.local-schema.business-hours-schema`)
- **Severity:** medium
- **Lifecycle:** active
- **Last modified:** 2026-04-18
- **Canonical URL:** https://auditbuffet.com/patterns/ab-001766
- **License:** CC-BY-4.0 — attribute to AuditBuffet Pattern Catalog (https://auditbuffet.com/patterns/ab-001766)

## Why it matters

Business hours in structured data via schema-org OpeningHoursSpecification or schema-org openingHours enable Google to display your open/closed status directly in search results and Maps. Without this, customers clicking through from search have no immediate answer to whether you're currently open — a friction point that drives them to competitors who have the data surfaced. Hours omission also prevents Google's "Open now" filter from returning your business.

## Severity rationale

Medium because missing hours degrade the search result snippet and exclude the business from 'Open now' filter queries, reducing click-through without blocking indexing entirely.

## Remediation

Add `openingHoursSpecification` to your LocalBusiness JSON-LD in `app/layout.tsx`. Use one object per day group, with 24-hour time strings.

```json
"openingHoursSpecification": [
  {
    "@type": "OpeningHoursSpecification",
    "dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"],
    "opens": "09:00",
    "closes": "17:00"
  },
  {
    "@type": "OpeningHoursSpecification",
    "dayOfWeek": ["Saturday"],
    "opens": "10:00",
    "closes": "14:00"
  }
]
```

For 24/7 businesses, use `"openingHours": ["Mo-Su 00:00-23:59"]` instead.

## Detection

- **ID:** `business-hours-schema`
- **Severity:** `medium`
- **What to look for:** Check the LocalBusiness JSON-LD for an `openingHoursSpecification` property (array of objects with `dayOfWeek`, `opens`, and `closes`) or an `openingHours` property (array of strings in the format "Mo-Fr 09:00-17:00"). Also check for a dedicated hours component or page section that could contain this data.
- **Pass criteria:** Count all hours-related properties in the LocalBusiness JSON-LD. The schema must include either `openingHoursSpecification` or `openingHours` with at least 1 entry covering at least 1 day of the week, OR the business has explicitly indicated it operates 24/7 via `openingHours: ["Mo-Su 00:00-23:59"]`.
- **Fail criteria:** No hours data in the LocalBusiness schema and no indication that the business is always open.
- **Skip (N/A) when:** No LocalBusiness JSON-LD exists (caught by parent checks), or the business type is one that inherently has no regular hours (e.g., a purely online service), or whole-audit N/A rule applies.
- **Detail on fail:** `"LocalBusiness JSON-LD has no openingHoursSpecification or openingHours property. Business hours missing from structured data."`
- **Remediation:** Add hours to your LocalBusiness JSON-LD in `app/layout.tsx`:

  ```json
  "openingHoursSpecification": [
    { "@type": "OpeningHoursSpecification", "dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"], "opens": "09:00", "closes": "17:00" }
  ]
  ```

## External references

- schema-org OpeningHoursSpecification
- schema-org openingHours

Taxons: findability, data-integrity

HTML version: https://auditbuffet.com/patterns/ab-001766
