Google Analytics for small business dashboard showing marketing performance metrics

Most treatment center websites we audit already have LocalBusiness structured data. Very few have markup that does what the owner thinks it does. The usual story: an SEO plugin was switched on years ago, it printed one block of JSON-LD with the headquarters address on every page, and nobody has looked at it since. Meanwhile the site added outpatient locations, a 24-hour admissions line and a Google reviews widget, and the markup now contradicts the page it sits on.

What LocalBusiness markup actually tells Google

LocalBusiness structured data on a treatment center website is a machine-readable statement of facts about one physical location: its name, street address, phone number, hours and coordinates. Google’s Local Business structured data documentation lists only two required properties, name and address, and recommends adding geo coordinates with a precision of at least 5 decimal places, a telephone number with country and area code, openingHoursSpecification and a working url for that specific location. The markup does not create a Google Business Profile, does not place a listing in the Maps results, and is ignored entirely if the page carries a structured data manual action. Its job is to confirm, on your own site, the same facts your Business Profile already states.

That last sentence is the part most sites get backwards. Structured data is a corroborating signal, not a substitute for a verified profile. If your Business Profile and your markup disagree on the phone number or the suite number, you have not added a signal. You have added a contradiction.

Pick the most specific type, and know what that means for treatment

Google tells site owners to use the most specific LocalBusiness sub-type possible. For a restaurant that is easy. For behavioral health it takes a decision. Schema.org has medical types under LocalBusiness, such as MedicalClinic and MedicalBusiness, but no type named for residential treatment, detox or intensive outpatient programs. In practice, MedicalClinic fits most licensed outpatient and residential programs that deliver clinical care at the address. A sober living home that provides housing but no clinical services is not a clinic, and marking it up as one is the kind of misrepresentation Google’s guidelines warn against.

If a location legitimately fits more than one type, Google’s documentation says to list them as an array in @type. It also states plainly that additionalType is not supported, which matters because some plugins and hand-built templates still write the secondary type into additionalType, where Google will not use it.

The five mistakes we see most on behavioral health sites

These are the patterns that come up again and again when we review treatment center markup. None of them throws a validator error, which is why they survive for years.

  • Sitewide headquarters markup: one LocalBusiness block with the main campus address is printed on every page, including the pages for other locations, so each location page tells Google it is about a building somewhere else.
  • Call tracking numbers in the telephone field: the telephone property holds a tracking number that rotates or differs from the number on the Business Profile, so the two sources never agree on the primary contact method.
  • Admissions hours posing as facility hours: the markup says open 24 hours, seven days a week, because the admissions line is staffed around the clock, while the outpatient office on the same page lists weekday hours.
  • Self-serving star ratings: an aggregateRating is generated from an embedded Google reviews widget, which Google’s review snippet rules make ineligible for stars on your own LocalBusiness pages.
  • Markup for content that is not on the page: the JSON-LD lists an address, hours or services that a visitor cannot see anywhere in the visible HTML.

One location, one page, one block of markup

Google’s general structured data guidelines say to put structured data on the page it describes, that it must be a true representation of the page content, and not to mark up content that is not visible to readers of the page. For a multi-location program, that means each location gets its own page, and each page carries one LocalBusiness block describing that location only, with that location’s address, phone, hours, coordinates and the page’s own URL in the url property.

The homepage or an About page can carry Organization markup for the parent company. The homepage should not claim to be every location at once. When we rebuild location pages as part of a web design project, this is the structure we start from, because it keeps the visible page, the markup and the Business Profile saying the same thing.

Phone numbers, hours and the 24/7 problem

Google’s documentation defines the telephone property as the business phone number meant to be the primary contact method for customers. For most treatment centers that should be the same number that appears on the Business Profile and in the page footer. If you use call tracking for paid campaigns, keep dynamic number insertion out of the structured data and out of the static name, address and phone block. Lead tracking and location consistency can coexist, but only if the markup holds the stable number.

Hours are the second trap. A 24-hour admissions line is a service, not the hours the front door is open. If the residential facility is staffed around the clock and accepts assessments at any hour, say so in both the markup and the visible page. If the outpatient office is open weekdays and the phone line is what runs overnight, the markup should reflect the office, and the page copy should explain that admissions calls are answered at any hour. Google’s documentation also supports validFrom and validThrough dates in YYYY-MM-DD format for seasonal closures, which is a cleaner way to mark a planned closure than editing the regular hours and forgetting to change them back.

Reviews: what the markup cannot claim

Google’s review snippet documentation is specific: if the business being reviewed controls the reviews about itself, its pages using LocalBusiness or any other Organization markup are ineligible for the star review feature. The documentation names an embedded third-party widget, such as Google Business reviews, as an example of exactly this situation. So the star rating that a reviews plugin injects into your LocalBusiness markup will not produce stars in search results for your own pages.

For treatment providers there is a second reason to be careful. Reviews from former patients can reveal diagnoses or treatment history, and how a covered entity responds to or republishes that information raises HIPAA questions. That is a separate compliance conversation for your privacy officer, but it is one more reason not to auto-syndicate review text into page code without anyone reviewing it.

A five-minute check you can run today

You do not need special software to see what your site is telling Google. Open one of your location pages in Chrome, press F12 to open the developer tools, click the Console tab and paste this line:

[...document.querySelectorAll('script[type="application/ld+json"]')].map(s => JSON.parse(s.textContent))

Press Enter and expand the results. Then check five things:

  1. Is there exactly one LocalBusiness or MedicalClinic block, and is its address the address of the location this page is about?
  2. Does telephone match, digit for digit, the primary number on that location’s Google Business Profile?
  3. Do geo.latitude and geo.longitude each have at least 5 decimal places?
  4. Do the hours in openingHoursSpecification match the hours printed on the page?
  5. Is there an aggregateRating or review property describing your own business? If so, it is not earning stars.

Then paste the same URL into Google’s Rich Results Test to confirm the markup parses without critical errors. A clean validator result tells you the syntax is right. It does not tell you the facts are right, which is why the manual check comes first.

What this markup will not do for AI search

We get asked whether LocalBusiness markup is the key to showing up in AI Overviews and AI Mode. Google states that no special schema is required to appear in its generative AI features, and its general structured data guidelines say markup makes a page eligible for a feature without guaranteeing it. The useful framing is simpler: accurate, consistent location facts across your site, your Business Profile and the directories that cite you make it easier for any system, traditional or generative, to answer “where is this program and how do I reach it” correctly. Our answer engine optimization work starts from that consistency, not from extra markup.

Where to start

If your site has more than one location, audit the location pages first, because sitewide headquarters markup is the most common pattern we find and the one that most directly contradicts your Business Profiles. Fix the address and phone on each page, remove self-serving ratings, align hours with the visible page, then revalidate. If you would like a second set of eyes on the markup and the profiles behind it, that review is part of our SEO services for treatment and behavioral health providers.

×
✦ Meet MIA – Your AI Marketing Assistant

Get Instant Marketing
Answers + Book Strategy Call

Talk to MIA and get real answers, custom insights, and expert help to grow your business.
💬
Answer your marketing questions

Get instant expert answers to help you grow.

📈
Analyze your website or ads

MIA can audit and analyze performance in seconds.

💡
Get growth strategies

Receive tailored recommendations.

📅
Schedule a call with our team

Book a strategy consult instantly.

Start Voice Chat with MIA Click to talk
📅 Book a Strategy Call Schedule a consult
⚡ Get Quick Answers Fast responses
🔍 Request Free Audit Analyze my site
MIA Bot

MIA

● Online
Listening...
🎙️

Click the mic to start speaking. We only use your voice to understand your questions.

Skip to content