SEO Page Audit

Audit every page against this checklist and produce a per-page findings table plus a prioritized fix plan grouped into waves (quick metadata fixes first, content work later). Verify everything in the served HTML, not the source tree — what Google sees is the served document, and client-side frameworks routinely drop content from it.

Render through growth-report-format. Open it alongside this skill. The findings table below is this skill's Findings section; the format skill owns the frame, provenance, number formatting, and the Method block.

Tools this skill calls

Call these by their full names. Do not paraphrase a tool call, and do not answer from memory what a tool can tell you.

Need Tool Key arguments
Page structure (title, meta, canonical, schema, FAQ visibility, citations) mcp__google_search_mcp__audit_page urls (1–20), response_format: "json"
What queries a page actually surfaces for mcp__google_search_mcp__gsc_search_analytics site_url: "sc-domain:agentman.ai", dimensions: ["query"] or ["page"]
Whether Google has the page indexed mcp__google_search_mcp__gsc_url_inspect site_url, inspection_url

Default property for Agentman work: GSC sc-domain:agentman.ai, GA4 property 471838641. For any other site, resolve the target first — never assume.

Provenance rules — the reason this skill exists

  1. Every number in the output names the call it came from. "0.14% CTR (gsc_search_analytics, page dimension, 90d)" — not a bare figure.
  2. audit_page returns no performance data. It has no CTR, no impressions, no position. If you want those, call gsc_search_analytics. Never pair a structural finding with a performance number you did not fetch in this run.
  3. A failed or empty call is a finding, not a gap to fill. Report "the call returned no rows" and stop. Do not substitute a remembered or estimated number.
  4. Do not reference prior reports, baselines, or documents that are not in the current context. If a baseline is needed and absent, say so and create one.

These rules are here because the failure they prevent has already happened: a structural audit was reported correctly and then decorated with invented impression and CTR figures that were off by 6× against real GSC data.

Target resolution

  1. A named target (URL, property, site) in the request wins.
  2. Otherwise the default registered in this skill's data/ binds — example-* files are fictional documentation and never bind.
  3. Otherwise ask. Never guess a property.

Per-page checklist

Title and meta

Run audit_page first; it returns title, titleLength, metaDescription, and canonical directly.

  • <title> ≤ 60 characters, primary keyword front-loaded, brand suffix last (Primary Keyword | Brand). When truncating programmatic titles, trim on word boundaries, never mid-word.
  • Meta description 140–160 characters stating a concrete value proposition — specific numbers beat adjectives.
  • Canonical URL present and absolute.

On title length and CTR — do not overclaim. A title over 60 characters gets truncated in the SERP, which is worth fixing on its own terms. It is not established that shortening it will raise CTR. Checked against this property's own 90-day data, title length and CTR show no relationship: the best-performing page (5.13% CTR) and the worst (0.069%) sit at opposite ends of the length range. When CTR is the actual complaint, the cause is usually query intent mismatch — a page collecting broad informational impressions it cannot satisfy — which a rewrite does not fix. Route CTR questions to seo-title-rewrite, which baselines properly, and state the truncation fix as a truncation fix.

Social cards — check ALL of them

  • og:title, og:description, og:image (1200×630), og:url, og:site_name, og:type.
  • twitter:card, twitter:title, twitter:description, twitter:image.
  • Common failure: a title update lands in <title> and og:title but leaves twitter:title stale. Grep for every tag that carries the old text before declaring a rename done. (audit_page does not return the full og/twitter set — fetch the page for these.)

Structured data

audit_page returns schemaTypes and, when FAQPage schema exists, an faq block with schemaCount, visibleCount, and missingFromPage.

  • visibleCount below schemaCount is a real Google violation: FAQ content must be visible on the page. Report the specific missing questions.
  • A __INVALID_JSON__ entry in schemaTypes means a ld+json block failed to parse — search engines ignore it entirely.
  • Deeper structured-data work belongs to seo-schema-audit.

Headings and keywords

  • Exactly one H1. Optimize it for the terms with the highest real impressions (pull them with gsc_search_analytics, don't guess), not for what a competitor uses — competitors have different page portfolios absorbing different queries.
  • Secondary and conversational terms go in the subhead (H2/hero paragraph) where they don't dilute the H1.
  • Never put a capability in a heading that the product doesn't ship. Keyword volume is not permission to overclaim.

Content depth

  • Flag pages under ~300 words of body text; money pages should carry task-oriented sections that answer the literal questions buyers type ("How do I…", "What does X cost", "How long does Y take"). FAQ sections written as real typed queries do double duty as content and schema.
  • Every statistic needs a citable source. Cut unsourced stats rather than publish them; leave a code comment recording what was cut and why so it can be restored with a citation.
  • One number, one source of truth: prices, counts, and benchmarks must come from a single shared module or generated file, never hardcoded per page. Conflicting figures across pages destroy trust and must be reconciled to one source.

Internal linking

  • Every page that should rank must be reachable from the nav, footer, or a body link on a high-authority page — orphan pages don't rank and never become sitelinks.
  • Use consistent, descriptive anchor text for the same destination across the site.
  • New content hubs (directories, guides) need inbound links from money pages AND outbound links back to conversion pages.
  • audit_page returns outwardCitations (distinct external links). Outward citation is one of the few page attributes with published evidence behind it for AI-answer visibility (Aggarwal et al., KDD 2024). A money page with zero external citations is worth noting; the number is context, not a target to game.
  • Internal links are not in audit_page's output. Checking reachability requires the codebase or a crawl — say which you used, and do not assert an orphan page from tool data that cannot show it.

What audit_page cannot tell you

State these limits rather than working around them silently:

  • It reads server-rendered HTML only. Content injected by client-side JavaScript is invisible to it — which is usually the finding that matters, since a raw crawler sees the same nothing.
  • It does not resolve ancestor visibility, so a question inside a hidden container can read as visible. A clean FAQ result means "nothing obviously wrong", not proof.
  • It returns no performance data whatsoever. See provenance rule 2.
  • It cannot see SERP composition — whether an AI Overview or a competitor is taking the clicks. When a page ranks well and earns nothing, say the explanation may be outside what these tools return.

Output format

Per page: URL, title (with char count), issues found (severity-ordered), and the specific fix — each traceable to the call that produced it. Then a summary table of cross-cutting issues and a wave plan: Wave 1 metadata fixes (hours), later waves content and structural work (days). Track completion with ✅ DONE markers directly in the plan document so status survives across sessions.

Worked example

Input: a healthcare product's 12 marketing pages, audited after one page's URL was renamed.

Findings included:

  • twitter:title on three pages still carried the old title — <title> and og:title had been updated but nobody grepped the Twitter tags.
  • The hub FAQ claimed "$35–50K per physician" in annual savings while the case-study page claimed "$107–149K" — two hand-typed figures for the same claim.
  • Two new money pages were under 300 words with no task-oriented content, and the newest page wasn't linked from the footer.

Fixes: grep the old title across every meta tag, not just <title>; reconcile the savings figure to one shared data module both pages import; add "How do I…" / "What does it cost" sections that double as FAQPage schema; add the footer link. Each fix landed in the wave-plan document with a ✅ DONE marker and its commit hash, so a later session could pick up exactly where the audit stood.

SEO Page Audit

By Agentman

Run a page-by-page on-page SEO audit of a marketing website: titles, meta tags, social cards, H1/keyword placement, word count, internal linking, and claim verification. Renders through growth-report-

Marketingv1.3.0
seoauditmeta-tagson-pageinternal-linkingtechnical-seo-auditmcp-bound

Ready to use this skill?

Attach it to your Agentman agents, or clone it and make it yours.

Free to use. Clone this and any other public skill with a free Agentman account — publishing your own is free up to 10 skills.

AgentSkills is more than a copy-paste library

  • Versioned, not pastedEdit a skill once and every agent using it follows the new version.
  • Shared with your teamOne library with per-skill access control and a record of who did what.
  • One connectionA single MCP link works across Claude, ChatGPT, Cursor and Agentman agents.
Explore AgentSkills →

Or try it in an assistant