Skip to content

Methodology

How BAZY scores your website

No black box. Every point a BAZY scan awards (or deducts) is traceable to a specific check in open code. Here's the whole system.

The pipeline

When you submit a URL, BAZY does four things in order:

  1. Crawl. We fetch your homepage, then discover more pages via your sitemap and internal links. We cap at ~20 pages on the free tier.
  2. Scan, in parallel. Nine specialized scanners run against the crawled pages at the same time. Each scanner is a separate module focused on one dimension (SEO, performance, security, etc.).
  3. Score each scanner. Every scanner awards points for checks that pass, with a known maximum per check. The scanner's final score is round((points earned ÷ total possible) × 100).
  4. Weighted-average the overall. Scanner scores are combined using the published weights below — no magic, just arithmetic.

Category weights

The overall score is a weighted average of nine scanner scores. Weights sum to 100. These are fixed and published — no A/B testing your grade.

ScannerWeight
SEO15
Performance12
Security12
Design System12
Accessibility12
Content Quality10
AI Readiness8
Mobile Experience10
Brand Consistency9
Total100

Where this lives in code

These weights are defined in src/lib/scoring.ts in the SCANNER_METADATA map. Changing the file changes this page — there's no separate doc to drift.

How a single scanner scores

Every scanner uses the same pattern. It walks every crawled page, runs a fixed set of checks, and adds the points that passed over the points that could possibly be earned.

for each crawled page:
  for each check:
    maxPoints += check.weight
    totalPoints += points earned on that page

scannerScore = round(totalPoints / maxPoints * 100)

Example — the Performance scanner awards up to 65 points per page across these checks:

  • Load time (15 pts): <1.5s = 15, <3s = 10, <5s = 5, else 0
  • Page size (10 pts): <200KB = 10, <500KB = 5, else 0
  • Compression (10 pts): gzip or brotli enabled
  • Cache-Control (10 pts): correctly configured
  • Image optimization (10 pts): dimensions set, modern formats
  • No render-blocking resources (5 pts)
  • HTTP/2 or HTTP/3 (5 pts)

Score → grade thresholds

The same grade scale applies to the overall score and every individual scanner.

A+95+
A85–94
B+78–84
B70–77
C+60–69
C50–59
D35–49
F0–34

Why BAZY's score differs from Semrush, Ahrefs, or Moz

We get asked this a lot. The short answer: we're measuring different things.

BAZYSemrush / Ahrefs
InputLive crawl of your site (HTML + headers)Their own backlink / keyword index + crawl
Domains scored9 — SEO, Perf, Sec, A11y, Design, Content, Mobile, Brand, LLMOMostly SEO-centric
WeightsPublished in code, evenly spreadProprietary, SEO-heavy
Backlinks / DANot measured todayCentral to their score
TransparencyEvery point traceable to a rule in sourceBlack box

Semrush and Ahrefs answer: how well will this rank in Google based on our backlink graph?

BAZY answers: how good is the actual website — across everything a lazy owner should care about outside their login wall?

Want to verify any of this?

Each scanner is a single file in src/lib/scanners/ on the BAZY codebase. Open any one and you can read — line by line — which checks are run, how many points each is worth, and what triggers a pass or a fail. If you think a check is wrong or missing, tell us and we'll look at it.

See how your website scores

Free scan. 9 dimensions. 60 seconds.

Scan your website free →