Skip to content
Guides

Does text hidden with CSS display none get read by AI engines?

6 min read

You placed your detailed product specifications inside expandable accordion tabs. A team member inspects the page, sees that the copy uses display: none until a user clicks, and warns you that AI engines like ChatGPT cannot read your features.

The warning sounds logical because Google historically spent significant engineering effort rendering CSS and JavaScript layout trees to evaluate human usability. If a human cannot see text on load, marketing teams assume an automated system ignores it too.

For AI answer crawlers, that assumption is wrong. Answer crawlers look at raw HTML markup rather than rendered DOM trees. Text hidden purely with CSS display: none is usually parsed in the exact same manner as your visible body text.

How answer crawlers process page markup

Search retrieval for language models requires extracting text from thousands of web pages in milliseconds. Executing CSS layout engines to calculate whether an HTML element sits behind a hidden tab, off-screen, or under a display: none property requires immense computational resource.

Live answer crawlers, such as OAI-SearchBot, ChatGPT-User, and PerplexityBot, strip out structural layout rules. They execute an HTTP GET request against your web server, download the returned HTML payload, remove markup tags, and feed the clean text body directly into the prompt context for the model.

Because these crawlers do not construct a visual layout tree, CSS rules like display: none, visibility: hidden, or opacity: 0 do not block text extraction. As long as the characters are present inside the HTML response sent by your server, the crawler sees them.

This creates an ironic inversion of traditional search engine optimization: hidden accordion text, drawer menus, and collapsed comparison tables are often fully visible to live answer crawlers even when they require user interaction for a human reader.

Testing your pages with cURL

You do not need specialized software to verify whether your hidden content is readable to an answer crawler. You can check the raw HTTP payload directly using your command line terminal.

Run a simple cURL request using the user-agent string of an answer crawler against your URL:

curl -sL -A "OAI-SearchBot" https://yourdomain.com/product-page | grep "your hidden text"

If your hidden copy appears in the terminal output, the answer crawler reads it when retrieving pages for a prompt answer. If the command returns nothing, your content is missing from the initial server response.

This test demonstrates the precise boundary of crawler visibility: answer crawlers extract what the web server transmits in its initial text payload. They do not care about the visual styling rules appended to those elements.

The real point of failure: client-side JavaScript

There is one critical scenario where hidden text fails to reach AI engines. If your page relies on client-side JavaScript state changes to fetch or insert text into the DOM, live answer crawlers will miss it completely.

Many modern JavaScript frameworks implement accordions and tabs by leaving the hidden tab panels empty in the initial HTML. When a human visitor clicks a tab, a JavaScript event listener fires an asynchronous fetch request to an API endpoint or instantiates a React component that injects the new copy into the page.

Answer crawlers do not wait for user interactions. They do not click buttons, fire JavaScript event listeners, or run state hydration scripts. If your copy relies on client-side DOM manipulation to appear, the crawler fetches the initial HTML, finds an empty element, and closes the connection.

If you suspect your accordions are invisible to AI engines, the culprit is almost never CSS display: none. The culprit is client-side dynamic rendering.

Training crawlers versus answer crawlers

When reviewing crawler access logs or blocklists, it is essential to distinguish training crawlers from answer crawlers. Confusing these two categories leads to incorrect diagnoses of why a site is missing from generated answers.

Training crawlers gather massive text datasets to train future base models. GPTBot, ClaudeBot, and Google-Extended are training crawlers. Blocking these bots in your robots.txt file means your site content will not enter the dataset used to build the next generation of base model weights. It has zero immediate impact on whether your brand appears in live web searches conducted today inside ChatGPT or Claude.

Answer crawlers execute live web queries during active user sessions. ChatGPT-User, OAI-SearchBot, PerplexityBot, Perplexity-User, Claude-SearchBot, and Claude-User are answer crawlers. Blocking these agents stops immediate citation right now.

In our crawler index scan on 2026-08-08 across a panel of 54,082 domains, 33,670 domains returned a readable robots.txt file. Within those 33,670 readable domains, 5,080 blocked GPTBot (a training crawler). However, only 1,579 blocked OAI-SearchBot, and 2,074 blocked ChatGPT-User (both answer crawlers).

In our census of 4,226 active Y Combinator companies on 2026-08-07, 3,755 had readable robots.txt files, and 253 blocked at least one AI crawler. Many site operators believe they have blocked AI completely by targeting GPTBot, while unknowingly leaving their site accessible to OAI-SearchBot and ChatGPT-User for live search retrieval.

If your hidden text is served in raw HTML, blocking an answer crawler deliberately prevents the engine from reading it. If your answer crawler permissions are open, display: none will not protect that text from being parsed.

What not to buy to solve hidden text indexing

Vendor platforms will tell you that hidden accordions and client-side JavaScript are destroying your visibility in generative engines. They will attempt to sell you expensive DOM pre-rendering middleware, specialized AI rendering proxy services, or proprietary dynamic publishing tools costing thousands of dollars per month.

Do not buy this software.

If your content is missing from cURL tests because of client-side JavaScript, the solution belongs in your existing web development framework. Converting your hidden components to server-side rendering (SSR) or static site generation (SSG) ensures your text is included in the raw HTML response. This fixes visibility for traditional search crawlers, live AI answer crawlers, and human users on slow connections without adding third-party vendor dependencies.

If your copy is already present in raw HTML and merely styled with display: none, you do not need to alter your markup layout at all. The answer crawlers are already parsing it.

Measuring whether engines actually cite your content

Fixing raw HTML output does not guarantee that ChatGPT, Perplexity, or Gemini will cite your brand. Language models are non-deterministic systems. No vendor, tool, or engineering changes can promise a guaranteed mention or ranking in an AI answer.

Single-prompt testing is inherently unreliable. Asking ChatGPT a question once, observing that it misses your accordion copy, and concluding that the engine cannot read hidden text is a methodological error. A prompt run five minutes later can yield a different citation path due to internal generation variance.

To obtain true visibility data, prompt evaluation must be repeated statistically across fixed query baskets.

At Standing, we measure business recommendations across five major engines: ChatGPT, Perplexity, Gemini, Claude, and Google AI Overviews. Our methodology uses a fixed prompt basket, executed five times per question per engine. We calculate recommendation rates using a Wilson interval on the result set.

We express scores as ranges, such as 34, plus or minus 6, calculated at a 95% confidence interval. Competitors run each prompt a single time and report static scores, which creates false certainty by masking model variance behind single integer values.

Our plans reflect this simple infrastructure focus: Track at $100 per month for 3 domains, Optimize at $300 per month for 5 domains with custom prompts, and Agency at $500 per month for 50 domains with a monthly re-scan.

If you suspect hidden CSS is blocking your brand, run a cURL request first. If the raw text is there, your markup is fine. Your focus should be on measuring whether the underlying claims and references are consistent enough for language models to recommend your product.

See where you actually stand

Run a free check on your domain. Five AI surfaces, the real buying questions, about a minute. No signup.

Run a free check

Keep reading