Command Palette

Search for a command to run...

How to Audit a Page for On-Page SEO and Readability, One Check at a Time

How to Audit a Page for On-Page SEO and Readability, One Check at a Time

T
Toolz Team
|Sep 19, 2026|15 min read
Prefer Toolz.dev on Google

Part of the SEO Tools collection

Content Analyzer

Audit any page for on-page SEO and readability: title, description, headings, alt text, internal links, Flesch score and keyword frequency, with a score out of 100.

Use the Content Analyzer

An on-page SEO check is the part of search optimization you control completely. You cannot choose who links to you or how strong the competition is, but you can make sure a page has a sensible title, a real description, one clear main heading, enough text to answer the question, alt text on its images, readable sentences and links to the rest of your site. When a page is missing one of those, it is usually by accident.

This guide walks through each of those checks: what it measures, where the threshold comes from, how honest that threshold is, and what to fix when it fails. It uses the free Content Analyzer, which fetches a URL and runs seven checks in a couple of seconds, but the method works by hand too.

TL;DR: An on-page content audit checks seven things: title length (30 to 60 characters), meta description length (120 to 160), exactly one h1, at least 600 words, alt text on images, a Flesch Reading Ease of 50 or more, and at least three internal links. The Toolz Content Analyzer fetches the page's server HTML, scores each check as pass, warning or fail, and returns a score out of 100 plus the ten most frequent words. It runs on a server, so it is limited to three analyses a day per visitor and cannot see content rendered by JavaScript. A high score means the page is set up competently, not that it will rank.

What does a content analyzer check?

A content analyzer reads a web page's HTML and measures the elements search engines and readers see first against fixed thresholds. It does not judge whether the writing is good or whether the page deserves to rank. It checks whether the basic structure is in place.

The Toolz Content Analyzer runs these seven checks. The thresholds are copied from its source code.

Check Pass Warning Fail
Title tag 30 to 60 characters Present but shorter or longer Missing
Meta description 120 to 160 characters Present but shorter or longer Missing
H1 heading Exactly 1 2 or more 0
Content length 600 words or more 300 to 599 words Under 300 words
Image alt text No images missing alt 20% or fewer missing More than 20% missing
Readability Flesch 50 or higher 30 to 49.9 Under 30
Internal linking 3 or more internal links 1 or 2 0

Alongside the checks it reports the word count, the Flesch score with a difficulty level, the ten most frequent meaningful words, and a structure summary: counts of h1, h2 and h3 headings, paragraphs, images, images without alt, and internal and external links.

How is the score out of 100 calculated?

Each check is worth one point for a pass, half a point for a warning and nothing for a fail. The points are divided by seven and multiplied by 100, then rounded.

Worked example

Say a blog post comes back like this:

Check Result Points
Title tag 72 characters 0.5 (warning)
Meta description Missing 0 (fail)
H1 heading 1 found 1
Content length 850 words 1
Image alt text 2 of 12 images missing alt (16.7%) 0.5 (warning)
Readability Flesch 58 1
Internal linking 14 internal links 1

That is 5 points out of 7. 5 / 7 × 100 = 71.4, so the score is 71.

The half-point for warnings is deliberate. A title of 72 characters is not broken the way a missing title is, and a score that treated both as failures would hide the difference. Fixing the missing description alone lifts this page to 6 / 7, or 86. Trimming the title to 60 characters as well brings it to 93.

Why do title length and description length matter?

The title tag and meta description are the raw material for the blue link and the text under it in search results. If they are too long, the result is cut off; if they are missing, the search engine writes its own.

Google does not publish a character limit for either. Its documentation on title links says titles can be truncated to fit the device, and truncation is based on pixel width, not a character count. Its guidance on snippets says a meta description can be used for the snippet when it describes the page better than on-page text, and that Google may rewrite it for a given query.

The 30 to 60 and 120 to 160 ranges are therefore practical conventions that usually display in full on desktop results, not official rules. That is why an over-length title is a warning in the analyzer rather than a failure. The fix is still worth making: put the words that matter at the start of the title so a cut-off loses the least important part.

If you need to rewrite either tag, the meta tag generator counts characters as you type, and the meta tags guide explains which tags still matter.

Why exactly one h1?

One h1 gives the page a single, clear main heading, which helps readers, screen reader users and search engines understand what the page is about. The analyzer counts every <h1> element in the HTML.

Zero is a failure because the page has no top-level heading at all. Two or more is only a warning. The HTML standard allows several h1 elements, and search engines handle pages that have them. The problem is usually a template issue: a site logo wrapped in an h1 on every page, plus the article title in a second h1. Changing the logo to a plain element is the common fix.

How many words should a page have?

The analyzer passes pages of 600 words or more, warns between 300 and 599, and fails anything under 300. Those numbers are a floor for pages meant to answer a question in depth, such as articles, guides and category pages. They are not a target, and a longer page is not automatically better.

Some pages should be short. A contact page, a login screen or a product page with a spec table will fail this check and be perfectly fine. Read the check against the purpose of the page.

There is one measurement detail that matters. The word count comes from everything inside <body> after scripts, styles, <noscript> and <template> blocks are removed. Navigation menus, footers, cookie notices and sidebar widgets are all counted. A thin article inside a heavy site template can pass the 600-word check on template text alone, so look at the Words figure against what you know the article contains.

A word is any run of characters between spaces that contains at least one letter, so "2026" on its own is not counted.

How does the Flesch Reading Ease score work?

Flesch Reading Ease estimates how hard text is to read from two things: how long the sentences are and how many syllables the words have. Rudolf Flesch published the formula in 1948, and it is still the most widely used readability score in English.

Reading Ease = 206.835 - 1.015 × (words / sentences) - 84.6 × (syllables / words)

Higher is easier. The analyzer labels 70 and above Easy, 50 to 69.9 Medium, 30 to 49.9 Difficult and below 30 Very difficult. As a rough guide, 60 to 70 is plain English that most adults read comfortably.

Worked example: two pages of 900 words

Page A has 900 words in 45 sentences with 1,350 syllables. That is 20 words per sentence and 1.5 syllables per word.

206.835 - 1.015 × 20 - 84.6 × 1.5 = 206.835 - 20.3 - 126.9 = 59.6, Medium, which passes.

Page B has the same 900 words in 30 sentences with 1,530 syllables. That is 30 words per sentence and 1.7 syllables per word.

206.835 - 1.015 × 30 - 84.6 × 1.7 = 206.835 - 30.45 - 143.82 = 32.6, Difficult, which is a warning.

The syllable term has the bigger weight: raising average syllables per word by 0.2 costs about 17 points, while adding 10 words per sentence costs about 10. Shorter words help more than shorter sentences.

Why the syllable count is approximate

Counting syllables exactly needs a dictionary. The analyzer uses the standard heuristic instead: count groups of vowels, and drop a silent ending such as "-e", "-ed" or "-es" after a consonant. It is right for most words and wrong for some. "Queue" counts as two syllables when it is one, and "sentences" counts as two when it is three. Across a page of prose these errors roughly cancel, so the score is stable, but do not read meaning into a difference of two or three points.

Sentences are counted where a full stop, question mark or exclamation mark is followed by a space, ignoring fragments of ten characters or fewer. Bullet lists without punctuation run together into long "sentences", which lowers the score on list-heavy pages.

Why does alt text count, and when is empty alt correct?

Alt text is the text alternative for an image. Screen readers read it aloud, browsers show it when an image fails to load, and search engines use it to understand images. Providing text alternatives for non-text content is the very first success criterion in the Web Content Accessibility Guidelines, WCAG 2.2 success criterion 1.1.1.

The analyzer counts an image as missing alt when the alt attribute is absent or empty. That second part needs care. The HTML standard says purely decorative images should have an empty alt="", so assistive technology skips them. A page that correctly marks ten decorative icons with empty alt will show them as missing here.

So when this check warns or fails, look at which images are involved. Content images, such as photos, diagrams and charts, need descriptive alt. Decorative ones are correct as they are.

Internal links are how both readers and crawlers find the rest of your site. A page with no internal links is a dead end, and a page that nothing links to, an orphan page, is hard for search engines to discover and gets little of the site's authority.

The analyzer counts links whose hostname matches the page's hostname, ignoring a leading www.. Links that start with #, mailto:, tel: or javascript: are skipped. Relative links are resolved against the page URL first, so /pricing counts as internal.

One detail: a subdomain counts as external. On www.example.com, a link to blog.example.com is external. If your blog lives on a subdomain, expect a lower internal count than you might assume.

Three internal links is a floor. Most navigation menus clear it on their own, which is why the check rarely fails on a normal site and is most useful for landing pages built without the standard template.

Why does my page report almost no words?

Because the content is rendered by JavaScript. The analyzer reads the HTML your server returns, and a page built entirely in the browser, such as a single-page app without server rendering, sends a nearly empty shell. The analyzer then sees no text, no headings and no links, and fails several checks the page would pass in a browser.

You can see what it sees: open the page with JavaScript disabled in your browser's settings, or use View Source rather than the element inspector. Google can render JavaScript, as its JavaScript SEO basics explain, but rendering happens in a separate step, and server-rendered HTML is still the most reliable way to get content indexed. A near-zero word count here is a strong hint to check how your framework renders.

What errors can the analyzer return?

The analyzer fetches pages from a server, so most errors come from the fetch rather than the analysis.

Message Cause What to do
Only http and https URLs can be analyzed. Another scheme such as ftp: Use the web address
That does not look like a valid URL. No dot in the hostname, or a malformed address Check the spelling; the https:// prefix is optional
That host could not be reached, or is not a public address. DNS failed, or the host resolves to a private or loopback address Use a public URL, not localhost or an intranet host
The page responded 404. (or another status) The server returned an error Check the URL loads in a browser
That URL is not an HTML page. The response is a PDF, image or JSON Analyze the HTML page that links to it
That page is too large to analyze. The response declares more than 3 MB Test a lighter page or template
Could not fetch that page. Timeout after 15 seconds, or a blocked request Try again; some sites block automated fetches
Daily limit reached (3 analyses). The per-visitor daily cap was used Wait until midnight UTC

The private address rule exists because the fetch happens from Toolz's server. Without it, anyone could point the tool at internal infrastructure, a class of attack known as server-side request forgery. The analyzer resolves the hostname before fetching and refuses loopback, private, link-local and carrier-grade NAT ranges. If a page redirects to a different host, that host is checked too.

Pages behind a login, a paywall or a country block are fetched with no session, so the analyzer sees and scores the login or block page instead.

How do you use the results to fix a page?

Work from failures to warnings, and treat the keywords list as a sanity check on topic.

  1. Open the on-page SEO checker, paste the URL and click Analyze. The sample option fills in a Toolz tool page if you want to see a result first.
  2. Fix any failure first: missing title, missing description, no h1, no internal links. These are usually quick edits.
  3. Look at warnings in context. A 65-character title may be fine; a short product page may not need 600 words.
  4. Read the Most frequent words box. It shows the ten most common words of four letters or more with common stopwords removed. If the topic you meant to write about is not in that list, the page is probably about something else, or the template text is drowning it out.
  5. Re-run after changes. Remember the three-a-day limit and batch your edits.

For the next layer beyond the basics, structured data helps search engines understand what kind of page it is. The schema markup guide covers that, and the schema markup generator builds the JSON-LD. Every SEO tool is listed on the SEO tools hub.

What does the Content Analyzer not do?

It is a structural check, and it helps to be clear about its edges.

It does not measure rankings, traffic, backlinks or competition. It does not check page speed, mobile layout or Core Web Vitals. It does not run JavaScript. It does not read canonical tags, robots directives or structured data. And it does not store anything: the URL is sent to the server, the page is fetched, measured and discarded, and only the analysis comes back. Unlike most Toolz tools it cannot work offline, because fetching a page needs a network.

A score of 100 means the page clears seven sensible floors. Whether it ranks depends on how well the content answers the query compared with everything else that answers it.

Comments

0 comments

0/2000 characters

No comments yet. Be the first to share your thoughts!