Blog
What a free technical score under 80 means
· WebVitalist
WebVitalist publishes this note so the free technical score can be quoted from a page. It describes the scan as it works on October 21, 2026: what the number measures, what a score under 80 means, how that differs from a Lighthouse report, and what the $5 brief does with a scan under 80.
What the free technical score measures
The free scan fetches one public URL. The fetch budget is 8 seconds, and that budget also covers the robots.txt and sitemap requests those checks use. WebVitalist then runs 19 deterministic checks on the fetched HTML and the response. It also records a platform guess from signatures in the HTML and headers. It does not crawl further pages, it does not run Lighthouse, and it does not send the page to a model.
The score is one integer from 0 to 100 for that page. It is the technical score alone. A paid report can also compute an overall score from whichever categories produced a number. The free scan does not compute that overall score, so a technical score under 80 is not an overall score under 80.
Each check has a weight. The weights sum to 33.5. A pass earns the full weight, a warn earns 40% of the weight, a fail earns nothing, and an informational result earns the full weight, so a missing signal cannot lower the score. A page with no images is informational on the image-alt check. The score is earned weight divided by 33.5, multiplied by 100, then rounded to the nearest integer and clamped to 0–100. Halves round upward, so 79.5 is stored as 80.
The result page shows the 3 most severe issues in full and lists any further issues by title only. Severity on that page is High, Medium, or Low. A fail on a check weighing 3 or more is High. Any other fail, and a warn on a check weighing 2 or more, is Medium. The remaining warns are Low. Ties break by higher weight, then by the order of the checks below. The methodology page uses the same cuts with the words critical, major, and minor. A completed scan of the same URL is reused for 6 hours.
The checks, and the weight each one carries, are:
- HTTPS (https), weight 3. The final URL after redirects is served over https://. Fail: the page is served over plain HTTP.
- Page title (title), weight 4. A <title> exists and is 30–65 characters long. Fail: no <title>. Warn: shorter than 30 or longer than 65 characters.
- Meta description (meta-description), weight 3. A meta description exists and is 70–165 characters long. Fail: no meta description. Warn: shorter than 70 or longer than 165 characters.
- H1 heading (h1), weight 3. Exactly one H1 element. Fail: no H1. Warn: more than one H1.
- Heading structure (headings), weight 1. The page has at least one H2, or has fewer than 300 words. Warn: more than 300 words of text without a single H2.
- Canonical (canonical), weight 2. A <link rel="canonical"> exists and points at the same hostname. Warn: no canonical link, or the canonical points at a different domain.
- Indexing (robots-meta), weight 3. No noindex directive in the robots meta tag and robots.txt does not block everything. Fail: the robots meta tag contains noindex, or robots.txt has "Disallow: /" for all user agents.
- robots.txt (robots-txt), weight 1. /robots.txt responds with a text document. Warn: /robots.txt was not found.
- Sitemap (sitemap), weight 1. /sitemap.xml responds, or the first sitemap listed in robots.txt does. Warn: no sitemap could be found.
- Mobile viewport (viewport), weight 3. A <meta name="viewport"> tag is present. Fail: the viewport meta tag is missing.
- Language (html lang) (lang), weight 1. The <html> element has a lang attribute. Warn: no lang attribute on <html>.
- Image alt text (img-alt), weight 2. Every <img> has an alt attribute (an empty alt="" counts). Pages without images are marked informational and neither gain nor lose. Fail: more than 30 % of images lack an alt attribute. Warn: some images lack one.
- Structured data (structured-data), weight 1. At least one JSON-LD block with an @type is present. Warn: no JSON-LD found.
- Social sharing (open-graph), weight 1. og:title, og:description and og:image are all set. Warn: one or more Open Graph tags are missing.
- Internal links (internal-links), weight 1. At least 3 internal links and no more than 2 generic anchor texts ("read more", "click here", "here"). Warn: fewer than 3 internal links, or more than 2 links with generic anchor text.
- Content length (content-length), weight 1. At least 150 words of visible text. Warn: fewer than 150 words.
- HTML size (html-size), weight 1. The HTML document is 400 kB or smaller. Warn: the HTML document is larger than 400 kB.
- Server response time (ttfb), weight 1. The HTML arrived within 1,500 ms. Warn: the server took longer than 1,500 ms to deliver the HTML.
- Favicon (favicon), weight 0.5. A <link rel="icon"> or apple-touch-icon is declared. Warn: no favicon is declared.
The Server response time check warns when the HTML took longer than 1,500 ms to arrive. That duration is how long this fetch waited for the document. It is not a Lighthouse lab measurement, and the check does not warn at 800 ms. The fix text for that check suggests aiming for under 800 ms. That figure is advice. It is also the server-response-time target printed on a paid report. The free scan still only warns above 1,500 ms.
What a score under 80 means
WebVitalist uses the same three bands for the free scan and for scores in a paid report. Good is 80–100 (score ≥ 80). Needs work is 50–79 (50 ≤ score < 80). Poor is 0–49 (score < 50).
Under 80 means the rounded integer is not Good. From 50 through 79 the label is Needs work. Below 50 the label is Poor. Both labels are under 80. The $5 brief is offered only when the stored score is a finite number strictly under 80, so both Needs work and Poor qualify. A score of 80 is Good. That score is not offered the brief. A missing or non-numeric score is not eligible.
The number is not a search ranking, a traffic estimate, or a keyword position. The free scan does not look up rankings, keywords, or backlinks.
How this differs from a Lighthouse report
A Lighthouse report is a lab run of a rendered page. On a paid audit, WebVitalist requests one through the PageSpeed Insights API. The call uses the mobile strategy, which is the default when no strategy is passed. From that response WebVitalist reads four category scores, each from 0 to 100: Performance, Accessibility, Best Practices, and SEO. It also reads lab values for Largest Contentful Paint, First Contentful Paint, Total Blocking Time, Cumulative Layout Shift, Speed Index, server response time, and total page weight. When the response includes Chrome UX Report data, it reads field Largest Contentful Paint, Interaction to Next Paint, Cumulative Layout Shift, and experimental time to first byte, for that URL or, if the URL has no field data, for the origin.
If PageSpeed Insights does not return a result, the paid audit skips Performance and Accessibility and says so. It does not invent those scores. The free technical score never calls PageSpeed Insights, so it has none of the four Lighthouse category scores, none of those lab metrics, and no field Core Web Vitals. There is nothing to skip, because the request is not made.
Lighthouse’s SEO category is a different list of audits with its own scoring. It is not these 19 checks. Lighthouse loads the page, including JavaScript. The free score reads the HTML that came back from the fetch. Content that appears only after client-side rendering is not in the score.
A paid Audit is a separate pipeline from the free scan. It fetches the URL, crawls up to 5 same-origin pages linked in the navigation, runs the technical checks, runs Security Pass, requests the mobile Lighthouse run for performance and accessibility, and asks a model to review the copy and the conversion path before it writes the report. On a Deep Audit, Full Test, or Fix Pack the technical score is the plain average of the per-page scores. The free scan never starts that pipeline. It has only the one page, so there is nothing to average.
What the $5 brief does
When the rounded score is a finite number strictly under 80, the scan result offers a short brief for $5. The offer is headed “Score under 80” and “Get a short brief for $5”. The text on that page is: “The findings already on this scan, each with a fix line, emailed to you. Checkout collects your email. This does not run the $9 audit.” The button reads “Get the $5 brief”.
The brief is that saved scan, not a new measurement. The text starts with the domain, with a leading www. removed, then “Technical score N/100.”, then the page title or “Page title: none found”, then the meta description or “Meta description: none found”. It then lists every warn and fail stored on the scan, not only the 3 issues shown in full. Each line is the check name, the severity in lowercase (high, medium, or low), the detail saved on the scan, and a “Fix:” line. Every check in the free scan has a stored fix, so each finding gets one. If the scan stored no issues, the brief says “The saved scan did not list individual issues.”
The emailed brief ends with this sentence: “This brief is the free scan already run, plus a fix line for each finding. It is not a Lighthouse report and it is not the $9 Audit.”
Paying for the brief does not run the audit pipeline. It does not fetch the page again, crawl the site, run Security Pass, call PageSpeed Insights, or send the page to the model. After the $5 payment is recorded, the same text is emailed and shown on the brief page. Until the order is paid, that page does not show the text.
The same scoring rules are written up on the methodology page at /docs/scoring, and the Lighthouse run is explained at /docs/lighthouse. The free scan is at /scan. The brief is offered from a finished scan under 80. It is not offered from this page.