{"id":51,"date":"2026-09-01T18:39:36","date_gmt":"2026-09-01T11:39:36","guid":{"rendered":"https:\/\/testivo.tech\/blog\/llms-txt-for-testimonials"},"modified":"2026-09-08T11:16:20","modified_gmt":"2026-09-08T04:16:20","slug":"llms-txt-for-testimonials","status":"publish","type":"post","link":"https:\/\/testivo.tech\/blog\/llms-txt-for-testimonials","title":{"rendered":"llms.txt for testimonials: how to make AI assistants cite your wall of love"},"content":{"rendered":"<h2 class=\"wp-block-heading\">The 30-second version<\/h2>\n<p class=\"wp-block-paragraph\"><code>llms.txt<\/code> is a plain-text file at the root of your site (e.g., <code>yourbrand.com\/llms.txt<\/code>) that gives AI assistants a clean, normalized version of your public content to read and quote.<\/p>\n<p class=\"wp-block-paragraph\">For testimonial pages specifically, it&#8217;s the difference between &#8220;an AI assistant mentioned us when someone asked for testimonial tool recommendations&#8221; and &#8220;an AI assistant couldn&#8217;t find us.&#8221; Schema.org gets you the Google rich snippet. llms.txt gets you the AI citation. You need both.<\/p>\n<p class=\"wp-block-paragraph\">This guide walks through the exact file format, a working example for a wall of love, and how the major AI assistants actually consume these files in 2026.<\/p>\n<h2 class=\"wp-block-heading\">What <code>llms.txt<\/code> is (and isn&#8217;t)<\/h2>\n<p class=\"wp-block-paragraph\">The spec was proposed by Jeremy Howard and Answer.AI in 2024, and it&#8217;s been picking up adoption faster than almost any other AI-readability standard. The premise is simple: the web was built for humans with browsers, and crawlers had to be clever about extracting meaning.<\/p>\n<p class=\"wp-block-paragraph\">Large language models work the same way. but they&#8217;re not as good at it as you&#8217;d think when content is buried in JavaScript, spread across 20 pages, or rendered as a screenshot carousel.<\/p>\n<p class=\"wp-block-paragraph\"><code>llms.txt<\/code> solves this by giving the model a flat, predictable file it can ingest in one pass. It&#8217;s Markdown, it&#8217;s plain text, and it lives at a known URL. No JavaScript. No auth. No fancy rendering. Just content.<\/p>\n<p class=\"wp-block-paragraph\">A few things to be clear about:<\/p>\n<ul class=\"wp-block-list\">\n<li><strong>It&#8217;s not a ranking factor.<\/strong> Search engines don&#8217;t reward or penalize sites that have one. It&#8217;s a discoverability layer for AI assistants specifically.<\/li>\n<li><strong>It doesn&#8217;t replace your HTML.<\/strong> AI assistants still crawl the real site. <code>llms.txt<\/code> is a parallel, faster, cleaner path. not a substitute.<\/li>\n<li><strong>It&#8217;s a recommendation, not a standard.<\/strong> The <a href=\"https:\/\/llmstxt.org\" target=\"_blank\" rel=\"noopener\">llmstxt.org spec<\/a> is descriptive of what most tools and assistants now expect, not an enforced rule. But matching it is the path of least resistance.<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\">For testimonial pages, this matters more than for most content types because the data. quotes, ratings, names, outcomes. is exactly the kind of structured information AI assistants want to cite. It&#8217;s just that the format they&#8217;re getting it in (your wall of love page) wasn&#8217;t built for them.<\/p>\n<h2 class=\"wp-block-heading\">The exact format<\/h2>\n<p class=\"wp-block-paragraph\">A <code>llms.txt<\/code> file is a Markdown document with three sections: a project title and summary, a list of key sections, and a list of detailed content links. Here&#8217;s a working example for a fictional testimonial wall:<\/p>\n<pre class=\"wp-block-code language-markdown\"><code># Lumen Analytics. Testimonials\n\n&gt; Customer testimonials, case studies, and product reviews for Lumen Analytics. Includes 127 verified reviews with star ratings, written permission, and source attribution.\n\n## Testimonials\n\n- [Wall of Love](https:\/\/lumen.io\/wall): All public testimonials, sorted by recency\n- [Case Studies](https:\/\/lumen.io\/case-studies): Long-form customer success stories\n- [Pricing Page Testimonials](https:\/\/lumen.io\/pricing#testimonials): Testimonials placed near plan comparison\n\n## Reviews by Industry\n\n- [SaaS Reviews](https:\/\/lumen.io\/wall\/industry\/saas)\n- [Agency Reviews](https:\/\/lumen.io\/wall\/industry\/agency)\n- [E-commerce Reviews](https:\/\/lumen.io\/wall\/industry\/ecommerce)\n\n## Reviews by Rating\n\n- [5-Star Reviews](https:\/\/lumen.io\/wall?rating=5)\n- [4-Star Reviews](https:\/\/lumen.io\/wall?rating=4)\n\n## Optional\n\n- [Company Background](https:\/\/lumen.io\/about)\n- [Contact](https:\/\/lumen.io\/contact)<\/code><\/pre>\n<p class=\"wp-block-paragraph\">Three rules:<\/p>\n<ol class=\"wp-block-list\">\n<li><strong>The top of the file is mandatory<\/strong>. <code># Title<\/code> followed by a <code>><\/code> blockquote summary. The summary is what the AI assistant reads first; it sets context for everything below.<\/li>\n<li><strong>Sections are H2 headings.<\/strong> Each <code>##<\/code> heading groups related links. The order matters: most assistants read top to bottom, so the most important content should be highest.<\/li>\n<li><strong>Each link is <code>- <a href=\"URL\">Title<\/a><\/code><\/strong> with optional <code>:<\/code> description. The description becomes part of the prompt context, so it&#8217;s worth writing specifically.<\/li>\n<\/ol>\n<p class=\"wp-block-paragraph\">The spec also defines <code>llms-full.txt<\/code>. a separate file with the <em>full content<\/em> of every linked page, inlined as Markdown. For a wall of love page, <code>llms-full.txt<\/code> is a single Markdown file containing every testimonial, the schema, the page metadata, and the citation. This is what gets you cited, not just discovered.<\/p>\n<h2 class=\"wp-block-heading\">Schema vs llms.txt: when each one matters<\/h2>\n<p class=\"wp-block-paragraph\">A common question: do I need both? Yes, and the reasons are different.<\/p>\n<p class=\"wp-block-paragraph\"><strong>Schema.org<\/strong> is read by Google&#8217;s crawler and Bing&#8217;s crawler. It produces rich snippets (stars in the search results), and it tells the search engine that a piece of text is a <code>Review<\/code> rather than marketing copy. Without schema, you don&#8217;t get the star rating, and your testimonials are categorized as generic page text.<\/p>\n<p class=\"wp-block-paragraph\"><strong>llms.txt<\/strong> is read by ChatGPT&#8217;s crawler, Claude&#8217;s crawler, Perplexity&#8217;s crawler, and Gemini&#8217;s crawler (when fetching real-time content). It doesn&#8217;t produce a rich snippet because there&#8217;s no rich snippet in ChatGPT. it just gets the model a clean version of your content to quote.<\/p>\n<p class=\"wp-block-paragraph\">Without llms.txt, the AI assistant has to scrape your HTML, follow JavaScript, parse your React app, and guess which content is structured. Most of the time it gives up.<\/p>\n<p class=\"wp-block-paragraph\">The shorthand: <strong>schema is for Google, llms.txt is for AI assistants.<\/strong> Schema gets you the rich snippet. llms.txt gets you the AI citation. If you have testimonial content that should be cited when someone asks an AI assistant &#8220;what&#8217;s the best testimonial tool?&#8221; or &#8220;show me examples of good SaaS testimonial pages,&#8221; you need both.<\/p>\n<p class=\"wp-block-paragraph\">Our <a href=\"\/blog\/schema-markup-for-testimonials\">complete guide to schema markup for testimonials<\/a> covers the schema side in depth; this article is the parallel guide for llms.txt. If you ship just one, ship schema first (Google&#8217;s index is what most AI assistants fall back to). If you ship both, you cover both surfaces.<\/p>\n<h2 class=\"wp-block-heading\">How each AI assistant reads it<\/h2>\n<p class=\"wp-block-paragraph\">As of 2026, the major AI assistants all claim to support <code>llms.txt<\/code> to some degree. The actual behavior varies.<\/p>\n<ul class=\"wp-block-list\">\n<li><strong>ChatGPT (OpenAI)<\/strong>. fetches <code>llms.txt<\/code> when it exists and the site&#8217;s <code>robots.txt<\/code> allows <code>GPTBot<\/code>. ChatGPT&#8217;s search backend is Bing&#8217;s index, so the schema-side bonus still applies, but the llms.txt file is what makes a wall-of-love content citable in conversational answers.<\/li>\n<li><strong>Claude (Anthropic)<\/strong>. fetches <code>llms.txt<\/code> and respects it. Claude&#8217;s citations tend to draw more heavily from the linked content than from search snippets, so a well-written <code>llms.txt<\/code> summary matters more for Claude than for ChatGPT.<\/li>\n<li><strong>Perplexity<\/strong>. aggressive fetcher, reads <code>llms.txt<\/code> and <code>llms-full.txt<\/code> both. The &#8220;Sources&#8221; panel you see in Perplexity answers often includes pages you linked from llms.txt.<\/li>\n<li><strong>Gemini (Google)<\/strong>. Google&#8217;s position is that structured data (schema) is the right path. Gemini still fetches <code>llms.txt<\/code> if it&#8217;s there, but the team is less vocal about the standard than Anthropic or Perplexity.<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\">The common requirement across all four: your <code>robots.txt<\/code> must allow the relevant crawler. Most sites block <code>GPTBot<\/code>, <code>ClaudeBot<\/code>, and <code>PerplexityBot<\/code> by default. If yours does, no <code>llms.txt<\/code> will help. The fix is two lines in your robots.txt.<\/p>\n<h2 class=\"wp-block-heading\">How to publish and validate<\/h2>\n<p class=\"wp-block-paragraph\">Publishing is straightforward:<\/p>\n<ol class=\"wp-block-list\">\n<li><strong>Create the file<\/strong> at <code>https:\/\/yourdomain.com\/llms.txt<\/code>. the path matters, the file extension matters, and the URL must be the canonical root.<\/li>\n<li><strong>Optionally add <code>llms-full.txt<\/code><\/strong> at <code>https:\/\/yourdomain.com\/llms-full.txt<\/code> if you want the inlined full content.<\/li>\n<li><strong>Make sure both are accessible<\/strong> (no auth wall, not blocked in robots.txt).<\/li>\n<li><strong>Reference them<\/strong> in your <code>robots.txt<\/code> if you want to be explicit about the crawlers you allow.<\/li>\n<\/ol>\n<p class=\"wp-block-paragraph\">To validate, fetch the file yourself in a browser. If it renders as text, the format is right. If you want to test that an AI assistant can read it, the easiest way is to ask one. Open ChatGPT, ask &#8220;what does yourdomain.com\/llms.txt say?&#8221;, and see if the response includes content from your file.<\/p>\n<p class=\"wp-block-paragraph\">If you get a polite &#8220;I can&#8217;t browse to that URL&#8221; or no content, double-check the file is at the root and not blocked by robots.<\/p>\n<p class=\"wp-block-paragraph\">A more rigorous test: run a crawler simulation with <code>curl -A \"GPTBot\/1.0\"<\/code> against the file. If it returns 200 with the expected content, the path is open.<\/p>\n<h2 class=\"wp-block-heading\">When this is enough<\/h2>\n<p class=\"wp-block-paragraph\">If you have a public wall of love page with all your customer testimonials on it, the steps that matter are:<\/p>\n<ol class=\"wp-block-list\">\n<li>Publish a valid <code>llms.txt<\/code> at the root of your domain<\/li>\n<li>Optionally add <code>llms-full.txt<\/code> for the inlined full content<\/li>\n<li>Make sure <code>GPTBot<\/code>, <code>ClaudeBot<\/code>, and <code>PerplexityBot<\/code> aren&#8217;t blocked in <code>robots.txt<\/code><\/li>\n<li>Pair it with <a href=\"\/blog\/schema-markup-for-testimonials\">valid schema markup<\/a> for the Google side<\/li>\n<\/ol>\n<p class=\"wp-block-paragraph\">Do those four things, and the AI assistants that matter have a clean, predictable path to your testimonials. The wall of love you&#8217;ve already built. described in our <a href=\"\/blog\/wall-of-love-what-it-is-and-how-to-add-one\">wall of love guide<\/a>. does the rest.<\/p>\n<p class=\"wp-block-paragraph\">The 80\/20 here is real: a 30-minute investment in a well-written <code>llms.txt<\/code> will produce more AI citations in the next quarter than most teams will get from a year of &#8220;GEO tactics.&#8221; Most sites haven&#8217;t done this yet, which is exactly why doing it now puts you ahead.<\/p>\n<p class=\"wp-block-paragraph\">A dedicated <a href=\"\/testimonial-software\">testimonial tool<\/a> can generate both the <code>llms.txt<\/code> and the per-wall feed automatically, which is the right move once you have more than a handful of testimonials. For a one-page wall, the manual version is fine.<\/p>\n<p class=\"wp-block-paragraph\">&#8212;<\/p>\n<p class=\"wp-block-paragraph\">llms.txt is a companion format to the structured data layer. The full reference is the <a href=\"\/blog\/review-schema\">review schema pillar<\/a>, with the JSON-LD implementation as the main format.<\/p>\n<p class=\"wp-block-paragraph\">llms.txt applies to the testimonial type. The <a href=\"\/blog\/types-of-social-proof\">types of social proof<\/a> page covers the typology the markup serves.<\/p>\n<p class=\"wp-block-paragraph\">llms.txt serves the testimonial output. The <a href=\"\/blog\/customer-advocacy\">customer advocacy pillar<\/a> is the parent system.<\/p>\n<p class=\"wp-block-paragraph\">llms.txt serves the written format. The <a href=\"\/blog\/types-of-testimonials\">types of testimonials<\/a> page is the format menu.<\/p>\n<p class=\"wp-block-paragraph\">llms.txt serves displayed testimonials. The <a href=\"\/blog\/displaying-testimonials\">displaying testimonials<\/a> page is the placement typology.<\/p>\n<p class=\"wp-block-paragraph\">The structured data layer has multiple schema types. The <a href=\"\/blog\/faq-page-schema-vs-review-schema\">FAQ page schema vs review schema<\/a> page is the FAQPage vs Review distinction.<\/p>\n<p class=\"wp-block-paragraph\">The llms.txt format serves testimonials. The <a href=\"\/blog\/customer-referrals\">customer referrals<\/a> page is the sibling.<\/p>\n<p class=\"wp-block-paragraph\">The llms.txt format is the newer citable layer for AI search. The <a href=\"\/blog\/testimonials-and-ai-search\">testimonials and AI search<\/a> page covers the four modes, the llms.txt page covers the technical format.<\/p>\n<p class=\"wp-block-paragraph\">The llms.txt is the AI-readable output. The <a href=\"\/blog\/ai-generated-testimonials\">AI generated testimonials<\/a> page is the AI-produced content side of the equation.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>What llms.txt is, why AI assistants can&#8217;t read your wall of love without one, and the exact file format \u2014 with a working example for a testimonial page.<\/p>\n","protected":false},"author":2,"featured_media":293,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[13,12,11],"class_list":["post-51","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-testimonials-and-seo","tag-ai-search","tag-llms-txt","tag-schema-markup"],"blocksy_meta":{"styles_descriptor":{"styles":{"desktop":"","tablet":"","mobile":""},"google_fonts":[],"version":8}},"_links":{"self":[{"href":"https:\/\/testivo.tech\/blog\/wp-json\/wp\/v2\/posts\/51","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/testivo.tech\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/testivo.tech\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/testivo.tech\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/testivo.tech\/blog\/wp-json\/wp\/v2\/comments?post=51"}],"version-history":[{"count":16,"href":"https:\/\/testivo.tech\/blog\/wp-json\/wp\/v2\/posts\/51\/revisions"}],"predecessor-version":[{"id":525,"href":"https:\/\/testivo.tech\/blog\/wp-json\/wp\/v2\/posts\/51\/revisions\/525"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/testivo.tech\/blog\/wp-json\/wp\/v2\/media\/293"}],"wp:attachment":[{"href":"https:\/\/testivo.tech\/blog\/wp-json\/wp\/v2\/media?parent=51"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/testivo.tech\/blog\/wp-json\/wp\/v2\/categories?post=51"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/testivo.tech\/blog\/wp-json\/wp\/v2\/tags?post=51"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}