# 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.

Source: https://www.jpkc.com/db/en/tools/seo/tips/

Back to the overview: [SEO & GEO Analyzer](https://www.jpkc.com/db/en/tools/seo/) · Open the tool: [www.jpkc.com/tools/seo/](https://www.jpkc.com/tools/seo/)

The [manual](https://www.jpkc.com/db/en/tools/seo/manual/) explains every check; the [examples](https://www.jpkc.com/db/en/tools/seo/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 `WebPage` block leaves the most on the table here. `Schema Variety` rewards **variety**: ≥ 3 distinct `@type` values earn the full 3 points. So deliberately ship several types — typically `BreadcrumbList`, `Article`/`BlogPosting`, `Organization`. On top of that, `FAQ Schema` (an `FAQPage` block, 3 points) and `Author / Organization Schema` (3 points) pay in directly — the latter is your **E-E-A-T signal**: mark up `Person`/`Organization` or an `author` field 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.txt` earns 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 the `robots.txt` against nine named bots: GPTBot, ChatGPT-User, OAI-SearchBot, Google-Extended, Claude-Web, ClaudeBot, anthropic-ai, PerplexityBot and CCBot. 0 blocked → 3 points. A blanket `Disallow: /` or an old "block the bad bots" snippet costs you immediately here. Odd detail: **no `robots.txt` at all counts as "everyone allowed"** — a 404 scores better 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-Signal` is info only — but useful info.** The `Content Signals Declared` check is `info` and worth **0 points**. Don't chase it for the score. Its value lies elsewhere: it flags a **conflict** when your `Content-Signal` directive welcomes AI while the `robots.txt` blocks 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 Negotiation` check (also `info`, 0 points) appears only when the probe with `Accept: text/markdown` has 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` and `No Mixed Content` only enter the maximum when they're actually applicable. A single-language page with no hreflang can't "lose" the hreflang point 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 the `fail` and `partial` entries in the **SEO Score** tab, sorted by points.
- **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 `fail`s 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 missing `Title` range (up to 8) outweigh a missing `og:image` (3) or a text/HTML-ratio point (1). Sorting by `points` is your to-do order.

## 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.
- **Huge or redirect-heavy pages get truncated.** A body cap of **~1 MB** applies (larger HTML is cut), plus a **~15 s** timeout and a maximum of **10 redirect hops**. On very large pages or long redirect chains the report can be incomplete — so not every missing value is a genuine page problem.
- **The URL status checker is rate-limited.** The separate "URL Status Check" feature allows only **~1 request per 2 seconds per IP**; hammer it and you get an HTTP **429** response telling you how long to wait. Just wait a moment rather than re-firing.
- **`localhost` and intranet won't work.** For SSRF protection the proxy blocks private and internal IP addresses; only public HTTP/HTTPS addresses are allowed. You can't analyze a local dev instance or an intranet page this way — either expose it publicly (e.g. via a staging domain) or use Expert Mode with a local proxy.
- **A blank TLS version is usually no big deal.** In the **SSL / Security** tab the TLS-version field can stay empty on some live runs (the source doesn't always return it) — in the demo data it's populated. So don't read too much into a blank field there; what matters is whether the certificate is valid and how long it has left.

## Workflow tips

- **Snapshot via Export, then compare.** Before an optimisation round, save the analysis in the **Export / Import** tab as JSON. After the fixes, re-import the old file — because **only raw data, never a frozen score** is stored, the tool recomputes on import, by exactly the same logic. That keeps the before/after comparison fair and reproducible (details in [Example 6](https://www.jpkc.com/db/en/tools/seo/examples/#example-6-comparing-before-and-after-cleanly)).
- **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 contain only raw data 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 `@type` doesn't show up even though you built it in — look it up in the **Source Code** tab (raw HTML). It's often invalid JSON-LD that's present in the markup but won't parse.

## 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.txt` is missing or sloppy?** Produce a structurally valid file with the **[llms.txt Generator](https://www.jpkc.com/db/en/tools/llms/)** — exactly what the two `llms.txt` checks (Present + Valid Structure) reward.
- **Meta, OG, Twitter or JSON-LD incomplete?** The **[Meta-Tags Generator](https://www.jpkc.com/db/en/tools/meta-tags/)** 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](https://www.jpkc.com/db/en/tools/robots-sitemap/)** you build the crawler allow-listing (the nine bots) and the `Sitemap:` entries that turn `AI Crawlers Allowed`, `Allowed by robots.txt` and `Sitemap in robots.txt` green.

Sequence: fix → paste the same URL into the [analyzer](https://www.jpkc.com/tools/seo/) again → read the score jump. That's how a list of flaws becomes measurable progress.

---

More context: the [overview](https://www.jpkc.com/db/en/tools/seo/) for the big picture, the [manual](https://www.jpkc.com/db/en/tools/seo/manual/) for every score weight, and the [examples](https://www.jpkc.com/db/en/tools/seo/examples/) for the step-by-step workflows. You can try all of it directly in the [tool](https://www.jpkc.com/tools/seo/).

