SiteTest.ai
Check now

Open methodology

How SiteTest.ai Works

We grade websites on traditional SEO and AI-search readiness using an open algorithm. Every check has a fixed ID, the score formula is published on this page, and every AI-generated recommendation is grounded in those checks. No black box, no made-up metrics.

What is GEO and why we measure it

GEO (Generative Engine Optimization) is the discipline of making content discoverable, parseable, and citable by AI search systems — ChatGPT, Perplexity, Google AI Overviews, Claude, Gemini. Traditional SEO ranks you in a list of links; GEO gets you quoted in the answer.

  • AI crawler access (GPTBot, ClaudeBot, PerplexityBot) — actually probed, not just inferred from robots.txt
  • Recommendations outside the grade: an answer-first intro and citable facts (numbers anchored in real sentences)
  • Structured data: JSON-LD syntax and values are graded under schema markup; Organization schema and sameAs links are recommendations outside the grade
  • llms.txt presence and quality

How the score is calculated

The A–F grade counts 52 of 92 checks. It starts at 100 and loses points for every measured error, as shown in the table below. Passed checks add nothing; a check we could not measure neither adds nor subtracts. Security headers cost at most 8 points in total and accessibility at most 6; missing HTTPS, http without a redirect to https and mixed content are deducted separately, with no cap. Any critical error (the page is closed with noindex, robots.txt blocks the page or the whole site, the whole site is http-only, half or more of the checked pages do not open, with at least 5 pages checked) caps the grade at D (49). An empty JavaScript app shell with no text in its HTML is also capped at D (49): almost nothing could be measured. One cause is counted once, by the heavier check. If less than 60% of the scoring checks could be measured, robots.txt did not come through for us, or half or more of the other pages we tried gave no data (at least 3 pages, or all of them), the grade is capped at C (69) and the report says so. Grades: A 90+, B 70–89, C 50–69, D 30–49, F below 30.

CategoryChecks in the score
Technical SEO19
Security11
On-Page SEO8
Accessibility7
Structured Data4
AI Search (GEO)2
Images1
Total52

Points deducted per error

SeverityPoints
Critical−40
High−12
Medium−5
Low−2
Warninghalf

These categories run checks but only give recommendations that do not affect the grade: Content, Performance, Frontend.

AI prompts: how we ground them

Every AI-generated bullet — in the summary, in the developer brief, in the action plan — must reference at least one real check ID with its status, e.g. tech.canonical (FAIL) or schema.faq (MISSING). The model is instructed to quote the actual current title, current meta description, and actual headings of the audited page, not synthesize generic advice.

After the model responds, we validate the output for grounded references. If a summary fails to cite any real findings, we retry once with stricter instructions. We would rather ship a slightly less polished sentence than a confident hallucination.

How stable are the results?

Every check is a pure function of the data we collect — given the same crawl, it always returns the same pass/fail/warn. What changes between runs is the input: your site, the PageSpeed Insights measurement, and the availability of external sources we query during the crawl.

Repeated audits of the same site can differ a little: the site itself and the network (server responses, errors, timeouts) change between runs, so a score close to a grade boundary can move by one letter. Performance metrics (LCP, CLS, INP) come from Google PageSpeed Insights and reflect real-time measurements; they are not part of the score. AI-generated text (summary, developer brief, 30-day plan) runs at temperature 0: the same facts, check IDs and recommendations appear every time, but DeepSeek is not byte-deterministic, so phrasing can differ by a few words.

What we don't do

  • We do not track Google rankings — keyword position is highly volatile and locale-dependent
  • We do not invent a proprietary 'domain authority' or 'trust score' — those numbers are vibes, not signals
  • We do not scrape competitors or pull data from third-party SaaS APIs you don't pay for
  • We do not promise traffic gains or rankings. We promise transparent diagnostics and copy-paste fixes
  • We do not change the score formula silently, without updating this page

All 92 checks

Every check that runs against your site, grouped by category. Severity is the highest a finding of this check can get in the grade; an actual finding can be lighter — for example, an error on some pages weighs less than on all of them. "Optional" is a recommendation outside the grade.

Technical SEO22 checks

  • site.broken-linksCriticalbroken links
  • site.sitemap-completenessHighsitemap completeness
  • tech.canonicalMediumcanonical
  • tech.canonical-correctnessHighcanonical correctness
  • tech.hreflang-reciprocalMediumhreflang reciprocal
  • tech.httpsCriticalhttps
  • tech.indexnowOptionalindexnow
  • tech.llms-txtOptionalllms txt
  • tech.noindex-checkCriticalnoindex check
  • tech.redirect-chainHighredirect chain
  • tech.robots-allows-css-jsHighrobots allows css js
  • tech.robots-noindexCriticalrobots noindex
  • tech.robots-txtHighrobots txt
  • tech.sitemap-in-robotsLowsitemap in robots
  • tech.sitemap-xmlMediumsitemap xml
  • tech.snippet-controlsHighsnippet controls
  • tech.soft-404Mediumsoft 404
  • tech.ssr-readinessMediumssr readiness
  • tech.trailing-slashMediumtrailing slash
  • tech.url-cleanOptionalurl clean
  • tech.www-redirectMediumwww redirect
  • tech.xml-sitemap-validMediumxml sitemap valid

On-Page SEO13 checks

  • i18n.hreflang-sitewideMediumhreflang sitewide
  • i18n.hreflang-validationMediumhreflang validation
  • onpage.anchor-text-varietyOptionalanchor text variety
  • onpage.h1-existsHighh1 exists
  • onpage.heading-hierarchyOptionalheading hierarchy
  • onpage.internal-linksOptionalinternal links
  • onpage.meta-description-existsHighmeta description exists
  • onpage.og-tagsLowog tags
  • onpage.og-url-canonicalOptionalog url canonical
  • onpage.title-existsHightitle exists
  • onpage.title-lengthOptionaltitle length
  • site.metadata-consistencyMediummetadata consistency
  • site.title-uniquenessMediumtitle uniqueness

Content4 checks

  • content.about-pageOptionalabout page
  • content.author-presentOptionalauthor present
  • content.date-modifiedOptionaldate modified
  • content.date-publishedOptionaldate published

Performance6 checks

  • perf.clsOptionalcls
  • perf.fcpOptionalfcp
  • perf.gzipOptionalgzip
  • perf.lcpOptionallcp
  • perf.tbtOptionaltbt
  • perf.ttfbOptionalttfb

Structured Data13 checks

  • geo.sameas-linksOptionalsameas links
  • schema.articleOptionalarticle
  • schema.breadcrumbOptionalbreadcrumb
  • schema.breadcrumb-validLowbreadcrumb valid
  • schema.deprecated-typesOptionaldeprecated types
  • schema.has-jsonldLowhas jsonld
  • schema.local-businessOptionallocal business
  • schema.organizationOptionalorganization
  • schema.page-type-coverageOptionalpage type coverage
  • schema.review-ratingOptionalreview rating
  • schema.software-appOptionalsoftware app
  • schema.valid-syntaxLowvalid syntax
  • schema.value-qualityLowvalue quality

Security13 checks

  • sec.csp-headerLowcsp header
  • sec.hstsLowhsts
  • sec.https-redirectHighhttps redirect
  • sec.no-mixed-contentHighno mixed content
  • sec.permissions-policyLowpermissions policy
  • sec.referrer-policyLowreferrer policy
  • sec.secure-cookiesOptionalsecure cookies
  • sec.server-headerLowserver header
  • sec.sri-integrityOptionalsri integrity
  • sec.x-content-typeLowx content type
  • sec.x-frame-optionsLowx frame options
  • sec.x-powered-byLowx powered by
  • sec.x-xss-protectionLowx xss protection

Accessibility10 checks

  • a11y.aria-rolesLowaria roles
  • a11y.doc-titleLowdoc title
  • a11y.form-labelsLowform labels
  • a11y.heading-orderOptionalheading order
  • a11y.lang-attrLowlang attr
  • a11y.link-textLowlink text
  • a11y.semantic-htmlOptionalsemantic html
  • a11y.skip-navigationOptionalskip navigation
  • a11y.table-headersLowtable headers
  • a11y.video-captionsLowvideo captions

Images2 checks

  • img.alt-allHighalt all
  • img.decorative-altOptionaldecorative alt

AI Search (GEO)6 checks

  • brand.name-consistencyLowname consistency
  • geo.ai-crawler-accessHighai crawler access
  • geo.answer-firstOptionalanswer first
  • geo.citable-factsOptionalcitable facts
  • geo.llms-txtOptionalllms txt
  • geo.llms-txt-qualityOptionalllms txt quality

Frontend3 checks

  • fe.charsetOptionalcharset
  • fe.doctypeOptionaldoctype
  • fe.faviconOptionalfavicon

Spotted a check that feels wrong? Email info@seoport.com.ua