SEO & GEO Analyzer — Manual
Every feature of the SEO & GEO Analyzer: input, architecture, both scores with every weight, each tab, Expert Mode, export, and limits.
Back to the overview: SEO & GEO Analyzer · Open the tool: www.jpkc.com/tools/seo/
This manual documents the SEO & GEO Analyzer in full: what happens when you analyze a URL, how both scores are computed in detail, what every area of the report checks, and the technical limits that apply. The tool's interface is in English — so the tab and button names are given here in their original spelling, which is exactly what you'll see in the live interface.
URL input and flow
The analyzer is a single-page analyzer: each run inspects exactly one URL, not a whole-domain crawl. You paste an http(s) address into the input field at the top (https://example.com/page) and click Analyze or press Enter. If you leave out the scheme, the tool prepends https://. Batch checks across many URLs (status codes, sitemaps, structured data) are only available in the optional Expert Mode.
Around the input field:
- Globe icon on the left: as soon as the field contains something, it turns into an ✕ that clears the field.
- Open URL in new tab (arrow icon, tablet width and up): opens the entered address in a new browser tab.
- History: the field remembers the last 10 analyzed URLs in your browser's
localStorageand offers them as a dropdown; Clear history wipes the list. Imported analyses end up there too. - Cooldown: at least 3 seconds must pass between two analyses (Expert Mode skips this).
Until the first analysis has run, the data tabs are greyed out; SEO Guide, GEO Guide, and Export / Import are always available.
From the click onward, a hybrid process runs in four steps:
- Server-side fetch (PHP proxy). For security reasons your browser cannot fetch a third-party page directly (CORS), so a server-side proxy retrieves the data via cURL: the page itself (final HTML, response and raw headers, SSL certificate, redirect chain, timing), the
robots.txt, and thellms.txt. These three fetches run in parallel. If the redirect chain ends on a different host, the tool then re-fetchesrobots.txtandllms.txtfrom the target host — that's where the rules for the analyzed page live.robots.txtandllms.txtare cached per address for 10 minutes inlocalStorage, so in standard mode a file you've just changed only shows up once that window has passed. - Parsing in the browser. The fetched HTML is parsed locally in your browser with
DOMParser. The actual analysis therefore happens on your machine, not on the server. - Data assembly. The parsed document is broken down into individual data groups: meta data, links, images, structured data, performance values, accessibility, content, and semantic structure.
- Scoring and rendering. The SEO and GEO scores are computed from that data, and the report renders into its tabs.
Expert Mode (optional)
There is an optional Expert Mode with a local proxy: instead of going through the JPKCom server, a self-run local proxy on http://127.0.0.1:<port> fetches the page (open-source project proxy-jpkcom-dev-tools (opens in a new tab)). You switch it on with the Expert toggle in the tool header; the gear icon next to it opens the settings. Setting up the local proxy is an advanced step and not needed for normal use.
What Expert Mode adds:
- No rate limits — neither the 3-second cooldown between analyses nor the wait time on the URL Status Check.
- Fresh
robots.txtandllms.txton every analysis, bypassing the 10-minute cache. - Larger pages: the server proxy's 5 MB cap doesn't apply.
- Markdown content negotiation: the local proxy sends its own
Accept: text/markdownheader and thereby checks whether the target serves Markdown — something the server-side proxy cannot do. This signal is therefore Expert-Mode-only and purely informational (GEO check Markdown via Content Negotiation). - HTTP/3 detection: if the server advertises HTTP/3, the HTTP Version tile in the Overview adds "+ HTTP/3".
- Check all — a batch status check of every URL in a table (links, images, resources), see Check all.
- Crawl Sitemaps and Discover Sitemap in the Robots Analysis tab, plus the Multi-Page Check for structured data in the Structured Data tab.
The local proxy also blocks private, internal, and loopback addresses. So you can't analyze a page on localhost or on your intranet in Expert Mode either.
Architecture: server-side fetch, in-browser analysis
Important for both understanding and privacy: the analyzed page is fetched by the JPKCom server, not by your browser. So the target page sees a request from the JPKCom server (with its User-Agent), not your IP address.
The two server-side endpoints (a fetch proxy and a token-based internal endpoint for authentication) are not a public API you can call yourself — they are used exclusively by the tool's own JavaScript and hardened against abuse. What matters in practice are the operational facts that follow from this:
- SSRF protection: every redirect hop is re-validated and pinned to the checked IP address; private, local, and internal IP addresses are blocked. Only HTTP and HTTPS are allowed as protocols.
- Redirect chain: at most 10 hops, loops are detected. Each hop is requested with
HEAD; if a server answers that with 405 or 501, the proxy retries withGET. - Time budget: the chain and the page fetch share 26 seconds; a single hop may take at most 10 s, the fetch of the target page at most 20 s.
robots.txtandllms.txtget 10 s each. Once the budget is spent, the chain ends with the note "Stopped: time budget used up". - Size cap: at most 5 MB of body. Larger pages are cut off during transfer (never in the middle of a UTF-8 character); the Overview then shows a yellow notice that only the first part was analyzed and that links, words, and structured data further down are missing, and a toast message appears as well.
- Rate limits: the proxy accepts at most 120 requests per minute per IP address. The URL Status Check (checks the HTTP status of a single URL on demand) is additionally limited to 1 request per 2 seconds per IP; beyond that it returns HTTP 429.
- Connection data: the IP address shown is the one of the connection actually used.
These limits also explain how analysis degrades: non-2xx pages still get analyzed but score low; if the HTML can't be parsed, DOM-dependent extractions are empty and most on-page checks fail. A missing robots.txt/llms.txt (404) only fails those particular checks — the run continues.
Everything the page itself supplies — titles, headings, JSON-LD, link targets — is escaped before display. Links taken from the analyzed page only become clickable as http(s) or relative addresses; other schemes such as javascript: are neutralized.
The scoring system
The analyzer computes two independent scores — the SEO score and the GEO score — both normalized to 0–100 and each shown as a circular gauge.
How a score is computed
Both scores use the same mechanism: each score is the sum of weighted checks. Every check is an object with a category, name, maximum points (points), earned points (earned), status, and a note. The final value is:
score = Math.round(totalEarned / totalMax * 100)There is no separate weight value — the integer points value is the weight. The maximum (maxScore) is dynamic, because some checks are only added conditionally (e.g. only when hreflang entries are present). That is why a score is always reported as a percentage, never as a raw point total alone. The score is never stored anywhere: it is recomputed from the analysis data every time it's displayed, including after an import.
Status values: pass, partial, fail — plus info on the GEO score for purely informational 0-point checks that never affect the score.
Gauge bands and letter grade
For quick orientation there are two scales, identical for SEO and GEO:
- Gauge color: score ≥ 80 → green, score ≥ 50 → yellow, otherwise red.
- Letter grade: ≥ 90 → A, ≥ 80 → B, ≥ 60 → C, ≥ 40 → D, otherwise F.
Below each gauge you see the letter grade and the raw points ("x / y points"); the GEO gauge also carries the subtitle "GEO Readiness Score — How well is this page prepared for AI citation?".
SEO score — every check
The SEO maximum is 121 points with all conditional checks present and 107 without the five conditional ones — but it is always reported as /100. The checks by category (maximum points in parentheses):
Technical
- HTTPS (5) — 5 points if HTTPS, else 0.
- Valid SSL Certificate (4) — 4 points if the certificate is valid.
- HTTP 200 Status (5) — status code 200–299.
- Redirects ≤ 1 (3) — ≤ 1 hop → 3, ≤ 2 → 1 (partial), else 0.
- HTTP/2+ (2) — HTTP/2 or /3 → 2, else 0/partial.
- TTFB < 500 ms (4) — < 200 ms → 4, < 500 ms → 2 (partial), else 0.
- Security Headers ≥ 4 (3) — ≥ 4 → 3, ≥ 2 → 1, else 0; the checked set of 8 headers is HSTS, CSP, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy, Cross-Origin-Opener-Policy, Cross-Origin-Resource-Policy.
- No Mixed Content (3, conditional: only with HTTPS and an available DOM) — 0 occurrences → 3, ≤ 3 → 1, else 0.
On-Page
- Title (50–60 chars) (8) — 50–60 chars → 8, 30–70 → 4, else 0.
- Meta Description (70–160 chars) (8) — 70–160 chars → 8, present → 4, else 0.
- Single H1 Heading (5) — exactly 1 → 5, > 1 → 2, none → 0.
- Heading Hierarchy (3) — no skipped levels → 3, ≤ 2 → 1, else 0.
- Canonical URL (3) — canonical points to the analyzed URL → 3; points to a different URL → 2 (partial), because search engines will then index that other URL (right for duplicates, wrong for the main page); missing → 0.
- No Duplicate Head Tags (2, conditional: meta data present) —
title, meta description, canonical, meta robots, and viewport may each appear only once; if one of them is duplicated, the check scores 0, because crawlers then pick one of them at random. - Page Indexable (5) — not
noindex(meta / X-Robots-Tag) and allowed byrobots.txt. - Viewport Meta Tag (2).
- HTML Language (2) —
<html lang>set. - Structured Data (2) — any JSON-LD with data.
- hreflang Valid (3, conditional: only when hreflang entries are present) — 0 errors/0 warnings → 3, 0 errors → 1, else 0.
- Keyword Consistency (3, conditional: only when a title is present) — checks whether up to 5 significant title words (length ≥ 4) appear in the H1/description/URL; match ratio ≥ 0.6 → 3, ≥ 0.3 → 1, else 0.
Crawling
- robots.txt Accessible (3).
- Allowed by robots.txt (4) — the final URL is checked against the
User-agent: *group; allowed → 4 (a missing or emptyrobots.txtallows everything), blocked → 0. Only when there's no robots data at all — an older import, say — does the check give 2 (partial). - Sitemap in robots.txt (3) — at least one
Sitemap:directive.
Social
- Open Graph Tags (≥ 4) (4) — ≥ 4 → 4, ≥ 2 → 2, > 0 → 1, else 0.
- OG Image (3) —
og:imagepresent. - OG Completeness (4 essential) (3, conditional: meta present) — the four essentials
og:title,og:description,og:image,og:url; all 4 → 3, ≥ 2 → 1, else 0. - Twitter / X Card (3) —
twitter:cardpresent.
Performance
- Page Size < 500 KB (3) — < 500 KB → 3, 500 KB–1 MB → 1, else 0.
- HTTP Compression (2) — any
Content-Encoding(reports gzip/brotli + transfer size). - No Render-Blocking Resources (3) — 0 → 3, ≤ 2 → 1, else 0.
Accessibility
- Images Have Alt Text (4) — all
altpresent → 4; missing on at most 20 % of images (rounded up, so at least one image) → 2, else 0. - ARIA Landmarks (main present) (2) — a
<main>exists. - No Empty Anchors (3) — 0 → 3, ≤ 2 → 1, else 0.
Content
- Word Count ≥ 300 (3) — ≥ 300 → 3, ≥ 100 → 1, else 0.
- Readability ≥ 60 (Standard) (2) — readability score (language-dependent formula, see Content Analysis) ≥ 60 → 2, ≥ 40 → 1, else 0.
- Text/HTML Ratio ≥ 5% (1) — ≥ 5 % → 1, else 0.
GEO score — every check
The GEO maximum (excluding the two 0-point info checks) is 40 points, split across four categories: Structured Data 13 + AI Discoverability 11 + Content Structure 11 + Machine Readability 5. This too is reported as /100.
Structured Data
- JSON-LD Present (4).
- Schema Variety (3) — ≥ 3 types → 3, ≥ 2 → 2, ≥ 1 → 1, else 0 (collects all
@typerecursively). - FAQ Schema (3) —
FAQPagepresent. - Author / Organization Schema (3) —
Person/Organizationor anauthorfield (E-E-A-T signal).
AI Discoverability
- llms.txt Present (3) — HTTP 2xx and non-empty content.
- llms.txt Valid Structure (2) — 0 errors/0 warnings → 2, 0 errors → 1, else 0. The file is checked against version 2 of the llms.txt specification, using the same validator as the llms.txt Generator: only the H1 is mandatory, a missing blockquote summary is a warning, and code fences are skipped.
- AI Crawlers Allowed (3) — checked against 16 named AI crawlers: for training GPTBot, ClaudeBot, Google-Extended, Applebot-Extended, meta-externalagent, CCBot, Bytespider, and Amazonbot; for AI search OAI-SearchBot, Claude-SearchBot, PerplexityBot, and DuckAssistBot; for fetches on behalf of users ChatGPT-User, Claude-User, Perplexity-User, and MistralAI-User. 0 blocked → 3, ≤ 3 → 2, ≤ 6 → 1, else 0. No
robots.txtcounts as "all allowed". The note names the first blocked bots. - Content Signals Declared (0 points,
infoonly) — parsesContent-Signalfromrobots.txtor an HTTP header and flags a conflict when the signals welcome AI but the robots rules block AI crawlers. Never affects the score. It also picks up the fourth fielduse(in testing since July 2026) and path-scoped directives (Content-Signal: /blog/ …) — path rules are reported separately from the site-wide signal, because a rule about/blog/says nothing about the site as a whole. - Markdown Alternate Link (1) —
<link rel="alternate" type="text/markdown">. - Markdown via Content Negotiation (0 points,
infoonly, Expert-Mode-only) — present only when the Markdown negotiation probe has run. - Open Graph Tags (≥ 4) (2) — ≥ 4 → 2, ≥ 2 → 1, else 0.
Content Structure
- Content Depth (≥ 500 words) (3) — ≥ 500 → 3, ≥ 300 → 2, ≥ 100 → 1, else 0.
- Clean Heading Hierarchy (3) — exactly 1 H1 + ≥ 1 H2 → 3, single H1 → 2, any H1 → 1, else 0.
- Consecutive Heading Levels (1) — no skipped levels.
- Short Paragraphs (avg < 150 words) (2) — < 150 → 2, < 250 → 1, else 0.
- Lists & Tables Present (2) — lists +1, tables +1.
Machine Readability
- HTML Language Attribute (1).
- Semantic HTML Elements (2) — ≥ 5 → 2, ≥ 2 → 1, else 0.
- Images Have Alt Text (2) — all → 2; missing on at most 20 % of images (rounded up, so at least one image) → 1, else 0.
The analysis areas in detail
The report consists of 20 tabs, which the sidebar sorts into eight groups: Overview (Overview, SEO Score, GEO Score), Technical, On-Page SEO, Social, Accessibility, Crawling, Other (Source Code and the two guides), and Export. Each tab gets its own section below, under its original label.
Overview
The summary dashboard:
- Badges for the HTTP status with protocol, the SEO score, and the GEO score (each as
x/100with letter grade), followed by the requested URL and — after redirects — the final URL. - Tiles for HTTP Version (in Expert Mode possibly with "+ HTTP/3"), Page Size (with transfer size and method when compressed, e.g.
→ 18.0 KB (BR)), TTFB, and Redirects. - On-page traffic lights for Page Title, Meta Description, H1 Heading, and Structured Data.
- The cards SSL Certificate (valid/invalid, days left, issuer) and Robots Status (indexable or not, with the reason:
robots.txtor meta robotsnoindex). - Page Info with IP address, content type, and the connection timings DNS Lookup, TCP Connect, SSL Handshake, TTFB, and Total Time.
- Issues & Warnings: every
failandpartialcheck of the SEO score with its note and category. Clicking an entry takes you to the tab where you can investigate the problem. GEO findings live in the GEO Score tab.
If the page was cut off at the 5 MB limit, a yellow notice sits right at the top.
SEO Score
The full breakdown of the SEO score: the gauge with letter grade and raw points, a progress bar per category with earned and possible points, and the Detailed Checks table with status icon, Check, Category, Points (earned / possible), and Note. The table follows the fixed order of the checks and can't be re-sorted — the Points column tells you where most of the points sit. Copy Report copies the score and every check as plain text to the clipboard.
GEO Score
The breakdown of the GEO score (AI citation readiness), with gauge, category bars, Detailed Checks, and Copy Report just like the SEO score. The two info checks appear in the table as notes with no point effect. Two cards of its own come on top:
- llms.txt — whether
/llms.txtwas found (with its size in bytes and a link to the file), the result ("Valid", "Found with n warning(s)", or "n issue(s) found"), badges for the title and the number of sections and links, plus the validator's errors, warnings, and hints; identical messages are grouped together with their line numbers. - Content Signals — where the signals come from (
robots.txt, HTTP header, or both), a table of the signals in plain language (search= search index,ai-input= real-time AI answers/RAG,ai-train= training,use= what a bot may keep and pass on), path-scoped rules as a separate block, and a warning when the signals allow AI use butrobots.txtblocks AI crawlers.
HTTP Headers
The final page's response headers, grouped into General, Security, Cache, and Other, each value with a copy button. Below that you can expand the Raw Response Headers. This is where you check caching, content type, and encoding; the security headers are graded in the SSL / Security tab.
SSL / Security
Three cards:
- SSL Certificate — for a valid certificate: status, Common Name, Issuer, Organization, Valid From, Valid Until, Days Remaining (red below 14, yellow below 30 days), signature algorithm, TLS version with cipher, public key, the Subject Alternative Names, and the Certificate Chain. The chain shows each certificate as the server sends it, with its role (Server certificate, Intermediate CA, Root CA (self-signed), or Cross-signed root (acts as intermediate)) and the result of the signature check for each link ("signature ok" or "signature does not match"). For an invalid certificate the card only shows "Certificate invalid" with the reason; the detail fields, SANs, and chain are left out.
- Security Headers — nine headers with a short description: the eight that feed into the SEO score (HSTS, CSP, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy, Cross-Origin-Opener-Policy, Cross-Origin-Resource-Policy), plus the legacy X-XSS-Protection. Headers that are set get their values checked — HSTS without
max-age, withoutincludeSubDomainsorpreload, a CSP withoutdefault-src/script-src, an X-Frame-Options value other thanDENY/SAMEORIGIN, an X-Content-Type-Options value other thannosniff,unsafe-urlas Referrer-Policy, or a wildcard in the Permissions-Policy. - Mixed Content — every image, script, stylesheet, iframe, media file, and object that an HTTPS page loads over
http:.
The proxy determines TLS version, cipher, and chain with its own TLS probe and stores them in the analysis data even for an invalid certificate. The tab doesn't show them in that case, but they are in the JSON export (data.page.ssl).
Redirects
The redirect chain hop by hop as a timeline: per hop the status code, an HTTPS or HTTP badge, response time, the server header ("via …"), URL, and IP address. Errors are shown right at the hop — a detected loop, a blocked target, or a used-up time budget. Each hop's Raw Headers can be expanded. Read off whether the final URL is reached via unnecessary or mixed (http/https) intermediate hops — every extra hop costs in the SEO score.
Performance
- Page Size and Connection Timing (DNS Lookup, TCP Connect, SSL Handshake, TTFB, Download).
- Render-Blocking Resources — external scripts in the
<head>withoutasync/defer, and stylesheets that aren't limited tomedia="print". This is the tab's biggest lever; it feeds directly into the SEO score. - Resource Hints —
preload,prefetch,preconnect, anddns-prefetchwithasandcrossorigin. - Scripts & Stylesheets — counters for scripts (total, external, inline, async, defer) plus external stylesheets and inline styles.
- All Resources — every resource on the page as a table (Type, URL, Attributes, Blocking, Position), sortable and filterable.
In the resource tables you can check individual URLs with the URL Status Check.
Meta Tags
The central on-page tab that many SEO checks draw on:
- Page Title and Meta Description with a length badge (e.g. "48 chars — could be longer").
- Page Basics — Canonical URL, Meta Robots, Viewport, HTML Language, Charset.
- Heading Structure — every heading indented by level, skipped levels marked.
- Open Graph and Twitter / X Card — every tag found.
- hreflang / Internationalization — every entry with its status. Errors are a missing
hreforhreflang, invalid BCP 47 codes, and duplicate language codes; warnings are relativehrefvalues and a missing self-reference of the page. A missingx-default(with several language variants) is only a hint and costs no points. - Pagination —
rel="prev"/rel="next", if present. - Other Head Tags — all remaining
<meta>and<link>tags in the head. - Entity Encoding Check — finds double-encoded HTML entities such as
&amp;in the source.
Links
Tiles for Total Links, Internal, External, and Nofollow, then one table each for External Links and Internal Links with URL, Anchor Text, and Rel — sortable by clicking a column header and with a filter field. The tool tells internal from external by hostname, so www.example.com and example.com count as different hosts. Empty links, pure fragment links (#…), and schemes such as javascript:, mailto:, or tel: aren't counted; rel recognizes nofollow, ugc, and sponsored. Every row has a URL Status Check.
Images
Tiles for Total Images, Missing Alt, No Dimensions, Lazy Loaded, Has srcset, WebP, AVIF, and SVG, then the Image Details table (Source, Alt Text, Dimensions, Attrs), sortable and filterable. A missing alt counts as an error, an empty alt="" as a decorative image. Clicking a row opens the image preview with the full URL, alt text, dimensions, srcset, sizes, and attributes (lazy, srcset, webp, avif, svg, <picture>), the Open and Download buttons, and Previous/Next (arrow keys work too). Inline images as data URLs are shown with MIME type and size. Missing alt text counts against both the SEO and the GEO score.
Structured Data
Each JSON-LD block appears as its own card ("JSON-LD #1" …) with its types. Explorer/Raw switches between an expandable tree and the raw text; the choice applies to all blocks. Invalid JSON is shown as "Invalid JSON" with the parser's error message. JSON-LD is fully recognized even when a block contains an array or an @graph, or lists @type as an array. Microdata is only summarized (count, types). The External Validation card opens the analyzed URL in validator.schema.org via the Schema.org Validator button.
In Expert Mode the Multi-Page Check card is added: Check Internal Pages fetches every internal link of the page (plus the page itself) through the local proxy and extracts JSON-LD and Microdata from each. Before you start, you choose Parallel (1–3, default 2) and Delay (up to 5 s, default 0.5 s); while it runs you get Pause and Cancel, afterwards Restart. At the end the tool summarizes the JSON-LD types found and how often they occur, and you export the result via Copy JSON or Download JSON.
This is where you check which schema types are present — variety, FAQ, and author/organization schema feed directly into the GEO score.
Content Analysis
The tool counts words, sentences, and characters in the main text: scripts, styles, noscript, SVG, plus nav, header, footer, aside, figure, and figcaption are left out. Paragraphs (every <p>), lists, and tables, on the other hand, are counted across the whole page, navigation and footer included. Words are recognized in any script, so umlauts, Cyrillic, or Greek count too.
- Key figures — language (from
<html lang>), words, reading time, paragraphs, sentences, characters, and text/HTML ratio (excluding SVG, scripts, and styles). - Readability — the formula follows
<html lang>: Flesch–Amstad for German, Kandel-Moles for French, Fernández Huerta for Spanish, Franchina-Vacca for Italian, Douma for Dutch, otherwise Flesch Reading Ease. The scale runs from 0 to 100. - Sentence Length (distribution across ≤ 10, 11–20, 21–30, and more than 30 words), Gunning Fog Index (years of schooling needed), and Transition Words — the share of sentences with transition words (word lists for English and German, recommended ≥ 30 %).
- Heading Distribution and Top Keywords — the most frequent words with count and density, sortable, with a filter field and a limit switch (15, 50, 100, 200, or All, default 15). Words under 3 characters and common English, German, and French stop words are not counted.
- Keyword Consistency — whether the up to five significant title words (4 characters or more) appear in the H1, description, and URL.
- Duplicate Content Signals — e.g. identical title and H1, a description that appears verbatim in the text, or a missing canonical.
- Extracted Text — a collapsible card at the end of the tab with the evaluated main text and its character count. It shows you which text the key figures are actually based on.
These values drive the content checks of both scores (word count, readability, text/HTML ratio, paragraph length, keyword consistency); the GEO score counts lists and tables directly in the source.
Semantic HTML
Badges show which landmarks (header, main, nav, footer, aside) are present; below them sits the Document Structure as a tree of semantic elements with role details and line numbers. Clicking an element jumps to the matching line in the Source Code tab. The more semantic elements, the better for machine readability (GEO check "Semantic HTML Elements").
Social Preview
- Google SERP Preview — a search-result preview with favicon, domain, title (truncated beyond 60 characters), and description (truncated beyond 160 characters).
- Facebook / LinkedIn Preview and Twitter / X Preview — rendered preview cards from the OG and Twitter data, each falling back to title, description, and
og:imagewhen specific tags are missing. - Open Graph Completeness — which of the tags
og:title,og:description,og:image,og:url,og:type,og:site_name, andog:localeare set and which are missing.
Accessibility
A standalone audit area that goes well beyond the handful of a11y checks in the SEO score: Landmarks & Navigation (landmarks, skip links), Interactive Elements (empty links, empty buttons, form fields without a label), ARIA Usage (aria-label/labelledby, aria-describedby, aria-hidden, role=, tabindex > 0, tabindex="-1"), Image Accessibility, Table Accessibility (captions, <th>), and Page Semantics (language attribute).
Robots Analysis
At the very top sits the overall verdict on whether the page is indexable once every signal is taken into account. Below it:
- HTTP Header: X-Robots-Tag — value and meaning (
noindex,nofollow,noarchive). - Meta Tag:
<meta name="robots">— value and meaning. - robots.txt — address and status, whether this URL is allowed or blocked (with the matching rule), the declared sitemaps, and the raw content.
- Per-Bot Access — a table for 40 well-known bots, grouped by type (Search, Social, Archive, AI, SEO Tool), with operator, Access (Allowed/Blocked), Source (own block,
*wildcard, or default), crawl delay, and matching rule. - User-Agent Blocks — every group in the file with its allow/disallow rules and crawl delay.
Evaluation follows RFC 9309, using the same parser as the robots.txt & Sitemap tool: the wildcards * and $ are supported, the longest matching rule wins, Allow wins a tie, several groups for the same bot are merged, and blank lines don't end a group. Googlebot-Image and Googlebot-News fall back to the Googlebot rules.
The Sitemap card lists the Sitemap: entries from robots.txt. In Expert Mode two buttons are added: Crawl Sitemaps loads every declared sitemap, follows sitemap indexes, and hands the collected page URLs to the batch status check. If there's no Sitemap: line, Discover Sitemap searches eleven common paths (such as /sitemap.xml, /sitemap_index.xml, /wp-sitemap.xml, or /sitemap.xml.gz); you then crawl what it finds with Crawl Discovered Sitemaps.
Source Code
The HTML source, formatted for display with js-beautify, in a read-only editor (ACE). The header shows the received size ("formatted for display" when it was reformatted), the Nu Html Checker button (opens the URL in the W3C validator), and Copy. Below that you can expand the unmodified original source. Handy for looking up a spot the analyzer flagged directly in the markup — the Semantic HTML tab jumps here on click.
SEO Guide
Static reference content on classic SEO in five sections: Technical SEO, Content, Links, AI & LLMs, and Core Web Vitals. It works even without a prior analysis (always available).
GEO Guide
Extensive, educational GEO reference content (accordion), likewise usable without an analysis. It puts AI optimization in context — including notes on Google's AI Optimization Guide (May 2026: "SEO and GEO are the same discipline" for Google's AI, RAG-based), a mythbusting table (Google says llms.txt/schema/chunking are not required for Google AI Search), guidance on multi-turn/follow-up optimization, and a GEO writing playbook. The guide explicitly argues why llms.txt and schema still matter for other engines (Perplexity, ChatGPT, Claude, Bing Copilot) — which is why the GEO score still rewards them. The section on content signals also explains the fourth field use and the syntax of path-scoped rules.
Export / Import
After an analysis, the tab shows the Download Analysis card with the analyzed URL, the estimated JSON size, and three buttons:
- Download JSON — the complete analysis as
seo-analysis-<host>-<date>.json. - HTML Summary — a standalone HTML report (
seo-report-<host>-<date>.html) with score, quick facts, on-page SEO, content, social preview, structured data, and the GEO evaluation. - HTML Full Report — the detailed report (
seo-full-report-<host>-<date>.html) with all analysis data, adding headers, SSL, redirects, performance, links, images, meta tags, accessibility, and robots. Both reports ship with their own print styles.
The Import JSON card is always visible: upload an exported file or paste the JSON and click Import & Render — every tab is rebuilt without a new network request. Next to it sit the three demo buttons (see below).
The format is JSON with version, export timestamp, URL, tool: "jpkcom-seo-analyzer", and a data object; the import only accepts files carrying that tool identifier. data holds the raw analysis data including the HTML source, headers, redirect chain, SSL data, and the robots.txt and llms.txt contents, plus the values extracted from it (meta data, links, images, structured data, performance, a11y, content, and semantic values, and in Expert Mode the result of the Markdown negotiation probe), but no score. On import, the tool re-extracts these values from the stored HTML using the current logic and recomputes both scores. An older file is therefore graded by today's rules as long as it contains HTML; without HTML, the tool uses the stored values. The demo files use the same schema with demo: true.
{
"version": "1.0",
"exportDate": "2026-10-16T09:30:00.000Z",
"url": "https://example.com/page",
"tool": "jpkcom-seo-analyzer",
"data": { "page": { }, "robots": { }, "llms": { }, "meta": { }, "links": { }, "…": { } }
}Checking URLs from the tables
URL Status Check
In the tables of the Links, Images, and Performance tabs (Render-Blocking Resources, Resource Hints, All Resources), every row has a yellow check button. It requests the HTTP status of that one URL and shows the result in the URL Status Check window: a status badge (OK, Redirect, Client Error, Server Error, or Connection Failed), response time, requested and final URL (each with copy and open), and the redirect chain. Afterwards a small status badge stays next to the button.
The proxy asks with HEAD, falls back to GET on 405 or 501, and evaluates at most 5 responses (hops), so it follows up to 4 redirects to the final target; if the fifth response is still a redirect, the check stops there. In standard mode the browser enforces a pause of about 2.5 seconds between two checks, and the server allows at most 1 check per 2 seconds per IP (otherwise HTTP 429). Expert Mode lifts both.
Check all: batch status check (Expert Mode)
In Expert Mode each of these table cards — External Links, Internal Links, Image Details, Render-Blocking Resources, Resource Hints, All Resources — also carries a Check all button. It collects every unique http(s) URL in the card, lists them in a confirmation dialog, and after Continue checks them through the local proxy (at most five requests per URL, i.e. up to four redirects). You can set Parallel (1–3 concurrent requests, default 3) and Delay (from no delay up to 60 s between rounds). During the run the header counts successes (2xx), redirects (3xx), and errors; Pause and Cancel stop the run, Restart starts it over. You export the result via Copy CSV, Copy JSON, Download CSV, or Download JSON; the CSV contains the columns URL, Final URL, Status, Content-Type, Redirects, Redirect Chain, and Response Time (ms).
Crawl Sitemaps in the Robots Analysis tab uses the same batch check for every URL from the sitemaps.
Demo modes
The Export / Import tab holds three demo buttons that load ready-made example analyses:
- Perfect (green) — a page where all checks pass: HTTPS, six of the eight graded security headers (without Cross-Origin-Opener-Policy and Cross-Origin-Resource-Policy; the check still passes) plus
Content-Signal, valid SSL, rich meta/OG/Twitter/hreflang data, JSON-LD (WebPage, Organization, FAQPage), a Markdown alternate, a well-formedllms.txt, a clean heading tree, complete landmarks, easy-to-read text. - Broken (red) — everything that can go wrong: HTTP only, a redirect chain with two redirects (301 → 302 → 200), an "Untitled" title, no description, duplicate H1 plus skipped levels, missing
alttext, empty/spam links,robots.txtwithDisallow: /, a malformedllms.txt, a page of roughly 280 KB (shown in the tool as278.3 KB), render-blocking resources. - Empty (gray) — a bare page (
<html><head></head><body></body></html>),robots.txtandllms.txtboth 404, all extracted fields null/0.
Important: the demo files contain raw data and extracted values, but no precomputed scores. On load the tool re-extracts the values from the bundled HTML and computes the SEO and GEO scores client-side — exactly as in a live run. This makes the demos a clean illustration of how each individual check reacts to good, bad, and missing data.
Operational limits and privacy — in brief
- Privacy: the target page is fetched by the JPKCom server, not by your browser; it does not see your IP. The analysis runs locally in your browser.
- Stored in your browser: the URL history (10 entries) and, for 10 minutes, the fetched
robots.txtandllms.txtcontents — both inlocalStorage. - SSRF / private-IP protection: internal, local, and private addresses are blocked — in standard mode and in Expert Mode alike; HTTP/HTTPS only.
- Limits: max 10 redirect hops, a 26-second time budget for chain and page, a 5 MB body cap (anything beyond is cut off, with a notice).
- Rate limits: 120 proxy requests per minute per IP, URL Status Check 1 request per 2 seconds per IP (otherwise HTTP 429), 3 seconds between two analyses; Expert Mode lifts these locks.
- Input: exactly one http(s) URL per analysis; batch checks across many URLs only in Expert Mode.
- Usable without analysis: SEO Guide, GEO Guide, and Export / Import.
For the starting point, the audiences, and the big picture, see the overview page. You can try all of this directly in the tool.