Skip to content

Blog

What AI crawlers actually see on your testimonial page

You can have a beautiful wall of love and still show nothing to the systems that decide what to recommend. People who ask an AI assistant "what do customers say about X?" get an answer built from pages the assistant could read. If your testimonials only appear after JavaScript runs in a browser, they may not be among them.

This post explains what a crawler gets from a typical testimonial page, how to check your own, and what to change.

A visitor and a crawler see different pages

When you open a page in a browser, the browser downloads HTML, then runs JavaScript, which can fetch more data and draw more content. A testimonial widget often works this way: the HTML holds an empty container and a script, and the script fills it in.

Many crawlers read the HTML a server returns and don't run your page's JavaScript. Some do render pages, some do it later and some only for certain sites. You can't tell from outside, and vendors change their behaviour. The safe assumption is simple: if the text is not in the HTML your server sends, a crawler may never see it.

Three places a crawler can find your testimonials

1. The HTML itself

The quote, the person's name and their company should be present as text in the first response. Right-click, choose "View page source" and search for a phrase from one of your quotes. If it isn't there, you are relying on JavaScript.

2. Structured data

Schema.org markup in JSON-LD describes the page for machines. For a product with customer reviews, that means a Product with Review entries and an AggregateRating. It makes the content unambiguous: this is a quote, this is the author, this is the rating.

Structured data helps systems understand a page. It doesn't force anyone to show it, and Google has its own rules about which reviews are eligible, which we cover in the review schema post.

3. An llms.txt file

llms.txt is a plain-text file, usually at the root of a site, written for language models. It is a convention that some tools and publishers have adopted, not a standard every assistant honours, so treat it as a bonus rather than a switch. It is cheap to publish and easy to read: a short list of what is on the site, in Markdown.

Are crawlers allowed in?

Separately from what is on the page, your robots.txt says which crawlers may fetch it. Three user agents come up often: GPTBot (OpenAI), ClaudeBot (Anthropic) and PerplexityBot (Perplexity). If your robots file disallows them, they are asked not to fetch the page, however good it is. That can be a deliberate choice. Just make sure it is yours.

An example from the web

On 26 Oct 2026 we fetched one public wall from another testimonial product without running JavaScript. The HTML we received had no JSON-LD and no testimonial text. The page may load them in the browser, so a person sees a full wall. A crawler that reads only the HTML would find an empty one. We have not tested every page from that product, so treat this as one observation, not a verdict.

The point is not who did it. The point is how easy it is for a good-looking wall to read as empty, and how easy it is to check.

Check your own page in two minutes

  1. Open your page, then choose "View page source". Search for a sentence from a testimonial.
  2. Search the same source for application/ld+json. If it's there, read the block and check it contains your reviews.
  3. Visit /llms.txt and /robots.txt on your domain.
  4. Or run the AI-readability check. It fetches your URL the way a crawler without JavaScript would and reports what it found.

How to fix an empty page

You have three routes, in rough order of effort:

  • Server-render the quotes. If you build the page yourself, render testimonials on the server so they are in the first response. This is the most robust option.
  • Use a proof page. A HappySaid proof page is rendered on the server, with the quotes and review markup in the HTML and a llms.txt alongside it. You can link to it from your site, and use the widget for the visual wall.
  • Add a static fallback. If you use a client-side widget, add a plain-HTML list of a few of your best quotes underneath it, marked up as text on the page.

Keep the quotes real

None of this works if the content is thin. A page of fifteen specific, attributed quotes will be more useful to a reader and to a machine than a hundred anonymous lines. Include the person's name, role and company when they agree, and the date. Specific text is what an assistant can quote back.

What this does and does not do

Making a page readable removes a barrier. It doesn't promise a mention, a ranking or a particular answer from any assistant. What you control is whether the evidence is there to be found.