For the complete documentation index, see llms.txt. Every page on this site is also served as Markdown: append `.md` to any URL, or send `Accept: text/markdown`.
Skip to content
Attensira LogoAttensira

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.

Check a post

Seconds, on our server · Free, no sign-up

Paste 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

See our own run

Share
Our runattensira.com

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
Blog post checker, this site's fetch route, n=1 run ·

What does it check on a post?

  1. Title and meta description

    The length of each, against the range results pages tend to show in full.

  2. Headings

    Exactly one H1, and an outline that never skips a level.

  3. 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.

CheckThresholdWhy it matters
Title tagThreshold30–60 charactersWhy 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 descriptionThreshold120–160 charactersWhy it mattersThe snippet you would like shown. Search engines may rewrite it, and without one they write their own.
H1ThresholdExactly oneWhy it mattersOne page, one stated subject.
Heading outlineThresholdNo level skippedWhy it mattersAn H1 followed by an H3 tells a parser a section is missing. It is often a heading chosen for its size.
Body lengthThresholdAt least 300 wordsWhy it mattersBelow that, a post rarely has room to answer a question and show its working.
Internal linksThresholdAt least one in the bodyWhy it mattersA post that links nowhere on your own site is a dead end for readers and for crawlers.
Image alt textThresholdAn alt attribute on every imageWhy it mattersAn empty alt is fine for decoration. A missing one is an accessibility failure.
Canonical URLThresholdDeclaredWhy 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.

Inbox1 waiting for you
  • Web engineer agentDoShare widget labels are headings on every post

    Do 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 agentWeb engineer · would hand you an inbox row like thisExample · the kind of change this finding calls for, not one that shipped

How 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