Physician schema markup implementation is the process of embedding structured JSON-LD data into a medical practice website so that search engines and AI systems can reliably identify individual doctors as named entities, understand their specialties, and connect them to the organization they work within. When implemented correctly, this structured data improves how your practice appears in rich results, strengthens local search signals, and positions physician profiles as citable sources in AI-generated answers. This guide walks through the complete implementation process, from writing the JSON-LD to validating it in production.
What Physician Schema Actually Does
The Physician type in Schema.org is a subtype of MedicalBusiness, which itself sits under LocalBusiness. This hierarchy matters because it tells search engines not just that a page describes a person, but that the person is a licensed medical practitioner operating within a specific healthcare context.
Adding Physician schema to a doctor's profile page accomplishes several concrete things. It gives search engines a structured definition of the doctor's name, specialty, credentials, and affiliated organization. It connects that doctor entity to your practice's MedicalOrganization or MedicalClinic record, creating a verifiable graph of relationships. And it surfaces the structured data to AI retrieval systems that increasingly rely on healthcare schema markup to answer queries like "Who is a cardiologist near me?" or "What does Dr. [Name] specialize in?"
Medical schema is one of the more complex implementations in the broader landscape of schema types for medical websites, largely because it involves multiple interconnected entity types rather than a single block of structured data.
Step 1: Identify the Pages That Need Schema
Before writing a single line of JSON-LD, map which pages will carry which schema types.
Physician Profile Pages
Every individual doctor's profile page should carry a Physician block. If your practice has a team page that lists all doctors together on one URL, create separate profile pages for each physician. A single Physician block per URL is the correct implementation. Attempting to nest multiple physician records into one page's schema creates parsing ambiguity.
The Practice or Organization Page
Your homepage or main "About" page should carry either a MedicalClinic or MedicalOrganization block, depending on what the practice is. Use MedicalClinic for outpatient clinical practices. Use MedicalOrganization for hospitals, health systems, or non-clinical medical organizations. This organization entity is what you will reference when linking individual physicians to the practice in Step 4.
Condition or Service Pages
Pages that describe specific conditions or treatments benefit from MedicalCondition or MedicalProcedure schema. These are covered separately in the broader healthcare structured data implementation guide for this cluster. Keep this guide's focus on the physician and organization layers.
Step 2: Gather the Required and Recommended Properties
Well-formed Physician schema requires specific properties. Missing required fields produces warnings in Google's validation tools. Missing recommended fields leaves entity gaps that reduce citation confidence in AI systems.
Required Properties for Physician
| Property | Description | Example Value |
|---|---|---|
@type |
Schema type identifier | "Physician" |
name |
Full legal name as displayed on credentials | "Dr. Sarah J. Chen, MD" |
url |
Canonical URL of the physician's profile page | "https://example.com/doctors/sarah-chen" |
address |
PostalAddress object with full practice address |
See Step 3 |
Recommended Properties for Physician
| Property | Description | Example Value |
|---|---|---|
medicalSpecialty |
Schema.org medical specialty type | "Cardiology" |
telephone |
Direct or practice phone number | "+12125550100" |
image |
URL to a professional headshot | "https://example.com/images/dr-chen.jpg" |
description |
Brief bio (2–3 sentences) | Plain text, no HTML |
hasCredential |
Degrees, board certifications | EducationalOccupationalCredential object |
worksFor |
Link to the MedicalOrganization entity |
@id reference to the organization block |
alumniOf |
Medical school attended | CollegeOrUniversity object |
sameAs |
Authoritative external profile URLs | Doximity, Healthgrades, state board listing |
The sameAs property deserves particular attention. Providing links to the physician's verified profiles on Doximity, Healthgrades, or a state medical board listing tells AI systems that this entity is recognized across multiple authoritative sources. This is one of the strongest signals for building entity authority that AI systems recognize.
Step 3: Write the Physician JSON-LD Block
Place all schema in a <script type="application/ld+json"> tag within the <head> of the physician's profile page. Do not use microdata or RDFa for new implementations. JSON-LD is Google's preferred format and the only format that can be cleanly updated without touching visible page content.
Here is a complete, production-ready Physician JSON-LD block:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Physician",
"@id": "https://example.com/doctors/sarah-chen#physician",
"name": "Dr. Sarah J. Chen, MD",
"url": "https://example.com/doctors/sarah-chen",
"image": "https://example.com/images/dr-sarah-chen.jpg",
"telephone": "+12125550100",
"description": "Dr. Sarah J. Chen is a board-certified cardiologist at Riverside Medical Group specializing in preventive cardiology and heart failure management. She completed her fellowship at Johns Hopkins Hospital.",
"medicalSpecialty": {
"@type": "MedicalSpecialty",
"name": "Cardiology"
},
"address": {
"@type": "PostalAddress",
"streetAddress": "145 West 57th Street, Suite 800",
"addressLocality": "New York",
"addressRegion": "NY",
"postalCode": "10019",
"addressCountry": "US"
},
"hasCredential": [
{
"@type": "EducationalOccupationalCredential",
"credentialCategory": "degree",
"name": "Doctor of Medicine",
"educationalLevel": "MD"
},
{
"@type": "EducationalOccupationalCredential",
"credentialCategory": "certification",
"name": "Board Certified in Cardiovascular Disease",
"recognizedBy": {
"@type": "Organization",
"name": "American Board of Internal Medicine"
}
}
],
"alumniOf": {
"@type": "CollegeOrUniversity",
"name": "Columbia University Vagelos College of Physicians and Surgeons"
},
"worksFor": {
"@id": "https://example.com/#organization"
},
"sameAs": [
"https://www.doximity.com/pub/sarah-chen-md",
"https://www.healthgrades.com/physician/dr-sarah-chen",
"https://profiles.health.ny.gov/physician/view/sarah-chen"
]
}
</script>
Three implementation details matter here. First, the @id value on the physician block uses a fragment identifier (#physician). This gives the entity a stable, referenceable IRI that other schema blocks can point to. Second, the worksFor property does not repeat the full organization object – it uses an @id reference to pull in the organization entity defined elsewhere. Third, medicalSpecialty is wrapped as a MedicalSpecialty object rather than a plain string, which provides stronger type signal to parsers.
Step 4: Write the MedicalOrganization or MedicalClinic Block
The physician's worksFor reference only creates a relationship if the organization entity it points to actually exists in your structured data. Place this block in the <head> of your homepage or practice's main page.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "MedicalClinic",
"@id": "https://example.com/#organization",
"name": "Riverside Medical Group",
"url": "https://example.com",
"logo": "https://example.com/images/logo.png",
"image": "https://example.com/images/clinic-exterior.jpg",
"telephone": "+12125550100",
"description": "Riverside Medical Group is a multispecialty outpatient clinic serving Manhattan and the surrounding boroughs, with expertise in cardiology, internal medicine, and sports medicine.",
"address": {
"@type": "PostalAddress",
"streetAddress": "145 West 57th Street",
"addressLocality": "New York",
"addressRegion": "NY",
"postalCode": "10019",
"addressCountry": "US"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 40.7649,
"longitude": -73.9799
},
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "08:00",
"closes": "18:00"
}
],
"medicalSpecialty": [
{"@type": "MedicalSpecialty", "name": "Cardiology"},
{"@type": "MedicalSpecialty", "name": "Internal Medicine"}
],
"sameAs": [
"https://www.google.com/maps/place/Riverside+Medical+Group",
"https://www.healthgrades.com/group-directory/ny-new-york/riverside-medical-group"
]
}
</script>
The @id value on this organization block – "https://example.com/#organization" – must match exactly what the physician's worksFor field references. A mismatch breaks the entity relationship silently: validators may not flag it, but AI systems and knowledge graph parsers will not connect the two entities.
For practices with multiple locations, create a separate MedicalClinic block for each location, each with its own @id. Physician blocks then reference the specific location where they practice.
If you are managing schema across multiple practice locations or client sites, the agency-scale schema management approach covers efficient systems for keeping these records synchronized.
Step 5: Link Multiple Physicians to the Organization
When a practice has several physicians, each doctor gets their own Physician block on their own profile page. Each block uses the same worksFor @id reference pointing back to the organization. The organization block can optionally list its physicians using the employee or member property, though this is recommended rather than required.
Add the following to your MedicalClinic or MedicalOrganization block to create the reverse relationship:
"member": [
{
"@id": "https://example.com/doctors/sarah-chen#physician"
},
{
"@id": "https://example.com/doctors/james-okafor#physician"
}
]
This bidirectional relationship – each physician referencing the organization, and the organization listing its physicians – creates a coherent entity graph. AI systems that retrieve information about either entity can traverse the relationship in both directions. Tools like AuthorityStack.ai's AI-powered schema generator handle this bidirectional linking automatically by reading and understanding full page content rather than pattern-matching on keywords, which matters for healthcare implementations where the relationships between entities are complex.
Step 6: Handle Common Edge Cases
Group Practice With a Single Phone Number
If all physicians share a central phone number, the telephone property on each Physician block can match the organization's number. Do not fabricate individual direct lines. Accurate data is more valuable than completeness for fields you cannot verify.
Telemedicine or Multi-State Practices
For physicians licensed across multiple states, include multiple address entries only if the physician has a physical presence at each location. A physician who sees patients via telemedicine from a single office still has one address. Do not list service areas as physical addresses.
Physicians With Multiple Specialties
The medicalSpecialty property accepts an array. List each specialty as a separate MedicalSpecialty object:
"medicalSpecialty": [
{"@type": "MedicalSpecialty", "name": "Internal Medicine"},
{"@type": "MedicalSpecialty", "name": "Geriatric Medicine"}
]
Inactive or Departed Physicians
When a physician leaves the practice, remove or update their schema block. Do not leave structured data referencing a physician who no longer works for the organization. Stale entity data degrades trust signals for the entire domain. The risks of maintaining incorrect schema – while not penalties in the traditional sense – are documented in the broader schema accuracy and site trust context.
Step 7: Add FAQ Schema to Physician Profile Pages
Physician profile pages frequently attract informational queries: "Does Dr. Chen accept Medicare?" or "Is Dr. Okafor taking new patients?" Adding FAQPage schema to profile pages captures this demand in rich results and makes answers directly extractable by AI systems.
The complete approach to implementing this schema type is covered in the FAQ schema implementation guide. For physician pages specifically, target three to five questions that patients actually search: insurance acceptance, new patient availability, languages spoken, hospital affiliations, and telehealth availability.
Place the FAQPage block as a separate JSON-LD script on the same profile page as the Physician block. Multiple schema types on one page are valid and expected.
Step 8: Validate With Google Rich Results Test and Schema Markup Validator
Validation catches syntax errors, missing required fields, and type mismatches before they reach production. Use two separate tools because each checks different things.
Google Rich Results Test
Navigate to search.google.com/test/rich-results and enter the URL of a physician profile page. This tool shows which rich result types the page is eligible for and flags any errors or warnings specific to Google's implementation requirements. For Physician schema, expect to see eligibility for local business rich results.
Schema.org Markup Validator
The Schema.org validator at validator.schema.org checks conformance against the Schema.org specification itself, independent of Google's specific requirements. Paste your raw JSON-LD into the code input field. This tool surfaces issues that Google's test may not flag, including incorrect property types and invalid @id formats.
What to Look for in Validation Results
Errors require fixing before deployment. Warnings should be reviewed and resolved where data is available. The most common issues in physician schema implementations are:
addressmissingaddressCountrymedicalSpecialtyprovided as a plain string instead of aMedicalSpecialtyobjectworksFor@idnot matching the organization's declared@idsameAsURLs pointing to non-canonical or redirecting pages
After validating individual pages, check validation results after any CMS update or template change. Schema blocks embedded in templates can break silently when template variables change. The complete structured data validation and error resolution workflow covers monitoring at scale.
Step 9: Deploy and Monitor for Indexing
After validation passes, deploy the updated pages. Schema changes typically appear in Google Search Console within one to two weeks, though indexing timelines vary by crawl frequency and site authority.
Check Search Console for Structured Data Reports
In Google Search Console, navigate to Enhancements to find any schema-specific reports. Local business schema errors appear here. If the Physician type does not generate a dedicated report, the absence does not indicate failure – not all schema types produce their own Search Console section.
Monitor for Rich Result Appearance
Search for the physician's name directly in Google to observe whether knowledge panel elements or structured snippets begin appearing. Run the Rich Results Test again on live URLs after deployment to confirm the live page's rendered HTML includes the schema correctly – some CMS configurations serve schema in the source but strip it from rendered output.
Track AI Citation Changes
Schema implementation directly affects how AI systems describe your physicians and practice in generated answers. The relationship between schema markup and AI search visibility is well-established: structured data gives AI retrieval systems the entity-level signal needed to cite specific practitioners by name, specialty, and affiliation. Monitoring which AI platforms cite your physicians, and how accurately they describe them, provides the feedback loop that tells you whether the implementation is working.
FAQ
What Is the Difference Between Physician, MedicalClinic, and MedicalOrganization in Schema.org?
Physician is a Schema.org type representing an individual licensed medical doctor. MedicalClinic represents an outpatient facility where medical care is delivered directly to patients, such as a private practice or specialty clinic. MedicalOrganization is the broader parent type that covers hospitals, health systems, and medical associations that may not operate a clinic directly. Most private practices use MedicalClinic for the organization entity and Physician for each individual doctor.
Do I Need a Separate Page for Each Physician to Implement Schema Correctly?
Yes. Each Physician schema block should be placed on a dedicated profile page for that doctor. Embedding multiple Physician blocks on a single team page creates entity ambiguity and reduces the quality of structured data signals. Search engines and AI systems assign schema signals to individual URLs, so each physician needs their own canonical URL to receive full structured data credit.
Which Properties in Physician Schema Are Required by Google?
Google does not currently list Physician as a rich result type with its own required field specification, but it processes Physician as a subtype of LocalBusiness. For reliable parsing, name, url, address (as a complete PostalAddress object), and @type should be treated as required. Google's Rich Results Test flags missing properties that affect eligibility for local business enhancements.
How Do I Connect a Physician's Schema to the Practice's Organization Schema?
Use the worksFor property in the Physician block, pointing to the @id of the MedicalClinic or MedicalOrganization block. The @id in both blocks must be an exact string match. On the organization side, optionally include a member array listing the @id values of each physician to create a bidirectional entity relationship.
Can I Use Schema.org's medicalSpecialty With Any Specialty Name?
Schema.org defines a MedicalSpecialty enumeration with a set of recognized values including Cardiology, Dermatology, Neurology, Pediatrics, and others. Using recognized enumeration values produces stronger structured data signals than arbitrary strings. For specialties not covered by the enumeration, use a MedicalSpecialty object with a plain-text name rather than omitting the property entirely.
Will Adding Physician Schema Directly Improve Search Rankings?
Physician schema does not directly alter ranking positions in traditional organic search. Structured data improves how search engines understand and represent your content, which can increase eligibility for rich results, improve click-through rates from enhanced SERP features, and strengthen entity signals that influence AI citation behavior. The relationship between schema markup and search performance is indirect but meaningful, particularly for local and knowledge graph signals.
How Often Should I Update Physician Schema?
Update physician schema immediately when any of these change: the physician's name, credentials, affiliated organization, practice address, telephone number, or sameAs profile URLs. Schema accuracy matters both for user trust and for entity consistency across the web. AI systems build their understanding of entities over time from multiple sources – a mismatch between your structured data and an external Doximity or Healthgrades profile degrades the confidence of that entity recognition.
Is JSON-LD the Only Format Supported for Physician Schema?
JSON-LD, Microdata, and RDFa are all technically valid formats per Schema.org. Google explicitly recommends JSON-LD because it can be placed in the <head> without altering visible page content, making it easier to update, deploy via tag managers, and validate independently of HTML structure. All new physician schema implementations should use JSON-LD. Microdata implementations from older builds can remain in place but should be migrated to JSON-LD when pages are rebuilt.
What to Do Now
- Audit existing pages. Identify every physician profile page on your site and confirm whether each has a dedicated URL, a
PhysicianJSON-LD block, and a validworksForreference. - Create or update the organization block. Ensure your homepage or practice page carries a
MedicalClinicorMedicalOrganizationblock with a stable@idthat all physician blocks can reference. - Collect `sameAs` URLs for each physician. Gather verified external profile links from Doximity, Healthgrades, and state medical board directories before deploying schema – these are the highest-value entity signals available.
- Validate every block using both Google's Rich Results Test and the Schema.org Markup Validator before pushing to production.
- Deploy and monitor. Check Google Search Console for structured data errors within two weeks of deployment and run a follow-up Rich Results Test on live URLs to confirm rendered output.
- Track AI citation results. Monitor how AI tools describe your physicians and practice after implementation, and adjust
description,sameAs, and specialty properties based on what the citations reflect.
For practices managing schema across many physician profiles or multiple clinic locations, generating and maintaining accurate JSON-LD at scale becomes the primary implementation challenge. The AuthorityStack.ai schema generator reads full page content to generate healthcare-specific JSON-LD, including Physician, MedicalClinic, and the complete Schema.org healthcare suite, removing the manual step of writing each block from scratch.
Generate JSON-LD Schemafor your physician profile pages and get your practice's structured data right the first time.

Comments
All comments are reviewed before appearing.
Leave a comment