DEV Community

Gyubin Kim
Gyubin Kim

Posted on

Why Your Med Spa Doesn't Show Up in ChatGPT (and How to Fix It, 2026)

Series: Getting Cited by AI — Post #6 (niche deep-dive: med spas & aesthetics). #1: Get Cited by ChatGPT → · #2: Why AI Recommends Your Competitor → · #3: Copy-Paste Schema Templates → · #4: Is Your Site Blocking AI Crawlers? → · #5: Reviews & AggregateRating →

A patient opens ChatGPT or Perplexity and types: "best med spa near me for Botox" or "where can I get a HydraFacial in [city]?" The assistant names three clinics, links two of them, and books a mental appointment. If your med spa isn't one of those three, you didn't lose on price or reviews — you lost because the model couldn't confidently read you.

This post is the general series (#1–#5) applied specifically to aesthetics clinics, because med spas have three quirks that make them especially invisible to AI: booking-widget homepages, service menus buried in images, and "before/after" galleries that say nothing a machine can quote.

Honest caveat first: doing everything below does not guarantee a citation, and there's no fixed timeline for when assistants pick changes up. What it does is remove the specific, fixable reasons a med spa gets skipped. No rankings or revenue are promised here — only that the machine can finally read what your front desk already knows.


The three reasons med spas go invisible

1. The homepage is a booking widget, not a page.
Most aesthetics sites lead with a full-screen "Book Now" embed (Vagaro, Boulevard, Mindbody, an iframe). That widget is great for humans and nearly empty to a crawler — the services, prices, and hours live inside a third-party script the model often can't read. The AI lands on your domain, finds a hero image and a button, and moves on.

2. The service menu is an image or a PDF.
"Botox $12/unit, Lip Filler from $650, Morpheus8 packages" — if that lives in a designed graphic or a downloadable price sheet, it's invisible as text. Answer engines quote text. A pretty menu the model can't parse is the same as no menu.

3. There's nothing answer-shaped.
Patients ask machines very specific questions — "how long does filler last," "is Botox safe while breastfeeding," "what's the downtime for a chemical peel." If your site never answers those in plain text, the model grabs the answer (and the citation) from a competitor or a generic health site instead of you.

None of these are ranking problems. They're readability problems — and readability is fixable in an afternoon.


The 10-minute med-spa visibility check

Run this on your own site before changing anything:

  1. View source on your homepage (right-click → View Page Source) and Ctrl-F for one of your real services, e.g. Botox or HydraFacial. If it's not in the page text — only inside an iframe/widget — the crawler probably can't see it either.
  2. Find your services as plain text. Is there a real /services or /pricing page with typed-out treatments and at least price ranges, or is it all images/PDF?
  3. Search the actual question. Open Perplexity and ask "med spa in [your city] for [your top treatment]" — are you named? Who is? Read their page; it's usually more text-readable, not fancier.
  4. Check the schema. Paste your URL into any schema validator. Most med spas have either nothing or a generic WebSite tag — not MedicalBusiness/HealthAndBeautyBusiness with services and hours.
  5. Check crawler access (see #4) — booking platforms and security plugins sometimes block AI user-agents by default.

Anything that fails is on the fix list below, roughly in priority order.


The fixes (highest leverage first)

Fix 1 — Put your service menu on the page as text

Create or rewrite a /services page where every treatment is a typed heading with a one-line plain-text description and a price or an honest range ("Lip filler from $650"). Keep the booking widget — just stop letting it be the only source of truth. This single change does more than any schema tag, because it gives the model something quotable.

Fix 2 — Answer the five questions patients actually ask

Add a short FAQ in real text — five questions, two-to-three honest sentences each. Pick the ones your front desk answers on the phone all day:

  • How long does [Botox/filler] last?
  • What's the downtime for [your top treatment]?
  • Who performs the treatments (RN, NP, MD supervision)?
  • How much does [treatment] cost?
  • Is there a consultation, and is it free?

Plain, accurate answers. This is the content AI assistants love to quote because it is the answer.

Fix 3 — Add the right schema (copy-paste below)

Tell the machine, in its own language, what kind of business you are, where, when you're open, and what you offer. Med spas should use MedicalBusiness (or HealthAndBeautyBusiness) — not a generic LocalBusiness. Template in the next section.

Fix 4 — Make your reviews machine-readable

You almost certainly have real reviews on Google. Surface them as text on the site and, only if the numbers are true, mark them up (see #5). Real numbers only — a rating in your markup that doesn't match your public Google profile gets your whole markup discounted. Never invent a rating.

Fix 5 — Confirm the crawlers are allowed

If your booking platform or a security/SEO plugin blocks GPTBot, OAI-SearchBot, PerplexityBot, or ClaudeBot, none of the above matters. #4 walks the check.


Copy-paste schema for a med spa

Drop this in your homepage <head>, replacing every placeholder with your real values. Don't ship a field you can't verify — delete it instead of guessing.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "MedicalBusiness",
  "additionalType": "https://schema.org/HealthAndBeautyBusiness",
  "name": "YOUR MED SPA NAME",
  "description": "Medical spa offering injectables, facials, and skin treatments in CITY, STATE.",
  "url": "https://yourmedspa.com",
  "telephone": "+1-555-555-5555",
  "image": "https://yourmedspa.com/exterior.jpg",
  "priceRange": "$$",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "123 Main St",
    "addressLocality": "CITY",
    "addressRegion": "REGION",
    "postalCode": "00000",
    "addressCountry": "<your ISO country code, e.g. GB/AU/CA/SG/IN — don't ship unverified>"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": 0.000000,
    "longitude": 0.000000
  },
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Tuesday", "Wednesday", "Thursday", "Friday"],
      "opens": "10:00",
      "closes": "18:00"
    },
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": "Saturday",
      "opens": "10:00",
      "closes": "16:00"
    }
  ],
  "hasOfferCatalog": {
    "@type": "OfferCatalog",
    "name": "Treatments",
    "itemListElement": [
      { "@type": "Offer", "itemOffered": { "@type": "Service", "name": "Botox / Neurotoxin" } },
      { "@type": "Offer", "itemOffered": { "@type": "Service", "name": "Dermal Filler" } },
      { "@type": "Offer", "itemOffered": { "@type": "Service", "name": "HydraFacial" } },
      { "@type": "Offer", "itemOffered": { "@type": "Service", "name": "Chemical Peel" } }
    ]
  }
}
</script>
Enter fullscreen mode Exit fullscreen mode

Pair it with an FAQPage block built from your five real answers (template in #3). Together they cover who/where/when/what and the questions patients ask — the two things assistants need to cite you with confidence.

A note on medical claims: keep service descriptions factual and avoid outcome guarantees ("erases wrinkles permanently," "100% safe"). Aesthetics advertising is regulated, and overclaiming is both a compliance risk and exactly the kind of unverifiable language models discount. Accurate beats impressive.


Priority order, if you only do three things

  1. Service menu as real text (Fix 1) — the model needs something to quote.
  2. Five-question FAQ in plain text (Fix 2) — match the exact questions patients ask AI.
  3. MedicalBusiness + FAQPage schema (Fix 3) — label it so the machine is sure.

Everything else (reviews markup, crawler access) compounds on top, but those three are where an invisible med spa becomes a readable one.


FAQ

My booking widget already shows my services. Isn't that enough?
For humans, yes. For crawlers, usually not — the content inside a third-party widget/iframe often isn't read as your page's text. Keep the widget; add a plain-text services page beside it.

Do I need to publish my exact prices?
No. Honest ranges ("from $650") are fine and still quotable. The goal is readable text, not a public price war.

Will this get me into ChatGPT's answers?
It makes you eligible and readable, which is the part you control. No one can guarantee a citation or a timeline — anyone who does is overselling. This removes the fixable reasons you're skipped; pickup still depends on the assistant.

Is marking up reviews I don't really have okay if they're positive?
No. Real numbers only, matching your public Google profile. A mismatch discounts your entire markup. See #5.


Two ways to act on this:

🔎 Free, no-strings: send your site URL to faithpath25@gmail.com with the subject "GEO snapshot" — I'll send back a 1-page read of exactly what AI assistants can and can't currently see on your site, plus the specific fixes. Free pilot, wherever you operate; if it's useful, a short review is all I ask.

🧰 Do it yourself: the copy-paste schema kits, checklists, and the full GEO audit live at SprintLanding → (includes a free starter). Prices in USD; Gumroad converts to your local currency at checkout.

Top comments (0)