seo-meta-onpage — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited seo-meta-onpage (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Head hygiene is cheap, deterministic, and the first thing every crawler reads. Reference: references/schema-tier1.md for the structured-data layer that sits alongside the head (owned by M5).
Working from the PageSnapshot (rendered_dom if present, else raw_html):
<title>; length 50-60 chars (warn outside the band, fail if missing or empty, fail if duplicated site-wide across distinct URLs). Not all caps; not pure keyword list.<meta name="viewport" content="width=device-width, initial-scale=1"> present (fail if missing — mobile rendering/indexing depends on it).<meta charset="utf-8"> present and in the first 1024 bytes of <head>.<html lang="…"> present and a valid BCP-47 tag.<meta name="robots">: flag an accidental noindex/nofollow on a page meant to rank. Full indexability/canonical logic (including the canonical tag) is owned by seo-indexability (M2) — here only note presence of <link rel="canonical">, do not adjudicate it.viewport, charset (utf-8), and <html lang> (inferred from Content-Language header or page text; leave a TODO if ambiguous). These are deterministic, additive, verifiable writes → diff for fix.<title> and meta description from <h1>, lead paragraph, and primary topic: length-bounded, keyword-aware but not stuffed, brand suffix only if the site uses one. Each is a draft requiring per-item accept (humans own messaging).noindex is never auto-written; surface it and let the user decide.lang — when content is too thin to derive a value, leave a clearly-marked TODO: placeholder for the user to fill.dom_assert: node ${CLAUDE_SKILL_DIR}/../../scripts/parse-html.mjs --url <u> (or --file <path>) — returns title (value/length/ok), meta_description (value/length/ok), robots_meta, canonical, and head_hygiene (viewport/charset/lang) so each head element's presence and length is asserted directly against the snapshot.needs_api, never a false pass.Findings conform to schema/finding.schema.json. Examples:
M7.title.missing — no <title> (fail, severity 3, fixable: proposed, axis search, confidence established).M7.title.length_out_of_band — title 78 chars, truncates in SERP (warn, severity 3, fixable: proposed, axis search, confidence directional).M7.viewport.missing — no responsive viewport (fail, severity 3, fixable: auto, axis search, confidence established).Each finding: evidence.observed quotes the head verbatim (e.g. the exact title string + its length); verification.reproduce is the runnable parse-html.mjs command above; expected_impact is banded + confidence-tagged (no naked %).
warn, not fail, and impact is directional at most.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.