Schema Markup for Dentists: The Complete 2026 Guide
Quick answer: a dental practice needs four schema types: Dentist for the practice, MedicalProcedure for each service, FAQPage for question content, and BreadcrumbList for navigation. Do not add aggregateRating to your own practice schema. That single block is the most common cause of a dental site losing its rich results.
Schema markup is the difference between a search engine reading your page and a search engine understanding it. Your homepage might clearly say you are a dentist in Westfield open until 5pm. Without markup, an engine has to infer all of that from prose. With markup, you state it in a format built for machines.
The four types that matter
1. Dentist (the practice itself)
This is the foundation. It goes on every page, and it is what tells Google and AI assistants what kind of business you are.
{
"@context": "https://schema.org",
"@type": "Dentist",
"@id": "https://example.com/#practice",
"name": "Bright Smile Dental",
"url": "https://example.com",
"telephone": "+15551234567",
"address": {
"@type": "PostalAddress",
"streetAddress": "120 Main Street",
"addressLocality": "Westfield",
"addressRegion": "NJ",
"postalCode": "07090",
"addressCountry": "US"
},
"geo": { "@type": "GeoCoordinates", "latitude": 40.659, "longitude": -74.347 },
"openingHoursSpecification": [{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"],
"opens": "08:00", "closes": "17:00"
}],
"medicalSpecialty": "Dentistry"
}
Two details people get wrong. @id should be a stable URL with a fragment, so other blocks on the site can reference the same practice instead of describing it again. And telephone should be in E.164 format (+15551234567), not the pretty version you display.
2. MedicalProcedure (one per service)
A practice with a single "Services" list ranks far worse than one with a dedicated page per procedure. Each of those pages should carry its own markup.
{
"@context": "https://schema.org",
"@type": "MedicalProcedure",
"name": "Dental Implants",
"procedureType": "https://schema.org/SurgicalProcedure",
"bodyLocation": "Jaw",
"provider": { "@id": "https://example.com/#practice" }
}
Note provider pointing back at the @id from the Dentist block. That is how you connect the procedure to the practice without repeating yourself.
3. FAQPage (the AEO workhorse)
This is the highest-leverage markup for AI visibility, and the one most practices skip. If you have a page answering common patient questions, marking it up gives assistants clean question and answer pairs to quote.
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [{
"@type": "Question",
"name": "Does a dental implant hurt?",
"acceptedAnswer": {
"@type": "Answer",
"text": "The procedure is done under local anaesthetic, so most patients feel pressure rather than pain."
}
}]
}
The answers must match what is visible on the page. Marking up answers a visitor cannot see is a policy violation.
4. BreadcrumbList
Small, easy, and frequently missing entirely. It tells engines where a page sits in your site structure and often shows up in the result itself.
The block that gets practices penalised
Here is the one to avoid:
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "5.0",
"reviewCount": "208"
}
That looks harmless. It is a real rating from real patients. It is also a policy violation when it appears on your own Dentist or LocalBusiness schema.
Google's structured data policy excludes self-serving reviews: a business may not publish ratings about itself in review markup. It does not matter that the rating is genuine or that it came from your Google Business Profile. The outcome ranges from the rich result being silently dropped to a manual action for spammy structured data.
We audit this across client sites regularly, and it is the single most common serious issue we find. Practices add it because it feels like an obvious win.
What to do instead: keep the reviews as visible content on the page. They still convert. Google already knows your Google Business Profile rating and will show it where appropriate, sourced directly rather than from your own claim about yourself.
How to check what you have
Three tools, in order of usefulness:
- Google Rich Results Test shows which rich result types your page qualifies for.
- Schema Markup Validator at validator.schema.org catches syntax errors the Google tool ignores.
- View source and search for
application/ld+json. Crude, but it tells you instantly whether your markup exists at all, and how many blocks you have. Duplicate or conflicting blocks are common on themes that ship their own schema.
FAQ
What schema markup do dentists need?
Four types: Dentist for the practice, MedicalProcedure for each individual service page, FAQPage for question and answer content, and BreadcrumbList for navigation. Dentist goes site wide; the others go on the relevant pages.
Should I add reviews to my dental schema?
No. Adding aggregateRating or review to your own practice schema is a self-serving review under Google's structured data policy, even when the ratings are genuine. Keep reviews as visible page content instead, and let Google source your rating from your Google Business Profile.
Does schema markup help with AI search?
Yes, and it matters more for AI assistants than for traditional search. An assistant answering "who is a good dentist in Westfield" has to parse and trust what it reads. Structured data gives it typed facts (name, location, hours, services) rather than prose it has to interpret.
Where does schema markup go on the page?
In a JSON-LD script tag in the page source. It can sit in the head or the body; Google reads both. JSON-LD is the format Google recommends, over microdata or RDFa.
How long until schema markup affects rankings?
Schema is not a direct ranking factor. It affects how your result is displayed and how confidently engines and assistants can describe you. Rich result changes typically appear within days to a few weeks of the next crawl.
Auditing your own markup? The free PracticeRank score checks your schema, AI visibility, and local presence in about two minutes. See also our guides on what AEO is and why practices go invisible to AI search.