ShipworkSite inspection
Checks
Every error, explainedGuides →
Pricing Learn Guides

Does your content exist before JavaScript runs?

Crawlers do not always run JavaScript, and when they do they run it late. If the price, the variants or the whole product block is injected client-side, a plain fetch sees a page that looks complete and is not.

Runs the JavaScript rendering check against a bounded sample of your site, from outside your network. Nothing is stored.

What this check inspects

Shipwork fetches the page as a crawler would, then renders it in a real browser, and compares the two. It reports the visible text length seen each way, any JavaScript errors in the console, a status code that differs between the two, a title that changes after scripts run, a transfer size over about three megabytes, and a request count that looks heavy.

What a failure means

When the rendered page carries much more visible text than the raw fetch, the finding is a warning: content that only exists after JavaScript is at risk of being missed. Console errors are warnings because they can stop the rest of a script from running. A heavy transfer or a very high request count is informational but relevant to performance.

How to fix it

  1. Render the important content, especially price and availability, on the server so it is in the raw HTML.
  2. If an app injects the product block client-side, check whether it offers a server-rendered variant.
  3. Fix JavaScript errors rather than tolerating them. One uncaught error can prevent later scripts from running and remove content.
  4. Use server rendering or pre-rendering for the largest content block so it is visible on first paint.

A typical failure, worked through

The setupA theme uses a JavaScript framework and fetches the price and variant options after load. The raw HTML contains the product title and an empty price container.

What the check reportsThe check reports that a browser sees far more text than a plain fetch, and notes the gap. A crawler that does not render sees the title with no price.

The pointIf the price is not in the HTML, any consumer that skips JavaScript sees a product with no price, which is exactly the state that gets listings disapproved.

Questions

Does Google render JavaScript?
It does, but on a second pass, with a delay, and not always reliably. Treating JavaScript as the only source of important content is a known risk.
What content matters most in the raw HTML?
Price, availability, product name, and anything you expect search or AI tools to read. Those are the fields that drive listings.
Why does the title change after JavaScript runs?
A client-side router or analytics tag is rewriting it. If the rendered title differs from the raw one, different consumers see different topics.

Related checks and guides