📄

Typography audit: 19 sites, 321 pages

Private deliverable. Enter the hub password to continue.

That's not right. Try again.

← Back to the hub

Typography audit: 19 sites, 321 pages

Fourteen pages out of 321 pass both rules, and eleven of those were changed an hour before the audit ran.

Prepared 2026-08-01

Measured 2026-08-01 against the two standards you set: 65 to 75 characters per line, and body type at least 20px.

The headline

Pages Share
Measured 321
Pass the line-length rule 94 29%
Pass the 20px rule 22 7%
Pass both 14 4%

Eleven of those fourteen are Verity Agentic article pages, changed an hour before this ran. The other three are hub pages. Every other page on every other site fails at least one rule, and most fail both.

34 pages run over 90 characters a line. That is roughly a third past the readable maximum. 34 pages set body text under 16px.

Three properties could not be measured (33 pages): the CRM app screen, a gated audit page, and the menopause practice site, which had no prose the script could sample.

By site, worst first

Site Pages Line length OK 20px OK Median
CureCanineDisease 8 0/8 0/8 104 cpl / 18.7px
OutdoorBoulder 45 0/45 0/45 85 cpl / 17px
ProteinFirstRecipes 5 0/5 0/5 78 cpl / 15.7px
SponsorLab 8 0/8 0/8 92 cpl / 15.7px
TrainerBooked 32 0/32 0/32 87 cpl / 16.0px
BobExecCounseling 32 4/32 0/32 79 cpl / 16.0px
TasteBoulder 15 2/15 0/15 81 cpl / 17px
SEOBeliever 13 2/13 0/13 121 cpl / 17px
SmartStrongAlive 5 1/5 0/5 69 cpl / 15.7px
BoulderThingsToDo 14 3/14 0/14 78 cpl / 17.0px
NewToBoulder 14 3/14 0/14 82 cpl / 17.0px
MensGroups 16 4/16 0/16 78 cpl / 18.0px
RecipeMemoir 7 2/7 0/7 73 cpl / 16.0px
NotTooOldForAI 6 2/6 0/6 63 cpl / 19.0px
Vitalency 8 3/8 0/8 64 cpl / 19.0px
MedSpasBoulder 49 41/49 0/49 70 cpl / 17px
testosteroneinwomen 13 11/13 0/13 66 cpl / 17.4px
VerityAgentic 21 13/21 12/21 70 cpl / 20px
AnnetteThompson 10 3/10 10/10 78 cpl / 20.4px

Two encouraging rows. MedSpasBoulder gets line length right on 41 of 49 pages, and testosteroneinwomen on 11 of 13. Both fail only on size, which is the easier of the two to fix.

The ten worst pages for line length

Page Chars/line Size
seobeliever.com/locations/longmont 137 17px
curecaninedisease.com/distemper-en 134 17px
seobeliever.com/locations/louisville 132 17px
seobeliever.com/locations/broomfield 131 17px
seobeliever.com/locations/lafayette 130 17px
seobeliever.com/about 127 17px
seobeliever.com/locations/denver 127 17px
curecaninedisease.com/parvo-en 125 17px
seobeliever.com/locations/boulder 121 17px
seobeliever.com/seo-audit 120 17px

Every SEO Believer location page sits in this band, and they are entry points from search. At 137 characters the eye loses the start of the next line on the return sweep, which is the specific thing an over-long measure breaks.

There is an awkward angle worth naming: SEO Believer sells search and content expertise, and its own location pages are the least readable thing you own.

The smallest type, one page per site

Page Size Chars/line
bobmanthy.com/videos/ 14.4px 61
recipememoir.com/site/browse.html 14.4px 62
tasteboulder.com/restaurants/ 14.4px 73
medspasboulder.com/provider/absolute-beauty-solutions/ 14.7px 64
smartstrongalive.com/protein-calculator 14.7px 96
testosteroneinwomen.com/articles/ 15.0px 41

What is causing it

Two independent faults. Most sites have both.

No reading-width cap on the prose container. A paragraph inside a 900 to 1,100px container fills it. That is why the worst offenders are content pages on wide layouts. Capping the prose column is close to a one-line change per template.

A base font size of 16 or 17px. Reasonable a decade ago on smaller screens. On a current display it reads small, and it compounds the first fault, because small type in a wide container is exactly how a page reaches 137 characters a line.

One trap worth naming, because it already cost time on verityagentic.ai: the CSS ch unit will not solve this. One ch is the width of the digit zero in the current font, so a 65ch cap means something different in a condensed face than a normal one. An about page capped at 64ch rendered as 467px, far narrower than intended, because that site uses Arial Narrow. Set the cap in pixels, then verify the rendered character count.

The order I would fix them in

1. Pages where someone decides whether to hire you. Verity Agentic pricing at 112 characters and 16px is the sharpest example, because it carries the decision. The SEO Believer about and location pages come next, since that is where search traffic lands.

2. Sites whose entire job is reading at length. Cure Canine Disease at 104, Boulder Things To Do guides at 117, Taste Boulder at 14.4px.

3. The two near-misses. MedSpasBoulder and testosteroneinwomen already have line length right almost everywhere. Bumping the base size alone moves them close to fully compliant, which is a large win for a small change.

4. Everything else, template by template. These 19 sites share a handful of layouts, so the real work is far smaller than 321 pages implies.

I would not change 19 sites in one pass. Each needs its rendered result re-checked afterward, since neither number can be read off a stylesheet.

Re-running it

py -3.13 C:\Users\annet\ClaudeProjects\MyExecAssistant\scripts\audit_typography.py

Add --site SEOBeliever for one site, --limit 3 for a quick pass, or --json out.json for per-page detail. It takes its target list from each project's validator config, so anything the validator already covers is covered here.

How it measures. For every substantial paragraph: lines are the rendered height divided by the line height, and characters per line is the text length divided by lines. The median is taken across all paragraphs on a page, so one pull quote cannot skew the result. Headless Chromium at 1440px wide. It has to be measured on the rendered page, because glyph widths differ per font and neither figure is readable from the CSS.

Published to Annette's hub. Rebuilt from the source markdown, so edit the source and rerun rather than editing this page.