Is Your Schema Visible to AI Crawlers? How to Find JavaScript-Injected Structured Data
AI SEO

Rubric flagged 27 of our own 182 pages for schema that only appears after JavaScript runs.
We build Rubric, and that check is item 01 in our Action Plan, marked low effort. The fix is moving JSON-LD out of scripts and into the HTML your server sends.
Do it for the crawlers that only read raw HTML, but don't sell it to anyone as a way to get cited. The wider playbook is in our AI SEO strategy for 2026 and our guide to optimising for AI search engines.
Which AI crawlers miss schema that JavaScript adds?
In Vercel and MERJ's December 2024 log study, OpenAI's three crawlers, ClaudeBot and PerplexityBot didn't render JavaScript. Googlebot and Applebot did, and Gemini relies on Googlebot (Vercel, 2024). So schema written by a script existed for Google but not for the crawlers behind ChatGPT, Claude and Perplexity.
That holds for Gemini answers drawn from Google's index. Gemini's live fetcher is another matter. In EdgeComet's January 2026 benchmark, "It fetches raw HTML only" (EdgeComet, 2026).
Script-written schema is a note in lemon juice. Rendering is the candle: Google holds the page over it and the writing shows up. A crawler that reads only raw HTML sees blank paper where the schema should be.
Do ChatGPT, Claude and Perplexity run JavaScript?
Not in 2024. Vercel's logs found that "none of the major AI crawlers currently render JavaScript". ChatGPT's and Claude's crawlers downloaded JavaScript files, at 11.50% and 23.84% of their requests, but didn't run them. The study left out Microsoft Copilot, which "lacks a unique user agent for tracking" (Vercel, 2024).
In the same write-up, Ryan Siddle, Managing Director of MERJ, said: "AI crawlers, while rapidly scaling, continue to face significant challenges in handling JavaScript and efficiently crawling content." Vercel sells hosting for server-rendering frameworks, so it isn't a neutral source.
Is that still true in 2026?
Later signals are mixed, and Vercel hasn't published a re-run. In searchVIU's October 2025 test, Perplexity and Google AI Mode found a price inserted by JavaScript once the page was indexed, and ChatGPT didn't. Claude found none of the test page's eight prices, visible ones included, so its miss says little about JavaScript (searchVIU, 2025).
In January 2026, EdgeComet caught GPTBot running JavaScript just once: "Out of hundreds of requests, we found a single instance of an AJAX request being triggered" (EdgeComet, 2026). Till Freitag's three months of edge logs to May 2026 showed GPTBot, OAI-SearchBot, ClaudeBot and PerplexityBot making no hydration requests at all (Till Freitag, 2026). Both sell rendering or prerendering, so weigh them accordingly.
Then site owner Hisashi Space logged GPTBot and OAI-SearchBot rendering pages from 25 September 2026. On one site, pages rendered by OAI-SearchBot went from 56 on 18 September to 861 on the 25th. Raw request counts jumped much further, but as he puts it, "Most of it is what a rendered page fires off on its own". He also notes OpenAI's share on Cloudflare Radar "stayed flat", and that rendering looks switched on for some sites only (Hisashi Space, 2026).
OpenAI hasn't confirmed it. Its crawler documentation, unchanged in archived copies from 2 August to 2 October 2026, doesn't mention JavaScript, and nor do Anthropic's or Perplexity's.
Does Google read schema that JavaScript adds?
Yes. Google says it "can understand and process structured data that's available in the DOM when it renders the page" (Google Search Central, 2025). In Vercel and MERJ's 2024 study of nextjs.org, Google's median render delay was 10 seconds and the 99th percentile about 18 hours (Vercel and MERJ, 2024).
Google documents one downside: dynamically generated Product markup "can make Shopping crawls less frequent and less reliable" (Google Search Central, 2025). It still calls server-side rendering "a great idea", because "not all bots can run JavaScript" (Google Search Central, 2026). For shops it's now explicit: "we recommend putting Product structured data in the initial HTML for best results" (Google Search Central, 2026).
Will server-rendered schema get you cited?
Not on the evidence so far. Ahrefs' matched study compared 1,885 pages that added JSON-LD with 4,000 control pages. ChatGPT citations moved +2.2% and AI Mode +2.4%, both "statistically indistinguishable from zero". AI Overviews fell 4.6% (Ahrefs, 2026).
Google says "Structured data isn't required for generative AI search" (Google Search Central, 2026). The same guide says Google Search doesn't use AI text files such as llms.txt either.
Ahrefs measured schema in the raw HTML only. Server-rendering settles an earlier question: can a crawler that skips JavaScript see your schema at all?
Do ChatGPT and Perplexity treat JSON-LD as structured data?
I haven't found evidence they do. In searchVIU's test of five AI systems, including ChatGPT, Claude and Perplexity, none found a price that existed only in JSON-LD. None found a price in JSON-LD that JavaScript inserted either, before or after indexing, Google AI Mode and Perplexity included (searchVIU, 2025). Resoneo's January 2026 tests of live fetches agree: "JSON-LD in script tags is NOT directly extracted by HTML-only user-mode crawlers (ChatGPT-User, Claude-User, Gemini)" (Resoneo, 2026).
Mark Williams-Cook put a fake company's address in made-up JSON-LD, and ChatGPT and Perplexity both found it. In his words, "the LLM agent is simply picking up whatever you are listing in the HTML. It does not matter if it is valid schema" (Search Engine Roundtable, 2026).
So server-rendered JSON-LD sits in the HTML those engines read, and at best it gets read like any other text. If a fact matters, such as a price or an address, put it in the visible copy too.
Why fix it if it doesn't earn citations?
Because it's cheap, and schema has jobs that don't depend on citations. Google says it "helps with being eligible for rich results on Google Search" (Google Search Central, 2026). Bing says structured data "may support clearer grounding but does not guarantee visibility or grounding traffic" (Microsoft Bing, n.d.).
Not every rich result is still on offer. FAQ rich results stopped appearing on 7 May 2026 (Google Search Central, 2026), and How-to rich results went in September 2023. Google's line on markup nobody uses is that it "has no visible effects in Google Search" (Google Search Central, 2023).
In Bing's sample for the 90 days to 25 September 2026, Copilot cited GoGoChimp 218 times at a 21.33% share for "AI SEO GEO platforms schema markup opportunities", and 32 times at 1.55% for "schema markup impact on AI search engine responses".
I treat it like fixing a broken canonical tag: it removes a way to fail, and I wouldn't promise anyone a citation from it. For what ChatGPT does pick up, see our breakdown of what ChatGPT actually cites.
How do you find JavaScript-only schema with Rubric?
Run a Rubric audit and open the Overview. The Do these first card lists "Schema readable without JavaScript" with a page count. The Crawler reachability card shows the same number against Server-rendered schema. Rubric reads every page twice, as raw HTML and rendered, and flags schema that only turns up in the rendered version. Any count above zero is worth fixing.
Rubric predicts citability, it doesn't count citations. A free account runs the crawl.


On GoGoChimp's hosted Rubric report of 5 October 2026, GPTBot and PerplexityBot were allowed on all 182 pages, yet 27 of those pages had schema that only appeared after JavaScript ran.
What did we find on gogochimp.com?
Rubric's 27 of 182 is an outlier by HTTP Archive's measure. The 2025 Web Almanac says "just 2% of mobile and desktop crawls have structured data added via JavaScript" (HTTP Archive, 2026). The 2% comes from the Almanac's home-page data and Rubric checks every page, so it's a loose comparison. Either way, we did this to ourselves.
When we looked at our raw HTML, every page we sampled already had JSON-LD in the source. We also found our own patch scripts: site-wide custom code that fixes or adds JSON-LD in the browser after the page loads. Google renders the page, so it sees the patched version.
On our methodology page and framework page, the raw HTML carries a HowTo block that's HTML-encoded, with " where the quote marks should be. It won't parse as JSON until a decoder script runs. A crawler that skips JavaScript gets the broken version. It's also HowTo markup, which hasn't earned a rich result since 2023, so fixing it only helps crawlers that read raw HTML. Deleting it would do as well.
How do you list the affected pages with Claude and the Rubric MCP?
Connect Rubric's hosted MCP to Claude and call three tools. get_action_plan ranks the fixes. get_affected_pages lists every URL for "Schema readable without JavaScript", with what's there now against what's expected. get_page shows every check result for one URL. Reads are free. Crawls and draft checks run a live audit of your site.
How do you connect Claude to Rubric?
Create a key on Rubric's MCP page. It's shown once, so copy it straight away. The same page gives you the Claude Code command with your key already filled in. We used this setup for mapping AI follow-up questions to pages.
Which prompt finds the pages?
Paste this into Claude and swap in your domain:
Use list_audits to find my latest Rubric audit for example.com. Call get_action_plan and re-rank it for ChatGPT. Then call get_affected_pages for "Schema readable without JavaScript" and list each URL with what is there now and what is expected. Group the URLs by page template. Run get_page on one URL from the biggest group and show me its result for that check.
Grouping by template matters because one template edit fixes every page built on it.
How do you move JSON-LD into the server-rendered HTML?
Put the JSON-LD block itself in the HTML your server sends, and remove any script that writes or patches it after load. Google reads either version, so you're doing this for the crawlers that only read raw HTML.
Where does the JSON-LD go on Webflow, Shopify and WordPress?
| Platform | Put the JSON-LD here | Look out for |
|---|---|---|
| Webflow | The Schema markup field in Page settings, or a JSON-LD block in custom code | Custom-code scripts that build or patch JSON-LD |
| Shopify | Theme Liquid, with the structured_data filter for products and articles |
Apps that add schema through a script |
| WordPress | An SEO plugin that prints JSON-LD in the page source, such as Yoast | Plugins or tags that add schema in the browser |
| Next.js or React | A script tag in layout.js or page.js, server-rendered or statically generated |
JSON-LD added in a client-only component |
| Google Tag Manager | Nowhere. Move it to one of the above | Any structured-data tag, since GTM runs in the browser |
Webflow's help centre says schema markup "is added in Page settings" and that "Reference, Multi-reference, and Multi-image Collection fields aren't supported in schema markup" (Webflow, 2026). Its FAQ says where it ends up: "Schema markup added in the Schema markup field appears in the <head> of your published page", while schema in the Before </body> custom code lands at the foot of the page (Webflow, 2026). The field needs a paid plan. Google gives a reason to prefer the head, because Googlebot only fetches the first 2MB of a page: put "essential structured data, higher up in the HTML document" (Google Search Central, 2026). When we fetched our own pages without JavaScript, the JSON-LD in our custom code was there. Our fix is correcting the source fields so the patch scripts can go.
On Shopify, the Liquid reference shows the filter inside a JSON-LD tag (Shopify, n.d.):
<script type="application/ld+json">{{ product | structured_data }}</script>
To test an app, run the view-source and DevTools check below on a product page.
On WordPress, Yoast's developer docs say "including JSON-LD in the HTML source code of the page is the best (current) approach" (Yoast, n.d.). The Next.js docs recommend rendering JSON-LD as a script tag in your layout.js or page.js components (Next.js, 2026).
How do you check a page by hand?
- Open view-source and search for
application/ld+json. That's the raw HTML. - Search the Elements panel in DevTools for the same string. A block that shows up there but not in view-source was added by JavaScript.
- Run
curl -sL -A "GPTBot" https://example.com/page | grep -o '<script[^>]*application/ld+json' | wc -lto count the JSON-LD blocks a bot receives. Match the script tag, not the bare string: patch scripts mention application/ld+json too, and on our own pages a plain search turned 4 to 7 real blocks into 14 to 17 matches. The-Lfollows redirects. curl doesn't run JavaScript, so this is what a non-rendering crawler gets. Run it again without-A "GPTBot". If the count changes, your server or firewall treats that user agent differently. It won't catch rules based on the real bot's IP addresses. - Paste each raw block into a JSON validator. If it's full of
", it won't parse.
How do you confirm the schema is now in the raw HTML?
Re-crawl, compare the two audits, then spot-check a few URLs with curl. start_crawl and crawl_status run the new crawl, and compare_audits shows what improved and what regressed. The Server-rendered schema count in Crawler reachability should drop to zero, or to the pages you chose to leave.
Rubric's MCP page says the /mcp__rubric__fix prompt runs the whole loop for you: audit, "fix the highest-leverage thing", re-crawl and report the delta.
Don't judge the fix by your AI citations a month later. In Ahrefs' study, the raw before-and-after growth in AI Mode citations was +43%. Control pages "gained almost as much", and against them the effect shrank to +2.4% (Ahrefs, 2026). Your own before-and-after chart can't separate a fix from everything else that moved.
To check real answers, log them over several days, as in our guide to AI visibility tracking.
Questions about JavaScript schema and AI crawlers
Does ChatGPT run JavaScript when it crawls a page?
Not in Vercel and MERJ's December 2024 log data, which covered GPTBot, OAI-SearchBot and ChatGPT-User, and only once in hundreds of requests in EdgeComet's January 2026 test. One site owner logged OpenAI's bots rendering pages from 25 September 2026. OpenAI hasn't confirmed it, and its crawler docs don't mention JavaScript. Server-rendered schema works either way.
Is Google's Rich Results Test enough to check AI crawler visibility?
No. Google's help page says the test's code explorer "uses the rendered source code" (Google, n.d.), so your JavaScript has already run. A pass tells you Google can read your schema. It tells you nothing about a crawler that skips JavaScript. Google says the same of URL Inspection: "use the Rich Results Test or the URL Inspection Tool and look at the rendered HTML" (Google Search Central, 2026). Neither is a raw-HTML test.
Should I use dynamic rendering for AI crawlers?
Google calls dynamic rendering "a workaround and not a long-term solution" for JavaScript-generated content. It recommends server-side rendering, static rendering or hydration instead (Google Search Central, 2025). It also warns that other search engines "may choose to ignore JavaScript". One server-rendered version of each page is easier to keep right than two.
How common is JavaScript-injected schema?
Rare on home pages, according to HTTP Archive's 2025 Web Almanac. It found structured data on 50% of the home pages it crawled and JSON-LD on 43%, but "just 2% of mobile and desktop crawls have structured data added via JavaScript". Inner pages carry less: "JSON-LD format is used on 39% of desktop inner pages and 37% of mobile inner pages" (HTTP Archive, 2026).
Does Bing read schema that JavaScript adds?
Bingbot can render it. Microsoft says it updates its rendering engine "to the most recent stable version of Microsoft Edge" (Microsoft Bing, n.d.). Bing's guidelines, which cover Copilot, still say to avoid "Hiding critical content behind client-side rendering". They add that structured data "does not guarantee visibility or grounding traffic", and that "Content that cannot be reliably rendered may not be indexed or selected for grounding results" (Microsoft Bing, n.d.). Copilot's live fetcher gives up fast: Resoneo saw it run inline JavaScript in January 2026 with a timeout of about 53 milliseconds, so later scripts were missed (Resoneo, 2026).
Does detailed Product or Review schema get cited more?
Not clearly. In Kurt Fischman's 2026 preprint, among pages in Google's top 10, cited pages were no more likely to carry schema than uncited ones (43.1% vs 44.8%). Pages with Product or Review schema carrying prices, ratings and specs were cited at 61.7%, against 41.6% for generic Article, Organization or BreadcrumbList schema (Fischman, 2026). But in his later field note, pages with no schema scored 59.8% (Fischman, 2026). It's all correlational.
Check your busiest template first
Open one page from the template that carries the most URLs. If DevTools shows JSON-LD that view-source doesn't, or the source copy is full of ", that's your first fix. Every page built on the template gets it at once. If you'd rather have the full list, run Rubric on a free account.
References
- Anthropic. (2026, 7 April). Does Anthropic crawl data from the web, and how can site owners block the crawler? (Claude Help Center). https://support.claude.com/en/articles/8896518-does-anthropic-crawl-data-from-the-web-and-how-can-site-owners-block-the-crawler
- EdgeComet. (2026, 15 January, updated 17 February). OpenSeoTest: how GPTBot and ChatGPT-User handle JavaScript. EdgeComet sells a rendering service. https://edgecomet.com/blog/openseotest-how-gptbot-and-chatgpt-user-handle-javascript/
- EdgeComet. (2026, 27 January, updated 17 June). Benchmarking Gemini: the Google user agent, JS rendering and timeouts. https://edgecomet.com/blog/benchmarking-gemini-the-google-user-agent-js-rendering-and-timeouts/
- Fischman, K. (2026, 22 February). Does Schema Markup Predict AI Citation? A Cross-Platform Empirical Study of Structured Data and Generative Engine Optimization. Preprint, not peer-reviewed (Zenodo, DOI 10.5281/zenodo.18728697, also on SSRN and aiXiv). https://aixiv.science/abs/aixiv.260222.000002
- Fischman, K. (2026, 22 February, updated 4 May). Your Generic Schema is Useless. Machine-like Field Notes. https://machinelike.ai/field-notes/your-generic-schema-is-useless
- GoGoChimp. (2026, 28 September). Bing Webmaster Tools AI Performance AI search queries export for gogochimp.com, data through 25 September 2026. First-party, unpublished.
- GoGoChimp. (2026, 5 October). Rubric report for gogochimp.com, hosted crawl of 182 pages: Do these first, Crawler reachability and Action Plan. First-party.
- GoGoChimp. (2026, 5 October). Raw-HTML check of JSON-LD on sampled gogochimp.com pages, fetched without JavaScript. First-party, unpublished.
- Google. (2023, 8 August, updated 14 September). Changes to HowTo and FAQ rich results (Google Search Central Blog). https://developers.google.com/search/blog/2023/08/howto-faq-changes
- Google. (2025, updated 10 December). Dynamic rendering as a workaround (Google Search Central). https://developers.google.com/search/docs/crawling-indexing/javascript/dynamic-rendering
- Google. (2025, updated 10 December). Generate structured data with JavaScript (Google Search Central). https://developers.google.com/search/docs/appearance/structured-data/generate-structured-data-with-javascript
- Google. (2026, updated 4 March). Understand the JavaScript SEO basics (Google Search Central). https://developers.google.com/search/docs/crawling-indexing/javascript/javascript-seo-basics
- Google. (2026, updated 10 July). Optimizing your website for generative AI features on Google Search (Google Search Central). https://developers.google.com/search/docs/fundamentals/ai-optimization-guide
- Google. (2026, 31 March). Google Search Central Blog post on Googlebot's fetch limits and placing critical elements high in the HTML. https://developers.google.com/search/blog/2026/03/crawler-blog-post
- Google. (2026, 8 May). Google Search Central updates: FAQ rich results no longer shown from 7 May 2026. https://developers.google.com/search/updates
- Google. (2026, updated 8 September). Product snippet structured data (Google Search Central). https://developers.google.com/search/docs/appearance/structured-data/product-snippet
- Google. (n.d.). Rich Results Test (Search Console Help). https://support.google.com/webmasters/answer/7445569?hl=en
- Hisashi Space. (2026, 30 September). DEV Community post on OpenAI's crawlers running JavaScript from 25 September 2026 (server logs from five sites, IP-checked against OpenAI's published ranges). https://dev.to/hisashispace/traffic-from-chatgpt-jumped-is-it-because-its-crawlers-now-run-javascript-5961
- HTTP Archive (Chulwuma, A., et al.). (2026, 15 January, updated 9 June). Web Almanac 2025: SEO. https://almanac.httparchive.org/en/2025/seo
- Linehan, L., with data by Guan, X. (2026, 11 May). Ahrefs study of JSON-LD schema and AI citations (1,885 pages that added schema, 4,000 control pages, difference-in-differences). https://ahrefs.com/blog/schema-ai-citations/
- Microsoft Bing. (n.d.). Bing Webmaster Guidelines (rewrite reported 27 February 2026). https://www.bing.com/webmasters/help/webmaster-guidelines-30fba23a
- Microsoft Bing. (n.d.). Which crawlers does Bing use? (Bing Webmaster Help). https://www.bing.com/webmasters/help/which-crawlers-does-bing-use-8c184ec0
- Next.js. (2026, updated 2 March). How to implement JSON-LD in your Next.js application. https://nextjs.org/docs/app/guides/json-ld
- OpenAI. (n.d.). Overview of OpenAI Crawlers. https://developers.openai.com/api/docs/bots
- Perplexity. (n.d.). Perplexity Crawlers. https://docs.perplexity.ai/docs/resources/perplexity-crawlers
- Resoneo. (2026, January). Sentinel: GEO LLM crawler report (tests of user-triggered AI fetchers). https://think.resoneo.com/sentinel/geo-llm-crawler-report.html
- Schwartz, B. (2026, 6 February). Search Engine Roundtable report on Mark Williams-Cook's test of ChatGPT and Perplexity reading made-up JSON-LD as text. https://www.seroundtable.com/chatgpt-perplexity-structured-data-text-40862.html
- searchVIU. (2025, 2 December). Test of what ChatGPT, Claude, Perplexity, Gemini and Google AI Mode see in schema markup and JavaScript-inserted content (tests run October 2025, one test page). https://www.searchviu.com/en/schema-markup-and-ai-in-2025-what-chatgpt-claude-perplexity-gemini-really-see/
- Shopify. (n.d.). structured_data (Liquid filter reference). https://shopify.dev/docs/api/liquid/filters/structured_data
- Till Freitag. (2026, 17 May). AI crawler prerendering: log evidence (three months of edge logs on two sites). The author sells prerendering. https://till-freitag.com/en/blog/ai-crawler-prerendering-log-evidence-en
- Webflow. (2026, updated 27 January). Add schema markup in Webflow to improve SEO and AEO (Webflow Help). https://help.webflow.com/hc/en-us/articles/45766917223955-Add-schema-markup-in-Webflow-to-improve-SEO-and-AEO
- Yoast. (n.d.). Schema: Technology and approach (Yoast developer docs). https://developer.yoast.com/features/schema/technology-approach/
- Zecchini, G., Moore, A. A., Siddle, R., & Ubl, M. (2024, 31 July). Vercel and MERJ study of how Google handles JavaScript through indexing (over 100,000 Googlebot fetches and over 37,000 crawl-to-render pairs on nextjs.org). https://vercel.com/blog/how-google-handles-javascript-throughout-the-indexing-process
- Zecchini, G., Moore, A. A., Ubl, M., & Siddle, R. (2024, 17 December). Vercel and MERJ study of AI crawler behaviour (server logs on nextjs.org and Vercel's network). Vercel sells hosting for server-rendering frameworks. https://vercel.com/blog/the-rise-of-the-ai-crawler
.png)

Free chapter
Read Chapter 1 of CITED, free.
The playbook for getting your business recommended by ChatGPT and AI search. Read the first chapter, on me.
Read Chapter 1 freeWant us to do this for your site?
Book a free AI audit. 15 minutes. We’ll show you three things your site is missing and what we’d test first.
Book my free AI audit →



