Two instruments, kept honest by keeping them apart.

Our structural read

We fetch your page once, the way a browser does, and stream the HTML through 22 checks. No login, no plugin, nothing installed. This produces the letter grade, and everything it measures is listed below.

Google's Lighthouse

Alongside our grade we show Google's own scores, run by Google's PageSpeed tooling on a simulated mid-range phone: Performance, SEO, Accessibility, and Best Practices. Their numbers, their thresholds, labelled as theirs.

We never blend the two into one number. A blended score would mean our grade changed whenever Google's lab conditions wobbled, and you could no longer tell what moved it. Two clean instruments beat one muddy one.

The formula

Weighted checks, nothing else.

Every check has a weight, and the weights sum to exactly 100. A pass earns the full weight. A warning earns half, because a partial problem is a partial cost. A failure earns nothing. Your score is the total, and the letter comes from the school scale below. There is no curve, no secret adjustment, and no factor that is not on this page.

Pass = full weight Warning = half weight Fail = zero
A 93+
A- 90+
B+ 87+
B 83+
B- 80+
C+ 77+
C 73+
C- 70+
D+ 67+
D 60+
F below 60

How we set the weights: a check worth 8 to 10 points directly costs calls or visibility when it fails, with strong published evidence. 5 to 7 is a meaningful, well-documented effect. 3 to 4 is real but smaller, or something Google often compensates for. 1 to 2 is housekeeping, worth fixing but rarely decisive. Where the honest evidence is weak, the weight is small, and we say so in the check itself.

One more thing worth knowing: these checks were not invented for this tool. They come from the launch checklist we run on our own client builds. Every site we ship has to pass this same list before it goes live, so the grader holds your site to the standard we hold ourselves to.

We checked the big graders before writing this page. HubSpot's Website Grader, WooRank, and SEOptimer all score out of 100, and none of the three publishes a single weight, threshold, or source. This page exists because we would rather be checkable.

35 of 100 points

Getting found on Google

Whether Google can read the page, understand what the business does, and show it well in results.

Page title

8 points

Why it matters

The title tag is the clickable headline Google shows for your page, and your one line of sales copy in the results. Google publishes no length limit, but the largest study of real titles found Google rewrote 61.6% of them, and titles of 51 to 60 characters were the ones it rewrote least. Stay in that zone and the headline searchers see is the one you wrote.

How we measure it

We read the title element from your page's HTML, the same way a search engine first sees it, and count its characters. Between 15 and 60 characters passes, the range Google leaves alone most often. Missing fails. Very short or very long earns a warning, because Google will almost certainly rewrite it.

Pass Present, 15 to 60 characters

Warning Present but under 15 or over 60 characters

Fail Missing or empty

Google Search Central: Control your title links (2025) [1] · Zyppy: Google rewrites 61.6% of title tags (80,959 titles) (2022) [2]

Search description

4 points

Why it matters

The meta description is the sentence under your headline in Google results. Two independent studies found Google rewrites it 63 to 71 percent of the time, which is exactly why this check carries less weight than the title. But a missing one means Google always writes your pitch for you, by grabbing whatever page text it finds.

How we measure it

We read the meta description tag and count its characters. Presence is the real check: missing fails. The 50 to 160 character range is industry convention rather than a Google rule (Google publishes no limit, it just cuts the snippet to fit the screen), so length outside that range only earns a warning.

Pass Present, 50 to 160 characters

Warning Present but under 50 or over 160 characters

Fail Missing or empty

Google Search Central: Control your snippets (2025) [3] · Portent: Google rewrites 68-71% of meta descriptions (2020) [4] · Ahrefs: 62.78% rewritten across 20,000 keywords (2020) [5]

Main heading

3 points

Why it matters

A main heading tells visitors and screen readers what the page is about at a glance, and about 3 pages in 10 do not have one at all. We are honest about the limits here: Google has said on the record that it handles multiple H1s, or none, just fine. So we only fail a page with no heading, and we never pretend this is a ranking factor.

How we measure it

We count the H1 elements in your HTML. At least one passes, and we do not penalise multiple H1s, because Google itself says they are fine. Zero fails: the page never plainly states its subject, and a screen reader has nothing to anchor on.

Pass At least one H1 (one clear heading is the cleanest structure)

Fail No H1 at all

John Mueller, Google: multiple H1s are fine (#AskGoogleWebmasters) (2020) [6] · Web Almanac: only 71% of pages have an H1 (2025) [7]

Business information for Google

8 points

Why it matters

Structured data is machine-readable code that spells out your hours, address, phone number, services, and reviews, and it is what makes you eligible for enhanced listings. Here is the gap: fewer than 4% of pages carry LocalBusiness markup. For a local business it is cheap differentiation almost nobody in town has done. Google hosts case studies of large sites measuring more clicks after adding it, though those are self-reported by big publishers, so we lean on the adoption gap instead.

How we measure it

We look for JSON-LD structured data blocks in your HTML and read out the types they declare, like LocalBusiness or Service. Any valid structured data passes. None fails. We report which types we found so you can see what Google sees.

Pass At least one JSON-LD block with a declared type

Fail No structured data found

Web Almanac: LocalBusiness markup on 3.97% of pages (2024) [8] · Google Search Central: How structured data works (2025) [9]

Duplicate page protection

3 points

Why it matters

Most pages are reachable at more than one address: with and without www, with and without a trailing slash. A canonical tag names the official one so Google does not split your credit between copies of the same page.

How we measure it

We look for a canonical link tag in your HTML. Present passes. Absent earns a warning rather than a failure, because Google can usually work out the duplicate on its own. Usually.

Pass Canonical tag present

Warning No canonical tag

Google Search Central: Consolidate duplicate URLs (2025) [10]

Crawler instructions

2 points

Why it matters

robots.txt is the standard instruction file every search engine asks for before crawling a site, and 85% of sites have one. Missing is not fatal. It is the difference between giving directions and hoping.

How we measure it

We request /robots.txt on your domain. A successful response passes. Anything else earns a warning.

Pass robots.txt answers

Warning No robots.txt

Google Search Central: robots.txt introduction (2025) [11] · Web Almanac: 85% of sites serve a valid robots.txt (2025) [7]

Sitemap

4 points

Why it matters

A sitemap is the list of every page you want Google to index. Google finds pages without one, but its own documentation recommends a sitemap as the reliable way to make sure nothing gets missed and new pages get found faster. No adoption statistic exists that we trust, so we cite none.

How we measure it

We read your robots.txt for a Sitemap line, and if there is none we check /sitemap.xml directly. Found either way passes. Found neither way fails.

Pass Sitemap declared in robots.txt or present at /sitemap.xml

Fail No sitemap found either way

Google Search Central: Learn about sitemaps (2025) [12]

Enough words to rank

3 points

Why it matters

Google ranks pages, and pages are made of words. A homepage with a photo, a slogan, and a phone number gives Google almost nothing to match searches against. There is no magic word count and we do not pretend there is one. A page that answers real questions simply needs room to do it.

How we measure it

We count the readable text that arrives in your HTML, the words present before any scripts run. Under 150 words earns a warning. This check never fails outright, because some site builders inject text with JavaScript after load, and Google can render that. The words that arrive first are still the ones a slow phone shows.

Pass 150 or more readable words in the HTML

Warning Under 150 readable words

Google Search Central: Creating helpful content (2025) [13]

17 of 100 points

Working on a phone

Google indexes the mobile version of every site, and these checks fail exactly when a phone visitor suffers.

Built for phone screens

10 points

Why it matters

Since October 2023, Google indexes the mobile version of every site. Not the desktop version, the mobile one. And 95% of pages now carry the viewport tag that makes a page fit a phone, so missing it genuinely marks a site as neglected: phone visitors get a shrunken desktop page they have to pinch and zoom. Heaviest weight in our system.

How we measure it

We read the viewport meta tag from your HTML and check it adapts to the device width. Present and correct passes. Missing or fixed-width fails.

Pass Viewport tag set to device width

Fail No viewport tag, or fixed width

Google Search Central: mobile-first indexing completed (2023) [14] · Web Almanac: 95.2% of mobile pages have a viewport tag (2025) [7]

Tap-to-call

7 points

Why it matters

For a local service business, the phone call is the lead. A tel: link turns your number into something a thumb can tap; without it, a phone visitor has to memorize your number, switch apps, and type it, and every step loses people. This one needs no statistics: your number is either tappable on a phone or it is not, and you can test it yourself in ten seconds.

How we measure it

We look for any link using the tel: format, the web standard that makes a phone number tappable. Present passes. Absent fails.

Pass At least one tap-to-call link

Fail No tap-to-call link on the page

RFC 3966: the tel URI standard (2004) [15] · MDN: creating phone number links (2025) [16]

23 of 100 points

Loading fast

What the page makes a visitor download and wait for, measured from the network, not guessed.

Server response time

7 points

Why it matters

Before a single image or word can load, your server has to answer. Google’s published guidance calls a response under 0.8 seconds good and over 1.8 seconds poor, and only about half of real websites hit the good line. Google itself notes this is not a Core Web Vital, so we weight it below the phone checks. A slow answer still delays everything that follows.

How we measure it

We request your page from Cloudflare's network, follow any redirects, and time the gap between asking and the first byte of the answer. Under 800ms passes, the same threshold Google documents. Up to 1800ms warns. Past that fails. One measurement, live, not an average.

Pass First byte in under 800ms (Google's "good")

Warning 800ms to 1800ms

Fail Over 1800ms (Google's "poor")

web.dev: Time to First Byte thresholds (2024) [17] · Web Almanac: only 44-55% of origins hit the good TTFB line (2025) [18]

Page size

4 points

Why it matters

Every kilobyte of page code downloads before a phone can draw anything. The median page on the web ships about 22KB of HTML. Builder pages routinely ship ten to fifty times that: code the visitor pays to download and never sees. No published standard says where "too heavy" starts, so our thresholds are our own judgment, stated as multiples of that median.

How we measure it

We count the bytes of HTML your page sends, the document itself, before images. Under 150KB passes (already several times the web's median). Under 500KB warns. Heavier fails. These lines are ours, and we label them that way.

Pass HTML under 150KB

Warning 150KB to 500KB

Fail Over 500KB

Web Almanac: median page ships ~22KB of HTML (2025) [19]

Scripts blocking the page

6 points

Why it matters

A script loaded the old way stops the browser dead until it finishes downloading. Nothing draws, nothing responds. Google’s Lighthouse flags exactly this pattern, and only about one page in seven passes that audit. The fix is usually one word of code.

How we measure it

We count external scripts in your HTML that load without defer or async, the two standard ways to keep a script from blocking. Zero passes. Up to 2 warns. More fails. We report the count; we do not invent a milliseconds-saved estimate, because Lighthouse does not publish how it calculates one.

Pass No blocking scripts

Warning 1 to 2 blocking scripts

Fail More than 2 blocking scripts

Chrome Developers: Eliminate render-blocking resources (2024) [20] · Web Almanac: only 13-15% of pages pass this audit (2025) [18]

Modern image formats

4 points

Why it matters

Google’s own study measured WebP images 25 to 34 percent smaller than JPEG at the same quality. Adoption is still low: most main images on the web are JPEG or PNG. A photo-heavy page in old formats makes every visitor download weight the site does not need.

How we measure it

We look at each image's file type. If more than 60% are old formats (JPEG, PNG, GIF) it fails. More than 20% warns. A page with no images at all also warns, because a local business page with no photos is a hard sell.

Pass 20% or fewer images in old formats

Warning Up to 60% in old formats, or no images on the page

Fail Over 60% in old formats

Google Developers: WebP compression study (25-34% smaller) (2020) [21] · Web Almanac: WebP is still only 11% of main images (2025) [18]

Images load as needed

2 points

Why it matters

Images below the fold do not need to download before the visitor scrolls to them. Lazy loading is built into every modern browser and costs one attribute. On an image-heavy page it is free speed.

How we measure it

We only judge this on pages with 8 or more images. If none of them use the loading="lazy" attribute, it warns. It never fails, because a short page can be fine without it.

Pass Lazy loading in use, or fewer than 8 images

Warning 8+ images and none load lazily

web.dev: Browser-level image lazy loading (2024) [22]

11 of 100 points

Turning visitors into calls

A website that ranks but never gets contacted is a brochure. These checks are about the last step.

Contact form

9 points

Why it matters

Not everyone calls. A short form catches the visitor comparing three companies at midnight. And a form that opens the visitor’s email app instead of sending the message is worse than none: on a phone with no mail app set up, it silently does nothing. We have watched a real business lose leads to exactly that, which is why it is an automatic fail here.

How we measure it

We look for form elements in your HTML. A working form passes. No form but a link to a contact page warns, because every extra click loses people. No form and no contact link fails. A form that submits through mailto: fails outright.

Pass A real form on the page

Warning No form, but a link to a contact page

Fail No way to reach you, or a mailto: form

MDN: how form data is actually sent (and why mailto: is unreliable) (2024) [23]

Visitor measurement

2 points

Why it matters

You cannot fix what you cannot see. Without any measurement you do not know how many people visited, which page they left from, or whether last month’s change helped or hurt. This is the lightest-weighted check in the group because it is about running the site well, not about the site itself.

How we measure it

We look for the loading code of the common measurement tools: Google Analytics (which alone runs on more than half of all websites), Plausible, Fathom, Cloudflare, Matomo, Hotjar, Clarity. Any of them passes. None warns.

Pass A measurement tool is installed

Warning No measurement found

W3Techs: Google Analytics runs on 55.9% of all websites (2026) [24]

14 of 100 points

Trust signals

The small things visitors judge in seconds: security, freshness, and how the site looks when shared.

Secure connection

6 points

Why it matters

Chrome has stamped "Not secure" next to the address of every plain HTTP page since 2018, about 92% of pages are now HTTPS, and Google has announced the next step: from October 2026, Chrome will ask permission before even loading an insecure public site. Being the site that triggers that prompt is not a look any business survives.

How we measure it

We check the address your site actually answers on after redirects. HTTPS passes. HTTP fails.

Pass Served over HTTPS

Fail Served over plain HTTP

Google Security Blog: HTTPS by default in Chrome (Oct 2026) (2025) [25] · Chromium Blog: marking HTTP "not secure" (Chrome 68) (2018) [26] · Web Almanac: 91.5% of pages load over HTTPS (2025) [7]

Link preview

3 points

Why it matters

When your link gets texted to a spouse or posted in a local Facebook group, the preview card comes from Open Graph tags, and only about a third of pages set the preview image. There is no honest study on what that costs in clicks, so we will not invent one. The failure is something you can see yourself: text your own site to someone and look at the grey box.

How we measure it

We look for the two tags that build the card: og:title and og:image. Both passes. One warns. Neither fails.

Pass Preview title and image both set

Warning Only one of the two set

Fail No preview tags at all

The Open Graph protocol (2024) [27] · Web Almanac: og:image on only ~37% of pages (2021) [28]

Image descriptions

2 points

Why it matters

Alt text is the written description a screen reader speaks aloud and Google reads. WebAIM’s annual survey of the top million homepages found 16.2% of all homepage images missing it, and more than half of homepages failing at least once. It is one of the most common accessibility failures on the web, and one of the easiest to fix.

How we measure it

We count images missing the alt attribute entirely. None missing passes. Up to half missing warns. More than half fails. An empty alt on a decorative image counts as present, which is correct usage.

Pass Every image has an alt attribute

Warning Up to half are missing it

Fail More than half are missing it

The WebAIM Million: 16.2% of homepage images lack alt text (2026) [29]

Redirect hops

1 point

Why it matters

Each redirect hop is a round trip to a server before your page even starts loading. Google says it follows up to 10 hops but advises keeping chains to 3 at most, and ideally redirecting straight to the destination. One hop, usually http to https or adding www, is normal. We hold a tighter line than Google because every extra hop is avoidable.

How we measure it

We follow your address hop by hop, up to five, and count them. One or none passes. More warns. We report the count, not an invented time cost, because no honest per-hop figure exists.

Pass Zero or one redirect

Warning Two or more redirects

Google Search Central: keep redirect chains to 3 or fewer (2025) [30]

The second instrument

Google's scores, explained.

When Google's PageSpeed service answers, the report shows four scores from Lighthouse, Google's own testing tool. It loads your page on a simulated mid-range phone over a throttled connection, because that is the honest worst case your customers live in. These are lab tests: repeatable, but not identical run to run.

Performance

How fast the page actually loads and responds on a mid-range phone over mobile network conditions. Weighted: TBT 30%, LCP 25%, CLS 25%, FCP 10%, Speed Index 10%.

SEO

Google’s own automated checks of whether the page can be crawled and understood. Every audit counts equally.

Accessibility

Whether people using screen readers, keyboards, or high zoom can use the page. Audits weighted by user-impact severity, no partial credit.

Best practices

Modern standards: safe libraries, no browser errors, correct image sizing.

The speed numbers inside the Performance score

Metric What it is Good Poor
LCP How long until the main content is visible. Google’s line for good is 2.5 seconds. ≤ 2.5s > 4s
CLS How much the page jumps around while loading. Under 0.1 is stable. ≤ 0.1 > 0.25
TBT How long scripts freeze the page. The lab stand-in for how laggy taps feel. ≤ 200ms > 600ms
FCP How long until anything at all appears. ≤ 1.8s > 3s

Thresholds are Google's published ones[32][33][34][35]. We show lab measurements only, by choice: Google's real-user field data only exists for sites with substantial Chrome traffic, which most local business sites do not have. The lab test works for everyone and is measured fresh on every run.

What we deliberately do not check.

A methodology is as much about what it refuses to score. These are the things other graders wave numbers at that we leave out, on purpose.

Your Google ranking
Where you rank depends on your competitors, your reviews, and your links, none of which live in your page code. Any tool that gives you a ranking score from your HTML alone is making it up.
Backlinks and domain authority
That data lives in third-party crawl databases, not on your website. We would be reselling someone else’s estimate and calling it a measurement.
Your Google Business Profile
For a local business it matters as much as the website. It is also a separate thing with separate fixes, so we keep it out of this grade rather than blur the two.
Design quality
Whether a site looks trustworthy and current is a human judgment. We make that call with eyes, not regex, and we do it when we build your site.
Your actual conversion rate
We cannot see your traffic or your phone log, so we will not pretend to know how many visitors become customers. Our Lost Leads calculator lets you run that math with your own numbers instead.

Honest limits

  • We grade one page, the one you give us. It is almost always the homepage, which is also the page Google and your visitors judge first.
  • We read the HTML your server sends, before any JavaScript runs. Google can render JavaScript, so where that changes a result we say so in the check itself and score gently.
  • Google’s Lighthouse numbers vary a little run to run. That is normal for lab testing, and it is why we show their scores as theirs instead of folding them into our grade.
  • Automated checks have a ceiling. WebAIM, who run the largest accessibility survey on the web, note that automated tools catch less than half of real accessibility problems. Ours are no exception, which is one reason a human builds your site.
  • A pass is a proxy, not a guarantee. A site can pass every mechanical check and still lose customers to a bad photo or a confusing offer. The checks catch the measurable half.

Sources

Every threshold above traces to one of these. If a claim cannot be sourced, it does not appear in the tool.

  1. Google Search Central: Control your title links (2025)
  2. Zyppy: Google rewrites 61.6% of title tags (80,959 titles) (2022)
  3. Google Search Central: Control your snippets (2025)
  4. Portent: Google rewrites 68-71% of meta descriptions (2020)
  5. Ahrefs: 62.78% rewritten across 20,000 keywords (2020)
  6. John Mueller, Google: multiple H1s are fine (#AskGoogleWebmasters) (2020)
  7. Web Almanac: only 71% of pages have an H1 (2025)
  8. Web Almanac: LocalBusiness markup on 3.97% of pages (2024)
  9. Google Search Central: How structured data works (2025)
  10. Google Search Central: Consolidate duplicate URLs (2025)
  11. Google Search Central: robots.txt introduction (2025)
  12. Google Search Central: Learn about sitemaps (2025)
  13. Google Search Central: Creating helpful content (2025)
  14. Google Search Central: mobile-first indexing completed (2023)
  15. RFC 3966: the tel URI standard (2004)
  16. MDN: creating phone number links (2025)
  17. web.dev: Time to First Byte thresholds (2024)
  18. Web Almanac: only 44-55% of origins hit the good TTFB line (2025)
  19. Web Almanac: median page ships ~22KB of HTML (2025)
  20. Chrome Developers: Eliminate render-blocking resources (2024)
  21. Google Developers: WebP compression study (25-34% smaller) (2020)
  22. web.dev: Browser-level image lazy loading (2024)
  23. MDN: how form data is actually sent (and why mailto: is unreliable) (2024)
  24. W3Techs: Google Analytics runs on 55.9% of all websites (2026)
  25. Google Security Blog: HTTPS by default in Chrome (Oct 2026) (2025)
  26. Chromium Blog: marking HTTP "not secure" (Chrome 68) (2018)
  27. The Open Graph protocol (2024)
  28. Web Almanac: og:image on only ~37% of pages (2021)
  29. The WebAIM Million: 16.2% of homepage images lack alt text (2026)
  30. Google Search Central: keep redirect chains to 3 or fewer (2025)
  31. Stanford Web Credibility Project: guidelines (Fogg et al.) (2003)
  32. web.dev: Web Vitals thresholds (LCP, CLS, INP) (2024)
  33. Chrome Developers: Lighthouse performance scoring (2024)
  34. Lighthouse scoring documentation (SEO and accessibility categories) (2025)
  35. PageSpeed Insights release notes (Lighthouse 13) (2025)

Now run it on your own site.

The checkup takes about ten seconds and your grade shows before anything is asked of you. If the grade stings, remember we build your homepage first, free, before any money changes hands.