Skip to content

Healthcare marketing

Healthcare schema markup: JSON-LD for clinics, doctors and medical pages

Which schema.org types to use for practices, doctors and health content, copy-ready JSON-LD examples, and what Google shows for each.

In this article11 sections
  1. Key takeaways
  2. Which schema type fits each page
  3. Mark up a dental practice
  4. Mark up a clinic with departments
  5. Mark up a doctor's bio page
  6. Mark up medical articles with MedicalWebPage
  7. FAQ and review markup: what changed
  8. Rules that keep markup valid
  9. Connect practice, providers and pages into one picture
  10. Test your markup
  11. FAQ

Healthcare schema markup is structured data, usually written in JSON-LD, that tells search engines and AI systems exactly what your page describes: a dental practice, a physician, a clinic department or a reviewed medical article. Use the most specific schema.org type that fits (Dentist, MedicalClinic, Physician), fill in the name, address, phone, hours and specialty, and make sure every value matches what patients can see on the page.

Schema will not lift a weak page to the top on its own. What it does is remove guesswork: Google, ChatGPT and other systems read your practice's facts in a structured form, and some markup makes you eligible for rich results in Google.

Which schema type fits each page

Pageschema.org typeKey propertiesGoogle rich result
Dental practice locationDentistname, address, telephone, openingHoursSpecification, geo, urlSupports local business data
Multi-specialty or primary care clinicMedicalClinicas above, plus medicalSpecialty, departmentSupports local business data
Single-doctor practicePhysicianas above, plus medicalSpecialty, usNPI, hospitalAffiliationSupports local business data
HospitalHospitalas above, plus department, availableServiceSupports local business data
Specialty practice (dermatology, optometry, psychiatry)The matching MedicalBusiness subtype, e.g. Optician, Psychiatricas aboveSupports local business data
Condition or treatment articleMedicalWebPageabout, reviewedBy, lastReviewed, authorNone specific
Provider bioPhysician (or Person for non-physicians)name, medicalSpecialty, hospitalAffiliation, imageNone specific
FAQ sectionFAQPagemainEntity of Question and AnswerOnly for authoritative government and health sites
Every pageBreadcrumbListitemListElementBreadcrumb trail in results

schema.org places Physician, Dentist and MedicalClinic under both MedicalBusiness (a kind of LocalBusiness) and MedicalOrganization (schema.org). That means they can use local business properties such as openingHoursSpecification and medical properties such as medicalSpecialty and isAcceptingNewPatients.

Mark up a dental practice

This example is a template: replace every bracketed value with your real details, exactly as shown on the page.

{
  "@context": "https://schema.org",
  "@type": "Dentist",
  "@id": "https://www.[your-domain].com/locations/[city]/#practice",
  "name": "[Practice name as on your signage]",
  "url": "https://www.[your-domain].com/locations/[city]/",
  "telephone": "+1-[555-555-5555]",
  "image": "https://www.[your-domain].com/images/[front-entrance].jpg",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "[123 Main St, Suite 200]",
    "addressLocality": "[City]",
    "addressRegion": "[State]",
    "postalCode": "[ZIP]",
    "addressCountry": "US"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": "[latitude]",
    "longitude": "[longitude]"
  },
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday"],
      "opens": "08:00",
      "closes": "17:00"
    },
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": "Friday",
      "opens": "08:00",
      "closes": "13:00"
    }
  ],
  "medicalSpecialty": "https://schema.org/Dentistry",
  "isAcceptingNewPatients": true,
  "sameAs": [
    "[Your Google Business Profile URL]",
    "[Your Healthgrades or Zocdoc profile URL]"
  ]
}

Notes:

  • Put this on the location page, one block per location. Group practices repeat it on each location page with that location's details.
  • Use sameAs to link the profiles that describe the same practice. This helps systems connect your website to your directory listings.
  • medicalSpecialty takes a value from schema.org's MedicalSpecialty list, such as Dentistry, Pediatric or Dermatology.
  • Keep hours in sync with your Google Business Profile. Mismatched hours across sources confuse both patients and search engines.

Mark up a clinic with departments

Google lists department as a recommended property for local businesses (Google Search Central). Use it when a location has distinct units with their own hours or phone numbers, the same test Google uses for separate Business Profiles.

{
  "@context": "https://schema.org",
  "@type": "MedicalClinic",
  "name": "[Clinic name]",
  "url": "https://www.[your-domain].com/",
  "telephone": "+1-[555-555-0100]",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "[456 Health Pkwy]",
    "addressLocality": "[City]",
    "addressRegion": "[State]",
    "postalCode": "[ZIP]",
    "addressCountry": "US"
  },
  "medicalSpecialty": [
    "https://schema.org/PrimaryCare",
    "https://schema.org/Pediatric"
  ],
  "department": [
    {
      "@type": "MedicalClinic",
      "name": "[Clinic name] Urgent Care",
      "telephone": "+1-[555-555-0101]",
      "openingHours": "Mo-Su 08:00-20:00"
    },
    {
      "@type": "DiagnosticLab",
      "name": "[Clinic name] Lab Services",
      "telephone": "+1-[555-555-0102]",
      "openingHours": "Mo-Fr 07:00-15:00"
    }
  ]
}

Mark up a doctor's bio page

For a provider bio, use Physician with the doctor's details. schema.org also has IndividualPhysician with a practicesAt property linking the doctor to a clinic; it currently sits in schema.org's development version (schema.org), so check validator support before relying on it.

{
  "@context": "https://schema.org",
  "@type": "Physician",
  "name": "[Dr. First Last, MD]",
  "url": "https://www.[your-domain].com/providers/[first-last]/",
  "image": "https://www.[your-domain].com/images/providers/[first-last].jpg",
  "medicalSpecialty": "https://schema.org/Dermatology",
  "usNPI": "[10-digit NPI]",
  "hospitalAffiliation": {
    "@type": "Hospital",
    "name": "[Hospital name]"
  },
  "telephone": "+1-[555-555-5555]",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "[123 Main St]",
    "addressLocality": "[City]",
    "addressRegion": "[State]",
    "postalCode": "[ZIP]",
    "addressCountry": "US"
  }
}

The usNPI property takes the 10-digit National Provider Identifier, which is public in the NPI registry. Only include facts that also appear in the visible bio.

Mark up medical articles with MedicalWebPage

For condition and treatment pages, MedicalWebPage states what the page is about and who reviewed it. schema.org defines reviewedBy as the person or organization that reviewed the content for accuracy or completeness, and lastReviewed as the date of that review (schema.org).

{
  "@context": "https://schema.org",
  "@type": "MedicalWebPage",
  "name": "Plantar fasciitis: causes, treatment and recovery",
  "url": "https://www.[your-domain].com/conditions/plantar-fasciitis/",
  "about": {
    "@type": "MedicalCondition",
    "name": "Plantar fasciitis"
  },
  "medicalAudience": {
    "@type": "MedicalAudience",
    "audienceType": "Patient"
  },
  "author": {
    "@type": "Person",
    "name": "[Author name]"
  },
  "reviewedBy": {
    "@type": "Physician",
    "name": "[Dr. Reviewer Name, DPM]"
  },
  "lastReviewed": "2026-09-15",
  "publisher": {
    "@type": "MedicalClinic",
    "name": "[Clinic name]"
  }
}

Google offers no MedicalWebPage rich result. The value is consistency: the reviewer and date in the markup match the "medically reviewed by" line on the page, which is the trust signal described in healthcare SEO best practices.

FAQ and review markup: what changed

FAQ rich results

In August 2023 Google announced that FAQ "rich results will only be shown for well-known, authoritative government and health websites" (Google Search Central). Its FAQPage documentation carries the same restriction. A large hospital system might still qualify; a single clinic rarely will.

FAQPage markup remains valid schema.org and does no harm. Keep FAQ sections on service pages for patients and for AI answers, and add the markup if it is easy, without expecting the expandable result in Google.

{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "Do you accept new patients?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "[Your answer, matching the visible text on the page.]"
      }
    }
  ]
}

Review stars

Google's review snippet guidelines say that when "the entity that's being reviewed controls the reviews about itself," its pages using LocalBusiness or Organization markup "are ineligible for star review feature" (Google Search Central). Testimonials on your own site won't produce stars. For a clinic, stars show on the Google Business Profile, which depends on Google reviews: see healthcare reputation management.

Rules that keep markup valid

Google's structured data policies apply to every type:

  1. Mark up only what patients can see. "Don't mark up content that is not visible to readers of the page."
  2. Be accurate. Hours, address and phone must match the page and your Google Business Profile.
  3. Use JSON-LD. Google recommends it, and it sits in one script block that's easy to maintain.
  4. Don't expect a guarantee. Google says it "does not guarantee that your structured data will show up in search results."
  5. One entity per thing. Give each practice and location a stable @id and reuse it, so the same clinic isn't described three different ways.

On WordPress, plugins such as Yoast SEO and Rank Math generate basic Organization and Article markup; medical types usually need a custom block or a schema plugin. See WordPress SEO plugins for medical sites.

Connect practice, providers and pages into one picture

Separate blocks on separate pages work, but they are stronger when they point at each other. The @id property gives each entity a permanent identifier (usually its URL plus a fragment such as #practice), and other blocks can reference it.

A practical pattern for a group practice:

EntityLives on@idReferences
The organisationHomepagehttps://www.[your-domain].com/#orgsameAs to social and directory profiles
Each locationLocation page.../locations/[city]/#practiceparentOrganization pointing to #org
Each providerBio page.../providers/[first-last]/#physicianAddress of the location where they practise
Each articleArticle pagePage URLpublisher pointing to #org, reviewedBy pointing to a #physician

Rolling this out in order:

  1. Location pages first. They support Google Maps and "near me" searches, where many new-patient searches start. See Google Maps for healthcare.
  2. Provider bios next. They back up the "reviewed by" lines on your clinical content.
  3. Medical articles last, as a template change that applies to every condition and treatment page at once.

Clear, connected facts also help AI assistants that recommend local providers, because the same name, address, specialty and reviewer appear consistently. More in AI and medical SEO.

Test your markup

ToolWhat it checksLink
Rank.ai schema validatorParses JSON-LD and flags missing or invalid properties/free-tools/schema-validator
Google Rich Results TestWhether a page is eligible for Google rich resultssearch.google.com/test/rich-results
Schema Markup ValidatorValidates any schema.org type, including MedicalWebPagevalidator.schema.org
Search Console enhancementsErrors across the whole site after Google crawls itSearch Console, Enhancements section

Run the schema validator on each template (location, provider, article) after any site change, then watch Search Console for errors. For the full technical checklist, use the technical SEO audit template.

FAQ

What is schema markup in healthcare SEO?

Schema markup is code, usually JSON-LD, that describes a page's content using the schema.org vocabulary. For healthcare it identifies practices (Dentist, MedicalClinic, Physician), providers and medical content, with details such as address, hours, specialty and medical reviewer. It helps search engines and AI systems read your facts accurately.

What schema type should a medical practice use?

Use the most specific type that fits. A dental office uses Dentist, a primary care or multi-specialty clinic uses MedicalClinic, a single-physician practice can use Physician, and specialties such as optometry or psychiatry have their own MedicalBusiness subtypes. Google's guidance is to use the most specific LocalBusiness subtype possible.

Do FAQ rich results still work for medical websites?

Only for well-known, authoritative government and health websites, under Google's August 2023 change. Most individual practices will not see FAQ rich results. FAQ markup is still valid and the content still helps patients and AI answers.

Does schema markup improve rankings?

Google does not describe structured data as a ranking factor, and it does not guarantee rich results. Schema helps Google understand your page and makes you eligible for features such as breadcrumbs and local business details. Its main value for clinics is accurate, machine-readable facts across search and AI systems.

Is MedicalWebPage schema worth adding?

It produces no Google rich result, but it states what the page is about, who reviewed it and when, in a form machines can read. If your pages already show a medical reviewer and review date, the markup takes a few minutes per template. Keep the markup and the visible byline in sync.

See if AI names you when customers ask who’s best.

Enter your website. In about two minutes, Rank.ai asks ChatGPT, Claude and Gemini 12 questions your customers ask and grades how often they name you.

  • Your grade out of 100How often AI names you, cites your site, and how high it ranks you.
  • Who gets namedEvery competitor in the answers, most named first.
  • The pages AI readsThe sources behind each answer.
  • Three fixesWhat to fix first, with a brief for the first page.