This post is for the marketing lead, content manager or SEO owner at a hospital or hospital group who has found the same doctor listed three times on the website, each page slightly different, each with its own URL. It happens when branches maintain their own pages, when a migration copies content instead of linking it, or when a template builds a profile per location. The result is split signals for search engines, conflicting information for patients and a maintenance burden for editors.
This article is about prevention. It describes the content model that keeps one doctor as one entity, the slug and canonical rules that follow, and an audit method for cleaning up an existing site. The front-end build is a separate topic, covered under our headless CMS service; here the focus is the model and the rules an editorial team can run.
The examples are hypothetical and use no real clinicians. Clinical details such as qualifications and scope of practice must be approved by the provider's clinical team and, for doctors in India, kept consistent with the NMC advertising rules; our NMC advertising guidelines explainer is the place to check what a doctor profile can say.
Start from entities, not pages
A hospital website describes real things: people, places, departments, procedures. Each should exist once in your content system, with an identity that does not change. Pages are views of those entities. When people say "we have four pages for Dr X", what they usually mean is that the entity was copied four times.
Four entities carry most of the load:
- Doctor: a person with one set of qualifications, one registration, one biography.
- Location: a physical site with an address, hours and phone.
- Department: a clinical grouping, often shared across locations.
- Procedure or condition: the thing a patient is searching for.
The relationships between them are where duplication starts. A doctor works in a department at a location. That is a three-way relationship, and it has its own attributes (days, booking link, room). Model it as its own record, usually called a placement or appointment slot group, and not as copies of the doctor.
| Relationship | Cardinality | Where the attributes live |
|---|---|---|
| Doctor to Location | many to many | On the placement: days, booking link, local phone |
| Doctor to Department | many to many | On the doctor profile: primary and secondary specialties |
| Location to Department | many to many | On a location-department record: local head, hours, notes |
| Department to Procedure | one to many | On the procedure |
| Procedure to Location | many to many | On a location-procedure record: equipment available, local contact |
If your CMS cannot model join records, the fallback is a reference field on the placement that points to the single doctor entry. Never copy the biography.
Identity: IDs, slugs and display names
Three different things get confused.
ID: an internal, permanent identifier. It never changes and never appears in a URL unless you choose so. Use it for joins, tags and redirects.
Slug: the URL segment. It must be unique, readable and stable once published.
Display name: how the doctor's name appears on the page. It can change (a new title, a spelling correction) without touching the ID.
Doctor names collide often, especially common surnames. A slug rule has to handle that predictably. A rule that works: slug equals name plus primary specialty, for example anil-sharma-cardiology. If that still collides, append the city, then a short numeric suffix as a last resort. Write the rule down, generate slugs automatically from it, and lock the slug after publication. If a name changes, the slug stays, or the new slug is created and the old one 301-redirects to it.
Do not put the location in a doctor's slug unless the doctor works at only one site, because it ties the identity to a placement that may change. Location context belongs in the page, in a section listing placements, and in the location pages that link to the doctor.
One canonical doctor page
Each doctor has one canonical URL, for instance /doctors/anil-sharma-cardiology. Every other surface that mentions the doctor links to it: location pages, department pages, article bylines, search results.
Branch needs are met without duplicating profiles:
- A location page includes a "doctors at this location" list with a card for each placement: photo, name, specialty, days at this site, and a booking link for this site. The card links to the canonical profile.
- The canonical profile lists all placements, so a patient who found the doctor via one branch can see the others.
- A booking link can carry the location as a parameter or path, so the booking system knows which site was chosen.
This resolves the usual internal argument. Each branch wants its doctors on its site. They are on it, as cards, with the local details that matter, without a second biography.
Canonical rules when duplicates exist
You may inherit duplicates, or have legitimate reasons for location-specific pages (for example, a doctor who runs a distinct clinic at one site with different services). Set rules before editors improvise.
Google describes several ways to specify a canonical URL: a 301 redirect is a strong signal that the target should be canonical, the rel="canonical" link element is also a strong signal, and a sitemap is a weak one. Google also states that it makes the final decision about which pages are duplicates, based on similarity of content, and recommends absolute rather than relative paths in the canonical element. So the canonical element is a hint you support with consistent content and links, not a command.
A decision table:
| Situation | Action |
|---|---|
| Two URLs, same doctor, same content | 301 the weaker URL to the canonical one, update internal links |
| Branch page repeats the group profile with only the address changed | Remove the page; show a placement card and link to the canonical profile |
| Branch page has genuinely different content (distinct clinic, different services) | Keep it, self-referencing canonical, link both ways, make the difference visible in the title and opening |
| Parameterised URLs from tracking, sorting or filters | rel="canonical" to the clean URL, and keep internal links pointing at the clean URL |
| Retired doctor profile | Keep a minimal page or 301 to the department, depending on whether the doctor still has inbound links and patient relevance; decide with the provider |
Be consistent between the canonical element and what the rest of the site says. If the canonical points to one URL while internal links, sitemaps and breadcrumbs point to another, you are sending mixed signals.




