Buyer’s guide · Ranking for AI
AI engines quote sites they can actually read. Schema markup and an llms.txt file label your facts so a machine can lift them, instead of guessing from your prose or skipping you.
What does machine-readable mean, and how do schema and llms.txt do it?
Machine-readable means a search engine or AI can read your facts without having to guess them. A human sees your hours and prices laid out on the page; a machine needs those same facts labeled in the code so it knows what each one is.
Schema and llms.txt are the two labels that do this. Schema markup tags the facts inside your pages, and an llms.txt file points the AI crawlers at your best answers.
Together they let a machine lift your facts cleanly instead of guessing or skipping you. The page that labels its facts gets quoted; the page that leaves them as plain text often gets passed over.
What is schema markup, and what does it tell the machine?
- Schema markup (JSON-LD)
- A small block of structured code added to a page that labels its facts for machines, written in a format called JSON-LD. It does not change what a human sees; it tells search engines and AI what each fact actually is.
Think of it as a name tag on every fact. Without it, a search engine sees the text 8,000 to 16,000 and has to guess it is a price. With schema, the code says plainly: this is the price, this is the service area, these are the hours.
Two types do most of the work for a contractor. LocalBusiness schema labels who you are, where you work, and how to reach you. FAQ schema labels a question and its answer so the machine can quote them as a pair.
This matters because the gap is real. By one estimate, the large majority of contractor sites ship no LocalBusiness schema at all. That locks them out of rich results, the enhanced listings Google builds from labeled facts, and leaves the AI to read them by guessing. The site that labels its facts simply makes itself easier to quote.
What is an llms.txt file, and what does it do?
- llms.txt
- A simple text file placed at the root of your website that points AI crawlers at your most quotable pages, with a short line on what each one answers. It is a signpost for the machines, not a setting they obey.
Its whole job is to help the AI find your best answers quickly. It lists your strongest pages, your service area, and a one-line description of each, so a crawler does not have to dig to learn what you offer.
But here is the honest part, because a whole cottage industry sells the wrong version of it.
MythAdd an llms.txt file and the AI starts citing you.
Reality. llms.txt is a signpost. It points the crawler at pages that have to be worth quoting on their own. If the pages it points to are buried, painted in by the browser, and unlabeled, the file points at nothing.
Why it persists · The AI cites the answer it can extract from the rendered page, not the file at your root. The file is the last 5% of the work. The 95% is the server-rendered, answer-first, schema-labeled page underneath it. Skip the page work and the file is decoration; do the page work and the file just helps the crawler find what is already worth quoting.
So the file ships in an afternoon, but the site underneath takes a real build. An llms.txt over thin pages is a sitemap to an empty house.
How do schema and llms.txt fit together on a real page?
They sit on top of a page that is already worth quoting. The page states the answer plainly in its first sentence, schema labels that answer for the machine, and llms.txt points the crawler to the page. Three layers, same goal: make the facts impossible to misread.
<!-- The page: question in the heading, answer in sentence one. --><h2>How much does a roof replacement cost in Charlotte?</h2><p>A full asphalt-shingle roof replacement in Charlotte runs $8,500 to $16,000 for an average single-family home, driven by square footage, pitch, and material grade.</p><!-- The schema: tell the machine what it just read. -->{ "@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [{ "@type": "Question", "name": "How much does a roof replacement cost in Charlotte?", "acceptedAnswer": { "@type": "Answer", "text": "A full asphalt-shingle roof replacement in Charlotte runs $8,500 to $16,000..." } }]}# /llms.txt — point the AI crawlers at your best answers# Peak Roofing — Charlotte, NC> Roof replacement, repair, and storm restoration.## Answers- [Roof replacement cost](/guides/cost-guide): full pricing- [AI Overviews](/guides/ai-overviews): the zero-click shift## Service area- [Charlotte](/locations/charlotte): service detail + projectsOne more rule keeps it working. The answer must be server-rendered, meaning it is in the code the moment the page loads, not added afterward by the browser.
Many template sites build their content in after the fact, so the crawler sees an empty shell and quotes a competitor instead. Labels only help if there is a real, readable answer underneath them to label.
Get the structure right and the file is the final touch over a site that already deserves the visit. See how to write the answer itself in Answer-first content, or run the audit to check whether your answers are in the HTML at all.
Want this guide as a PDF?
One field. We’ll email it. The guide stays free either way.