SiteTest.ai
Check now

Open methodology

How SiteTest.ai Works

We grade websites on traditional SEO and AI-search readiness using an open, deterministic algorithm. Every check has a fixed ID, every score has a documented weight, 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
  • Citability: clear intros, question-style headings, citable facts (numbers anchored in real sentences)
  • Structured data (FAQPage, Speakable, sameAs, Organization) — graded under the schema-markup category
  • llms.txt presence and quality

Categories and weights

The overall score is a weighted average of category scores. Weights are loaded from the same code path that runs the audit, so this table never drifts from production.

CategoryWeightChecks
Content23%15
Technical SEO22%26
On-Page SEO18%25
Structured Data14%22
Performance12%11
AI Search (GEO)8%16
Images3%13
Total100%169

Some categories run checks but do not contribute to the headline score yet: Security, Accessibility, 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?

All 168 checks are deterministic — running the same site twice returns the exact same pass/fail/warn for every check, the exact same category scores, and the exact same overall grade. We hash the result set internally to verify this. Issues, severity, code examples, recommendations — all byte-stable across runs.

AI-generated text (summary, developer brief, 30-day plan) runs at temperature 0 to minimize variation. Wording is highly consistent — the same facts, check IDs, and recommendations appear every time — but the underlying LLM (DeepSeek) is not byte-deterministic across requests, so phrasing can differ by a few words. Performance metrics (LCP, CLS, INP) come from Google PageSpeed Insights and reflect real-time measurements that may fluctuate ±5 points between runs, occasionally shifting a borderline grade by one letter (e.g. B↔C). Everything below the AI text and PSI layer is byte-stable.

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 silently change scoring weights without updating this page

All 169 checks

Every check that runs against your site, grouped by category. Severity reflects the engine's default — individual results may upgrade or downgrade based on what's found.

Technical SEO26 checks

  • site.broken-linksHighbroken links
  • site.sitemap-completenessMediumsitemap completeness
  • tech.broken-linksHighbroken links
  • tech.canonicalHighcanonical
  • tech.canonical-correctnessHighcanonical correctness
  • tech.hreflang-reciprocalMediumhreflang reciprocal
  • tech.httpsCriticalhttps
  • tech.indexnowLowindexnow
  • tech.llms-txtLowllms txt
  • tech.mobile-friendlyCriticalmobile friendly
  • tech.noindex-checkCriticalnoindex check
  • tech.paginationLowpagination
  • tech.redirect-chainHighredirect chain
  • tech.robots-allows-css-jsCriticalrobots allows css js
  • tech.robots-noindexHighrobots noindex
  • tech.robots-txtHighrobots txt
  • tech.server-error-codesCriticalserver error codes
  • tech.sitemap-in-robotsMediumsitemap in robots
  • tech.sitemap-xmlHighsitemap xml
  • tech.ssr-contentHighssr content
  • tech.ssr-readinessHighssr readiness
  • tech.trailing-slashLowtrailing slash
  • tech.url-cleanMediumurl clean
  • tech.viewportCriticalviewport
  • tech.www-redirectMediumwww redirect
  • tech.xml-sitemap-validMediumxml sitemap valid

On-Page SEO25 checks

  • i18n.hreflang-sitewideMediumhreflang sitewide
  • i18n.hreflang-validationMediumhreflang validation
  • onpage.anchor-text-varietyMediumanchor text variety
  • onpage.canonical-selfHighcanonical self
  • onpage.content-above-foldMediumcontent above fold
  • onpage.h1-existsCriticalh1 exists
  • onpage.h1-keywordHighh1 keyword
  • onpage.h1-singleMediumh1 single
  • onpage.heading-hierarchyMediumheading hierarchy
  • onpage.heading-structureMediumheading structure
  • onpage.image-alt-keywordsMediumimage alt keywords
  • onpage.internal-linksMediuminternal links
  • onpage.meta-desc-keywordsMediummeta desc keywords
  • onpage.meta-description-existsHighmeta description exists
  • onpage.meta-description-lengthMediummeta description length
  • onpage.og-tagsMediumog tags
  • onpage.og-url-canonicalMediumog url canonical
  • onpage.outbound-linksMediumoutbound links
  • onpage.title-existsCriticaltitle exists
  • onpage.title-keywordsHightitle keywords
  • onpage.title-lengthHightitle length
  • onpage.url-keywordsMediumurl keywords
  • site.metadata-consistencyMediummetadata consistency
  • site.og-canonical-consistencyMediumog canonical consistency
  • site.title-uniquenessMediumtitle uniqueness

Content15 checks

  • content.about-pageMediumabout page
  • content.author-presentMediumauthor present
  • content.contact-pageMediumcontact page
  • content.date-modifiedLowdate modified
  • content.date-publishedMediumdate published
  • content.expertise-signalsLowexpertise signals
  • content.languageMediumlanguage
  • content.mediaLowmedia
  • content.meta-qualityMediummeta quality
  • content.privacy-pageMediumprivacy page
  • content.readabilityLowreadability
  • content.sources-citedMediumsources cited
  • content.trust-pagesMediumtrust pages
  • content.unique-valueMediumunique value
  • content.word-countMediumword count

Performance11 checks

  • perf.clsHighcls
  • perf.dom-sizeMediumdom size
  • perf.fcpHighfcp
  • perf.gzipHighgzip
  • perf.html-sizeMediumhtml size
  • perf.lcpCriticallcp
  • perf.lcp-imageMediumlcp image
  • perf.lighthouse-scoreHighlighthouse score
  • perf.tbtHightbt
  • perf.ttfbMediumttfb
  • site.avg-response-timeMediumavg response time

Structured Data22 checks

  • geo.faq-sectionMediumfaq section
  • geo.faq-site-coverageMediumfaq site coverage
  • geo.sameas-linksMediumsameas links
  • geo.speakable-schemaLowspeakable schema
  • schema.articleMediumarticle
  • schema.breadcrumbMediumbreadcrumb
  • schema.breadcrumb-validMediumbreadcrumb valid
  • schema.deprecated-typesLowdeprecated types
  • schema.faqLowfaq
  • schema.has-jsonldHighhas jsonld
  • schema.how-toLowhow to
  • schema.image-objectLowimage object
  • schema.local-businessLowlocal business
  • schema.organizationMediumorganization
  • schema.page-type-coverageHighpage type coverage
  • schema.person-deepMediumperson deep
  • schema.review-ratingLowreview rating
  • schema.sameasLowsameas
  • schema.software-appLowsoftware app
  • schema.valid-syntaxMediumvalid syntax
  • schema.value-qualityMediumvalue quality
  • schema.website-searchactionLowwebsite searchaction

Security18 checks

  • sec.cache-controlLowcache control
  • sec.cors-policyMediumcors policy
  • sec.csp-headerMediumcsp header
  • sec.debug-headersMediumdebug headers
  • sec.hstsMediumhsts
  • sec.https-activeCriticalhttps active
  • sec.https-redirectHighhttps redirect
  • sec.no-mixed-contentHighno mixed content
  • sec.open-redirectMediumopen redirect
  • sec.permissions-policyMediumpermissions policy
  • sec.referrer-policyLowreferrer policy
  • sec.secure-cookiesMediumsecure cookies
  • sec.server-headerLowserver header
  • sec.sri-integrityMediumsri integrity
  • sec.x-content-typeMediumx content type
  • sec.x-frame-optionsMediumx frame options
  • sec.x-powered-byLowx powered by
  • sec.x-xss-protectionLowx xss protection

Accessibility15 checks

  • a11y.aria-rolesMediumaria roles
  • a11y.color-schemeLowcolor scheme
  • a11y.doc-titleMediumdoc title
  • a11y.focus-visibleMediumfocus visible
  • a11y.form-labelsMediumform labels
  • a11y.heading-orderMediumheading order
  • a11y.lang-attrMediumlang attr
  • a11y.link-textMediumlink text
  • a11y.meta-viewportHighmeta viewport
  • a11y.semantic-htmlMediumsemantic html
  • a11y.skip-navigationMediumskip navigation
  • a11y.table-headersMediumtable headers
  • a11y.text-contrastMediumtext contrast
  • a11y.touch-targetsMediumtouch targets
  • a11y.video-captionsHighvideo captions

Images13 checks

  • img.above-fold-eagerMediumabove fold eager
  • img.alt-allHighalt all
  • img.aspect-ratioMediumaspect ratio
  • img.broken-srcHighbroken src
  • img.count-reasonableLowcount reasonable
  • img.decorative-altLowdecorative alt
  • img.dimensionsMediumdimensions
  • img.file-sizeMediumfile size
  • img.lazy-loadingMediumlazy loading
  • img.modern-formatMediummodern format
  • img.picture-elementLowpicture element
  • img.responsive-srcsetMediumresponsive srcset
  • img.svg-iconsLowsvg icons

AI Search (GEO)16 checks

  • brand.name-consistencyMediumname consistency
  • brand.sameas-platformsHighsameas platforms
  • brand.wikipediaHighwikipedia
  • geo.ai-crawler-accessHighai crawler access
  • geo.ai-overview-readyHighai overview ready
  • geo.answer-firstMediumanswer first
  • geo.citable-factsMediumcitable facts
  • geo.clear-introMediumclear intro
  • geo.content-depthHighcontent depth
  • geo.content-distributionMediumcontent distribution
  • geo.entity-markupMediumentity markup
  • geo.llms-txtMediumllms txt
  • geo.llms-txt-qualityLowllms txt quality
  • geo.passage-lengthLowpassage length
  • geo.question-headingsMediumquestion headings
  • geo.statistics-densityMediumstatistics density

Frontend8 checks

  • fe.apple-touch-iconLowapple touch icon
  • fe.charsetMediumcharset
  • fe.dns-prefetchLowdns prefetch
  • fe.doctypeMediumdoctype
  • fe.faviconLowfavicon
  • fe.manifestLowmanifest
  • fe.no-inline-styles-excessLowno inline styles excess
  • fe.valid-htmlLowvalid html

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