SEO & GEO Analyzer — Tips & Tricks
Insider moves for the SEO & GEO Analyzer: GEO/AI optimisation, common pitfalls, how the score is weighted, and combining it with other JPKCom tools.
Back to the overview: SEO & GEO Analyzer · Open the tool: www.jpkc.com/tools/seo/
The manual explains every check; the examples show the workflows. This page covers what both assume but rarely spell out: where the points actually sit, when a number is lying to you, and which blank field you can safely ignore. The tool's interface is in English, so the real tab and button names appear here exactly as you'll see them.
Moving the GEO Score on purpose
The GEO Score feels stubborn at first because its maximum is small: 40 points across four categories — Structured Data 13, AI Discoverability 11, Content Structure 11, Machine Readability 5. That's the good news: with so few total points, every single check moves the percentage noticeably. You only have to act in the right three or four places.
- Structured data is the largest block (13 points). A page with just one
WebPageblock leaves the most on the table here.Schema Varietyrewards variety: ≥ 3 distinct@typevalues earn the full 3 points. So deliberately ship several types — typicallyBreadcrumbList,Article/BlogPosting,Organization. On top of that,FAQ Schema(anFAQPageblock, 3 points) andAuthor / Organization Schema(3 points) pay in directly — the latter is your E-E-A-T signal: mark upPerson/Organizationor anauthorfield and the AI knows who to attribute a statement to. That's 13 points in one category, roughly a third of the GEO maximum. - The
llms.txtearns two checks at once.llms.txt Present(3 points) only needs a reachable, non-empty file;llms.txt Valid Structure(2 points) is awarded in full only at 0 errors and 0 warnings. A present but sloppy file earns partial credit only — structure counts, not mere existence. - Don't lock AI crawlers out by accident.
AI Crawlers Allowed(3 points) tests therobots.txtagainst 16 named AI bots — eight training crawlers (including GPTBot, ClaudeBot, Google-Extended, CCBot), four search crawlers (OAI-SearchBot, Claude-SearchBot, PerplexityBot, DuckAssistBot) and four fetchers acting on behalf of users (ChatGPT-User, Claude-User, Perplexity-User, MistralAI-User). 0 blocked → 3 points, up to 3 → 2, up to 6 → 1. A blanketDisallow: /or an old "block the bad bots" snippet costs you immediately here. If you only want to rule out training, block the training crawlers specifically and let the search and user bots through — AI search can then keep citing you. It still costs points, though: block all eight training crawlers and you're above six, so this check scores 0. That's a deliberate choice the score doesn't reward, but it can be perfectly legitimate. Which bot hits which rule is shown in the Per-Bot Access table in the Robots Analysis tab. Odd detail: norobots.txtat all counts as "everyone allowed" — a 404 scores better here than an over-restrictive file. - The Markdown alternate is a cheap point. A
<link rel="alternate" type="text/markdown">in the<head>earns 1 point as an AI-extraction affordance. Small, but not nothing out of 40 — and good practice for AI-friendly pages anyway. Content-Signalis info only — but useful info. TheContent Signals Declaredcheck isinfoand worth 0 points. Don't chase it for the score. Its value lies elsewhere: the dedicated Content Signals card in the GEO Score tab breaks down your signals (path-scoped rules included) and flags a conflict when yourContent-Signaldirective welcomes AI while therobots.txtblocks the AI crawlers at the same time. That exact contradiction is a common, invisible mistake — the check surfaces it without distorting the score.- Markdown content negotiation only shows in Expert Mode. The
Markdown via Content Negotiationcheck (alsoinfo, 0 points) appears only when the probe withAccept: text/markdownhas run through the local Expert-Mode proxy — the standard server-side proxy can't send that header. If the line is absent in a normal run, that's not a flaw in your page, just a consequence of the architecture.
Rule of thumb: grab the structured-data and llms.txt points first and don't block AI crawlers — that's the fastest way to move the GEO Score. Content depth and clean headings (Content Structure, 11 points) usually come along for free if the page is decently written anyway.
Reading the scores wisely
- The two scores are independent. SEO and GEO share no points. A technically flawless page can be GEO-weak (no
llms.txt, thin schema), and vice versa. Read them as two separate viewpoints, not one grade with two decimals. - Don't chase a literal 100 on the SEO Score. The SEO maximum is dynamic: conditional checks like
hreflang Valid,OG Completeness,Keyword Consistency,No Duplicate Head TagsandNo Mixed Contentonly enter the maximum when they're actually applicable. A single-language page with no hreflang can't "lose" the hreflang points at all, because the check never counts. That's why a percentage is always reported — a flat 100 isn't a meaningful target. What is meaningful: working through thefailandpartialentries in the SEO Score tab by their point value. - Colour and grade are guidance, not a verdict. The gauge is green at 80, yellow at 50, red below; the letter grade runs ≥ 90 → A, ≥ 80 → B, ≥ 60 → C, ≥ 40 → D, else F. That's a traffic light for a quick impression — the actual work lives in the individual checks, not the letter. A "C" with three big, easily fixed
fails is worth more than a "B" where only micro-points are left. - Points beat gut feeling for prioritising. A missing
Meta Description(up to 8 points) or a missingTitlerange (up to 8) outweigh a missingog:image(3) or a text/HTML-ratio point (1). The Detailed Checks table can't be re-sorted — read the Points column (earned / possible) and tackle the biggest gaps first. - A "partial" on the canonical isn't a mistake in itself. If the canonical points to a different URL, you get 2 points instead of 3. For filter, print or parameter variants that's exactly right; only on the main page itself does it mean you're telling search engines to index some other address.
Pitfalls from real use
- The tool sees what the JPKCom server sees — not your browser. The fetch runs server-side via the proxy. So there's no logged-in, personalised or JS-loaded view: anything behind a login or injected only on the client is invisible to the analyzer. Check public URLs in their as-served state.
- Heavy client-rendered SPAs get under-reported. Parsing happens on the fetched HTML, not a fully rendered browser DOM. An app that injects title, headings, meta data or content only via JavaScript hands the analyzer a near-empty shell — so content, heading and meta checks come up short. That's not a bug; it's the same reason many crawlers struggle with such pages. Server-side rendering (SSR/prerendering) is the real fix here.
- Very large pages get truncated — but no longer silently. The server proxy reads at most 5 MB of HTML; if the page is bigger, a yellow notice at the top of the Overview tells you only the first part was analyzed. Links, words and JSON-LD further down are then missing from the report — so a low value in that case isn't a genuine page problem. Expert Mode has no such cap.
- Long redirect chains run on a time budget. The chain and the page fetch share 26 seconds, and 10 hops is the hard stop. If the Redirects tab ends with "Stopped: time budget used up" or "Redirect loop detected", the problem lies in your redirects, not in the target page.
- After a domain switch, the target's
robots.txtcounts. Ifexample.comredirects towww.example.comor to a different domain entirely, the analyzer fetchesrobots.txtandllms.txtfrom the target host. The origin domain's file then plays no part in the grading. - Just changed your
robots.txtorllms.txt? Give it up to 10 minutes. In standard mode your browser caches both files per address for 10 minutes. Re-analyze right after a deploy and you may still see the old version — wait a moment, or use Expert Mode, which always fetches fresh. wwwand non-wwware different hosts in the Links tab. The tool tells internal from external by hostname. Ifwww.example.comlinks toexample.com, those links show up under External Links — often a sign of inconsistent internal linking, where every click takes an extra redirect.- The URL status check is rate-limited. In standard mode the check buttons in the tables allow only 1 request per 2 seconds per IP; fire faster and the browser already holds you back with a wait message, with the server answering HTTP 429 as a last resort. Just wait a moment rather than re-firing — or check whole lists at once with Check all in Expert Mode.
localhostand intranet won't work. For SSRF protection the proxy blocks private and internal IP addresses; only public HTTP/HTTPS addresses are allowed. The same goes for the local proxy in Expert Mode. To analyze a local dev instance or an intranet page, expose it on a publicly reachable staging domain first.
Workflow tips
- Snapshot via Export, then compare. Before an optimisation round, save the analysis in the Export / Import tab via Download JSON. After the fixes, re-import the old file — because no frozen score is stored, the tool re-evaluates the saved HTML on import, using the current logic. That keeps the before/after comparison fair and reproducible (details in Example 6). The JSON file contains the page's complete source — on large pages it gets correspondingly large, and the Download Analysis card shows the size up front.
- For clients, use the HTML report. HTML Summary creates a standalone HTML file with score, quick facts, on-page values, social preview and GEO evaluation; HTML Full Report adds all the technical details. Both open in any browser without the tool and print cleanly.
- Click the issues instead of hunting for them. Every entry under Issues & Warnings in the Overview links to the tab where you can investigate the problem. Copy Report in the SEO Score or GEO Score tab takes the whole check list with you as plain text, into a ticket, say.
- Calibrate with the demo modes. To get a feel for the scale, load Perfect first and then Broken in the Export/Import tab and compare the same tabs check by check. Because the demos also carry no precomputed score and are scored client-side, you see real scoring logic on a known dataset — a clean learning baseline with no live page.
- Source Code as the tie-breaker. When structured-data detection is ambiguous — an expected
@typedoesn't show up even though you built it in — look it up in the Source Code tab. It's usually invalid JSON-LD that's present in the markup but won't parse; the Structured Data tab shows such blocks as "Invalid JSON" with an error message. The source is formatted for display; you can expand the original below it. From the Semantic HTML tab, clicking an element jumps straight to the matching line, and Nu Html Checker sends the URL to the W3C validator.
Combining with other JPKCom tools
The analyzer finds gaps but doesn't fix them. The pattern is always the same: fix it with the right tool, then re-run and read the jump.
- GEO Score red because the
llms.txtis missing or sloppy? Produce a structurally valid file with the llms.txt Generator — exactly what the twollms.txtchecks (Present + Valid Structure) reward. - Meta, OG, Twitter or JSON-LD incomplete? The Meta-Tags Generator delivers clean titles, descriptions, Open Graph/Twitter data and JSON-LD that count in both the SEO and GEO scores.
- AI crawlers blocked by accident or sitemap missing? With robots.txt & Sitemap you build the crawler allow-listing and the
Sitemap:entries that turnAI Crawlers Allowed,Allowed by robots.txtandSitemap in robots.txtgreen. Both tools readrobots.txtwith the same RFC 9309 parser. - Certificate or redirects look odd? The SSL / Security tab shows chain, signatures and remaining validity; for DNS records, CAA and an in-depth redirect analysis, turn to DNS, SSL, Redirect & URL.
Sequence: fix → paste the same URL into the analyzer again → read the score jump. That's how a list of flaws becomes measurable progress.
More context: the overview for the big picture, the manual for every score weight, and the examples for the step-by-step workflows. You can try all of it directly in the tool.