# Blog content optimizer: on-page SEO checker

> For the complete documentation index, see [llms.txt](https://attensira.com/llms.txt).
> Every page on this site is also served as Markdown: append `.md` to any URL, or send `Accept: text/markdown`.

> Check a published blog post's title, meta description, headings, word count, links and image alt text, with a fix for each finding. Free, no sign-up.

- Canonical page: https://attensira.com/tools/blog-content-optimizer
- Source: converted from this page's own HTML. It carries no claim
  records, because the page is not a content-pipeline entity.

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.

Our run attensira.com

Input attensira.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

Show all 8 rows Show the first 4

Blog post checker, this site's fetch route, n=1 run · 4 Oct 2026

Or use the free tool below

## Check a post

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

Blog post URLCheck the post

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:

attensira.com/blog/zero-click-search

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

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

About this tool

- You give it: One published post URL
- It runs: Seconds, on our server
- It keeps: Nothing: no account, no saved history
- Cost: Free, no sign-up
- Our own run: attensira.com/blog/zero-click-search · 4 Oct 2026 Details

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

Show all 8 checks Show the first 6

## 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](https://attensira.com/tools/answer-passage-extractor) finds the passages an assistant could lift whole. The [claims and sources checker](https://attensira.com/tools/claims-source-checker) finds the numbers that carry no source. The [crawler URL inspector](https://attensira.com/tools/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 it decides

- These checks decide: Whether a post is tidy
- They do not decide: Whether an assistant quotes it
- Our own post: Passes 7 of 8, 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](https://docs.attensira.com/agent/approval).

Software that does your AI-search visibility work, with you in control of every change.

## 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

What it will not claim

- Whether the post is any good: it can pass every check and say nothing worth repeating.
- How an assistant reads the post: these are classic on-page checks.
- Text rendered by JavaScript: it reads the HTML your server returns.
- Exact truncation: results pages cut titles by width, so length ranges are a guide.

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