Free tool
Blog content optimizer: on-page SEO checker
The blog content optimizer fetches a published post and checks the on-page fundamentals: title and meta description length, heading outline, word count, links and image alt text. These are classic on-page SEO checks, not a measure of how an AI assistant reads the page; the structure analyzer and passage extractor answer that. Free, no sign-up.
Inputattensira.com/blog/zero-click-search
- Title
- 58 characters
- ✓ Passes
- Meta description
- 132 characters
- ✓ Passes
- H1
- Exactly one
- ✓ Passes
- Heading outline
- H1 → H4: “Explore with AI”, a share widget
- — Fails
- Body
- 4,101 words
- ✓ Passes
- Links in the body
- 1 internal, 7 external
- ✓ Passes
- Images
- 3, all with alt text
- ✓ Passes
- Canonical
- Declared
- ✓ Passes
7 days free · card required
Check a post
Seconds, on our server · Free, no sign-upPaste a published post. It is fetched once and checked against the rules below. Free, no sign-up, nothing stored.
Or try the page we ran it on:
Your result appears here
- Title and meta description
- length, each
- H1 and heading outline
- skipped levels named
- Body
- word count
- Links and images
- internal, external, alt text
- Canonical
- declared or not
Inputattensira.com/blog/zero-click-search
- Title
- 58 characters
- ✓ Passes
- Meta description
- 132 characters
- ✓ Passes
- H1
- Exactly one
- ✓ Passes
- Heading outline
- H1 → H4: “Explore with AI”, a share widget
- — Fails
- Body
- 4,101 words
- ✓ Passes
- Links in the body
- 1 internal, 7 external
- ✓ Passes
- Images
- 3, all with alt text
- ✓ Passes
- Canonical
- Declared
- ✓ Passes
What does it check on a post?
Title and meta description
The length of each, against the range results pages tend to show in full.
Headings
Exactly one H1, and an outline that never skips a level.
Body, links, images and canonical
Body length, at least one internal link, alt text on every image, and a declared canonical URL.
What does it find on one of our own blog posts?
We ran it on our post attensira.com/blog/zero-click-search, a long post from before the rebuild.
One real error, and it is not in the writing: the share widget beside the post labels its buttons with H4 headings, so the outline jumps from the title straight to H4. The fix is one change in the post template, and it fixes every post.
Everything else passes, and the post still has a problem none of these checks can see: four of its six statistics carry a year and no source. The claims and sources checker found that on the same URL the same day. Tidy is not the same as trustworthy.
The run is the result panel at the top of this page. Read on 4 Oct 2026.
How does it read a post, and against which thresholds?
It fetches the published post once, reads the <head> and the body copy (the <main> element, or <article>, or the whole body when neither exists), and checks eight on-page fundamentals. Each finding names the rule and quotes the value it is about. There is no score: eight independent facts do not add up to a number out of a hundred without a weighting someone made up.
| Check | Threshold | Why it matters |
|---|---|---|
| Title tag | Threshold30–60 characters | Why it mattersLonger titles are usually cut off on a results page. The range is common guidance, not a published limit: results pages cut by pixel width. |
| Meta description | Threshold120–160 characters | Why it mattersThe snippet you would like shown. Search engines may rewrite it, and without one they write their own. |
| H1 | ThresholdExactly one | Why it mattersOne page, one stated subject. |
| Heading outline | ThresholdNo level skipped | Why it mattersAn H1 followed by an H3 tells a parser a section is missing. It is often a heading chosen for its size. |
| Body length | ThresholdAt least 300 words | Why it mattersBelow that, a post rarely has room to answer a question and show its working. |
| Internal links | ThresholdAt least one in the body | Why it mattersA post that links nowhere on your own site is a dead end for readers and for crawlers. |
| Image alt text | ThresholdAn alt attribute on every image | Why it mattersAn empty alt is fine for decoration. A missing one is an accessibility failure. |
| Canonical URL | ThresholdDeclared | Why it mattersTells search engines which copy of the post is the original. |
Is this an AI search check?
No, and the page says so on purpose. These are the classic on-page checks any search engine has rewarded for years. They decide whether a post is tidy. They do not decide whether an assistant trusts it, quotes it or names you in an answer.
Three other tools answer those questions on the same URL. The answer passage extractor finds the passages an assistant could lift whole. The claims and sources checker finds the numbers that carry no source. The crawler URL inspector shows whether the AI crawlers can fetch the post at all. Our own post in the example above passes seven of the eight checks here and still fails the claims check.
What would the crew do about that post?
Inside Attensira, a heading-level fix in a content file is safe hygiene: in Act mode it opens as a pull request on its own. This one is not in a content file. The share widget is source code, which the crew never edits in any mode, so it reaches you as a task for whoever owns the post template. What ships on its own, what waits, what is refused.
DoShare widget labels are headings on every postDo on your side · post template · every blog post
The share widget labels its buttons with H4 headings, so every post's outline jumps from the title to H4. Make the labels plain text in the post template; the words stay the same. Your choice: done or dismiss.
Web engineer · would hand you an inbox row like thisExample · the kind of change this finding calls for, not one that shippedHow do you fix what it finds?
- Title out of range. Lead with the words a reader would search, then cut. Put the brand last or drop it; a results page shows the site name separately.
- No meta description, or one out of range. Write one sentence that answers the post's question and one that says what else is inside. Do not repeat the title.
- No H1, or several. One H1 that states the subject. Logos and site names are not headings.
- A skipped heading level. Fix the level and style it with CSS. If every post on the site shows the same skip, the fix belongs in the template, once.
- Thin body. Add the answer, the example and the caveat, not more introduction. If the post has nothing more to say, merge it into the page that does.
- No internal links. Link the two or three pages a reader of this post would want next, with anchor text that says what they are.
- Images with no alt attribute. Describe what the image shows. Use
alt=""for decoration, so a screen reader skips it.
Questions people ask about this check
Why is there no SEO score?
Because a score needs a weighting, and any weighting of a missing alt attribute against a long title would be a number we invented. Each finding names its rule, so you can decide which ones matter for this post.
Does it check keywords or keyword density?
No. Keyword density is not a published ranking signal, and counting it pushes writers toward repetition that reads badly to people and to models. Write for the question the post answers instead.
Why is the word count lower than my editor shows?
Navigation, header, footer, scripts and styles are removed first, and when the post has a <main> or <article> element only that is counted. The number describes the post, not the template around it.
Will passing these checks get my post cited by AI?
Not on its own. These checks make a post tidy for search engines. Whether an assistant cites it depends on whether the crawler could fetch it, whether it answers a question people ask, and whether it is the best source on that question.
Do you store the posts I check?
No. The post is fetched and read inside the request, and the result goes back to your browser. There is no account, no email field and no saved history; the shareable link runs the same check again.
This checks the post. Attensira's crew refreshes it.
7 days free · card required