On-page mechanics
The on-page SEO checklist that is actually checkable
Twenty-one on-page items, each with a pass condition you can verify in under a minute — and the ones that are worth ignoring.
9 min read
Most on-page SEO checklists fail for the same reason: their items cannot be checked. "Write high-quality content" and "optimise for user intent" are goals, not checks. You cannot look at a page and say yes or no, so the list gets skimmed once and never used again.
This checklist only contains items with a binary pass condition. Either the page has exactly one H1 or it does not. Either the answer to the section question appears in the first sentence or it appears in the fourth. Everything that cannot be settled that way has been moved to the last section, where it belongs — under judgement, not compliance.
The order matters too. The items are grouped by what breaks first: structure before metadata, metadata before links, links before the nice-to-haves. If you only have ten minutes for a page, do group 1 and stop.
How to use this checklist
Run it against one URL at a time, not against a site. On-page work is per-page work: the fix for a thin comparison page has nothing in common with the fix for a bloated pillar article.
Every item below is written as a pass condition. If the page does not meet it, the failure column tells you what it usually looks like in the wild, which is normally faster to spot than the rule itself.
- Open the page and view the rendered HTML, not the CMS editor — the editor hides what the template adds (a second H1 in the hero, a duplicated breadcrumb, a lazy-loaded main image).
- Check structure before you touch a single word. Rewriting copy inside a broken heading tree wastes the rewrite.
- Record which items failed. The pattern across ten pages tells you whether you have a page problem or a template problem — and template problems are fixed once for the whole site.
Group 1 — Structure (fix these first)
Structure decides whether search engines and assistants can extract anything from the page at all. A page with excellent copy and a broken heading tree still gets quoted badly, because the quoting system has no reliable way to tell where a section starts and stops.
| # | Check | Pass condition | Typical failure |
|---|---|---|---|
| 1 | Single H1 | Exactly one <h1> in the rendered DOM | Hero heading is an H1 and the article title is a second H1 |
| 2 | H1 describes the page | The H1 names the specific subject, not the site or section | "Blog" or the company name as H1 |
| 3 | No skipped levels | An H3 only ever appears under an H2 | H4 chosen because it looked the right size |
| 4 | Headings are text, not decoration | Every heading tag contains a real section title | A pull quote or a price marked up as H2 |
| 5 | Sections are self-contained | Each H2 section answers its own heading without the previous one | Sections that only make sense read top to bottom |
| 6 | Answer near the top of the section | The first sentence under a heading answers it | Three sentences of context before the answer |
| 7 | Lists and tables where the content is a list or a table | Enumerable content uses <ul>/<ol>/<table> | A comparison written as five paragraphs |
| 8 | One main landmark | Primary content sits inside a single <main> | Content split across sibling <div>s with no landmark |
Why answer placement is a structural check, not a writing one
Google has described featured snippets as extracted from the page — the system chooses a passage it judges to answer the query, and formats it as a paragraph, list or table. The same extraction pressure now applies to AI Overviews and to assistants that cite pages. A section whose answer arrives in sentence four is not disqualified, but it gives the extractor a harder job than the competitor whose answer is sentence one.
This is why answer-first structure sits in the structural group: it is a property of where information is placed, and you can check it by reading only the first sentence of each section.
Group 2 — Metadata and the SERP snippet
Metadata does not make a page rank, but it decides how the page is represented once it does. It is also the cheapest group to fix: no rewriting, no template changes.
| # | Check | Pass condition | Typical failure |
|---|---|---|---|
| 9 | Title tag exists and is unique | One <title>, not shared with any other page | Templated title repeated across a category |
| 10 | Title fits the snippet | Roughly 50-60 characters; primary term near the front | Brand name first, subject truncated away |
| 11 | Title differs from the H1 where it should | Title written for the SERP; H1 written for the page | Title and H1 identical on a page where the SERP needs more context |
| 12 | Meta description gives a reason to click | Around 150-160 characters, specific, not a summary | The first paragraph pasted verbatim |
| 13 | Self-referencing canonical | <link rel="canonical"> points at this URL | Canonical left pointing at the homepage by a template |
| 14 | Indexable | No noindex, and the URL is not blocked in robots.txt | Staging noindex shipped to production |
| 15 | Structured data matches the page | JSON-LD describes what a visitor actually sees | Ratings or FAQ markup with no visible equivalent |
Group 3 — Keywords, without the density theatre
The keyword checks that survive scrutiny are about placement and coverage, not repetition counts. A term that appears in the title, the H1, the first paragraph and one heading is unambiguously the subject of the page. A term that appears forty times in the body and nowhere structural is just noise.
| # | Check | Pass condition | Typical failure |
|---|---|---|---|
| 16 | One primary term per page | The page targets a single primary query and its variants | Five unrelated head terms on one page |
| 17 | Primary term in title, H1 and intro | Present in all three, in natural phrasing | Present only in the body copy |
| 18 | Semantic coverage | The obvious sub-questions and entities are addressed | The keyword is everywhere; the topic is thin |
| 19 | No exact-match stuffing | No heading or paragraph repeats the term unnaturally | The same phrase forced into every H2 |
Density is a warning light, not a target
There is no density value that search engines reward. What high density reliably indicates is that a page was written to hit a number rather than to answer a question, and Google's spam policies name keyword stuffing — repeating words unnaturally to manipulate rankings — as a violation.
This is why the wordiqo optimizer reports a per-keyword count and density figure but sets no goal: the number exists so you can notice an outlier, not so you can chase one. Its own labels are deliberately conservative, marking anything above roughly 1.5% for a review rather than declaring a correct band.
Group 4 — Links, images and the rest
Two items, but they are the two that most often decide whether a page is discovered and whether it is usable. An orphan page with no in-body inbound links is a page you have asked search engines to find by accident.
Alt text has a second job that SEO checklists usually skip: it is what a screen-reader user hears instead of the image. The two goals normally align, but where they conflict, accessibility wins — and the SEO cost of an accurate, unstuffed alt attribute is zero.
| # | Check | Pass condition | Typical failure |
|---|---|---|---|
| 20 | Contextual internal links | At least two in-body links with descriptive anchor text | "Click here", or links only in the footer |
| 21 | Images carry meaningful alt text | Alt describes the image; decorative images use alt="" | Filename dumped into alt, or alt stuffed with keywords |
Running the checklist on text you already have
A checklist you have to run manually gets run on the pages you already suspect. The point of automating part of it is to catch the pages you do not suspect.
The free wordiqo optimizer covers the mechanical subset of this list. You paste the text of a page, add up to ten target keywords — the first is treated as the primary one — and the Quick SEO Check reports on the structure and keyword signals before anything is rewritten: whether an H1 exists, whether there are at least two H2s, whether the primary term appears in the introduction and in at least one heading, plus average sentence length and word count.
It stops well short of the full list. Canonicals, robots directives, structured data and internal linking are properties of the published page, not of the text, so they stay manual. That division is worth keeping in mind for any tool that claims to score on-page SEO out of 100: a score computed from pasted text cannot see the half of the checklist that lives in the template.
- Check structure first — Fix the heading tree and the answer placement. If the tree is broken, everything downstream is measured against the wrong sections.
- Then metadata — Title, description, canonical, indexability. Fast, template-level, and often the same fix across dozens of URLs.
- Then keywords and coverage — Placement in title, H1 and intro; then the sub-questions a reader expects and the page does not answer yet.
- Then links and images — Two contextual inbound links from related pages, descriptive anchors, alt text that describes the image.
What this checklist deliberately leaves out
Several perennial checklist items were excluded because they cannot be checked, no longer apply, or were never true.
| Common item | Why it is not on the list |
|---|---|
| Keyword in the URL slug | Worth doing on new pages, not worth changing a live URL for — the redirect risk exceeds the gain |
| Exact word count target | Length follows the question. A definition page that hits 2,000 words has usually been padded |
| Keyword density of X% | No target value exists; only outliers are informative |
| LSI keywords | Not a real system. Semantic coverage is the useful version of this idea |
| Meta keywords tag | Unused by Google for roughly two decades |
| Readability score above N | Useful as a smell test, meaningless as a pass condition — technical topics legitimately score badly |
| H1 exactly once per keyword | The H1 rule is about the document, not about the keyword |
Questions people ask
How often should on-page SEO be re-checked?
- Structure and metadata only change when someone edits the page or the template, so a check at publication plus a check after any template release is usually enough. Content coverage decays faster — that is what a periodic content audit is for.
Does on-page SEO still matter if the content is good?
- Yes, but as a floor rather than a lever. Passing the checklist does not make a mediocre page rank; failing it can stop a good page from being represented properly in results, snippets and assistant answers.
What is the single most common failure?
- More than one H1 on the page, usually because a template hero and an article title both use one. It is also the cheapest to fix, since it is a template change rather than a content change.
Can an AI tool run the whole checklist?
- No. Roughly the structural and keyword groups can be checked from the text itself; canonicals, indexability, structured data and internal links require the published page. Any tool that returns a single on-page score from pasted text is scoring a subset.
References
- Google Search Central — Featured snippets and your website — Confirms snippets are extracted programmatically from the page rather than submitted.
- Google Search Central — Control your snippets in search results — Explains when Google uses your meta description and when it generates its own.
- Google Search Essentials — Spam policies — Defines keyword stuffing as unnatural repetition intended to manipulate rankings.
- W3C WAI — Page structure: headings — The accessibility rationale for a single H1 and an unbroken heading hierarchy.
Keep reading
- The research pass that comes before these checks — Reading the results page to settle format, depth and angle before drafting.
- H2/H3 rules and what a skipped level costs — The heading tree behind checklist items 2 and 3.
- Structuring a section so it can be quoted — Where the answer belongs, and the markup extraction actually reads.
- How to run a content audit on a page you already published — The process for deciding whether a live page needs a refresh, a rewrite or nothing at all.
- One H1 per page: what actually breaks when you use two — Item 1 of this checklist in detail, including the HTML5 outline myth.
- Run the mechanical checks on your own text — The free optimizer that reports heading structure, keyword placement and density before rewriting anything.
