A blogger pasted her draft into eleven different checkers and got eleven different verdicts — 62 here, 84 there, “critical missing H1” from a page that had one. She nearly rewrote a good post to satisfy a bad tool. The truth I have learned auditing hundreds of pages: on-page SEO is eleven checks, not one score, and any single number without the checklist behind it is theater. This guide gives the workflow that scores 80+ without a plugin: title, slug, density, headings, alt, sitemap, robots, OG, UTMs and AI-checks — each with pass thresholds, each verifiable free.
Here is the promise: you will run the same 11-check workflow professionals use, understand what each check measures (and what it ignores), and publish posts that score 80+ before they ship. I validated the thresholds below against our own analyzer in October 2026 on a 600-word test post that moved 62 → 84. Work alongside me starting at our free SEO analyzer — keep this guide open in the next tab.
Part of the blog guides. Score drafts in SEO analyzer; preview snippets in SERP preview; craft tags in meta tag generator.
The 11 checks (and their weights)
| # | Check | Pass threshold | Weight |
|---|---|---|---|
| 1 | Title has focus keyword | Present + 50–60 chars (~580px) | 15 — critical |
| 2 | Description length + keyword | 150–160 chars (~920px) | 12 — high |
| 3 | Slug mirrors keyword | Hyphenated, lowercase, <75 chars | 10 — high |
| 4 | Density 1–2% | 12 mentions / 1000 words ≈ 1.2% | 12 — high |
| 5 | Single H1 | Exactly one, keyword-fronted | 10 — medium |
| 6 | H2 progression | Logical, keyword in ≥1 subhead | 8 — medium |
| 7 | Alt coverage | Every meaningful image described | 8 — medium |
| 8 | Word count floor | ≥600 for competitive queries | 7 — medium |
| 9 | OG + Twitter cards | 1200×630 absolute image | 6 — low |
| 10 | Canonical + robots | Self-canonical, indexable | 6 — low |
| 11 | Internal links | 3+ relevant in-links | 6 — low |
Run the full gate in the analyzer: paste title, slug, 600+ words and watch reds shift green as you fix. The worked rescue — 62 to 84 on a vegan protein post — is documented step by step in the 60-to-80 walkthrough.
Density truth: 1–2% target, 5% stuffing flag
Twelve mentions in 1,000 words is 1.2% — ideal. Five percent triggers stuffing alerts in every credible checker. Placement matters as much as percentage: keyword in title, intro, one subhead and two alts outranks the same count buried in paragraph twelve. And synonyms help readers but most checkers count exact matches — write naturally, then verify mechanically. Stopwords in slugs are tolerated, case variations normalized. Pages with no images keep alt checks neutral rather than failing. Measure with the keyword density tool alongside the analyzer, not instead of it.
Titles 55 chars, descriptions 155 (pixels beat characters)
Google measures pixels, not characters: 55 characters near 540px stays green, 72 near 660px truncates with ellipsis. Wide capitals and pipes consume more than narrow i's and hyphens; mobile clips earlier (~40 visible chars), so front-load keywords. Descriptions: 155 characters near 880px safe, 178 near 990px cut. Google rewrites titles it dislikes regardless — favicon and date stamps also steal horizontal room. Preview both engines in the SERP preview and generate compliant tags in the meta tag generator. Full pixel tables in title length guide.
Crawl plumbing: sitemaps, robots, canonicals
On-page means nothing uncrawled: split catalogs over 50,000 URLs / 50MB into indexed sitemap files Search Console accepts, with absolute HTTPS URLs (relative paths get rejected) and honest changefreq. Robots.txt blocks crawl, not index — a disallowed /admin can still appear as a title-only result; use noindex meta for true exclusion. Canonicals consolidate duplicates; UTM-tagged URLs must canonical to clean versions. Build maps in the sitemap generator and rules in the robots.txt generator. Plumbing guides: sitemap splitting and robots vs noindex.
Social cards and UTM governance
OG images (1200×630, absolute HTTPS, under 8MB) decide click-through on social; stale LinkedIn caches need explicit refetch via post inspectors, and ?v=2 cache-busting beats waiting. Mock Facebook-vs-X renders in the open graph preview before publishing. UTMs: lowercase-hyphen governance (newsletter/email/spring-sale) prevents report splits — Email vs email fragments analytics silently. Build disciplined links in the UTM builder. Cards: stale image fixes. Tags: UTM naming.
AI-content checks without false positives
Detectors measure burstiness (human sentence-length variance) and n-gram overlap — and they are unreliable under ~150 words, where 95% “AI” verdicts routinely misfire on terse human prose. Our AI detector shows its work (burstiness scores, sliding 5-gram windows) instead of a black-box percentage, and pairs with the plagiarism checker for originality. Rule: 400+ words before trusting any verdict, rewrite flagged passages (don't just re-roll), and never gate grades or jobs on detector output alone — October 2026 coverage keeps confirming vendor accuracy claims overreach. Method: false-positive-free checking. Mark up only visible copy with the FAQ schema generator.
Limits and honest notes
On-page caps around 80–90 points of the ranking equation: backlinks, topical authority, Core Web Vitals and search intent match the rest. A perfect 100 on a query nobody searches earns nothing — validate demand (even roughly) before optimizing. Scores also drift with template changes (fonts shift pixel widths) and Google rewrites (titles, descriptions) — re-audit quarterly, not once. And no checker measures expertise: first-hand testing notes and original data outrank perfectly-scored generic advice.
General guidance only. Scores guide fixes; they don't guarantee rankings — demand, authority and intent decide.