A med spa gets cited by AI assistants when its site and its outside profiles state the same facts about the business, each injector, each treatment, and each price. The technical work has four parts: an llms.txt file, schema for the spa, its services, and its injectors, sameAs links, and matching directory and booking-platform listings.
AEO, GEO, AI visibility, and AI SEO are four names for the same work: getting a business named and cited inside AI answers. This post uses AEO. The [plastic surgery version of this setup](/blog/plastic-surgery-llms-txt-schema-entity-setup) centers on one surgeon and procedure pages. A med spa differs in four ways: a menu of 15 to 40 treatments, several injectors who change over time, a medical director on paper, and memberships with recurring prices.
What does the technical layer of med spa AEO include?
The technical layer has four artifacts: an llms.txt file at the site root, JSON-LD schema for the business, services, and people, sameAs links that tie the spa to outside profiles, and a directory and booking-platform footprint whose names, addresses, and prices match the site. Each artifact removes one guess an AI system would otherwise make.
Content decides whether a page is worth citing. The technical layer decides whether the right entity gets the credit. The sources AI assistants read for med spa recommendations are covered in the ClinicAds post on [what AI assistants cite for med spas](/blog/sources-ai-assistants-cite-med-spas), and this post does not repeat that split.
- llms.txt: a plain-language map of the spa, treatments, and injectors at the domain root
- Schema: JSON-LD naming the business, each service, each injector, and the visible FAQs
- sameAs: links from each entity to the same entity on outside profiles
- Directory and booking consistency: identical names, addresses, phones, and prices everywhere
Does llms.txt help a med spa get cited?
Evidence says it probably does not, yet. SE Ranking analyzed about 300,000 domains, found roughly 10 percent had an llms.txt file, and reported no measurable link between having one and how often a domain was cited by major AI models. The result is correlational, and no major AI provider has committed to reading the file.
ClinicAds still recommends writing one, as a one-hour clarity exercise and not a ranking lever. A spa that cannot summarize its treatments, injectors, locations, and membership in one page has an entity problem, and the same sentences feed the schema and the directory text. Jeremy Howard proposed the format in September 2024.
What should a med spa llms.txt contain?
A med spa llms.txt should contain the business name, a one-sentence definition, each location with address, the treatment categories with links, the injectors and medical director with credentials, the membership structure, and a disambiguation line. Keep it under 80 lines, written as facts, with no promotional adjectives and nothing the spa cannot document.
The disambiguation line matters because med spa names repeat. Many cities have more than one spa called Glow, Radiance, or Revive, and an AI answer can merge their reviews. State the legal name, the city, the street, and the domain in one sentence so the file separates the spa from namesakes.
- Line 1: the business name as an H1, matching signage, Google Business Profile, and the state business record
- Line 2: a one-sentence definition, such as a medical spa in a named city offering injectables, laser, and skin treatments
- Section: locations, each with full address, phone, and hours
- Section: treatment categories (neuromodulators, filler, laser, body, skin), each linking to its page
- Section: clinical team, with the medical director and each injector's full name and license type
- Section: membership tiers with monthly price, if the spa publishes them
- Section: disambiguation naming the domain and city
Which schema types does a med spa site need?
A med spa site needs four schema.org types in JSON-LD: a business type for the spa, Service for each treatment, Person for each injector, and FAQPage for pages with visible questions. Schema.org defines each, and the Schema Markup Validator at validator.schema.org checks them. Each block belongs on the page that is actually about that entity.
Business type is a judgment call. Schema.org offers MedicalBusiness, HealthAndBeautyBusiness, and DaySpa, and none maps cleanly to a medical spa. ClinicAds suggests the type that matches how the spa describes itself on its Google Business Profile category, then repeating that wording in the description property, so the schema and the profile agree.
| Schema type | Page it belongs on | Key properties | What it settles |
|---|---|---|---|
| MedicalBusiness or HealthAndBeautyBusiness | Home, contact, each location page | name, url, address, telephone, geo, openingHours, sameAs | Which business this is and where it operates |
| Service | Each treatment page | name, serviceType, provider, areaServed, offers | What the spa offers, by treatment, and who provides it |
| Person | Each injector biography | name, jobTitle, hasCredential, worksFor, sameAs | Which injector this is, and which spa employs them |
| FAQPage | Pages with visible Q&A | mainEntity of Question and Answer pairs | Which questions the page answers, in the exact answer text |
How do you write Service schema for each treatment?
Service schema names one treatment per page, sets serviceType to the standard treatment name, points provider to the spa by its @id, lists areaServed, and attaches an Offer with a price only when the page shows that price. The visible page text and the markup must match, because markup describing content a visitor cannot see violates Google's structured data guidelines.
Price is where med spas gain an edge. A patient asking ChatGPT what Botox costs per unit in a city gets ranges and a caution. A spa that publishes a per-unit price on a crawlable page, marked up with an Offer and a unit price specification, gives a model a figure it can quote with attribution. A spa that hides prices behind a booking form gives it nothing.
- One Service block per treatment page, never one block listing the whole menu
- serviceType: the standard name patients search, such as neuromodulator injections or laser hair removal
- provider: the spa, referenced by the same @id used on the home page
- offers: price and unit only for prices visible on the page; omit the field otherwise
- Membership tiers: one Offer per tier with the monthly price and what it includes
How do you make each injector a findable entity?
Each injector becomes a findable entity through a biography page carrying Person schema: full name, jobTitle, license type, worksFor linking to the spa's @id, and sameAs links to their license lookup and professional profiles. Clients often ask AI assistants about a named injector, and a page that confirms the person gives the model something to verify.
Injector turnover makes this harder than a one-surgeon practice. When an injector leaves, the biography page, the schema, the team list in llms.txt, and the outside profiles must change together, or an AI answer keeps naming someone who no longer works there. The ClinicAds question of whether to build visibility around the injector's name or the clinic's is a separate decision from this setup.
The medical director belongs in the markup too. Many states require medical oversight of a medical spa, and naming the supervising physician with license details on the team page answers a legitimacy question clients ask. Rules differ by state, so the spa should confirm the wording with its own counsel.
- name: exactly as on the state license record
- jobTitle: the license type, such as Registered Nurse or Nurse Practitioner, spelled out
- worksFor: the spa, by @id
- sameAs: license lookup page and any professional profile with a stable URL
- Update trigger: a departure or new hire changes the page, schema, llms.txt, and listings in one pass
Which listings need to match the website?
The listings that need to match are the Google Business Profile, Yelp, Facebook and Instagram profiles, the booking platform's public page, and any aesthetic directory such as RealSelf. Name, address, phone, treatment names, and prices should read the same across them. Conflicts push an AI model to hedge or omit the spa.
The audit is mechanical. List every profile, copy the name, address, phone, hours, and top five treatment prices into one sheet, and mark every difference. Fix the spa's own pages first, then the profiles it controls, then request edits where it does not. Common conflicts are a retired phone number, a former suite number, a rebrand that left an old name live, and member pricing that differs by profile.
| Field | Site | Google profile | Booking page | Directories |
|---|---|---|---|---|
| Business name | Match | Match | Check | Check |
| Address and suite | Match | Match | Check | Check |
| Phone | Match | Match | Check | Check |
| Top 5 treatment prices | Match | Often absent | Check | Check |
| Injector names and licenses | Match | Rarely listed | Check | Check |
| Membership price | Match | Often absent | Check | Check |
How do you check that the setup works?
A spa checks the setup in three steps: validate every schema block, confirm llms.txt loads at the root with a 200 status, and run a fixed prompt set in ChatGPT, Perplexity, and Gemini each month, logging whether the spa and its injectors are named. Validation proves the markup is well formed. Only the prompt log shows whether answers changed.
Expect a lag. The month-by-month view is in the ClinicAds post on [how long AEO takes for a med spa](/blog/how-long-does-aeo-take-to-work-for-a-med-spa). For a spa paying $28 to $80 per booked appointment in paid media, each appointment an AI answer produces without ad spend avoids that cost, and a member worth $120 to $280 a month raises its value. These are agency averages, not guarantees.
This setup is one part of the search visibility system ClinicAds builds for [med spas](/medspa), alongside paid media and speed-to-lead. It is not sold as a separate service.
- Validate every JSON-LD block at validator.schema.org and fix errors before launch
- Fetch /llms.txt in a browser and confirm a 200 response and plain-text rendering
- Ask three AI assistants for the spa by name, its lead treatment by city, and each injector by name
- Re-run the same prompts every 30 days and log changes against each schema and listing edit
Does a med spa need llms.txt to appear in ChatGPT?
No. SE Ranking found no measurable link between llms.txt and AI citations across about 300,000 domains, and spas are named without one. ClinicAds still suggests the file because writing it forces clear statements of treatments, injectors, and prices.
Which schema type should a med spa use for the business?
Schema.org has no exact medical spa type. MedicalBusiness or HealthAndBeautyBusiness both fit. Pick the one closest to the Google Business Profile category and repeat the same wording in the description property so the two agree.
Should a med spa publish treatment prices for AI answers?
Yes where the spa is comfortable. A published per-unit or per-session price on a crawlable page, with matching Offer markup, gives a model a figure to quote. Prices behind a booking form give the model nothing, and competitors fill the answer.