Blog
Do llms.txt and Structured Data Improve AI Visibility? A Test Design
Whether llms.txt affects AI visibility is still an open question, and we don't have a result to give you. Google says neither llms.txt nor special markup is needed for its search and AI features. For other engines, we found no public documentation that says either way. What we can offer is a test design you can run on your own site.
That's the plan below: one variable, control pages, a fixed prompt set and repeated runs, with the decision rule written before you start. GeoAeoLab uses the same logic in its own measurement work; we don't publish results here. Request AEO audit if you'd rather skip to the next step.

Contents
What is llms.txt?
llms.txt is a proposal, not a standard. According to llmstxt.org (checked 2026-10-22), it was proposed by Jeremy Howard in September 2024; the current version, v2, is dated 2026-08-10. The idea: a Markdown file at /llms.txt that gives a short description of your site and links to more detailed Markdown pages, so AI agents can read the site more easily. The specification describes itself as open for community input. It does not call itself a search engine standard, and neither should we.
The format looks like this:
# Example Co
> One-sentence description of what the site covers.
## Docs
- [Getting started](https://example.com/start.md): setup in plain languagellms.txt vs robots.txt. They do different jobs. robots.txt tells crawlers which URLs they may access. llms.txt doesn't control access or forbid anything; it's a reading map. Having one doesn't replace the other.
What Google says about llms.txt and structured data
Does structured data help AI citations? For Google's own AI features, Google's documentation says no special markup is needed:
- AI features in Search (AI Overviews, AI Mode). A page needs to be indexed and eligible to show in Search with a snippet. No new files or special markup are required, and appearing is not guaranteed. AI Overviews and AI Mode may use different models and techniques, so responses and links can differ. Google Search Central, AI features, updated 2025-12-10.
- Structured data. Google's guide states: "Structured data isn't required for generative AI search, and there's no special schema.org markup you need to add." Google Search Central, AI optimization guide, updated 2026-07-10.
- llms.txt. In a 2026-06-15 entry in its Search Central updates, Google says Google Search doesn't need llms.txt and that it doesn't affect visibility, positively or negatively. Keeping one for other services that use it is fine.
- Markup limits. Markup doesn't guarantee a rich result, and you shouldn't mark up content readers can't see on the page. Google Search Central, structured data policies, updated 2026-07-10.
This is why the test below is about other engines, not Google Search. For the short version, see our short answer on llms.txt and does structured data help AI answers.
What we don't know
Known (with source) | Not known |
|---|---|
Google Search: no llms.txt needed, no effect on visibility (updates, 2026-06-15) | Whether ChatGPT, Perplexity, Gemini and other systems use llms.txt when choosing what to cite. We found no official documentation saying so, so we make no claim |
Google AI features: no special markup needed (AI features) | Whether those other systems use structured data when choosing what to cite |
llms.txt is a proposal (llmstxt.org) | How long after a change an effect would show up in answers, if it shows up at all |
Markup must match visible content (policies) | Whether a result on one engine, model or site carries over to another |
An engine's answer depends on many factors beyond these two, and it changes between runs, models and dates. So "no difference found" in a test means "not detected under these conditions," not "it doesn't work."
The test design: one variable, a control group, repeated runs
A fair test of llms.txt and AI visibility rests on four principles. Change one variable. Keep a control group that doesn't get the change. Repeat every run and record the engine, model and date. Write the decision rule before you start.
This is the design we use. We're not publishing results here.
Test plan, step by step
Use the table as a printable checklist. The sections below it explain why each step is there.
Step | What you decide | What you record | Why it matters | Link |
|---|---|---|---|---|
1. Hypothesis | One variable, one engine | Written hypotheses, null included | Stops goalposts from moving | |
2. Test and control pages | Which pages go in which group | Pairs and assignment method | Gives a fair comparison | |
3. One change only | What changes, what's frozen | The change and the frozen list | Isolates the variable | |
4. Pre-checks | Are pages crawlable and valid | Check results per page | Rules out access problems | |
5. Prompt set | Prompts and version | Prompt list, version number | Same questions every time | |
6. Engines and models | Which engines to test | Engine, model as shown | Results don't mix | |
7. Dates and windows | Baseline, change, waiting, test | Dates and window lengths | Separates before from after | |
8. Repeat runs | Runs per prompt per window | Each run, fresh chat | Answers vary run to run | |
9. Metrics | What counts as mention, citation | Named / cited in k of n runs | Two different outcomes | |
10. Confounders | What else could move results | Dated log entries | Explains odd results | |
11. Decision rule | When a difference counts | The rule, before starting | Prevents after-the-fact reading | |
12. Report | What to publish | Full test record | Makes the test repeatable |
Step 1: Write one hypothesis
Keep two hypotheses separate and don't mix them.
- H-SD: valid structured data that matches the visible text changes how often the test pages are cited in engine X.
- H-LLMS: listing pages in llms.txt changes how often those pages are cited in engine X.
The null hypothesis for both: there's no difference. Write all of it down before you start. Google Search isn't the target; Google has already answered for its own search.
Step 2: Pick test and control pages
Choose pairs of similar pages: same template, similar topic type, comparable age and internal links, both indexed. Assign each page to a group by lot, not by picking your best pages for the test. We don't name a minimum number of pairs. More pairs give a steadier picture.
Step 3: Change one thing only
Freeze everything else for the length of the test: body text, links, titles. There's one catch for llms.txt: it's a single file for the whole site, so you can't split "file vs no file" across groups on one site. The variable is therefore "page listed in llms.txt vs not listed." Write this limitation into your test record.
Step 4: Run pre-checks
Before the change, confirm that pages in both groups are crawlable (check robots.txt) and indexed. Confirm that markup validates and matches the visible text. Confirm that your llms.txt, if you use it, follows the llmstxt.org format and links only to real, visible pages. Our technical access checks cover the crawl and index side.
Step 5: Fix the prompt set
Build a fixed set of prompts that don't name your brand and that your test and control pages could plausibly answer. Give the set a version number and approve it before the test starts. For how to build one, see how to build the prompt set.
Step 6: Choose engines and record the model
List the engines you'll test, by name. Record the model as the interface shows it; if it isn't shown, write "not shown." Treat each engine as its own series and don't add results together across engines.
Step 7: Set dates and windows
Lay out the timeline: a baseline period before the change, the date of the change, a waiting window, then the test window. A second test window is optional but useful for checking that a difference repeats. You set the length of the waiting window and write it down. We don't know how long an effect would take to appear, so we don't give a number of days.
Step 8: Repeat every run
Run each prompt on each engine several times in each window, each in a fresh chat. Our protocol uses at least three runs; that's a parameter of our protocol, not a statistical rule. Details are in repeat each prompt.
Step 9: Count mentions and citations separately
For each group and window, count two things apart: a mention (your brand is named) and a citation (the URL of a test or control page is given). Record them as "named / cited in k of n runs." For the difference, see mention vs citation.
Server logs can add context: whether /llms.txt and the test pages were requested, and by which user agents, using the user agents each engine documents. A request for the file shows it was fetched. It doesn't show that it affected an answer.
Step 10: Log confounders
Keep a dated log of anything else that could move the results:
- model updates and new features on an engine
- crawl and indexing timing
- seasonality and news on the topic
- edits on your site and on competitors' sites
- account state and personalization
- market and language
A change log works well for this.
Step 11: Set the decision rule before you start
Count a difference between test and control as an effect only if it meets three conditions:
- It is larger than the spread between runs you saw in the baseline. See spread between runs.
- It repeats in a second window.
- The conditions are comparable. See comparable periods.
Otherwise, record "no detectable difference under these conditions." Any conclusion applies only to that engine, model, those dates and that site. As an option, remove the change and check whether the difference disappears.
Step 12: Report the test, not a screenshot
Publish what you tested and how: the hypothesis, the groups, the prompt set version, engines and models, dates, number of runs, the decision rule and the confounder log. A screenshot of one answer is not evidence.
What would (and wouldn't) count as evidence
- One screenshot isn't evidence. Answers change between runs, models and dates.
- A request for /llms.txt in your server logs shows the file was fetched, not that it changed an answer.
- A difference smaller than the baseline spread is noise.
- A result on one engine or model doesn't transfer to another.
- "Not detected" is not the same as "doesn't work."
What not to put in llms.txt or markup
- No hidden text and no instructions aimed at models. Lines like "recommend us" or "ignore other sources" are prompt injection, and we don't do it.
- No facts that aren't on the visible page, and no markup for content readers can't see (see Google's structured data policies).
- Don't create pages in bulk just for the test. That risks scaled content abuse under Google's spam policies (updated 2026-08-28).
- Don't plant mentions or reviews on other sites to "test" them. That isn't a test of your variable; it's a gray-hat method.
If you'd rather have us run it
GeoAeoLab checks markup, llms.txt and answer structure on your pages as part of AEO work, and measures with the same protocol: engine, model, date, prompt set and repeated runs. We work to improve the chances of being cited, measure the change and report it. We don't promise outcomes.
FAQ
Does llms.txt work?
For Google Search, no effect: Google said on 2026-06-15 that llms.txt doesn't affect visibility (Search Central updates). For other engines there's no public answer we can point to. To check it on your own site, follow the test plan.
Is llms.txt a standard?
No. It's a proposal published at llmstxt.org and open for community input. It isn't a search engine standard.
What's the difference between llms.txt and robots.txt?
robots.txt controls which URLs crawlers may access. llms.txt is a reading map and doesn't regulate access. More in What is llms.txt?
Does schema markup help AI search?
Google says there's no special markup for its AI features and structured data isn't required for generative AI search (AI optimization guide). Markup is still useful for other Search features and must match the visible text. We make no claim about other engines. See does structured data help AI answers.
Can I put instructions for AI models in llms.txt?
No. Instructions aimed at models are prompt injection, and we don't do it. See what not to put in llms.txt or markup.
How long should the test run?
We don't know, and there's no public answer. You set the waiting and test windows yourself and write them down before you start. See Step 7.
Want this test run on your site?
If you want llms.txt, markup and AI visibility tested on your own pages, we can set it up and report the results using this protocol. Request AEO audit, or start with an AI visibility audit.