toolkit

On-page SEO · Playbook

SERP thresholds — the numbers On-page SEO grades on, and where they come from

Issue #70: every threshold in this skill was hardcoded in orbeetle.mjs and visible nowhere else, so a client asking “why is 65 characters a warning?” got an answer nobody could check. Since 0.102.0 each finding carries a source and a lastVerified date; this file is the reader-facing side of the same data.

Read the caveat before quoting a number. These are defaults tuned for a general site, not standards. Google publishes none of them as a limit — it publishes guidance, and truncation is a rendering outcome that varies by query, device and how much Google decides to rewrite. A brand with a long name, a site whose titles are mostly one wide word, or a market where the SERP renders a different font all have a different right answer. The right band depends on the site.

Title

Check Threshold Level Source
Missing error Google — title links
Too short < 30 characters warn as above
Too long > 65 characters warn as above
Too wide > 620 px warn pixel budget — see below
Wide-ish > 580 px info pixel budget — see below

Verified 2026-08-05.

Why both characters and pixels

SERP truncation is a pixel budget. illillill and WWWWWWWWW are the same length and nowhere near the same width, so a character count alone gets both kinds of case wrong:

Title Chars Width Character rule Pixel rule
WOMEN’S MAMMOGRAPHY, MRI & WELLNESS — WOLLONGONG MEDICAL GROUP 62 639px passes truncates
Dental Implants in Chicago | Smile Dental Partners Downtown Ltd 63 466px passes comfortable
ilinis institute litigation list infinite title still in it li 62 326px passes comfortable

Worth knowing which way the two rules actually disagree: for ordinary mixed-case copy the character rule is the stricter of the two — 63 characters of normal title text is only ~466px, well inside the budget. The pixel rule earns its place on the wide outliers: all-caps titles, em dashes, and brand names in capitals. That is why it is additive, not a replacement. Character length stays the signal you can explain to a client; pixel width is the truncation predictor.

The estimate uses Arial advance widths at 16px (scripts/lib/pixel-width.mjs) — the desktop rendering. Mobile renders a different face at a different size, and Google rewrites titles it judges unhelpful, so treat the number as a strong hint rather than a measurement.

Meta description

Check Threshold Level Source
Missing warn Google — snippets
Outside range < 50 or > 160 characters warn as above

Verified 2026-08-05.

Deliberately not graded on pixels. Snippet length varies with the query, the device and whether Google generates its own text from the page instead — far more than the title’s does. A single pixel budget here would be false precision, so the width is not used for a verdict.

Headings

Check Threshold Level Source
No H1 warn Google — SEO starter guide
More than one H1 > 1 info as above — multiple H1s are valid HTML5 and Google states it handles them

Verified 2026-08-05.

Tuning

The thresholds live in orbeetle.mjs; the pixel budgets live in SERP in scripts/lib/pixel-width.mjs. There is no per-site config file yet — when one arrives it should read from here rather than adding a second set of numbers, so this table stays the single answer to “why is that a warning?”.