GEO
What GEO Score measures, and what it does not
By Benoit Maillary · Published 2026-09-14 · Updated 2026-09-21
GEO Score is a weighted mean of five crawlable dimensions: brand clarity 25, AI accessibility 25, content structure 20, authority signals 20, schema coverage 10. Each dimension is checks passed over checks in that dimension, times 100. It is not a rank tracker.
The Friday question needs a number you can repeat
Most teams answer “does ChatGPT mention us?” with a screenshot of one prompt. That screenshot is stale the next morning. A consultant cannot put it next to organic traffic in a QBR and come back in 30 days to see if the number moved. GEO Score exists so you can put a repeatable integer beside the classic SEO score on the same URL.
FixFlow does not replace SEO. The SEO score still reads title length, indexation, schema validity, fetch time, and thin internal links. GEO Score answers a different question: can an answer engine discover the brand, understand what it is, and treat the page as a source. Those are crawlable facts. They are not a feeling about “AI visibility.”
The features page names the product parts. This page is the method. If you only need a score on a live URL, run a free audit. If you need the monthly cited / not cited check that sits on top of this number, that is citation watch.
How the score is calculated
GEO Score is a 0-100 index. There are exactly five dimensions. Each dimension score is (checks passed / checks in that dimension) times 100, rounded to the nearest integer. The stored GEO Score is then the weighted mean of those five numbers, rounded again: brand clarity 25, AI accessibility 25, content structure 20, authority signals 20, schema coverage 10. Scoring method updated 21 September 2026: /llms.txt used to be counted in both brand clarity and AI accessibility; it is now counted once, in AI accessibility.
A 100 on schema and a 0 on brand clarity is not “mostly fine.” Schema is 10 percent of the index. Brand is 25. The weights are the method. If you cannot reconstruct the integer from the five dimension scores and those five percentages, the copy on this page is wrong.
The score is computed from the HTML the server returns, without executing JavaScript, because many AI crawlers read the page the same way. It applies to the URL actually analysed after redirects, including http to https, apex to www, and same-site JavaScript or meta-refresh stubs. The dashboard shows both the requested URL and the scanned URL when they differ. We do not ask a model “what is this brand?” and then grade the essay. The model is not the judge of the score. The page is.
Brand clarity (25 percent)
Three checks, equal inside the dimension. A brand-like name is present if the title tag, or og:title when the title is empty, has a first segment longer than two characters. The meta description must be longer than 50 characters and shorter than 160. There must be exactly one H1, and that H1 must be at least 10 characters. Pass three, the dimension is 100. Pass two, it is 67.
This is not a taste test of the slogan. Initials that collide, a legal name only in the footer, or an H1 injected after hydration all fail the same way: the served HTML does not show them. /llms.txt is not a brand-clarity check. It lives under AI accessibility only.
AI accessibility (25 percent)
Four checks. GPTBot is allowed unless a named group or User-agent: * disallows the site root. A robots.txt that never names GPTBot still passes. ClaudeBot follows the same rule, and the token anthropic-ai counts as ClaudeBot. /llms.txt must be reachable. /sitemap.xml must be reachable. An empty robots.txt therefore passes both bot checks. A file that blocks GPTBot on the whole host fails the GPTBot check even if the homepage looks fine to a browser.
These are crawl permissions, not prompt results. Publishing /llms.txt and blocking GPTBot on the same host is a contradiction the two failed or passed checks will show side by side. The monthly citation watch is a different product surface. It does not move this dimension.
Content structure (20 percent)
Four checks on the served HTML. At least two H2 headings. No paragraph longer than 150 words. An FAQ or Q&A block, detected as a class or id that contains “faq”, or a details or summary element. At least three list items in ul or ol. Headings injected after JavaScript, or a FAQ that exists only in a hydrated app shell, do not count.
The point is extractability. Models quote short blocks and lists more cleanly than a single scrolling essay. This dimension does not ask whether the copy is good. It asks whether the HTML is shaped so a crawler that does not run JavaScript can lift sections.
Authority signals (20 percent)
Three checks. An author signal in the served HTML: a class, rel, itemprop or property named author, a meta name=author, a Person microdata or RDFa type, or a JSON-LD author. At least two external http(s) links whose host is not the scanned host. A publication or update date: a time element, a datetime attribute, itemprop datePublished or dateModified, a class that contains date or updated, article:published_time, or JSON-LD datePublished.
This dimension is the on-page proxy for citability. A page with no person, no date, and no outbound source links is a brochure. That is why this article has a person byline, not only a product name. Benoit Maillary writes the FixFlow method pages. The publisher is still Stackedge. The date is on the page and in the BlogPosting. We apply the same crawl to our pages as we do to a client URL.
Schema coverage (10 percent)
Three scored checks. Structured data present in the served HTML, counting JSON-LD, microdata itemtype, and RDFa typeof. Then Organization or a subtype, such as NewsMediaOrganization, Corporation, LocalBusiness, Store, or Restaurant, and WebSite. SoftwareApplication is a recommendation for software products and does not move the score. Microdata and RDFa count as present. JSON-LD is still the format most AI crawlers parse most reliably. A Shopify page that injects JSON-LD only after hydration fails the first check if view-source has none.
Schema is not a rank hack. It is a way to say this legal entity publishes this URL. Nested copies of the same type on one page do not help the type checks. One Organization, including a subtype, and one WebSite in the served HTML do. SoftwareApplication is a recommendation, not a point. A retailer is not asked to declare a software product.
Citability is a separate test
Citability is not a sixth dimension and it is not averaged into the GEO Score. The product exposes an on-demand GPT-4o test at /api/geo/citability-test. You give it a URL and a query. It returns whether a model would cite the page, a confidence from 0 to 100, a short reason, and two or three improvements. That verdict never enters the stored integer.
If you want a citability idea inside the score, read authority signals: author, date, and external links. If you want the model’s opinion, run the test. Do not treat the test as the method behind the number. Citation watch, the monthly cited / not cited series on frozen prompts, is a third surface. Three names, three jobs.
What this is not
GEO Score is not a keyword rank. It is not a 10,000-URL crawl export. It is not a daily share-of-voice grid across every AI product. FixFlow does not write your site, run ads, or measure the funnel. Those jobs sit on other tools. A one-shot GEO number is a diagnostic. The subscription tracks whether ChatGPT-style prompts still cite you next month.
If you need the ship order on the same URL (title, then indexation, then schema, then speed, then thin links), read how the first list is ordered. If you need the paste pack and the live receipt, read ship, verify, receipt.