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.
| Check | Weight | What passes |
|---|---|---|
| Title tag | 10 pts | A title tag exists, is 15–60 characters, and front-loads its subject rather than the brand name. |
| Meta description | 8 pts | A meta description exists and is 50–160 characters. |
| H1 heading | 8 pts | Exactly one H1 exists and is descriptive (more than 3 characters). |
| Heading hierarchy | 6 pts | Heading levels descend without skips (an H2 follows an H1, not an H4). |
| Image alt text | 7 pts | Percentage of <img> elements carrying a non-empty alt attribute. Full points at ≥90%, partial at ≥50%. |
| Internal links | 4 pts | Between 3 and 300 same-host links, indicating crawlable site structure. |
| Canonical tag | 5 pts | A rel=canonical link element is present. |
| robots.txt | 6 pts | robots.txt exists and does not block all crawlers from the audited page. |
| sitemap.xml | 6 pts | A sitemap exists at /sitemap.xml or is declared in robots.txt; extra credit for the robots.txt reference. |
| HTTPS | 8 pts | The page is served over HTTPS. |
| Mobile viewport | 6 pts | A viewport meta tag is present for mobile rendering. |
| Performance | 10 pts | Server-measured time-to-first-byte (full points under 500ms) and HTML payload size (full points under 512KB). |
| Open Graph & Twitter cards | 7 pts | og:title, og:description, og:image and twitter:card are present. |
| Structured data (JSON-LD) | 9 pts | At least one valid JSON-LD block with a recognized @type parses without errors. |
| Total | 100 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.
| Check | Weight | What passes |
|---|---|---|
| llms.txt | 10 pts | An llms.txt file exists at /llms.txt describing the site for AI crawlers (emerging standard). |
| AI crawler access | 25 pts | robots.txt allows GPTBot, ClaudeBot, PerplexityBot, Google-Extended and CCBot (5 points each). Blocking these bots removes the site from AI answer engines. |
| Content extractability | 20 pts | The main content is present in server-rendered HTML. AI crawlers largely do not execute JavaScript, so client-only rendering makes a page invisible to them. |
| Answer-shaped content | 15 pts | Question-style headings, FAQ schema, and definition sentences that answer engines can lift and cite verbatim. |
| Factual density | 10 pts | Concrete statistics, dates, percentages and named entities per 1,000 words. AI engines preferentially cite specific, factual content. |
| Author & entity signals | 10 pts | Author bylines, an About page, and Person/Organization schema that feed AI attribution and trust. |
| Freshness signals | 10 pts | Machine-readable published/modified dates and visible dates on the page. |
| Total | 100 pts |
How measurements are taken
- Pages are fetched server-side by
HowsMyGEOBot/1.0with a 10-second timeout and a 2MB size cap. We respect the target site's robots.txt and will not scan pages it disallows. - Performance is measured as server time-to-first-byte (full points under 500ms) plus HTML payload weight (full points under 512KB). We measure directly rather than calling the PageSpeed Insights API, so scans stay fast and unthrottled.
- AI crawler access is evaluated by parsing robots.txt rules for GPTBot (OpenAI), ClaudeBot (Anthropic), PerplexityBot, Google-Extended and CCBot (Common Crawl), 5 points each, using longest-match precedence as the robots exclusion standard specifies.
- Content extractability inspects only the raw server HTML — no JavaScript is executed — because that is what most AI crawlers see. Fewer than 150 words of extractable text is treated as a partial failure; fewer than 40 as a full failure.
- Factual density counts numbers, percentages, years and multi-word proper nouns per 1,000 words of extracted text; 40+ per 1,000 earns full points.
- After the deterministic checks, the extracted content and results are analysed by Claude (Anthropic's model) to produce the narrative summary, prioritised recommendations and the "how an AI engine sees this page" simulation. The AI layer never changes the scores.
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.