gaash.ai

Veterinary practices

An owner with a sick cat asks an assistant first. An answer can only name a practice for what some page says.

GEO for veterinarians starts with a question typed in a hurry: "emergency vet open now near me", "vet that sees rabbits", "how much is a dental cleaning for a dog". The assistant answers from the practice sites it can read. Whether yours is one of them is decided by what your pages state in text.

A pet owner's question about a veterinary practice asks for facts your site can state in plain text: the species you treat, the services by their ordinary names, your hours and what happens outside them, one address and one phone number, whether you are taking new patients, and a price range for the procedures owners ask about by phone. An answer has your pages to go on, not a visit to the practice.

How your customers ask

What pet owners type before they pick up the phone

“emergency vet near me open now”
“vet in Tucson that sees rabbits and guinea pigs”
“how much does a dog dental cleaning cost with anesthesia”
“vets taking new patients near me that do fear free handling”
“is there a vet that does house calls for an old cat”

Four moments when an owner asks an assistant instead of calling around

The questions cluster around four moments: the emergency at night, the new pet or the new town, the procedure with a price attached, and the animal most practices do not see. A fifth runs through all of them: the anxious dog or the cat that hates the carrier, whose owner types "fear free" or "low stress" and filters on it.

The emergency question is about now. The AI assistant needs your hours in text, what happens after close (an on-call vet, or the emergency hospital you refer to, by name), and the address once. A site that says "emergencies: call us" with no hours cannot tell an owner at midnight whether anyone will pick up, so the assistant cannot either.

The procedure question is about money before it is about you. "How much is a dental cleaning with anesthesia" can only be answered with a figure from pages that publish one. State the range you already quote on the phone and what it includes (the exam, bloodwork, anesthesia, extractions billed separately), and yours can be the page an assistant quotes.

The species question is a question about words. An owner with a bearded dragon types the animal's name, and a page that never names the animal gives an answer nothing to repeat about it. "We treat all animals" contains no animal. "Dogs, cats, rabbits, ferrets, birds and reptiles" contains six, and each one is a question your page can now answer.

What a practice website has to state before an assistant can name it

When an owner's question sends an assistant to the web, it fetches pages the way an AI crawler does and reads the text they serve; OpenAI's documentation names ChatGPT-User as the fetcher that opens a page on a user's behalf. It does not see the waiting room. It sees the words on the page, in the form they are written.

What a veterinary practice's site has to state, where, and in what form.
What to stateWhere it belongsIn what form
Species treatedHomepage and services page"Dogs, cats, rabbits, birds, reptiles", each named; "all animals" matches nothing
Services by their plain namesOne page per service"Dental cleaning", "spay and neuter", "vaccinations", "x-ray and ultrasound", "end-of-life care"
Hours and after-hoursContact page and openingHoursSpecificationHours by day; what happens after close: the on-call number or the emergency hospital you refer to
One address, one phone numberHeader, footer, contact page, markupThe same digits and the same street form everywhere; the after-hours line labeled if there is one
New patientsHomepage, one line"Accepting new patients" or "waitlist", changed when it changes
Price rangesThe page for each procedure owners ask aboutThe range you quote on the phone, with what it includes and what is billed separately
Credentials and handlingAbout pageVeterinarians by name with degree and certifications, as text; low-stress or fear-free handling described in a sentence, not a badge
ReviewsHomepage or a reviews pageQuoted as text with a first name, a month and the platform named
The business typeJSON-LD on every pageOne node typed VeterinaryCare and LocalBusiness, with address, telephone, openingHoursSpecification and areaServed

VeterinaryCare is schema.org's type for a vet's office, but it sits under MedicalOrganization, not under LocalBusiness, and schema.org gives opening hours to places, not to organizations. Google's local business documentation asks for each location as a LocalBusiness type and for more than one type as an array, so the practice's node carries both, ["VeterinaryCare", "LocalBusiness"], and the fields Google documents apply: name, address, telephone, opening hours, geo and price range. Filled in and matching the visible page, they make the LocalBusiness schema usable. Left as the page builder's defaults, the markup describes your website and not your practice.

One caution specific to this trade: describe the procedure, the visit and the price, not the outcome. An assistant quotes what a page states, and a claim about results travels with your name into every answer it appears in. Species by name, hours by day and a range with what it includes answer a question. A promise answers none.

What our crawl of 9,483 sites found, and what a practice should take from it

In our audit of 9,483 small business websites (40 trades, 90 metros, late August to early September 2026), a crawler that ran no JavaScript and obeyed robots.txt fetched the homepage, the contact page and the about page of each site. The audit publishes no separate cut for veterinary practices; the figures describe the whole sample, and the method section says how it was drawn.

61.5% had no question-and-answer content of any kind, and 50.7% had a heading phrased as a question and did not answer it in a form a machine can isolate. "Do you see exotics?" as a heading, followed by "call us to find out", is the veterinary version.

43.1% were inconsistent about who and where they are across their own three pages; 36.9% published more than one phone number, and 34.1% had no postal address a machine could parse. A practice with a main line, an after-hours line and a pharmacy line has three numbers; unlabeled, none of them answers the midnight question.

64.7% showed no review signal a crawler could read, and only 8.9% carried rating schema. 17.8% had no schema.org markup at all; of the 82% that did, most described the website rather than the business, and 13.7% had business schema missing the fields that would make it usable.

7.2% sat behind bot protection that served the crawler a challenge page instead of the site, and 3.0% rendered their content only in JavaScript. Our free crawler access check reads your robots.txt the way each of the nineteen AI crawler tokens would.

What to fix first, in order

  1. One address and one main phone number, in text, identical on every page and in the markup. If there is an after-hours line, label it and keep it identical too.
  2. Hours by day, and the after-hours arrangement in one sentence: who answers, or which emergency hospital you refer to.
  3. Species and services by their plain names, one page per service, with the price range you quote by phone and what it includes. State whether you are accepting new patients.
  4. VeterinaryCare and LocalBusiness as the node's two types, in JSON-LD on every page, with address, telephone, openingHoursSpecification and areaServed filled in. JSON-LD is the format Google recommends, and the markup should state only what a visitor can read on the page.
  5. Reviews on the page as text, with a first name, a month and the platform. Google's review snippet rules give a practice no review stars for reviews of itself, and say a platform's ratings are not to be aggregated into AggregateRating on its own site.
  6. The five questions your front desk answers most, as headings, with a real answer under each.
  7. Check what a crawler receives: the crawler access check for robots.txt, then the source of your services page with scripts off.

Nothing on this list puts a practice into an answer, and nobody outside the companies that run the assistants can. The list takes away the reasons an assistant could not name you; whether it then does is a measurement, and ours is published.

What practice owners ask

We are already at capacity. Why would we want to be named more often?

New patients are one reason, not the only one. The same pages answer the owner who already comes to you and asks an assistant whether you see rabbits or what happens after hours; if the assistant cannot read it, it guesses or sends them elsewhere. A practice at capacity can say so on the page, and the assistant repeats that too.

Can we publish prices without starting a price war?

A range is not a quote. Publish the range you already give on the phone for the procedures owners ask about most, with what it includes and what is billed separately. The owner asking an assistant how much a dental cleaning costs gets an answer from the practices that publish one; "call for pricing" leaves your practice out of that comparison.

We have hundreds of reviews on Google. Does the assistant not see them?

Not on your site, unless the site says so. 64.7% of the sites in our audit showed no review signal a crawler could read, and most of those businesses had reviews elsewhere. Quote a handful as text with a first name, a month and the platform they came from. Leave the platform's rating out of your markup, which Google's review rules say not to aggregate from other websites.

Which schema type is right for a veterinary practice?

VeterinaryCare and LocalBusiness together, as an array of two types: schema.org lists VeterinaryCare under MedicalOrganization rather than LocalBusiness, and Google asks for each location as a LocalBusiness type. Put the node in JSON-LD on every page with address, telephone, openingHoursSpecification and areaServed filled in, and keep the values identical to the visible page. 13.7% of the audited sites had business schema with the usable fields missing; the type without the fields is a default under a different name.

Sources: our audit of 9,483 small-business sites, with its method · Google, local business structured data · Google, introduction to structured data · Google, review snippet · schema.org, MedicalBusiness · schema.org, LocalBusiness · OpenAI, crawler documentation