Skip to main content
NewNMC’s advertising guidelines for doctors are in force from 6 Oct 2026. See what to change, and get a free compliance auditNew NMC advertising rules for doctors: what to change
SEO

Physician Schema That Links: sameAs, medicalSpecialty and hospitalAffiliation

How to build Physician structured data that links: stable IDs, enumerated specialty, shared hospital nodes, defensible sameAs and registration identifiers, plus an audit method.

Physician Schema That Links: sameAs, medicalSpecialty and hospitalAffiliation

This post is for web developers, SEO leads and practice managers who maintain doctor profile pages and want the structured data on them to do something useful. It assumes you already know what JSON-LD is and have probably added a Physician or Person block to profile templates. The question is narrower: does the markup connect the doctor to the other places that describe them, and does it say the same thing as the visible page?

The markup that tends to be shipped is a name, an image and a URL. That is valid, and it does little. The valuable fields are the ones that link: sameAs to profiles elsewhere, medicalSpecialty as an enumerated value, hospitalAffiliation as a node that matches the hospital's own page, and an identifier for the doctor's registration. The most common failure is not a syntax error. It is a mismatch between the markup and the text on the page, or between one page and another.

We will build the node field by field, explain the choices and the traps, and finish with an audit you can run on a sample of your own profiles. We do not report results from client sites here, and we do not promise that markup will produce a rich result. It will not, for reasons explained below.

What this markup is for, and what it is not

Be clear about the purpose before choosing fields. Google's documentation for profile page markup is aimed at creators in online communities, and it asks for a Person or Organization as mainEntity, recommending sameAs and identifier on that entity. We know of no Google rich result specific to a physician profile. Schema.org's own Physician type is described as an individual physician or a physician's office considered as a medical organization.

So the realistic goal is entity clarity: helping machines tell that the doctor on your profile, the doctor in the hospital directory and the doctor on a society's member list are the same person, and what that person practises. That may help with disambiguation in search and AI systems. It does not replace the visible page, authorship signals or reviews, and it is not a ranking lever by itself. Our general notes on healthcare schema markup cover the wider set of types.

If you have not yet implemented the basics, start with the guides on healthcare schema implementation and advanced medical schema, then return here. A third overview, healthcare schema markup implementation, covers the same ground. This post is about one type and its links.

Step 1: Choose the type

Physician in schema.org inherits from MedicalOrganization, MedicalBusiness and LocalBusiness. That is awkward for a person, but it is how the vocabulary is built. Its own properties are availableService, hospitalAffiliation, medicalSpecialty, occupationalCategory and usNPI. The more specific IndividualPhysician type describes a single practitioner and adds practicesAt, a MedicalOrganization where they practise.

There are two defensible patterns.

Pattern A: a single Physician or IndividualPhysician node. Use this when the doctor is the subject of the page and you want medicalSpecialty and hospitalAffiliation directly on them. It is the simpler option and keeps the specialty fields where schema.org defines them.

Pattern B: a ProfilePage whose mainEntity is a Person, with a separate Physician or MedicalBusiness node for the practice. This suits sites that want the Google-documented ProfilePage structure and keep the practice details separate.

We usually choose Pattern A for hospital doctor directories, with the page itself described as a ProfilePage whose mainEntity points to the physician node by @id. Whichever you choose, decide once and apply it to every profile through the template.

Step 2: Give the node a stable identity

Set @id to the profile URL with a fragment, for example the page address followed by #physician. Every other node on the site that refers to this doctor, such as an article's author or a department page's employee list, should reuse that same @id. This is what turns many mentions into one entity.

Set url to the canonical profile URL. Make sure the canonical tag on the page agrees. If the profile exists at two addresses (a legacy path and a new one), fix the redirect before adding more markup.

Use name exactly as it appears in the page heading, including title if you display it. If the doctor is known under variants (Dr. R. K. Sharma, Rajesh Kumar Sharma), put the other forms in alternateName. This matters for matching, and it matters most for common Indian names, where several doctors share a name and city.

Step 3: Specialty as an enumerated value

medicalSpecialty takes a value from schema.org's MedicalSpecialty enumeration, not free text. Values include Cardiovascular, Dermatologic, Gynecologic and Pediatric. Use the enumeration value as a URL such as https://schema.org/Cardiovascular where the vocabulary has a fit, and say the rest in description and in the visible text.

Two rules prevent trouble. First, the enumerated value must correspond to what the page says. If the page lists "interventional cardiology" and "structural heart disease", the markup of Cardiovascular is a fair summary. It would not be fair to add Neurologic because the doctor has once published on stroke. Second, the vocabulary has no entry for every subspecialty or for Indian qualification names. Do not stretch an unrelated value to fit. Leave the subspecialty in plain text.

Step 4: Affiliation that matches the hospital's own page

hospitalAffiliation expects a Hospital. Do not give it a bare string. Give it a node with the hospital's @id, name and url, where the @id is the same one used on the hospital's own page. On a group site, that means the profile page, the hospital page and the department page all point to one Hospital node per facility.

Check three things:

  • The name in the markup is the name in the visible text. "Example Heart Institute" on the page and "Example Hospitals Pvt Ltd" in the markup is a mismatch.
  • A doctor who works at three facilities lists three affiliations only if the page lists the same three, with their clinic days.
  • If the doctor is a visiting consultant, say so in the visible text. Do not mark an affiliation that the hospital's own site does not support.

For practicesAt on IndividualPhysician, use the facility where the doctor sees patients. For many doctors this is the same node as hospitalAffiliation.

Want this applied to your practice? Get a free seo audit.

Book my free audit

Step 5: sameAs that you can defend

sameAs is a list of URLs of pages that unambiguously describe this same person. Recommended sources, where they exist and are accurate, are:

  • the doctor's profile on the hospital's own domain, if the page you are marking up is on a different one;
  • the doctor's page on a professional society's member directory;
  • an author page in PubMed, Google Scholar or ORCID, if the doctor publishes;
  • a verified professional profile, such as LinkedIn;
  • a Wikipedia or Wikidata entry, only if it actually exists and is about this person.

Do not include third-party listing sites that scrape or auto-create profiles. Do not include pages about a different person with the same name. Do not link to profile pages that you do not control and cannot verify, since a wrong sameAs merges two people in a machine's view.

Every URL in sameAs should also be visible to a human, on the page, as a link: "Publications", "Society membership", "LinkedIn". If a link is in the markup only, someone should be able to explain why.

Step 6: Registration, without inventing a property

Schema.org has usNPI on Physician for the US National Provider Identifier. India has no equivalent property in the vocabulary. The National Medical Commission maintains the Indian Medical Register, where registered doctors can be found by name, registration number, year and State Medical Council.

For a registration number, the cleanest option within the vocabulary is the generic identifier property, using a PropertyValue with propertyID set to a descriptive label (for example "State Medical Council registration number"), value set to the number and, if you wish, a note of the council in description. A more formal option is hasCredential, which schema.org defines for a Person or Organization and which expects a Credential. Either is a modelling choice, not a standard, and no consumer is guaranteed to read it. Treat it as documentation that matches the page.

Three cautions apply. Publish a registration number only if the visible page shows it and the doctor consents. Make sure it is correct and current, by checking it against the register. And remember that the National Medical Commission replaced the Medical Council of India in 2020, so profile text should say NMC and State Medical Council, not the old name. Our NMC compliance handbook explains what a doctor's online profile may state.

Step 7: Keep the markup and the page in step

The fastest way to lose the value of all this is to let the two drift apart. Generate the JSON-LD from the same data record that renders the page: name, specialty, qualifications, affiliations, languages and links come from one source. Never hand-edit markup separately.

Fields that should not be in the markup unless they are on the page: qualifications and awards, languages, opening hours, isAcceptingNewPatients, and any ratings. Reviews and rating values deserve particular care. Marking up self-collected ratings on a profile page can fall foul of Google's guidance on review markup, so check the current documentation before using aggregateRating for a doctor.

Step 8: Audit a sample of profiles

This is the method for a crawl-and-compare sample, which you can run on any site. It is also how we would use client Search Console and crawl data: the steps are the same, and we are not reporting figures here.

  1. Crawl the site with JavaScript rendering on, and extract JSON-LD with a custom extraction rule. Take a random sample of at least 30 profile pages across departments and locations.
  2. For each page, extract name, specialty, affiliation, sameAs and identifier from the markup, and from the visible text.
  3. Mark each field as match, mismatch, missing in markup or missing on page.
  4. Check that each @id appears once as a definition and is referenced consistently elsewhere.
  5. Test every sameAs URL: it should return a 200 status, load a page about this person and not redirect to a generic home page.
  6. Validate with the Schema Markup Validator, keeping in mind that the Rich Results Test only checks features Google supports.
  7. In Search Console, filter queries containing the doctor's name for a sample of doctors. Note which URL ranks, whether it is the profile you expect, and whether the knowledge panel or any other site outranks it. Use this as a diagnostic, not a score.

Group the mismatches by cause: template, data entry, or old duplicate pages. Template errors are fixed once. Data entry errors need an owner. Duplicates need redirects.

Failure modes to expect

One name, two doctors. Two doctors with the same name at one hospital, with profiles that share sameAs links. Separate by adding the specialty and distinct links, and never copy a template's example links across profiles.

Stale affiliations. A doctor leaves, the profile is retained for the archive, and the markup still shows the old hospital. Remove or update the affiliation, and consider noting the departure in the visible text.

Specialty drift. A marketing edit changes the page text but not the template's static specialty value.

Over-claiming. Markup for awards, memberships or credentials that cannot be verified. Leave out what you cannot prove.

Different pages, different facts. The profile says one set of qualifications, the department page another. Resolve at source.

A build checklist

  • One node per doctor with a stable @id and canonical url.
  • name and alternateName match the visible heading.
  • medicalSpecialty uses an enumerated value that the page supports.
  • hospitalAffiliation and practicesAt refer to shared Hospital nodes.
  • sameAs contains only verified, human-visible links.
  • Registration number, if shown, is in identifier or hasCredential and checked against the register.
  • JSON-LD is generated from the same record as the page text.
  • A 30-page sample audit is repeated every quarter.

For help applying this to a hospital directory, see our medical entity SEO service, and our notes on provider bio pages for the page itself.

Filed underPhysician schema markupPhysician schema markupdoctor profile schemasameAs medicalSpecialty hospitalAffiliationIndividualPhysician schemadoctor profile structured data India

About the author

Co-Founder & CTO · Gurugram, India

Arush builds the systems the rest of the company runs on — the patient-acquisition pipelines, the AI chatbots, the analytics that tie a single click to a booked appointment. If a campaign reports a number, it's because something his team built is tracking it.

Free guide · 17 pages

The Patient Acquisition Blueprint

A 90-day plan from first search to booked appointment.

The Pioneers Brief — one essay, three benchmarks, one teardown, every Thursday. Subscribe free →

Free seo audit

Your next chapter starts with a conversation.

Three quick questions. We come prepared with a plan for your specialty and city.

  • A 30-minute call with a healthcare specialist
  • Your top three growth opportunities, in writing
  • Honest advice — even if that means not hiring us
  • No obligation and no hard sell
You’ll speak with a senior strategist
Consultations are hosted by Arush Thapar’s team.
Step 1 of 3Takes 30 seconds

What do you want to improve first?

Details stay privateNo obligationReply within 1 working day

Client portfolio · Healthcare websites

Work relevant to physician schema that links sameas medicalspecialty and.

Explore client work →