On Page SEO CheckerDocumentation

Documentation

The report for your AI coding assistant

One press of Copy for AI puts a task document on your clipboard. Paste it into Claude Code, Cursor or Copilot and the assistant already has the problems, the measured values and the stack they live in. It is the part of this panel that hands the findings to the tool that will do the fixing.

The AI report card at the bottom of Summary on a WordPress news page: the Copy for AI button, a line reading five findings and five observations to decide on, and the opening lines of the report with the URL, the timestamp, the engine version and the stack line.
The report is shown as well as copied. The disclosure opens it in place, so you can read what you are about to paste.

What is in it

PartWhy it is there
The analyzed address, the page title, a timestamp, the engine versionSo the assistant knows what it is looking at and can verify the same page again later.
The stack lineThe most valuable line in the document. A missing meta description is a metadata export in Next.js, a plugin field in WordPress and a head tag in static HTML.
Only the problems, in two classes, ordered by severity inside eachPassing checks bury the signal and cost the assistant tokens. One line says how many passed.
Per finding: the analyzer key, the observed value word for word, the rule, and where it livesTwo reports can be compared, and the assistant can rewrite a title without opening the page.
The render diff, per findingA canonical that JavaScript injects after load needs a different fix from one that sits in the source.
What could not be readOtherwise the assistant will fix an indexability problem that was never measured.
A closing line about scopeOne rendered page, not a crawl. Verify before applying anything across a whole repository.

Two classes of finding, and why the split exists

A person reading the panel sees a keyword density of 11.7%, thinks well, it is wordpress.org, and moves on in half a second. An assistant executes it. So a false positive that costs a human nothing costs this document a wrong commit. The findings are split by the kind of evidence behind them rather than by how serious they are, and severity still orders them inside each group.

ClassWhat it meansHow it is written
FactualThe document either has the thing or it does not, or it contradicts itself, and the fix is unambiguous: no meta description, no H1, two canonicals, an invalid hreflang code, a missing alt attribute, a robots directive that changes between source and DOM.With a task line and an acceptance criterion, ready to execute.
JudgmentA threshold, a heuristic or a style rule whose right answer depends on what the page is for, which the extension cannot see: keyword density, text to HTML ratio, word count, URL shape, DOM size, anchor quality.In a section of its own, with the observed value and the rule but no imperative task. A line beginning Consider takes its place, written so that doing nothing reads as a valid answer.

A line in the report's working rules carries the contract, and it is worth reading before you paste: do not change code for anything under the observations heading, ask first, quote the observed value, and take leave it as it is for an answer.

The test every check had to pass

Could a correct, well-built page legitimately trip this? If yes, it is a judgment call whatever the check is called. All 53 analyzer keys plus the five render diff rows carry one line of reasoning in a table, so a reviewer can disagree with one line without reading any code. A key nobody has classified defaults to judgment, because an unnecessary question is the cheaper mistake.

The stack line

The report answers what serves this page, and it prints only names it trusts. That is a harder question than the one the analyzer answers, which is whether a name appears in this HTML, and the two came apart on real pages. Wikipedia's article about SEO was reported as Blogger, because the article cites a blogspot.com address. A Next.js site was reported as WordPress, because one image still carried a /wp-content/uploads/ path left over from a migration.

So an unknown stack prints as unknown rather than as a guess, and when a content system and a framework are both detected the line carries a caveat. That combination is either a headless setup or a migration leftover, and the assistant has to establish which before it edits anything.

PageWhat the line says
A WordPress news siteWordPress 7.2 (CMS) · Gutenberg (page builder)
A Next.js App Router pageNext.js (framework)
example.comnot identified
A Next.js site with migrated mediaNext.js (framework) · WordPress (CMS), plus the caveat

It is always in English, and that is not a missing translation

The panel around the report stays trilingual: the card title, the button, the disclosure and the notes all arrive in your language. The document does not. Its reader is a coding assistant working in a codebase whose identifiers, HTML attributes and framework APIs are English, and SEO vocabulary is English too. A German report would have to put a German phrase next to rel=canonical, which helps nobody and invites the assistant to invent an attribute name that does not exist. The panel explains this in your own language under the block.

Size, and what happens at the ceiling

The ceiling is 20,000 characters, roughly 5,000 tokens. On real pages the document lands between 8,000 and 14,000, so the ceiling is a fuse rather than a routine cut. When it does blow, the observations come off the end first, because they carry no task and dropping one costs the assistant nothing it was going to act on. Then the lowest-severity findings go, and a line says how many went. The clipboard always gets exactly the document that is on screen.

Read it before you paste it

The document sits under a collapsed disclosure. Nobody should paste something into their own codebase's assistant without being able to read it first, and the panel claims the report carries the observed values word for word. You can check that claim in one click instead of taking our word for it.

The copy itself can be refused: the browser wants the panel document focused before it writes to the clipboard. When it refuses, the label on the button does not change, so nothing claims a copy that did not happen. Click inside the panel and press again.

What is left out on purpose

  • The score. It means nothing to an assistant, and raise the score is not a code change.
  • Every marketing sentence and every word of praise.
  • Anything uncertain stated as fact.
  • The speed numbers. One session on one device is not field data, and it is not something to tune a codebase against.
  • Instructions that would damage a page that was already fine. Four task lines were removed for exactly that reason, among them renaming a URL over an uppercase letter, which spends the ranking and every link anyone ever made.