{
  "reportTitle": "2026 Restaurant Website Health Report",
  "reportUrl": "https://www.getkitch.app/blog/restaurant-website-health-report-2026",
  "publishedDate": "2026-09-19",
  "collectedAt": "2026-09-19T14:05:57.076Z",
  "methodologyVersion": "Kitch Restaurant Website Grader v1 / initial public HTML",
  "sampleDefinition": "Purposive snapshot of independently operated or small-local-group restaurant homepages. National chains excluded. Five North American cities, target 20 successful audits per city. Not statistically representative of all restaurants.",
  "sample": {
    "selectedCount": 100,
    "candidateCount": 125,
    "successfulCandidateCount": 111,
    "cities": {
      "Toronto": 20,
      "New York": 20,
      "Chicago": 20,
      "Austin": 20,
      "Los Angeles": 20
    }
  },
  "medianCompositeScore": 72.5,
  "checks": [
    {
      "id": "indexable",
      "group": "Search discovery",
      "label": "Indexable by search engines",
      "points": 7,
      "passed": 98,
      "failed": 2,
      "total": 100,
      "passRatePercent": 98
    },
    {
      "id": "title",
      "group": "Search discovery",
      "label": "Descriptive page title",
      "points": 7,
      "passed": 55,
      "failed": 45,
      "total": 100,
      "passRatePercent": 55
    },
    {
      "id": "description",
      "group": "Search discovery",
      "label": "Meta description",
      "points": 6,
      "passed": 42,
      "failed": 58,
      "total": 100,
      "passRatePercent": 42
    },
    {
      "id": "h1",
      "group": "Search discovery",
      "label": "Clear primary heading",
      "points": 6,
      "passed": 35,
      "failed": 65,
      "total": 100,
      "passRatePercent": 35
    },
    {
      "id": "canonical",
      "group": "Search discovery",
      "label": "Canonical URL",
      "points": 4,
      "passed": 85,
      "failed": 15,
      "total": 100,
      "passRatePercent": 85
    },
    {
      "id": "menu",
      "group": "Guest utility",
      "label": "Menu is easy to reach",
      "points": 8,
      "passed": 82,
      "failed": 18,
      "total": 100,
      "passRatePercent": 82
    },
    {
      "id": "order",
      "group": "Guest utility",
      "label": "Ordering path",
      "points": 7,
      "passed": 44,
      "failed": 56,
      "total": 100,
      "passRatePercent": 44
    },
    {
      "id": "reservation",
      "group": "Guest utility",
      "label": "Reservation path",
      "points": 5,
      "passed": 86,
      "failed": 14,
      "total": 100,
      "passRatePercent": 86
    },
    {
      "id": "phone",
      "group": "Guest utility",
      "label": "Tap-to-call phone link",
      "points": 4,
      "passed": 37,
      "failed": 63,
      "total": 100,
      "passRatePercent": 37
    },
    {
      "id": "hours",
      "group": "Guest utility",
      "label": "Hours are findable",
      "points": 6,
      "passed": 72,
      "failed": 28,
      "total": 100,
      "passRatePercent": 72
    },
    {
      "id": "schema",
      "group": "Local trust",
      "label": "Restaurant structured data",
      "points": 9,
      "passed": 55,
      "failed": 45,
      "total": 100,
      "passRatePercent": 55
    },
    {
      "id": "address",
      "group": "Local trust",
      "label": "Location/address signal",
      "points": 6,
      "passed": 74,
      "failed": 26,
      "total": 100,
      "passRatePercent": 74
    },
    {
      "id": "social",
      "group": "Local trust",
      "label": "Share image metadata",
      "points": 5,
      "passed": 75,
      "failed": 25,
      "total": 100,
      "passRatePercent": 75
    },
    {
      "id": "https",
      "group": "Technical foundation",
      "label": "HTTPS",
      "points": 5,
      "passed": 100,
      "failed": 0,
      "total": 100,
      "passRatePercent": 100
    },
    {
      "id": "viewport",
      "group": "Technical foundation",
      "label": "Mobile viewport",
      "points": 6,
      "passed": 85,
      "failed": 15,
      "total": 100,
      "passRatePercent": 85
    },
    {
      "id": "response",
      "group": "Technical foundation",
      "label": "Fast HTML response",
      "points": 4,
      "passed": 100,
      "failed": 0,
      "total": 100,
      "passRatePercent": 100
    },
    {
      "id": "alts",
      "group": "Technical foundation",
      "label": "Image alt coverage",
      "points": 5,
      "passed": 92,
      "failed": 8,
      "total": 100,
      "passRatePercent": 92
    }
  ],
  "derivedAggregateSignals": {
    "menuHoursAndAddress": 51,
    "coreSearchFoundation": 8,
    "localMachineReadability": 46
  },
  "caveats": [
    "The grader evaluates initial public HTML and guest/search signals; it does not verify that menu items or posted hours are factually current.",
    "HTML response time is not a Core Web Vitals measurement.",
    "Ordering and reservation checks are not equally applicable to every restaurant format.",
    "Sites that could not be fetched safely within the grader limits are excluded from the 100-site selected sample and reported separately.",
    "The composite score is a weighted diagnostic, not a Google ranking score.",
    "Ordering and reservation checks are format-dependent; their pass rates are reported for transparency but are not treated as universal restaurant requirements.",
    "The image-alt check evaluates <img> elements present in initial HTML. A page with no initial <img> tags does not fail that check.",
    "The sample is purposive rather than random and should not be treated as statistically representative of all restaurants in North America."
  ],
  "grader": "https://www.getkitch.app/blog/restaurant-website-grader",
  "reference": "https://developers.google.com/search/docs/appearance/structured-data/local-business"
}
