SEO & GEO Analyzer — Manual

The complete feature reference for the SEO & GEO Analyzer: URL input, architecture, the dual scoring system with every weight, each analysis tab, and the operational 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 English 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 absolute http(s) address into the input field at the top (https://example.com/page) and click Analyze. Exactly one absolute URL per run is allowed; there is no sitemap or batch mode.

From there a hybrid process runs in four steps:

  1. 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 the llms.txt. These three fetches run in parallel.
  2. 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.
  3. 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.
  4. 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. This path can send a custom Accept: text/markdown header and thereby probe the target's Markdown content negotiation — something the server-side proxy cannot do. That single signal is therefore Expert-Mode-only and purely informational. Setting up the local proxy is an advanced step and not needed for normal use.

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; private, localhost, and internal IP addresses are blocked. Only HTTP and HTTPS are allowed as protocols.
  • Fetch limits: at most 10 redirect hops per page (loops are detected), a page timeout of 15 s, and 10 s for robots.txt/llms.txt and per-hop checks.
  • Size cap: at most 1 MB of body — larger HTML is truncated.
  • Rate limit: the URL Status Check (checks the HTTP status of an individual URL on demand) is limited to 1 request per ~2 seconds per IP; beyond that it returns HTTP 429.

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.

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.

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.

The GEO gauge additionally carries a label in the style "Grade X · earned/max points · AI citation readiness".

SEO score — every check

The SEO maximum is around 119 points with all conditional checks present, and around 107 without the four 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).
  • Page Indexable (5) — not noindex (meta / X-Robots-Tag) and allowed by robots.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) — allowed → 4, no robots.txt → 2 (partial), blocked → 0.
  • 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:image present.
  • 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:card present.

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 alt present → 4, ≤ 20 % missing → 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) — Flesch ≥ 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 @type recursively).
  • FAQ Schema (3) — FAQPage present.
  • Author / Organization Schema (3) — Person/Organization or an author field (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.
  • AI Crawlers Allowed (3) — checked against 9 named crawlers (GPTBot, ChatGPT-User, OAI-SearchBot, Google-Extended, Claude-Web, ClaudeBot, anthropic-ai, PerplexityBot, CCBot); 0 blocked → 3, ≤ 3 → 2, ≤ 6 → 1, else 0. No robots.txt counts as "all allowed".
  • Content Signals Declared (0 points, info only) — parses Content-Signal from robots.txt or an HTTP header and flags a conflict when the signals welcome AI but the robots rules block AI crawlers. Never affects the score.
  • Markdown Alternate Link (1) — <link rel="alternate" type="text/markdown">.
  • Markdown via Content Negotiation (0 points, info only, 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, ≤ 20 % missing → 1, else 0.

The analysis areas in detail

The report is built as a tab bar covering around two dozen areas (the official marketing line says "19 analysis modules"; depending on how you count the two guides and the export tab, you arrive at roughly 20 tabs). Each area below is its own section, with its original English label.

Overview

The summary dashboard: status, score, and GEO badges, HTTP version, page size, TTFB, redirect count, the key on-page values (title, description, H1, structured data), cards for the SSL and robots summary, a "Page Info" table, and an "Issues & Warnings" list. This is where you read at a glance where the page stands before diving into the detail tabs.

SEO Score

The full breakdown of the SEO score by category and individual check (see above). Read off which checks are pass/partial/fail and how many points are missing — that's your prioritization list.

GEO Score

The breakdown of the GEO score (AI citation readiness). Read it the same way as the SEO score, but oriented toward AI/citability. Note that the two info checks appear here as notes with no point effect.

HTTP Headers

Shows the page's response headers — both formatted and as raw headers. Here you check caching, content type, encoding, and above all the eight security headers that feed into the SEO score.

SSL / Security

Details of the SSL certificate: subject, issuer, validity (from/to), days left, SANs, certificate chain, algorithm, and TLS version. So you can see at a glance whether the certificate is valid and when it expires.

Redirects

The redirect chain hop by hop: per hop the status, timing, an SSL flag, IP, and server. 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

Timing values plus render-blocking resources, resource hints, and inline and external scripts and styles. Render-blocking resources are the biggest lever here — they feed directly into the SEO score.

Meta Tags

All meta-relevant values: title, description, canonical, robots, viewport, charset, language, Open Graph and Twitter data, hreflang, the headings, and other meta tags. The central on-page tab — many SEO checks draw on these values.

Every <a> on the page with its href, link text, and flags for external and/or nofollow. Useful for finding empty or spam links (which also affect the "No Empty Anchors" accessibility check) and gauging the internal/external ratio.

Images

Every image with src, alt text, and dimensions (width/height). An image preview modal helps with review. Missing alt text counts against both the SEO and the GEO score.

Structured Data

The JSON-LD blocks found, with format, type, and data. Here you check which schema types are present — variety, FAQ, and author/organization schema feed directly into the GEO score.

Content Analysis

Word, paragraph, and sentence counts, average words per sentence, Flesch readability, plus lists and tables. These values drive the content checks of both scores (word count, readability, paragraph length, lists/tables).

Semantic HTML

The page's semantic landmarks as a tag-to-role mapping. The more semantic elements, the better for machine readability (GEO check "Semantic HTML Elements").

Social Preview

Rendered preview cards for Open Graph and the Twitter/X card — built from the OG and Twitter meta data. This is how you see what the page looks like when shared on social networks.

Accessibility

The accessibility audit: landmarks, skip links, empty anchors and buttons, form fields and unlabeled inputs, ARIA roles/labels/hidden/live, tabindex, and tables with captions and <th>. It goes well beyond the handful of a11y SEO checks and is a standalone audit area.

Robots Analysis

The contents of robots.txt: allow/disallow rules, sitemaps, and AI-crawler rules. Here you check whether the page is indexable, whether a sitemap is referenced, and how robots.txt treats the nine AI crawlers.

Source Code

The raw HTML source in an editor (ACE) for review. Handy for looking up a spot the analyzer flagged directly in the markup.

SEO Guide

Static reference content on classic SEO. 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.

Export / Import

Here you export the current analysis as JSON, re-import a saved analysis, and load the three demo datasets. This tab too is usable without a prior analysis. The format is JSON with version, tool: "jpkcom-seo-analyzer", and a data object — re-importable; the demo files use the same schema with demo: true.

{ "version": "1.0", "tool": "jpkcom-seo-analyzer", "data": { } }

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, full security headers including Content-Signal, valid SSL, rich meta/OG/Twitter/hreflang data, JSON-LD (WebPage + FAQPage), a well-formed llms.txt, a clean heading tree, 6 landmarks, readability 62.
  • Broken (red) — everything that can go wrong: HTTP only, a 3-hop redirect chain (301 → 302 → 200), an "Untitled" title, no description, duplicate H1 plus skipped levels, missing alt text, empty/spam links, robots.txt with Disallow: /, a malformed llms.txt, a 285 KB page, render-blocking resources.
  • Empty (gray) — a bare page (<html><head></head><body></body></html>), robots.txt and llms.txt both 404, all extracted fields null/0.

Important: the demo files contain only the raw data, no precomputed scores. The SEO and GEO scores are computed client-side from that data on load — 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.
  • SSRF / private-IP protection: internal, localhost, and private addresses are blocked; HTTP/HTTPS only.
  • Limits: max 10 redirect hops, ~15 s page timeout, ~1 MB body cap (HTML beyond that is truncated).
  • Rate limit: the URL status check is limited to ~1 request per 2 seconds per IP (otherwise HTTP 429).
  • Input: exactly one absolute http(s) URL per run, no batch/crawl.
  • 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.