Skip to content

JavaScript SEO audit: compare the raw HTML with the rendered page

A JavaScript SEO audit that loads your page twice, as the server sends it and after JavaScript runs, and finds the text, links and tags that exist only in the second.

  • Free, no account
  • Results in under a minute
  • Title, canonical, robots, H1, links, schema

Example result:example-shop.hr

WordPress 6.8

Sample shop · homepage · mobile Chrome · the same check you get for your own site

Run it on your site
JavaScript SEO audit
9 passed · 0 failed · 1 warning. Biggest issue: Canonical tag is missing.The score counts only the 10 checks this tool shows, not the whole SEO score of the full report.
8% of the text needs JavaScripttags unchanged by JavaScript

HTML vs rendered page

the server's HTML, then the page after JavaScript
Each SEO field in the HTML the server sends and in the page after JavaScript runs
FieldIn the HTMLAfter JavaScriptDifference
TitleExample Shop – Example ShopExample Shop – Example Shopsame
Meta descriptionExample Shop je vaša online trgovina za sve što vam treba: obuću, odjeću, dodatke i još mnogo toga po najboljim cijenama u Hrvatskoj, s brzom dostavom i jednostavnim povratom robe u roku od 30 dana.Example Shop je vaša online trgovina za sve što vam treba: obuću, odjeću, dodatke i još mnogo toga po najboljim cijenama u Hrvatskoj, s brzom dostavom i jednostavnim povratom robe u roku od 30 dana.same
Canonical--same
Robots--same
H1Example Shop – Example ShopExample Shop – Example Shopsame
Visible words341371differs
Internal links2324differs
External links00same
Structured dataProduct · OrganizationProduct · Organizationsame
Hreflang links00same
Images1515same

Links that only exist after JavaScript

1 shown
  • example-shop.hr/recenzije/

What we found

0 failed1 warning9 passed
Show 9 passed checks

Fix these first

From the example above. Check your own site to get the fixes that apply to it.

  1. Warning: Canonical tag is missing

    Without a canonical URL, search engines may index duplicate versions of this page (with and without trailing slash, with UTM parameters) and split its ranking signals.

    How to fix it: Add <link rel="canonical" href="http://example-shop.hr/"> in <head>.

What the JavaScript SEO audit compares

The server's HTML and the rendered page in Chromium, compared field by field.

  • SEO tags changed by JavaScript

    Compares the title, description, canonical, robots and H1 in the HTML with what they become after scripts run.

  • Content that needs JavaScript

    Checks how much visible text appears only after scripts run, since it can be indexed late or not at all.

  • Noindex directive

    Checks whether the page tells Google to leave it out of search results, which loses all search visits.

  • Canonical tag

    Tells search engines which address is the real one, so duplicates don't split rankings.

  • Page title

    Checks the page has a title, the headline Google shows in results and the text in the browser tab.

  • Meta description

    Checks for the short summary shown under your result, so Google does not pick a random sentence instead.

  • One H1 heading

    Checks for exactly one main heading, which tells search engines and screen readers what the page is about.

  • Internal links

    Counts links to your other pages, since too few make a dead end and too many dilute each link.

  • Word count

    Counts the body text, since pages under 300 words give search engines little to rank.

  • Structured data

    Checks for JSON-LD that lets Google show prices, ratings and breadcrumbs under your listing.

Show 6 more checks
  • Page title

    Checks the page has a title, the headline Google shows in results and the text in the browser tab.

  • Meta description

    Checks for the short summary shown under your result, so Google does not pick a random sentence instead.

  • One H1 heading

    Checks for exactly one main heading, which tells search engines and screen readers what the page is about.

  • Internal links

    Counts links to your other pages, since too few make a dead end and too many dilute each link.

  • Word count

    Counts the body text, since pages under 300 words give search engines little to rank.

  • Structured data

    Checks for JSON-LD that lets Google show prices, ratings and breadcrumbs under your listing.

How the JavaScript SEO audit works

  1. Fetch the HTML

    We download the page the way a crawler does, without running any script, and read the title, description, canonical, robots tag, headings, links, words and JSON-LD.

  2. Render it in Chromium

    The same URL loads in a real browser that runs every script, waits for the page to settle and reads the same fields again from the finished page.

  3. Compare the two

    Differences are listed field by field. Text that exists only after JavaScript is counted, and tags that JavaScript changes are flagged, a canonical or noindex first.

One page load on a phone profile. Content that appears only after scrolling, clicking or logging in is not rendered, and neither is content behind a consent wall.

JavaScript SEO and rendering questions

How do I see the rendered HTML of a page?

Enter the page above: the checker shows the server's HTML and the page after Chromium has run its scripts, field by field. In your browser, View Source shows the raw HTML, while the Elements panel in developer tools shows the rendered page. In Search Console, URL Inspection → View crawled page shows the HTML Googlebot rendered.

Does Google not run JavaScript anyway?

It does, later. Google crawls the HTML first and queues the page for rendering, which can take a while on large or new sites and has a time budget. Bing renders less, and link previews on Slack, LinkedIn and WhatsApp do not run JavaScript at all. Content that has to rank or be quoted belongs in the HTML the server sends.

Is server-side rendering better for SEO?

Usually yes. With server-side rendering or static generation, the title, text, links and structured data are in the HTML the server sends, so every crawler reads them at once, including AI crawlers that do not run JavaScript. Google can render client-side pages, but later and not always completely. Next.js, Nuxt and SvelteKit render on the server by default.

How do I make a JavaScript site SEO-friendly?

Render the important parts on the server. Use server-side rendering or static generation for titles, headings, main text, links and structured data, and keep JavaScript for interaction. Put the canonical and robots tags in the server HTML and never change them with scripts. Use real <a href> links, not click handlers. Then run this check again: the two columns should match.

Which JavaScript framework is best for SEO?

Any framework that renders HTML on the server or at build time. Next.js, Nuxt, Astro, SvelteKit and Angular with server rendering all work well when that mode is on. A single-page app that sends an empty div and builds everything in the browser is the risky setup, whatever the framework. The setting matters more than the brand.

What are the most serious JavaScript SEO issues?

A canonical or noindex that JavaScript adds or changes is the worst, because Google may act on the HTML version before rendering, so you give two instructions and cannot know which wins. Next come main text, internal links or structured data that exist only after scripts run. The check flags changed tags first, then counts the missing words and links.

Some of my text is only in the rendered version. Is that a problem?

It depends on what the text is. Menus, cookie banners, chat widgets and recommendation carousels are fine to build with JavaScript. Headlines, product descriptions, prices and article text should be in the HTML the server sends. The check lists the difference field by field, so you can tell which kind yours is.

All 59 tools →

Free, funded by the people who use it

No account, no paid plan. Donations keep it running.

Chip in