Schema.org for AI: the markup a business actually needs
Schema.org is labels on page blocks for machines. "Price here", "address here", "client question here". Not magic, and not a tick in a report. Without the labels an AI assistant guesses, and it more often guesses the competitor with cleaner data.
Below: which markup types a business actually needs, how schema helps Alice and ChatGPT, where a DIY install breaks, and in what order to add it without contradicting the maps.
Which schema types you actually need
Not everything in the schema.org reference. A business usually needs a narrow set with facts in it:
- Organization or LocalBusiness: who you are, phone, address, hours;
- FAQPage: questions and answers from the homepage or a service page;
- Service or Product: services with a price or a range;
- AggregateRating: only if the reviews match the maps;
- BreadcrumbList: navigation on multi-page sites.
A clinic: MedicalBusiness, and doctor profiles if they exist. Delivery: OpeningHoursSpecification. Do not install everything a plugin generator offers. Empty fields are worse than a small set that contains numbers.
Organization and LocalBusiness on the same page with different phones is a classic mine. The validator is green. Alice takes the outdated number from the second block.
Schema is not a tick in a report
An SEO person installs a plugin. The report is green. The owner relaxes. Alice takes the phone from an old block in the footer, because two JSON-LD blocks disagree. The client calls the wrong number.
Schema does not replace the text. It is a copy of the facts in a machine-readable form. No facts on the page, and the markup is an empty box with pretty syntax.
FAQPage with no visible FAQ on the screen is a red flag. Service with price: 1 is worse than no price field. AggregateRating next to three stars in 2GIS, and the model marks the source unreliable.
How schema helps Alice and ChatGPT
The model looks for facts it can confirm. Schema gives them in JSON-LD. A phone in the markup that matches the footer and 2GIS is a trust signal. An FAQ in JSON-LD that matches the visible HTML can be quoted in the answer. A mismatch, and the source is marked unreliable.
Schema does not replace the text on the page. One set of numbers in the markup, another on the screen, and the model stops trusting you. That is worse than no markup: you stated a lie in machine-readable form yourself.
On a narrow query "implants in [city]", Alice looks at the service page. Markup only on the homepage will not save you. FAQ and Service on that specific service are required if you want answers on narrow queries.
Five signs the markup is broken
- A 4.9 rating in schema next to three stars on Yandex Maps.
- An office address that is closed, or that never received clients.
- price: 0 or 1 ruble in a Service field.
- Two LocalBusiness blocks on one page with different @id and url values.
- FAQPage in JSON-LD, and different questions on the page, or an empty accordion.
The AI assistant picks the safe option: the competitor whose numbers match. That is mechanics.
In a Leadsy express audit, schema is one of 56 parameters. What hits leads is the phone, the prices, and the FAQ, not the beauty of the JSON.
Organization or LocalBusiness: an office with an address is LocalBusiness, with geo and openingHours. Online, with no location, is Organization. Do not duplicate both with different phones on the same page.
Typical cases by niche
Dentistry: on the implant page, Service with priceRange, and FAQPage with "does it hurt", "installment plan", "private insurance (DMS)". MedicalBusiness on the homepage with the clinic address. A doctor in schema only if the doctor page is real and matches the license.
Auto repair: Service on each job, with a timeline and "from … ₽". OpeningHoursSpecification for weekends. Skip AggregateRating if 2GIS has three reviews and a 4.2. More honest with no field.
Food delivery: Restaurant or FoodEstablishment, the menu in HTML, not only in an app. Product on an item, with price and availability. A marketplace often wins Alice's "where to order" answer because of Product, not because of ads.
B2B: Organization with legalName, case studies as separate pages with an FAQ on "implementation time" and "license". Do not smear everything into one JSON-LD on the homepage. The model will not pull a timeline out of a paragraph that says "we are reliable".
An online store: Product on the card, Offer with price and priceCurrency, shippingDetails if you have them. Without Product schema, a marketplace is almost always ahead on "where to buy". Their cards are machine-readable. Yours is a pretty storefront.
A beauty salon: LocalBusiness with geo, hasMap to the map, Service on the treatments. The booking phone is the same one as in Yandex Business. Two numbers in schema is the classic "they called the wrong place".
What people do themselves, and where it breaks
"Install an auto-schema plugin" is the most expensive advice if nobody looks at the output.
A paste of someone else's JSON-LD
Someone else's @id, someone else's url, someone else's address. The validator does not know your business. Alice does, and it ignores you.
A fake rating
AggregateRating "for trust". The maps say the opposite. The model picks the business whose reviews agree.
Markup only on the homepage
Services with no schema. On a query about a service, the machine sees nothing. A competitor with FAQPage on the implant page takes the answer.
GTM with no check of the source
A marketer added a tag. The preview looks fine. Ctrl+U shows two JSON-LD blocks in the head. Parsing breaks worse than having no markup.
A redesign with no cleanup
A new template, and the old schema plugin still in the footer. Two Organization blocks with different logos. The validator is green. The data is stale. Keep one current JSON-LD. Delete the rest.
A minimal order of implementation
- Audit: what is there, whether it validates, whether it matches the HTML and the maps.
- Organization or LocalBusiness on the homepage, with the real NAP.
- FAQPage from support calls, not from copywriting.
- Service on the key services, with a price or "from …".
- A check in the validator and in the Leadsy report.
The developer gets an action plan with fields, not "add schema". Marketing approves the numbers. Otherwise the channels drift apart again in a month.
Schema works together with robots.txt, llms.txt, the FAQ text, and the listings. One layer does not carry it.
Checking it, and GEO Score
The express audit shows whether markup exists, which fields are empty, and whether the phone matches the maps. Paste the URL before you edit the admin or GTM.
Open 2GIS and Yandex Business next to the validator. If the phones do not match, line up the contacts on the site first, then edit the JSON-LD.
GEO Score shows the gap with the niche. On the metric: the GEO Score article. No developer: a full audit with ready JSON. Pricing: the site.
Where to start today
Do not install an "auto-schema" plugin without reading the output. Six months with a fake rating is worse than six months with no markup.
A short checklist: one phone in schema and in the footer, the FAQ in HTML equals the FAQ in JSON-LD, prices on the services, no duplicate Organization. Fifteen minutes with the page source.
Next in the chain: an FAQ for Alice or robots.txt. Snapshot first, then edits. Schema with no audit is another layer of contradictions.
Prices in Service: a priceRange of "from 5,000 ₽" beats an empty price. Update priceValidUntil when a promo changes. Last year's discount in JSON-LD is worse than no field.
For an online store, add Product on the cards: stock, price, delivery. A marketplace takes the answer if your site has no clear cards and no schema.
Leave schema alone until the audit. Do not install an "auto" plugin without Ctrl+U. Snapshot first: what is already in the head, and whether it matches the maps.
After a redesign, check that the old JSON-LD is not still in the footer. Two Organization blocks: the validator is green, and Alice takes the stale one.
A short checklist: one phone in schema and in the footer, the FAQ in HTML equals the FAQ in JSON-LD, priceRange on services, no fake AggregateRating. Check it against 2GIS next to the validator.
A free audit shows empty fields and mismatches before you edit GTM. Without a snapshot, schema is another layer of contradictions, not a fix.
Who should do it: not only the developer. The owner approves prices and phones. Marketing supplies the FAQ from calls. An SEO person does not substitute facts from the CRM.
How long the effect takes: the validator can be green tomorrow, and Alice can keep an old block for a month. One clean JSON-LD first, then a recrawl, then tests.
Reviews and schema: an inflated AggregateRating next to a real three stars in 2GIS is a conflict. Better no rating in the markup than a fake one.
Questions: LeadsyLabs FAQ. Plans that include ready JSON: the pricing page.
Typical case: a schema plugin was installed, and the owner never opened the source. Six months later there are two LocalBusiness blocks and a phone from 2019. Alice names the competitor with a current listing. The fix is not the plugin. It is cleaning the head and checking it against 2GIS.
MedicalBusiness, Restaurant, AutoRepair: take the type that matches the niche, not "Organization for everything". The wrong type does not ban you. It blurs the signal. One precise LocalBusiness beats five vague ones.
BreadcrumbList on a multi-page site helps people and the model see where you sit in the structure. On a one-page landing it is optional.
JSON-LD in the head, not in the footer after a redesign. Ctrl+U on the homepage and on a service page are two different snapshots. Often the service pages are empty, and the homepage is junk from a plugin.
A green Google validator does not mean "Alice is satisfied". Check the fields against 2GIS and against what a person sees on the screen. The validator does not know your business.
After a schema edit, wait for a recrawl. An Alice test the next day is too soon. A week with open bots and matching NAP is a normal minimum.
If you do not know where to start: one LocalBusiness on the homepage, one FAQPage on the top service, priceRange on Service. Three blocks, not twenty types from a generator.