Case Study · 2026

Crystal Palace Osteopathy.

Client
Virginia Spencer-Smith, Registered Osteopath
Location
32 Westow Hill, SE19 1RX
Scope
Design, Build, SEO, Migration
Year
2026
osteopathcrystalpalace.co.uk
· Signature

The work,
in three scrolls.

Scroll to see the site move through its three key sections. Hero. Editorial. Social proof.

Crystal Palace Osteopathy homepage hero — 'Osteopathy in Crystal Palace' headline over the Crystal Palace transmitter with call-to-action buttons
Hero · Crystal Palace transmitter, editorial serif headline
Editorial 'A hands-on approach to pain relief' section with a photograph of a woman holding her lower back
Editorial · The back-pain photograph
Dark green patient testimonials section with three reviews and five-star ratings
Social proof · Patient reviews in deep green
01 — The Brief

An established practice, a site that
wasn't carrying its weight.

Crystal Palace Osteopathy has been treating patients in SE19 for years. Virginia has a waiting list. The website hadn't kept up. Hard to read on a phone, slow to load, and buried on page three of Google for osteopath Crystal Palace. Patients were finding her by word of mouth, which is great until it isn't.

02 — Approach

Rebuild it from the ground up.
Keep what worked.

01 · Design

Editorial, not clinical.

Warm palette. Instrument Serif for the display headings. One signature photograph of a woman holding her lower back, stopping the scroll where every other physio site fades into stock imagery.

02 · Build

Hand-coded, no bloat.

No CMS, no plugins, no tracking bloat. Ships as static HTML and a handful of WebP assets. Lighthouse 98 on mobile. Under 300KB on first load.

03 · SEO

Full MedicalBusiness schema.

Geo coordinates, opening hours, areas served, practitioner credentials. Everything Google needs to show her at the top of the local pack for osteopath Crystal Palace.

Detail 01 · Under the hood

The same page,
two views.

The Conditions & Services section: 'What We Treat' label, 'Conditions & Services' heading, featured Pregnancy-Related Care and Trapped Nerves cards, then a grid of six treatment categories
What patients see: the Conditions & Services grid.

What Google sees is different. Every card in that grid, every treatment category, every address line and opening hour is typed directly into a hand-written MedicalBusiness JSON-LD block in the <head>. No plugin, no generator, no CMS plumbing. Four separate schema blocks totaling 272 lines of structured data, wired by hand and validated against the Rich Results Test.

  • Dual @type: ["MedicalBusiness", "HealthAndBeautyBusiness"]. Covers both health intent and local services intent without keyword stuffing.
  • 16 areaServed entries. Crystal Palace, Dulwich, Sydenham, Penge, Bromley, Croydon and 10 more. Primary location carries GeoCoordinates (51.4186, -0.0765).
  • 4 EducationalOccupationalCredential entries on the practitioner. BSc(Hons), ITEC, APNT, NLSMR. Each with recognizedBy. Registered with the General Osteopathic Council.
  • Explicit openingHoursSpecification. dayOfWeek as an array. No string parsing, no ambiguity for the crawler.
  • Four separate blocks. MedicalBusiness, FAQPage, BreadcrumbList, WebSite. Split so Google can index each independently.
  • Zero runtime JavaScript for the schema. Ships static in the initial HTML. First byte already contains everything the crawler needs.
// index.html · head · schema[0]
{
  "@type": ["MedicalBusiness",
           "HealthAndBeautyBusiness"],
  "medicalSpecialty": [
    "Musculoskeletal",
    "PhysicalTherapy",
    "RehabilitativeMedicine"
  ],
  "geo": {
    "@type": "GeoCoordinates",
    "latitude":  51.4186,
    "longitude": -0.0765
  },
  "openingHoursSpecification": [{
    "@type": "OpeningHoursSpecification",
    "dayOfWeek": ["Monday",
                  "Wednesday",
                  "Friday"],
    "opens":  "10:00",
    "closes": "20:00"
  }],
  "employee": {
    "@type": "Person",
    "name": "Virginia Spencer-Smith",
    "hasCredential": [
      { "name": "BSc(Hons) Osteopathy" },
      { "name": "ITEC Massage Therapy" },
      { "name": "APNT Sports Injury" },
      { "name": "NLSMR Remedial" }
    ]
  }
}
Schema blocks
4
Structured data
272 lines
Runtime JS
0 KB
Initial HTML
66 KB
CSS
42 KB
Hero image
116 KB WebP
03 — Outcome

Live in under two weeks.

98
Lighthouse, mobile
12days
Brief to live
0
Templates used

The site is live at osteopathcrystalpalace.co.uk. Virginia got a site she can send people to without a wince. I got my first case study.

If you run a local business in Crystal Palace, East Dulwich, Peckham, Herne Hill, Forest Hill, or anywhere across South East London and your website isn't doing its job, get in touch. The process is the same. See pricing for the full breakdown.

Next

Your business could be
case study 02.

Got a local practice or studio that needs a proper website? I'm taking on new projects now.

Start a conversation