JavaScript SEO Checker

Compare source HTML with the page after JavaScript runs. Inspect metadata, headings, main-text volume and internal links without a speculative SEO score.

A JavaScript SEO checker compares the HTML delivered by a page with the DOM captured after scripts have run. Screpy uses the original main-navigation response and a real isolated browser capture, then extracts the same SEO fields from both. The report shows observed differences rather than guessing a visibility score.

Analyze the exact public page

Enter a full public HTTP or HTTPS URL. A hostname alone uses HTTPS. Use the article, product or landing-page address you want to investigate, rather than assuming the homepage represents every template. The result retains the requested and final addresses and the page's HTTP status.

The browser uses a clean anonymous desktop context at 1365 × 768. It waits for DOMContentLoaded, observes for two seconds and captures the document. There are no clicks, scrolling, sign-ins or screenshots. Content appearing only after consent, interaction or a longer delay may not be represented. Google's JavaScript SEO guidance explains that JavaScript rendering and indexing are related but separate processes; a tool capture is not Google's selected indexed content.

Compare values before interpreting the change

The table compares the document-head title, meta description, canonical declarations, robots values and retained H1 text. SVG titles are excluded. Robots rows include the original HTTP X-Robots-Tag alongside HTML meta directives; an unchanged header is not attributed to JavaScript. The details show total H1 counts even when the displayed heading list is bounded.

The table also shows main-text word counts and internal link counts for both versions. These are observed volumes, not quality scores; missing measurements remain unknown. For deeper heading hierarchy analysis, use Heading Structure Analyzer.

A new title or heading can be intentional. Review whether essential content or indexing directives change in a way that conflicts with your publishing goals. A newly observed noindex or none directive receives a stronger review signal, but its agent scope still matters. Use Canonical Tag Checker for a focused declaration and target inspection, or Noindex Checker for source indexing directives.

Keep partial rendering visible

The check admits up to 75 resource retrievals with 20 MiB limits for both total wire and decoded data. Each response and the captured DOM are limited to 2 MiB. Individual reads have six seconds, navigation fifteen seconds and render work twenty-five seconds within a thirty-five-second API deadline. It does not wait indefinitely for network idle.

Only public GET resources are fetched through the bounded reader. Private destinations, changing requests, subframes, downloads, service workers and WebSockets are blocked. Blocked or unfinished requests make coverage partial, because such restrictions can affect scripts and page content. Extraction also retains at most twenty canonical, robots and H1 values, with explicit string and main-text limits. When those limits apply, potentially misleading text-difference conclusions are withheld.

Use the evidence to choose the next investigation

No observed changes means only that the compared captured fields matched within coverage. It does not mean the page has no SEO issues. Missing values in both documents are labelled as absent, not successful metadata. If rendering fails, the tool reports unavailability instead of substituting a source-only comparison.

Download the JSON report to keep the source/rendered values, observation window and coverage together. Review the same exact address after a change. For a broader source inspection, use On-Page SEO Checker; rendering parity, actual crawler access and indexing remain different questions.

JavaScript SEO questions

Compare source HTML with the page after JavaScript runs. Inspect metadata, headings, main-text volume and internal links without a speculative SEO score.

Why can coverage be partial?

Resource, byte, extraction or timing limits can leave content unresolved. Private or unsupported requests are blocked, and requests still pending at capture time are counted.

Does the tool click consent banners or scroll?

No. It captures after DOMContentLoaded and a fixed two-second observation window without interaction, login or scrolling.

Is a JavaScript-added heading always a problem?

No. Changes can be intentional. Review whether essential content or indexing metadata depends on scripts and whether that matches your publishing goals.

Does this show exactly what Google indexes?

No. It compares one anonymous desktop capture with its original HTML. Google's rendering schedule, crawler context and indexed selection can differ.

What happens when the page cannot be rendered?

The check reports an unavailable or timed-out analysis. It does not silently replace the rendered comparison with source HTML alone.