agentsclimarketplace

Seo meta onpage

Skill Hainrixz/claude-seo-ai/skills/seo-meta-onpage

Audit and generate the document head — title (50-60 chars), meta description (150-160 chars), viewport, charset, <html lang>, and robots-meta sanity — flagging missing/duplicate/over-long values and producing length-bounded, keyword-aware replacements. Module M7. Feeds the Search SEO score.From its SKILL.md

Install
npx -y skills add Hainrixz/claude-seo-ai --skill seo-meta-onpage

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • runs commandsInstructs the agent to run 1 command, including `node ${CLAUDE_SKILL_DIR}/../../scripts/parse-html.mjs --url <u>`.

SKILL.md

4.1 KB, 964 tokens by cl100k_base, as published. Nobody here has run it

seo-meta-onpage (M7)

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

Audits

Working from the PageSnapshot (rendered_dom if present, else raw_html):

  1. Title — exactly one <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.
  2. Meta description — present, 150-160 chars (warn outside, not fail — Google may rewrite it); not duplicated site-wide; describes the page, not boilerplate.
  3. Viewport<meta name="viewport" content="width=device-width, initial-scale=1"> present (fail if missing — mobile rendering/indexing depends on it).
  4. Charset<meta charset="utf-8"> present and in the first 1024 bytes of <head>.
  5. Language<html lang="…"> present and a valid BCP-47 tag.
  6. Robots meta — sanity-check <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.

Fixes

  • AUTO — add missing 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.
  • PROPOSED — generate/trim a <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).
  • ADVISORY — removing an intentional noindex is never auto-written; surface it and let the user decide.
  • Never fabricate a title, description, or lang — when content is too thin to derive a value, leave a clearly-marked TODO: placeholder for the user to fill.

Verification

  • Method 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.
  • Duplicate-title/description checks need the full crawl set; when only a single page is available the cross-URL assertion is reported needs_api, never a false pass.

Findings

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 %).

Honesty

  • The "meta keywords" tag is dead — Google ignores it; do not add or recommend it.
  • Title/description length bands are SERP-display heuristics (pixel-width truncation), not ranking factors — over-band values are warn, not fail, and impact is directional at most.
  • Google frequently rewrites the displayed title/description from on-page content; a perfect tag is not guaranteed to appear, so never promise a SERP snippet as a ranking gain.

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

Gives 0 of the 12 instructions most marketing audience skills give in 964 tokens

Counted across 690 of the 894 authors here whose files we hold, read 2026-08-07

  • Apply Poppins font to headingsin 41 of 690, across 6 files
  • Apply Lora font to body textin 41 of 690, across 6 files
  • Use Arial fallback for headingsin 39 of 690, across 4 files
  • Use Georgia fallback for body textin 39 of 690, across 4 files
  • Maintain text hierarchy and formattingin 39 of 690, across 4 files
  • Use accent colors for non-text shapesin 38 of 690, across 3 files
  • Use RGB values for precise color matchingin 38 of 690, across 3 files
  • Use brand colors for primary text and backgroundsin 36 of 690, across 1 file
  • Read product marketing context file before asking questions, starting, or auditingin 35 of 690, across 23 files
  • Use active voice instead of passive voicein 26 of 690, across 10 files
  • Implement or generate appropriate JSON-LD structured datain 24 of 690, across 17 files
  • Prioritize clarity over clevernessin 22 of 690, across 8 files

Said here and by no other author read

  • inject a viewport meta tag when absent
  • assert title length is between 50 and 60 characters
  • add missing utf-8 charset meta tag automatically
  • add missing html lang attribute automatically
  • generate draft title and meta description from h1 and lead paragraph
  • mark ambiguous language values with a TODO placeholder

Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.