← All articles
7 min readAEO,Llm,Retrieval

What We Publish So Answer Engines Can Quote Our Sites

By Maksym Bardakh Ivko · Chief Executive Officer

In short

BBMM Technologies publishes five things for answer engines on its sites: a robots.txt that names AI crawlers one by one, an llms.txt summary, an llms-full.txt with the longer text, FAQ answers that can be quoted alone, and FAQPage structured data built from those same answers. On bbmmtech.com the two llms files are generated at build time. On flowoapp.com, llms-full.txt is assembled from the prerendered pages.

What we publish for answer engines

An answer engine can only quote a page it is allowed to fetch and able to read without running our JavaScript. We work on both conditions on three sites: bbmmtech.com, flowoapp.com and textpack.app.

The set is small and each item is a plain file or a block of markup.

  • robots.txt with a named group for each AI crawler we want to admit.
  • /llms.txt, a short Markdown record of who we are and where the pages live.
  • /llms-full.txt, the longer text in one request.
  • FAQ answers written so that each one stands alone.
  • FAQPage structured data generated from the same answers the page shows.

bbmmtech.com is a Next.js static export and flowoapp.com is prerendered at build time, so every page arrives as finished HTML.

How robots.txt names AI crawlers

The robots.txt on bbmmtech.com is generated by a route file that holds an explicit list of 17 user agents. A wildcard rule already allows every crawler. The list adds one group per agent, each with Allow set to the site root. It includes GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, PerplexityBot, Google-Extended, Applebot-Extended, Amazonbot and CCBot.

The flowoapp.com file has the wildcard plus 19 named groups, sorted under three comments: search, AI retrieval and citation, AI training and grounding. Every group disallows /api/, because that path is the POST endpoint behind the Ask Ondi chat and holds nothing a crawler can index.

We name agents separately for two reasons that are written in the file's own comments. Google-Extended and Applebot-Extended are opt-out tokens, so an Allow line under their names is an explicit opt-in to grounding. OAI-SearchBot and ChatGPT-User are the fetchers that retrieve and cite pages, while GPTBot collects training data. A file that lists GPTBot alone says nothing to the fetchers that produce citations.

We left the Content-Signal line out of the flowoapp.com robots.txt. Lighthouse's robots.txt audit reads it as an unknown directive and fails the file, and the named groups already state the same permission.

What llms.txt contains

The llms.txt on bbmmtech.com follows the llmstxt.org layout: a title, a quoted summary, then sections. The summary is two sentences that give the legal name, the city, the incorporation date and the two products with their platforms.

The sections that follow are lists of facts.

  • Company facts: legal name, incorporation date and jurisdiction, registry name and number, registered office, officers, contact addresses.
  • Services: the four kinds of client work we take on.
  • Own products: name, platform, URL and a two-sentence summary for each.
  • Pages: the home page, FAQ, blog, feed, legal documents, sitemap and llms-full.txt.
  • Naming: the preferred name, the legal name, and a line saying BBMM has no public expansion.
  • What this company does not claim.

The file also states its purpose and its licence to quote in two sentences: it exists so assistants can describe and cite the site accurately, and content may be quoted with attribution to BBMM Technologies.

The flowoapp.com file is a product record. It carries store identifiers, a description of each feature, a privacy section, a list of scheduler limits and eight questions in Q and A form. The textpack.app file lists the six source checks TextPack runs before export and the formats it writes.

What llms-full.txt adds

llms-full.txt lets an assistant read the substance of a site in one request. The two sites build it differently because their content lives in different forms.

On bbmmtech.com the file repeats the llms.txt header and then prints every FAQ answer under its category heading. After that it lists each published article with its URL, publication date, update date, author, summary and key points. The full article text stays at the URL. The current build of the file is about 106 KB.

On flowoapp.com the prerender script starts from llms.txt and appends the text of every page in the sitemap except the five language home pages, which llms.txt already describes. Each page starts with its title and a line that begins with URL: so a quoted passage can be traced to its address.

A small converter turns the prerendered HTML into text. It deletes script, style, nav, svg, noscript and template elements, because they repeat on every page. Headings become Markdown headings two levels deeper than in the page, and list items become bullets.

How FAQ answers are written and marked up

The FAQ on bbmmtech.com holds 18 questions in four categories, and the rule at the top of the file says each answer must be direct and self-contained. In practice this means the answer repeats its subject. The answer to the question about location begins with the full company name and ends with the street address, so it still reads correctly when a model lifts it without the question.

The page renders the questions as a definition list, with the question in a dt element and the answer in a dd element. The same array is passed to a builder that emits FAQPage structured data, with one Question and one acceptedAnswer per item. The text in the markup and the text on the page cannot differ, because both come from one array.

Blog articles follow the same pattern. Each article has a summary, a list of key points and its own questions. When an article has questions, the page emits a FAQPage block next to its BlogPosting block.

Freshness and discovery signals

We give crawlers dates that change only when content changes. One constant in the SEO module holds the date the site copy was last reviewed. It is printed in llms.txt as the last reviewed date, in a last-modified meta tag and in the home page's dateModified.

Each article in the sitemap carries its own lastModified taken from its update date. A single shared date on every URL tells a crawler nothing about what changed.

The robots meta tag sets max-snippet to -1 for Googlebot, which removes the length limit on quoted text. After each deploy, a job reads the live sitemap and submits its URLs to IndexNow.

Limits of this approach

llms.txt is a community proposal, and no answer engine has committed to reading it. We treat the two files as a low-cost addition. The HTML pages remain complete without them, and everything in the files is also stated on a page.

We publish no figures on how often our pages are cited, and this article makes no claim about ranking. It describes what the files contain and how they are built.

Key takeaways

  • The bbmmtech.com robots.txt allows every crawler by wildcard and adds 17 named groups for AI and search agents.
  • The flowoapp.com robots.txt has 19 named groups, and each one disallows the /api/ path used by the site's chat endpoint.
  • On bbmmtech.com, llms-full.txt prints all 18 FAQ answers plus the summary and key points of every published article.
  • On flowoapp.com, llms-full.txt is llms.txt followed by the converted text of every sitemap page except the five language home pages.
  • FAQPage structured data on bbmmtech.com is generated from the same array that renders the visible FAQ.

Frequently asked questions

What is the difference between llms.txt and llms-full.txt?
llms.txt is a short Markdown summary of a site with links to its main pages. llms-full.txt carries the longer text in one file so an assistant does not have to crawl. On bbmmtech.com the full file adds every FAQ answer and a summary of each article.
Does allowing GPTBot make a site citable in ChatGPT?
GPTBot collects training data. The agents that fetch pages for answers and citations are OAI-SearchBot and ChatGPT-User. BBMM Technologies lists all three by name in robots.txt on its sites.
Why does robots.txt name Google-Extended and Applebot-Extended?
Both are opt-out tokens that site owners can block to keep content out of AI grounding. Naming them with an Allow line states the opposite choice in writing. The wildcard rule would admit them anyway, so the named group is a statement of intent.
How should a FAQ answer be written so an AI can quote it?
On bbmmtech.com each FAQ answer names its subject in full and gives the fact in the first sentence. The answer about location starts with the company name and includes the street address. A passage written this way keeps its meaning after it is separated from the question.
Do answer engines read llms.txt?
llms.txt is a proposal published at llmstxt.org, and no engine has committed to reading it. BBMM Technologies publishes the file because it costs little to generate. The HTML pages carry the same facts and remain the primary source.

References

About the author

Maksym Bardakh Ivko

Chief Executive Officer

Maksym leads product at BBMM Technologies. He designs Flowo’s scheduler and writes most of what ships in it.