ClinAds

Same size. Opposite blind spots.

Two chains, 839 and 879 clinic pages. Each one answers exactly what the other leaves out.

Watch the walkthrough, or open it on YouTube.

Two physical therapy chains, almost exactly the same size: ATI has 839 clinic pages, Athletico has 879. A patient searching physical therapy near me that takes my plan needs the same handful of facts from either one.

We checked 60 clinic pages from each chain, sampled at random, both as a browser and as Googlebot. Each chain answers exactly what the other leaves out. ATI gives a machine the hours, the phone and a map pin, and never names an insurer. Athletico names Aetna, Cigna and Medicare in plain words, and ships no machine-readable data at all.

ATI clinic pages carry machine-readable hours, phone and map pin but name no insurer; Athletico names insurers in plain words but has no machine-readable data
Same size, opposite blind spots.

Five questions: both chains answer four, a different four

These are the things a patient needs before booking. We counted an answer only when it was in the raw page, before JavaScript.

ATI locations.atipt.com

4/5

  • Where is it?
  • Is it open now?
  • Does it treat my problem?
  • Does it take my insurance?
  • Can a machine read it as a clinic?

Athletico athletico.com/locations

4/5

  • Where is it?
  • Is it open now?
  • Does it treat my problem?
  • Does it take my insurance?
  • Can a machine read it as a clinic?

Method: 60 clinic pages sampled at random from each chain, fetched as a browser and as Googlebot, scored on the raw page before JavaScript.

What ATI gets right: the address, the hours and the map pin

Every ATI clinic page we sampled carries a business listing written for machines: what the place is, where it stands and when it opens, in a form an assistant can quote without reading a word of the page.

ATI Madison Heights, MI · page data

"@type": "LocalBusiness",
"name": "Madison Heights - E 12 Mile Rd",
"telephone": "(248) 543-4886",
"openingHoursSpecification": { "opens": "07:00", "closes": "19:00" },
"geo": { "latitude": …, "longitude": … }
60 / 60ATI clinic pages sampled that carry the listing, hours and coordinates
0 / 60Athletico clinic pages with any of it

Then ask an ATI page which insurance it takes

It doesn’t say. The answer exists once, on a single page for the whole company. A patient asking about one clinic, and an assistant answering for one clinic, never reach it.

0 / 60clinic pages that name an insurer: no plan, no carrier, no “we accept”. The page sends you to a phone number instead
0 / 2,202URLs in the location sitemap carrying a date, so a crawler cannot tell what changed or when

There is one more gap on every ATI clinic page: no link preview tags. Paste an ATI clinic into a chat or a post and it arrives as a bare URL.

ATI clinic pages name no insurer, carry no sitemap dates and have no link preview tags
The insurance answer exists once, for the whole company.

What Athletico gets right: the plans, clinic by clinic

Not a generic list. The Iowa clinic names Iowa plans, the Illinois clinic names Illinois ones. 59 of the 60 pages we sampled name a carrier:

  • Aetna
  • Aetna Medicare Advantage
  • Ambetter
  • BCBS Wellmark
  • ChampVA
  • Cigna / Midlands Choice
  • Devoted Health
  • Health Alliance
  • Iowa Total Care
  • Medicaid
  • Medicare
  • Molina Healthcare
  • Mutual of Omaha
  • Surest (UnitedHealthcare)
879clinic pages in Athletico’s sitemap, every one dated, the newest yesterday
0dates on ATI’s 2,202 location URLs

And then Athletico says none of it in code

A machine looking for a clinic on an Athletico page finds a web page, a menu and a search box. It does not find a clinic: no address block, no coordinates, no opening hours it can parse.

Athletico Ankeny South, IA · page data, every type found

"@type": "WebPage",
"@type": "BreadcrumbList",
"@type": "WebSite", "SearchAction"

No LocalBusiness. No address. No geo. No openingHours.

The hours are on the page for a reader. An assistant asked “is it open now?” has to parse prose to answer, on all 879 clinics.

Athletico pages carry only WebPage, BreadcrumbList and WebSite data, with no LocalBusiness, address, geo or opening hours
Said in words, and none of it in code.

The scorecard: four checks each, one they both pass, two neither does

Nine checks, the same method, both chains.

CheckATIAthletico
Clinic pages carry a business listingThe LocalBusiness block a machine reads
Opening hours a machine can parseNot just printed on the page
Map coordinates in the page dataSo an assistant can place the clinic
Insurance named on the clinic pageThe plans that clinic actually takes
Location sitemap carries datesSo crawlers know what changed
Link previews for social and chatThe og: tags that build a card
Every page in the sitemap is aliveWe requested all 5,374 of them
A note written for AI enginesAn llms.txt on the domain
The finder lists clinics to a crawlerWithout running JavaScript

Why this matters to a clinic

Two chains with about 1,700 clinics between them, and each one solved the half the other missed. Neither half is hard. Doing both is what gets a clinic named.

The work is the same either way: say it in plain words a patient can read, and put the same facts in the code an assistant reads. A single clinic can do both in an afternoon.

  • We search for your clinic the way a patient would. Your city and your competitors, on Google and on the AI assistants.
  • You get the gaps in plain sentences. One list you can hand to whoever runs your website.
  • It takes a day. No commitment, no cost.
View the full teardown slides (PDF, 8 pages)

Your browser can’t show the PDF here. Download it instead.

Download the slides (PDF, 570 KB)

Want a free AI visibility audit for your clinic?

Free, and it takes about a day. We check your city and your competitors the way a patient does, then send back every gap in plain sentences.

Get my free audit
Keep reading

More research.