audit_onpage
Audit on-page SEO for a project's latest crawl: titles, meta descriptions, h1s, canonicals, and thin content, per page. Run crawl_site first.
Cost: 30 credits.
audit_onpage reviews the on-page SEO of the pages captured by your project's most recent crawl_site run. It is synchronous: it returns the findings immediately. Run crawl_site first — if the project has never been crawled, the tool tells you so and charges nothing.
What it does
Runs a rule engine over every crawled page and reports, per page, issues such as:
- Titles — missing, very short (under ~10 characters), or duplicated across pages.
- Meta descriptions — missing, very short (under ~50 characters), or duplicated.
- Headings — a missing
h1, or more than oneh1. - Canonicals — missing, or pointing to a different URL than the page itself. The canonical is read from the HTML as served and never after JavaScript, which is also where Google asks you to declare it.
- Thin content — pages under ~200 words.
- Images with no alt text — how many of the images on the page have none.
- A title that merely repeats the h1 — the search snippet spent on words the visitor is about to read anyway. Only checked when the page has exactly one
h1. - No OpenGraph title or description — the page has no share preview at all. Both missing is one finding; declaring one and not the other is a style choice, not a gap.
- A missing
html langattribute. - A heading hierarchy gap —
h3s under anh1with noh2between them.
There is no maximum length for a title or a meta description, and this tool does not invent one. Google publishes no character limit for either: a title link is shortened to the width of the device when it is shortened at all, and a snippet is generated mostly from the page's own content, with the meta description used only sometimes. Earlier versions of this tool reported "title too long (over 60 characters)" as if 60 were a published rule. It is not, and that finding has been removed rather than re-tuned. The remaining length signals are the short ones, and they are claims about the page, not about Google.
Thresholds are conservative "worth a look" signals, not hard rules. A rule whose input an older crawl never recorded produces no finding for those pages rather than a false one — not-measured and not-present are kept apart.
Alongside the per-page findings it reports duplicate content: groups of pages that share one text fingerprint. That is a site-level finding, so it is deliberately not part of the per-page issue counts and cannot be inferred from them.
Example
Ask your MCP client in plain language:
Run an on-page audit for my example.com project.
Input
| Field | Type | Required | Description |
|---|---|---|---|
project_id | string (uuid) | Yes | The project to audit (from setup_project / list_projects). |
job_id | string (uuid) | No | Optional: the crawl_site job to audit (from list_jobs). Omit to audit the project's most recent crawl. |
Returns
A summary of issue counts, then the duplicate-content groups with their member URLs, then a per-page list of findings. Pages with no issues are counted but not listed. The per-page list is capped, and past the cap the reply says how many further pages had findings — a short list never reads as a short audit.
The reply opens by naming the crawl it judged — a short job id, the date it was taken, how many pages it covered and how many URLs it skipped. If you did not pass job_id, it also says so and tells you how to choose a different crawl. That line exists because the newest crawl is not always the widest one: a narrow re-crawl of one section becomes the newest, and an audit that silently judged it would charge full price for a fraction of your site.
If this tool has already audited this same crawl, the reply says so and when. The report is deterministic, so a second run over an unchanged crawl returns the same findings — the note is there so that is a choice rather than a surprise. The price is unchanged either way.
analyze_content_decay
Find decaying pages from your latest Search Console pull: pages whose clicks dropped meaningfully (absolute and proportional) vs the previous window…
audit_tech
Audit technical SEO for a project's latest crawl. Always reported: HTTP status, Redirects surfaced, Not crawled (skipped URLs grouped by reason), Robots…