AI-Powered · SEO & GEO

Ranked in results. Cited in answers.

SEO optimizes for a position; GEO optimizes for a citation. They overlap heavily — clean structure and real content help both — but being quotable is a different engineering problem from being rankable, and most sites were built years before anyone thought to ask whether a machine could lift one sentence out of a page and say where it came from. Buyers now use both, so we run both as one job, and we report them differently: positions are hand-verified logged out, and AI visibility is counted rather than ranked.

  • Twelve checks, ten of them executing as code against raw HTML rather than a text extraction
  • Every finding carrying the address it came from, a UTC timestamp and a quotable snippet
  • No composite score and no traffic estimate — the findings, not a number out of a hundred
  • Structured data, entity clarity and content organised so one claim can be quoted cleanly
  • llms.txt and explicit crawler access for the AI systems that honour it
  • AI visibility reported as cited in N of 9 runs, with the date and the domains named

An audit that costs almost nothing to run again

Traditional SEO is priced and paced by the hour, which decides what it can be. An audit is a thing somebody sits down and does, so it happens at the start of an engagement and maybe once a quarter after that. Keyword research is a spreadsheet produced in week one and referred to for a year. Reporting is assembled the week it is due. None of that is laziness; it is what the economics allow when a person has to do every pass by hand.

We are built the other way round. The audit is code, so running it again costs almost nothing and it runs again whenever a site changes rather than whenever the retainer says so. Intent research happens per page instead of per engagement, because checking what a search box actually suggests takes seconds. And the newest part of the job — whether an assistant names you when somebody asks it a buying question — is not something a monthly process can even see, because the answer varies between runs on the same day.

That is what AI-native means here: the work that used to be too expensive to repeat now runs continuously, and the judgement stays where it was.

Twelve checks, ten of them code

Every engagement starts with the same twelve checks, ten of them executing as code against the site as it actually is. The other two are done by hand on purpose, and the last section says which and why. Where you rank for your own name. Where you rank for the searches that describe what you sell. Your map listing. Who your domain is registered to. What the site is built on and what is wired into it. Whether you have the two page types people actually search for. Whether the thing you sell has a price or availability on your own site. Whether there is any structured data identifying you. Whether your name, address and phone number agree with each other. Whether crawlers can reach the site at all. Placeholder text and stale content still live. And whether AI assistants name you when asked.

The output is a list of findings, each carrying the address it was found at, a timestamp in UTC, and a snippet you can go and look at yourself. There is no composite score and no traffic estimate. A number out of a hundred hides which problems are real and lets an agency move the number without fixing anything; a finding with its receipt attached can be argued with, which is the point.

Scorecards expire after thirty days, because a site can change and a finding you cannot re-verify is not evidence any more.

Raw HTML, never a text extraction

The audit reads the raw HTML a server sends. It never uses a readability or markdown conversion first, and the reason is specific rather than aesthetic: those conversions strip script tags, and structured data lives inside a script tag. A stripped fetch will confidently report that a site has no structured data when the site has plenty.

We know because it happened. A stripped read produced exactly that false finding, and the code that replaced it carries a self-test asserting that a stripped page yields zero blocks — so the failure mode cannot come back quietly. It is a small thing that says something larger about how the checks are built: each one exists in the shape it does because of a specific way it went wrong once.

Verified, not found, or needs a browser

Before any finding is stated to anyone, it is re-checked live, and the check has three outcomes rather than two. Verified. Not found. Or needs a browser.

The third is what makes it honest. A string missing from a plain HTML page means the finding is wrong or has already been fixed. The same string missing from a page that builds itself in JavaScript means only that raw HTML cannot see it. Treating those two as the same thing either ships a claim that is false or throws away a finding that is true, and both are avoidable by admitting the tool has a limit.

What GEO actually is

Buyers have started asking an assistant before they open a search box, and an assistant does not hand back a page of links to choose between — it answers, and the shortlist is whatever it named. There is no lever that puts you in that answer, and anybody selling you one is guessing. What there is, is a set of conditions that make a page quotable, and they are unglamorous.

Structured data, so a machine can tell what the page is rather than inferring it. Entity signals stated in the same words everywhere — the same name, the same address, the same description on the site, in the markup, in the map listing and in the directories — because a company that describes itself three ways is three weak candidates instead of one strong one. Content organised so a single sentence can be lifted out without the paragraph around it, which is a writing decision more than a technical one. A machine-readable summary at llms.txt. And crawler access, which is a one-line decision most sites have never consciously made in either direction.

Some people call this answer engine optimization. The label matters less than the shift behind it: for the first time in twenty years, the thing being optimized is not a position but a citation.

Cited in N of 9 runs, never a rank

AI visibility is measured with a fixed protocol so the number means the same thing each time. Three questions a customer would actually ask, three runs each, in each assistant we track — ChatGPT, Perplexity and Google's AI mode. Nine runs per engine. We report how many of those nine named you, on what date, and which sources were cited.

We never report a rank inside an AI answer, because there is no rank inside an AI answer to report. An answer names two or three companies in prose; converting that into a position is an invention, and it is an invention that gets repeated back to you later as though it were a measurement.

One caveat we give everybody up front: answers to a prompted question update faster than answers to an unprompted one, so early silence is not failure and early success is not the whole picture. Take a baseline before the work starts, or there is nothing to compare against afterwards.

The checks we do by hand, on purpose

Two of the twelve are manual and always will be. Map listings are never scraped — the terms are clear and the data is not worth the exposure. And rank positions are hand-verified, logged out, because search engines block automated rank queries often enough that a tool reporting them smoothly is reporting something other than what it claims.

Saying which parts are manual is part of the deliverable rather than an admission. A report that quietly presents automated guesses as measurements is worse than one that is slower and true, and you cannot tell the difference from the outside unless somebody tells you.

This sits alongside connected workflows & automation and ai-native websites. What it looks like in practice differs by market — we go deepest in property management, media & entertainment, finance and sports & recreation. Or tell us what is not working and we will say honestly which part of it you need.

FAQ

SEO GEO — questions we get

What does your audit actually check?

Twelve things, the same twelve every time: rankings for your own name and for the searches that describe what you sell, your map listing, your domain registration, your platform and what is wired into it, whether you have the two page types people search for, whether price or availability exists on your own site, your structured data, whether your name and address agree with themselves, crawler access, placeholder and stale content, and whether AI assistants name you. Each finding comes back with the address, the date and a snippet.

Why don't you give us a single score out of a hundred?

Because a composite score hides which problems are real and rewards moving the number rather than fixing the site. It is also unfalsifiable — you cannot check a 72. A list of findings, each with the page it was found on and the date it was checked, is something you can argue with, hand to a developer, or prove wrong. That is worth more than a dashboard.

Do we need to unblock AI crawlers?

Almost certainly not. It is the first thing people ask and it is rarely the problem — blocked crawlers are uncommon, and we check rather than assume. What is common is a site with nothing worth citing on it: no structured data, no page whose subject is stated as text, nothing written so a single claim can be quoted. Access is the easy half.

Do you guarantee rankings or AI citations?

No, and we would be suspicious of anyone who does — neither system is under anyone's control, and both change without notice. What we guarantee is the work and the evidence behind every claim about it: what we found, where, on what date, what we changed, and what moved afterwards, reported as the measurement it actually is.

How do you know an assistant is citing us?

We ask it, on a fixed protocol, and count. Three questions a customer would ask, three runs each, in each assistant — answers vary between runs, so a single check tells you very little. Then we report how many of the nine named you, the date, and which sources were cited. Take that baseline before any work starts, because without a before there is no after.

Why are some of your checks done by hand?

Because automating them would mean reporting guesses as measurements. Search engines block automated rank queries frequently enough that smooth automated position data is not what it appears to be, so positions are checked by hand, logged out. Map listings are not scraped at all. We would rather hand you a slower report that is true, and tell you which parts were manual, than a faster one you cannot evaluate.