All scenarios/ Developer

A JavaScript site: what a search engine sees before rendering and after

The site moved to React, Vue or another framework, and some pages fell out of the index or show up with the wrong title. In the browser everything is fine, because the browser runs JavaScript. A search engine reads the raw HTML first, and you need to know what is missing from it and what JavaScript changes.

Who
Front-end developer, tech lead, technical SEO
Site
An SPA or a site rendered on the client, partly or fully
What hurts
Pages out of the index, empty snippets, links search engines do not see
What you need
The pages where HTML and the rendered page differ, and what exactly differs
  1. Render every page

    "JavaScript rendering" in the crawl settings has three modes. Auto renders only pages whose raw HTML has little text, so it will not compare a page that has text but a canonical changed by JavaScript. For a framework site choose "All pages": slower, but every page is read twice.

    Settings · Crawling — docs
    Molfar screenshot: JavaScript rendering settings
    In the screenshot: JavaScript rendering settings
  2. Wait for content that loads late

    "Read a rendered page" decides when a page counts as ready: when it stops changing, or when the network is quiet too. The second is for pages that fetch their text after loading, such as catalogues and reviews.

    Settings · Crawling — docs
    Molfar screenshot: JavaScript tab
    In the screenshot: JavaScript tab
  3. Find text that is not in the HTML

    In the JavaScript tab, "Text appears only after JavaScript" shows pages whose raw HTML is nearly empty and whose rendered version has text. "JavaScript changes the text by over 20%" finds pages where the two versions differ a lot. The columns "Words (raw HTML)" and "JS change, %" say by how much. "Images that appear only after scrolling" finds images whose address a script writes in only when they scroll into view, with no fallback in the HTML.

    JavaScript — docs
    Molfar screenshot: JavaScript tab
    In the screenshot: JavaScript tab
  4. Check what JavaScript changes in the head

    The worst case is JavaScript rewriting the signals for the index. "Canonical changes after JavaScript", "Meta robots changes after JavaScript", and the same for title, H1 and description show such pages, and "Canonical: HTML → JS" shows both values. Google says a noindex in the raw HTML may stop rendering, so a script cannot take it away. Beside them, "Internal links only after JavaScript": links a search engine sees only after rendering.

    JavaScript — docs
    Molfar screenshot: JavaScript tab
    In the screenshot: JavaScript tab
  5. Open one page three ways

    In the page inspector the Source pane has three views: Raw HTML, After JavaScript and Added by JavaScript. The last shows only what the HTML did not have — the exact fragment the server should send.

    Page inspector — docs
    Molfar screenshot: All pages table with the inspector
    In the screenshot: All pages table with the inspector
  6. Check after the release

    Once the server sends the text, canonical and links in the HTML, crawl with the same settings and compare in History: the pages should leave the JavaScript tab's filters.

    History — docs
    Molfar screenshot: Crawl history
    In the screenshot: Crawl history
01

Pages empty without JavaScript

The pages whose text exists only after rendering, with word counts before and after.

02

Signals JavaScript changes

Canonical, meta robots, title, H1 and description that differ between HTML and the rendered page.

03

Links and images for the server

Internal links that appear only after JavaScript, images with no fallback in the HTML, and the fragments worth rendering on the server.

  • Molfar renders with its own built-in Chromium. Google also renders in Chromium, with its own limits on time and resources, so the result is close, not identical.
  • In Auto, only the pages that were rendered are compared; the full comparison needs "All pages".
  • The scroll that finds such images runs only on rendered pages: a page read as raw HTML is not scrolled. Native loading="lazy" is fine and is not counted.
  • Rendering is much slower than reading HTML; on a large site start with a sample of sections.
Which mode for an SPA?
"All pages", and "when the network is quiet too" under "Read a rendered page": every page is read twice, with the content that arrives by request.
Can I check one page without a crawl?
Yes. URL audit shows whether JavaScript changes the page, with the other checks for one address.
Can an agent check it?
Yes. Over MCP it can start a crawl with the rendering mode it needs, and the audit of one address returns both versions of the page.

Try it on your own site.

Molfar is in preview and runs on Windows and on Macs with Apple silicon.

Get Molfar