Schema Markup for Medical Practices: Physician and Clinic
Quick answer: mark the practice up as PhysiciansOffice or MedicalClinic with its medicalSpecialty, one block per location. Give each doctor a bio page marked up as IndividualPhysician, linked to the office with practicesAt. Describe procedures on their own pages, answer common questions in visible text, and never add your own star rating to your practice schema.
The easy mistake is to describe the practice and the doctors as one blurred entity, for example a single Physician block on the homepage. That leaves a search engine or an AI assistant unable to tell whether "Dr. Patel" is a person, a practice, or both.
Which schema types does a medical practice need?
Schema.org separates the office from the person, and so should you.
| Thing | Type | Where it goes |
|---|---|---|
| The practice location | PhysiciansOffice or MedicalClinic |
Each location page |
| Each doctor | IndividualPhysician |
Each provider bio page |
| The brand, for a group | MedicalOrganization or Organization |
Homepage |
| Each procedure or test | MedicalProcedure, MedicalTest or MedicalTherapy |
Each service page |
| Navigation | BreadcrumbList |
Every page |
Schema.org defines Physician as "an individual physician or a physician's office", which is exactly the ambiguity that causes trouble. It has two more specific types: PhysiciansOffice ("a doctor's office or clinic") and IndividualPhysician ("an individual medical practitioner"). Use the specific ones. (Dental practices have their own type, Dentist, covered in our schema guide for dentists.)
MedicalClinic can be the better fit for multi-specialty or urgent care settings. Google's local business structured data guide asks for the most specific subtype available and lets you list several types as an array.
What does the office block look like?
{
"@context": "https://schema.org",
"@type": "PhysiciansOffice",
"@id": "https://example.com/locations/northside/#office",
"name": "Example Family Medicine, Northside",
"url": "https://example.com/locations/northside/",
"telephone": "+15555550142",
"medicalSpecialty": "PrimaryCare",
"address": {
"@type": "PostalAddress",
"streetAddress": "200 Example Blvd",
"addressLocality": "Columbus",
"addressRegion": "OH",
"postalCode": "43215",
"addressCountry": "US"
},
"openingHoursSpecification": [{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"],
"opens": "08:00",
"closes": "17:00"
}]
}
medicalSpecialty takes a value from schema.org's MedicalSpecialty list: PrimaryCare, Dermatology, Pediatric, Musculoskeletal and so on. Use the enumeration value, not free text like "family doctor".
How should individual doctors be marked up?
Each provider deserves a real bio page that a crawler can read: credentials, board certifications you can document, specialties, languages, and the locations where they see patients. A bio hidden in a pop-up or an image is invisible to the systems you want to reach.
{
"@context": "https://schema.org",
"@type": "IndividualPhysician",
"@id": "https://example.com/providers/jane-doe/#physician",
"name": "Jane Doe, MD",
"url": "https://example.com/providers/jane-doe/",
"medicalSpecialty": "PrimaryCare",
"practicesAt": { "@id": "https://example.com/locations/northside/#office" }
}
practicesAt is the property schema.org provides for linking a practitioner to the clinic where they work. Physician types also support usNPI for the provider's National Provider Identifier, which you can confirm in the public NPI Registry. Getting the NPI right ties your page to an identifier that exists elsewhere, which is the whole point of entity markup.
Only state credentials that are documented. If a provider is not board certified in a specialty, the markup must not say so. Google's structured data guidelines treat misleading markup as a policy problem, and in healthcare it is also a trust problem.
Can a medical practice mark up its reviews?
Not its own. Adding aggregateRating to your own PhysiciansOffice or IndividualPhysician block is a self-serving review under Google's review snippet guidelines. That applies even when the rating came from real patients, which is exactly why it is an easy error to make: the number is true, so it feels safe to publish.
Show reviews as visible content instead, and leave your Business Profile rating to Google, which shows it on its own terms. If you collect reviews, do it the same way for every patient. Google's policy on user contributed content prohibits selectively soliciting positive reviews.
Will FAQ schema get a medical practice a rich result?
Not anymore. Google retired the FAQ rich result, and it stopped appearing in Google Search on May 7, 2026. FAQPage remains valid schema.org markup, but it no longer earns an expanded result in Google.
Write the FAQ content anyway. Questions such as "Do you accept new Medicare patients?" are what people ask search engines and assistants, and a clear answer on the page is useful either way. If you do mark it up, keep every marked-up answer visible to visitors.
Does schema help medical practices in AI search?
Google says no special markup is needed for its AI features. Its guide to optimizing for generative AI search states that structured data is not required, while recommending you keep using it for rich results.
The case for it in AI search is clarity, not magic. An assistant asked for "a dermatologist in Columbus who takes new patients" has to work out which providers practice where and in what specialty. Typed facts make that easier. Accurate provider pages, consistent listings and real reviews still do most of the work.
How do you check it?
Run each page type (a location page, a provider page, a service page) through the Rich Results Test and the Schema Markup Validator. Then view source and search for application/ld+json. Practice management and scheduling widgets can inject their own blocks, and two conflicting Physician blocks on one page are worth checking for.
FAQ
What schema type should a doctor's office use?
Use PhysiciansOffice for a doctor's office or MedicalClinic for a clinic, with medicalSpecialty set from schema.org's specialty list. Put one block on each location page. Avoid the generic Physician type, which schema.org defines as either a person or an office.
Should each doctor have their own schema?
Yes. Give every provider a crawlable bio page marked up as IndividualPhysician, linked to their office with practicesAt. Include only credentials you can document, and consider adding their NPI with the usNPI property.
Can I add my practice's star rating to schema?
No. Google considers ratings a business publishes about itself to be self-serving reviews, even when patients wrote them. Show reviews as visible page content and leave your Business Profile rating to Google.
Is schema markup required to appear in Google AI Overviews?
No. Google states that structured data is not required for its generative AI features and that there is no special markup to add. It still recommends structured data for rich result eligibility, and it can help engines read your details accurately.
Is there HIPAA risk in schema markup?
Schema should describe the practice and its public information only. Never put patient information, testimonials that identify patients without written authorization, or anything clinical about an individual into markup or onto public pages.
Want to know how AI assistants describe your practice today? The free PracticeRank audit checks your schema and your visibility in ChatGPT, Gemini, Claude, Perplexity and Grok. See also why most medical practices are missing from AI answers and how we work with medical practices.