Scoring methodology

By the HowsMyGEO team · Published 2025-11-03 · Updated

Every HowsMyGEO scan runs 21 deterministic checks against a single URL: 14 traditional SEO checks and 7 GEO (Generative Engine Optimization) checks. Each check earns points toward a 100-point category score. The combined grade is the average of the two scores: A ≥ 90, B ≥ 80, C ≥ 70, D ≥ 60, F below 60. The tables below are generated from the same code that computes the scores, so they cannot drift from production behaviour.

SEO score — 100 points across 14 checks

These are the classic on-page and technical factors search engines weigh. Weights favour the signals with the most documented ranking impact: titles, structured data, performance and HTTPS.

CheckWeightWhat passes
Title tag10 ptsA title tag exists, is 15–60 characters, and front-loads its subject rather than the brand name — inner pages whose title leads with the brand lose points.
Meta description8 ptsA meta description exists and is 50–160 characters.
H1 heading8 ptsExactly one H1 exists and is descriptive (more than 3 characters).
Heading hierarchy6 ptsHeading levels descend without skips (an H2 follows an H1, not an H4).
Image alt text7 ptsPercentage of <img> elements carrying a non-empty alt attribute. Full points at ≥95%, partial at ≥50%.
Internal links4 ptsBetween 5 and 300 same-host links, indicating crawlable site structure.
Canonical tag5 ptsA rel=canonical link element is present and self-referencing (it points at the audited URL). A canonical aimed at a different URL earns half credit.
robots.txt6 ptsrobots.txt exists and does not block all crawlers from the audited page.
sitemap.xml6 ptsA sitemap exists at /sitemap.xml or is declared in robots.txt; extra credit for the robots.txt reference.
HTTPS8 ptsThe page is served over HTTPS.
Mobile viewport6 ptsA viewport meta tag is present for mobile rendering.
Performance10 ptsServer-measured time-to-first-byte (full points under 300ms) and HTML payload size (full points under 128KB).
Open Graph & Twitter cards7 ptsFive signals, all required for full credit: og:title, og:description, an absolute-URL og:image, og:url and twitter:card.
Structured data (JSON-LD)9 ptsJSON-LD parses without errors and declares at least two distinct recognized schema.org types (e.g. Organization plus a content type). A single type earns partial credit.
Total100 pts

GEO score — 100 points across 7 checks

GEO measures whether AI answer engines — ChatGPT, Claude, Perplexity, Google AI Overviews — can find, read and cite a page. The two heaviest weights go to AI crawler access (25 points) and content extractability (20 points), because either failure makes a site effectively invisible to AI engines regardless of everything else.

CheckWeightWhat passes
llms.txt10 ptsAn llms.txt file exists at /llms.txt describing the site for AI crawlers (emerging standard).
AI crawler access25 ptsrobots.txt allows GPTBot, ClaudeBot, PerplexityBot, Google-Extended and CCBot (5 points each). Full credit requires explicitly naming them — default-allow (no robots.txt, or no AI groups in it) earns slightly less, because it is one blanket disallow away from vanishing.
Content extractability20 ptsThe main content is present in server-rendered HTML — full credit at 300+ words of extractable text. AI crawlers largely do not execute JavaScript, so client-only rendering makes a page invisible to them.
Answer-shaped content15 ptsQuestion-style headings, FAQ schema, and definition sentences that answer engines can lift and cite verbatim.
Factual density10 ptsConcrete statistics, dates, percentages and named entities per 1,000 words — full credit at ≈50 per 1,000. AI engines preferentially cite specific, factual content.
Author & entity signals10 ptsAuthor bylines, an About page, and Person/Organization schema that feed AI attribution and trust. Full credit requires both an author signal and Organization schema.
Freshness signals10 ptsMachine-readable published/modified dates and visible dates on the page.
Total100 pts

How measurements are taken

Limitations

A scan audits one URL, not a whole site. Sites that block our fetcher, respond slowly, or serve bot-specific content may receive partial reports — when that happens the report says exactly which checks could not run. Scores are a diagnostic, not a guarantee of ranking or citation.