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.8Sample shop · homepage · mobile Chrome · the same check you get for your own site
HTML vs rendered page
the server's HTML, then the page after JavaScript| Field | In the HTML | After JavaScript | Difference |
|---|---|---|---|
| Title | Example Shop – Example Shop | Example Shop – Example Shop | same |
| Meta description | 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. | 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 |
| H1 | Example Shop – Example Shop | Example Shop – Example Shop | same |
| Visible words | 341 | 371 | differs |
| Internal links | 23 | 24 | differs |
| External links | 0 | 0 | same |
| Structured data | Product · Organization | Product · Organization | same |
| Hreflang links | 0 | 0 | same |
| Images | 15 | 15 | same |
Links that only exist after JavaScript
1 shown- example-shop.hr/recenzije/
What we found
Show 9 passed checks
Fix these first
From the example above. Check your own site to get the fixes that apply to it.
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
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.
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.
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.
Related free tools
All 59 tools →Free, funded by the people who use it
No account, no paid plan. Donations keep it running.