Schema.org Structured Data Guide for Medical & Aesthetic Clinics
A complete walkthrough of implementing, auditing, and optimising JSON-LD structured data for a doctor-led medical clinic. Covering everything from base setup to advanced rich result eligibility.
1. Core Organisation Node — MedicalClinic
The foundation of your schema. Every other node references back to this.
@type: "MedicalClinic"— use this over genericLocalBusinessfor medical entities- Include
name,legalName,url,logo,image, anddescription - Add
sloganfor brand identity signals - Set
foundingDatein ISO format (YYYY-MM-DD) - Set
isAcceptingNewPatients: true— directly used by Google for medical listings - Add
priceRange(e.g.££££) — optional but removes Google Search Console warnings - Add
paymentAcceptedto list accepted payment methods - Include
medicalSpecialtyusing schema.org URIs (e.g.http://schema.org/Dermatologic) - Use
knowsAboutarray to list all treatments and specialities — strengthens topical authority - Add
awardarray for accreditations and achievements
2. Address, Contact & Opening Hours
- Use a full
PostalAddressobject — includestreetAddress,addressLocality,addressRegion,postalCode, andaddressCountry - Add
GeoCoordinateswithlatitudeandlongitudefor map visibility - Add both top-level
telephoneand aContactPointobject — the ContactPoint can includeemail,areaServed, andavailableLanguage - Define
openingHoursSpecificationfor open days with exactopensandclosestimes - Explicitly define closed days (e.g. Saturday, Sunday) with
opens: "00:00"andcloses: "00:00"— avoids Google inferring incorrect hours
3. Booking Action
One of the highest-impact additions for conversion — enables a direct booking link in search results.
- Add
potentialActionwith@type: "ReserveAction"to the main organisation node - Use an
EntryPointwithurlTemplatepointing to your booking or consultation page - Specify
actionPlatformfor both desktop and mobile web - Add a human-readable
nameto the action (e.g. “Book a Consultation”)
4. Physician / Doctor Entity
For doctor-led clinics, the physician node is critical for E-E-A-T (Experience, Expertise, Authoritativeness, Trustworthiness).
- Use dual type
["Person", "Physician"]—Personalone is insufficient for medical authority signals - Add
honorificPrefix: "Dr." - Include
alumniOfwith the medical school as aCollegeOrUniversity - Add
hasCredentialwithEducationalOccupationalCredentialspecifying the medical degree - Include
medicalSpecialtyusing schema.org URIs - Add
telephone,address, andpriceRangeto the physician node — Google treatsPhysicianlike a local business and expects these fields - Link to professional profiles via
sameAs(LinkedIn, Instagram, etc.) - Connect to the organisation via
worksForreferencing the clinic’s@id
5. Services — Dual Typing for Medical Clinics
- Define each service as a separate node in
@graphwith a unique@id - Use dual type
["Service", "MedicalProcedure"]— improves medical relevance signals beyond genericService - Add
serviceTypeto categorise services (e.g. “Regenerative Aesthetics and Dermal Injectables”) - Always include a detailed
description - Link back to the clinic via
providerreferencing the organisation’s@id - Reference services from
hasOfferCataloginside the main organisation node using@idreferences
6. Ratings & Reviews
- Add
aggregateRatingwithratingValueandreviewCount - Do not include
itemReviewedinside a nestedaggregateRating— this causes a directional conflict warning.itemReviewedis only needed whenaggregateRatingis defined as a standalone node - Add individual
Reviewobjects in areviewarray — each withauthor,datePublished,reviewRating, andreviewBody - Include
bestRating: "5"inside eachreviewRating
7. FAQPage Schema
One of the most impactful additions for organic visibility — eligible for expanded FAQ rich results in Google Search.
- Add a
FAQPagenode to@graphwith a unique@id - Define each question inside
mainEntityas aQuestionobject - Each
Questionmust have aname(the question) and anacceptedAnswercontaining anAnswerwith atextfield - Keep answers factual and directly useful — do not use FAQ schema for promotional content
8. Site-Level Nodes
- Add a
WebSitenode with aSearchAction— enables Google Sitelinks search box - Add a
WebPagenode linked to both the website and organisation viaisPartOfandabout - Add a
BreadcrumbListnode — required for breadcrumb rich results on inner pages
9. Social Profiles & Brand Consistency
- Use
sameAson the organisation node to list all official social media profiles and Google Maps listing - Use
sameAson the physician node to link professional and personal social profiles - Consistent NAP (Name, Address, Phone) across all nodes is essential for local SEO
10. Implementation & Validation
- Always wrap your JSON-LD in
<script type="application/ld+json">— omitting thetypeattribute causes browsers to parse JSON as JavaScript and throw errors - Use a single
@grapharray to define all nodes in one script block — avoids duplicate context issues - Validate using Google Rich Results Test after every change
- Non-critical warnings (optional missing fields) do not block rich results but should be resolved where possible
- Critical errors must be resolved — they prevent the page from being eligible for rich results entirely
Ruxi Data brings together multi-model AI, automated website crawling, live indexation checks, topical authority mapping, E-E-A-T enrichment, schema generation, and full pipeline automation — from crawl to WordPress publish to social posting — all in one platform built for agencies and freelancers who run on results.