Online store SEO

Content that only appears after JavaScript: what Google and AI crawlers see

18 Oct 2026 ·4 min read · اقرأ بالعربية

Your browser runs a page's JavaScript and shows you the finished result. Crawlers don't all do that. Google processes pages in three phases, crawl, render and index, and pages can wait in the render queue for longer than a few seconds. Most AI crawlers don't render at all. A December 2024 study by Vercel and MERJ found that OpenAI's crawlers (GPTBot, OAI-SearchBot and ChatGPT-User), Anthropic's ClaudeBot, and the crawlers of Perplexity, Meta and ByteDance don't execute JavaScript. They download some JavaScript files but don't run them. Google's crawler, which Gemini also relies on, and Apple's crawler do render. So when a product's price, description, stock status or internal links exist only after JavaScript runs, some crawlers see an empty page. That study is older and I found no 2025–26 replication, so treat it as a strong indication, not a current measurement.

What Google says

  • Server-side rendering or pre-rendering is still recommended, because "not all bots can run JavaScript".
  • If the original HTML contains noindex, Google may skip rendering, so JavaScript that removes it may never run.
  • Don't use JavaScript to change the canonical from the one in the original HTML.
  • Google discovers links only from <a> elements with an href.

How to check

  1. On a product page, open View Source (Ctrl+U or Cmd+Option+U). That's the raw HTML before any JavaScript runs. Search it for the product's price, one sentence of its description, and rel="canonical".
  2. Compare with the rendered page in the browser's Inspect or Elements panel. Anything visible there but missing from View Source depends on JavaScript.
  3. Check that the <title>, the canonical and the robots meta tag are in the raw HTML and that scripts don't change them.
  4. In Search Console, run URL Inspection's live test and look at the HTML Google rendered.
  5. Run the free audit. Store Audit by Ahmed Fayed fetches the raw HTML, renders the homepage and a product page in a headless browser (more pages in the full crawl), and compares the title, canonical, robots meta and main content between the two. On custom-coded stores, a product page whose raw HTML is an empty shell is reported as critical.

How to fix

Salla, Zid, Shopify and WooCommerce

These platforms build their pages from server-side templates: Twig on Salla, Jinja on Zid, Liquid on Shopify and PHP on WooCommerce. The main product content is therefore usually in the raw HTML. Gaps come from the parts that scripts add later: app widgets such as reviews, web components (Salla's themes use <salla-…> components, which are defined in JavaScript), and anything injected through Google Tag Manager. Check the specific content you care about, such as reviews, price and stock, in View Source. If a reviews app loads its reviews only with JavaScript, ask the vendor whether it can output them in the HTML, or accept that some crawlers won't see them.

Also make sure crawlers can fetch the scripts and styles your theme needs. Zid's default robots.txt disallows /js/; whether that affects rendering is unconfirmed, so test a product page with URL Inspection.

Custom-coded

For product and category pages, use server-side rendering or static generation, which frameworks such as Next.js and Nuxt support. The initial HTML should already contain the title, meta description, canonical, robots meta, structured data, price, availability and the internal links to categories and related products. If moving the whole site to server rendering isn't practical, pre-render the product and category routes first. Test the raw HTML after every release, not only the page in a browser.

Common mistakes

  • A product page built entirely in the browser by a React or Vue single-page app, with an empty <div id="app"> in the raw HTML.
  • Fetching the price from an API after the page loads.
  • Setting or changing the canonical or robots meta with JavaScript.
  • Category and product links built with onclick handlers instead of <a href>.
  • Checking the store only in a browser, which always runs JavaScript.
  • Blocking script or style folders in robots.txt.

Run the free Store Audit by Ahmed Fayed to compare your store's raw and rendered pages. If you'd like help fixing this, contact me on WhatsApp +20 102 702 0701 or at ahmed-fayed.com.

Sources

JavaScript

More in this series

Back to guides