Wp seo pass
Run an SEO optimization pass on one page or the entire site — meta titles, descriptions, Open Graph tags, structured data, and image alt text. Use when the site is ready to launch, when the user asks to "improve SEO", "make the site searchable", "add meta descriptions", or after adding new pages. Also use when missing alt text is reported.From its SKILL.md
npx -y skills add AntonySilverhand/wp-agent-skills --skill wp-seo-passAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its file declares
Copied from the file, not written here
The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
4.0 KB, as published. Nobody here has run it
wp-seo-pass
SEO optimization for one page or all pages. Updates meta, Open Graph, structured data, alt text.
Arguments
TARGET— page title/ID, orallfor every published pageFOCUS_KEYWORD— (optional) primary keyword to optimize for
Subagent strategy
When TARGET is all, use subagents for speed:
- Launch one subagent per page to audit and generate meta in parallel
- Collect all results, then apply updates sequentially (REST API is stateful)
- For a 10-page site this cuts processing time from ~10 minutes to ~2 minutes
For single-page runs, no subagents needed.
Step 1 — Detect SEO plugin
wp plugin list --status=active --format=json | jq '[.[].name]'
- Yoast SEO active: update via
yoast_wpseo_titleandyoast_wpseo_metadescpost meta - RankMath active: update via
rank_math_titleandrank_math_descriptionpost meta - Neither: inject via
wp_headhook infunctions.php
Step 2 — Audit each target page
Fetch page content and check:
| Check | Target |
|---|---|
| Meta title | Under 60 chars, not the default site title |
| Meta description | 120–160 chars, includes focus keyword if set |
| H1 count | Exactly 1 |
| Images missing alt | 0 |
| Internal links | At least 1 outgoing |
Step 3 — Write meta
For each page:
- Title:
<Specific Page Topic> | <Site Owner Name>— under 60 chars - Description: 1–2 sentences. What the page contains + why someone would care. Under 160 chars. Include
FOCUS_KEYWORDnaturally if provided.
Don't use "Welcome to", "Home page of", or the site URL in titles.
Step 4 — Add Person schema (home + about pages only)
Inject JSON-LD structured data:
{
"@context": "https://schema.org",
"@type": "Person",
"name": "<full name>",
"url": "<WP_SITE_URL>",
"jobTitle": "<if known>",
"sameAs": ["<social URLs>"],
"description": "<one sentence bio>"
}
Add via wp_head hook or Yoast's schema override if available.
Step 5 — Fix missing alt text
For every image block with no alt text, generate alt text from:
- The
IMAGE:placeholder description (if it was set bywp-new-page) - The filename
- The surrounding page context
Update each image block via REST API (full content body required).
Step 6 — Open Graph tags
Ensure these exist on all pages (add to theme <head> if no plugin handles them):
<meta property="og:title" content="<meta title>" />
<meta property="og:description" content="<meta description>" />
<meta property="og:image" content="<featured image URL>" />
<meta property="og:type" content="website" />
<meta name="twitter:card" content="summary_large_image" />
Gotchas
- Yoast stores meta in
_yoast_wpseo_titleand_yoast_wpseo_metadescpost meta, not in standard fields. The REST API exposes these underyoast_head_jsonbut writing requires the Yoast REST extension or direct post meta update. - The REST API
titlefield updates the page H1, not the meta title. These are separate. Always update meta title through the SEO plugin's fields. - JSON-LD
sameAsrequires full URLs (https://...), not handles (@username). - Open Graph
og:imagemust be an absolute URL, not a relative path.
Output
Per-page table:
| Check | Before | After |
|---|---|---|
| Meta title | — | "Photography |
| Meta description | missing | 138 chars ✓ |
| Images with alt | 2/5 | 5/5 ✓ |
| H1 count | 0 | 1 ✓ |