What code-level issues stop AI search engines from indexing a page?
99Visibility Research · Updated October 21, 2026 · 5 min read
Short answer
Four code issues keep pages out of AI search. Content that only appears after JavaScript runs is invisible to most AI crawlers, which don't execute scripts. Content loaded behind tabs or 'load more' buttons has the same problem. A stray noindex, nosnippet, max-snippet:0 or data-nosnippet, often inherited from a template or header, removes content from AI answers. Rarely, HTML beyond Googlebot's 2MB per-URL limit is ignored.
Key takeaways
- As of October 2026, most AI crawlers outside Google and Apple fetch JavaScript files but do not execute them, so client-side rendered content does not reach them.
- Content injected after a click or scroll fails for the same reason; content already in the initial HTML does not.
- noindex, nosnippet, max-snippet:0 and data-nosnippet are documented controls that keep content out of AI answers, so an accidental one is a silent failure.
- Fixing these removes blocks. It makes your content eligible, but nobody can promise it will be retrieved or cited.
The full answer: AI crawlers read what your server sends
Most code-level failures come down to one fact. Many AI crawlers read the raw HTML your server returns and stop there. If a fact is not in that response, or a directive tells the engine not to show it, the engine cannot use it.
Four issues cause nearly all of it:
- Client-side rendering. The page ships an empty shell and JavaScript builds the content in the browser.
- Content behind interaction. Tabs, accordions, 'load more' and infinite scroll that fetch content only after a click or scroll.
- Stray suppression directives. A
noindex,nosnippet,max-snippet:0ordata-nosnippetthat someone added for one reason and that now applies far wider. - Oversized HTML. A page heavy enough to pass Googlebot's per-URL byte limit. This is rare.
These sit in the access stage, before retrieval and generation. They are the part you fully control. Two other access gates sit outside your page code: your per-bot robots.txt rules and whether your CDN or firewall turns AI crawlers away. Check all three together.
Client-side rendering and content behind tabs
Vercel's crawler study found that ChatGPT and Claude crawlers fetch JavaScript files (11.50% and 23.84% of requests) but don't execute them, so "they can't read client-side rendered content." Independent re-testing in June 2026 found the same for GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, Claude-SearchBot, PerplexityBot, Meta-ExternalAgent and Bytespider. Googlebot and AppleBot are the exceptions: they render.
So a single-page app can look complete to Google and blank to ChatGPT search. The usual casualties are the facts buyers ask about: prices, plan limits, product names, locations.
Interactive content follows the same rule:
- If a tab's text is in the initial HTML and only hidden with CSS, a non-rendering crawler still receives it.
- If the tab fetches its text when clicked, the crawler never sees it.
- 'Load more' and infinite scroll usually fetch, so items past the first batch are missing.
The fix is server-side rendering or prerendering for the content that matters. Vercel notes that JSON or React Server Component payloads included in the initial HTML response may still be indexed, but content streamed in later is at risk. Text baked into images is a related gap, covered in whether AI can read text inside images.
Stray noindex, nosnippet and data-nosnippet
Google and Bing document noindex, nosnippet, max-snippet and data-nosnippet as the on-page controls over what appears in search and AI answers. Google states that to appear as a supporting link in AI Overviews or AI Mode, a page must be indexed and eligible to show with a snippet. Bing says content marked data-nosnippet is still indexed but "excluded from snippets and AI summaries."
These are useful when intended. The failure is inheritance:
- A
data-nosnippetwrapper meant for a cookie banner ends up around the main content block. - A staging
noindexsurvives a deploy or a site migration. - An
X-Robots-Tag: noindexornosnippetHTTP header is set at the server or CDN level, where nobody looking at the HTML sees it. - A global
max-snippet:0in the base layout applies to every page.
None of these throws an error. The page simply stops appearing.
The rare oversized HTML payload
Google's March 2026 post on Googlebot crawling states that Googlebot fetches up to 2MB per URL (PDFs up to 64MB), and bytes past that are not fetched, rendered or indexed. The same post gives 15MB as the default for other crawlers that don't set a limit. The counter is per URL, and sub-resources count separately.
Google also says most of the web never hits this. Treat it as a check, not a project. Pages most at risk carry huge inline JSON blobs, inlined images or thousands of product variants in one document. If your key facts sit near the bottom of such a page, they may sit past the cut.
A quick raw-HTML check
You can test the first three issues in minutes without special tools. Fetch the page the way a non-rendering crawler does, then look for a fact you care about.
curl -s https://example.com/pricing -o raw.html
grep -i "per month" raw.html
grep -io 'noindex\|nosnippet\|max-snippet\|data-nosnippet' raw.html
curl -sI https://example.com/pricing | grep -i x-robots-tag
wc -c raw.html
Read the results like this:
- If your price or product name is missing from
raw.htmlbut visible in the browser, it depends on JavaScript. - Open a tab or press 'load more' in the browser, then grep
raw.htmlfor that text. Missing means it is fetched on interaction. - Any directive match needs an owner and a reason. If nobody can give one, it is a bug.
- The byte count from
wc -cflags only pages near 2MB.
This tests your code, not your network. A server can return different responses to real crawler user agents, so pair it with the AI Crawler Checker, which requests the page as each AI crawler and shows which ones get turned away. For shops, the ecommerce product data check applies the same test to prices and stock.
What fixing these does and does not do
These fixes are subtractive. They remove a block so the content exists for the engine at all. They do not make the engine more likely to choose you, and retrieval still happens per query at each engine's discretion.
That is still the strongest evidence-backed work available. Content rewrites tested in published studies were measured on pages already in the model's context, and the best-designed of them found little or negative effect, as covered in rewrites versus access fixes.
Next move: run the check on your five highest-value pages, then turn each failure into a specific ticket. The developer tickets playbook shows how to write them so they get shipped.
Frequently asked questions
Does Google AI Overviews have the JavaScript problem too?
Mostly no. Googlebot renders JavaScript, so Google's AI features can see client-side content once it is rendered and indexed. The problem is concentrated in ChatGPT, Claude, Perplexity and Meta crawlers, which fetch scripts without running them. A site can therefore look healthy in Google Search Console and still be blank to ChatGPT search. Check each engine separately.
Does hiding content in an accordion hurt AI visibility?
Only if the content is not in the initial HTML. An accordion that hides text with CSS still ships that text in the server response, so non-rendering crawlers receive it. An accordion that fetches its text on click does not. The grep test above tells you which kind you have in a few seconds.
Will adding schema markup fix a rendering problem?
No. Schema does not substitute for content missing from the HTML, and Google says structured data isn't required for generative AI search. Ahrefs' matched test found AI Overview citations fell 4.6% after pages added schema. Existing markup does no harm, but it is not a lever for AI answers. Server-render the facts instead.
Can I use nosnippet on purpose to keep a page out of AI answers?
Yes. That is what these controls are for. nosnippet, max-snippet:0 and data-nosnippet limit what Google and Bing show in snippets and AI summaries, and noindex removes the page from the index. Use data-nosnippet for a single section. Just make sure the scope is deliberate, documented and reviewed when templates change.
Sources
This page is AI-assisted. It was written from a verified evidence base and checked against our editorial policy. Engine behaviour changes often; facts are as of October 21, 2026.