agentleFS
SurfrrosaSurfrrosa/claude-skills/seo/SKILL.md

seo

Skill1 starsChanged 5 months agoMITView on GitHub

Audit SEO health across all web projects, score them, identify gaps, and optionally fix issues

156 other projects use a version of this.

Adopted by

Most recently taken up by

Used with

Projects with it also use seo-agentic, seo-maps and 10 more.

Other files people use alongside this one.

Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
  • AgriciDanielSkill

    seo-agentic

    Audit and fix agent readiness: the Lighthouse Agentic Browsing fraction, accessibility tree for agents, robots.txt and Content-Signal for AI agents, WAF treatment of agent traffic, llms.txt, Markdown delivery, ai-catalog.json, /.well-known discovery files, and WebMCP tools. Use when the user asks whether AI agents can use or browse the site, or about llms.txt or WebMCP. Exclude AI citability and brand signals (seo-geo) and commerce protocol depth (seo-ecommerce).

    Also in 5 projects that use this

  • timruebenachSkill

    seo-maps

    Maps intelligence for local SEO — geo-grid rank tracking, GBP profile auditing via API, review intelligence across Google/Tripadvisor/Trustpilot, cross-platform NAP verification (Google/Bing/Apple/OSM), competitor radius mapping, and LocalBusiness schema generation from API data. Three-tier capability: free (Overpass + Geoapify), DataForSEO (full intelligence), DataForSEO + Google (maximum coverage). Use when user says "maps", "geo-grid", "rank tracking", "GBP audit", "review velocity", "competitor radius", "maps analysis", "local rank tracking", "Share of Local Voice", or "SoLV".

    Also in 17 projects that use this

  • megastepSkill

    seo-images

    Image optimization analysis for SEO and performance. Checks alt text, file sizes, formats, responsive images, lazy loading, and CLS prevention. Use when user says "image optimization", "alt text", "image SEO", "image size", or "image audit".

    Also in 24 projects that use this

  • timruebenachSkill

    seo-image-gen

    AI image generation for SEO assets: OG/social preview images, blog hero images, schema images, product photography, infographics. Powered by Gemini via nanobanana-mcp. Requires banana extension installed. Use when user says \"generate image\", \"OG image\", \"social preview\", \"hero image\", \"blog image\", \"product photo\", \"infographic\", \"seo image\", \"create visual\", \"image-gen\", \"favicon\", \"schema image\", \"pinterest pin\", \"generate visual\", \"banner\", or \"thumbnail\".

    Also in 15 projects that use this

  • megastepSkill

    seo-sitemap

    Analyze existing XML sitemaps or generate new ones with industry templates. Validates format, URLs, and structure. Use when user says "sitemap", "generate sitemap", "sitemap issues", or "XML sitemap".

    Also in 26 projects that use this

  • renepfSkill

    orch-pipeline

    Shared orchestration engine for the orch-* skill family. Defines the gated Research-Plan-TDD-Review-Commit pipeline, the size classifier, the agent map, and the two human gates that the orch-* operation skills delegate to. Not usually invoked directly.

    Also in 4 projects that use this

  • +3 more from timruebenach
  • +1 more from megastep

The file

Show its rules and text

We split this skill into the rules it gives an agent

19 rules. 0 are common, 10 are distinctive, and 9 are very specific to this project.

  • 0

    Common

    Most of the 145 edited versions we read keep these.

  • 10

    Distinctive

    This author's own choices. Worth a look.

  • 9

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Only audit projects that are web-facing (have a URL users visit).

    line 25
  2. Distinctive:

    If a project path doesn't exist (e.g., external SSD not mounted), skip it and note it as "skipped -- path not found".

    line 31
  3. Distinctive:

    When the user adds new web projects, they should update this table.

    line 33
  4. Distinctive:

    Before running checks, detect the stack:

    line 75
  5. Distinctive:

    Only count checks that apply to the project.

    line 99
  6. Very specific:

    When --live is passed, use WebFetch to check each project's live URL for:

    line 113
  7. Distinctive:

    Structured data rendered: Check the fetched HTML for JSON-LD script tags

    line 118
  8. Very specific:

    Response headers: Check for X-Robots-Tag header (should not be noindex unless intentional)

    line 119
  9. Very specific:

    When --fix is passed, after reporting gaps, automatically fix what can be safely auto-generated:

    line 171
  10. Very specific:

    Create robots.txt with sensible defaults (User-agent: * / Allow: / / Sitemap: [url]/sitemap.xml)

    line 174
  11. Very specific:

    Add <html lang="en"> if missing

    line 175
  12. Distinctive:

    Add viewport meta if missing

    line 176
  13. Very specific:

    Add missing alt="" to decorative images (but flag content images for manual alt text)

    line 177
  14. Very specific:

    Create a basic 404.html / 404.astro page

    line 178
  15. Distinctive:

    Always show what was fixed and what still needs manual attention.

    line 191
  16. Very specific:

    Read-only by default: Only modify files when --fix is explicitly passed.

    line 195
  17. Distinctive:

    Don't penalize what doesn't apply: No blog = no blog schema check.

    line 198
  18. Distinctive:

    No false positives: If a sitemap is generated at build time by a plugin, that counts as having a sitemap even if the file doesn't exist in …

    line 201
  19. Very specific:

    After completing this skill, append a log entry to ~/.claude/skill-log.md under the Run Log table.

    line 207

“Common” is measured: kept by at least 6 in 10 of the 145 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

SEO Audit

Audit SEO health across web projects. Score each project, identify gaps, and provide actionable fix instructions. Can also verify live URLs to confirm what search engines actually see.

Arguments

The user may specify:

  • A project name, path, or all -- defaults to all
  • --fix flag to automatically fix gaps (otherwise report-only)
  • --live flag to also fetch live URLs and verify rendered output

Parse the argument string. Examples:

  • /seo -- audit all projects, report only
  • /seo myapp -- audit one project
  • /seo all --live -- audit all with live URL verification
  • /seo other-app --fix -- audit and fix gaps for myapp

Project Registry

Only audit projects that are web-facing (have a URL users visit). Skip CLI tools, mobile apps, and libraries.

AliasPathLive URLStackDeploy
myapp(add your projects here)(add your projects here)(add your projects here)(add your projects here)

If a project path doesn't exist (e.g., external SSD not mounted), skip it and note it as "skipped -- path not found".

When the user adds new web projects, they should update this table.

SEO Checks

Each check has a tier, weight, and applies to specific stacks. Run all applicable checks for each project.

Tier 1 -- Foundational (blocks indexing if missing)

CheckWeightHow to verify
robots.txt exists10Look for robots.txt or public/robots.txt. For Astro, also check src/pages/robots.txt.ts. For Python, check for a /robots.txt route.
sitemap.xml exists10Look for sitemap file, sitemap plugin/package (@astrojs/sitemap, next-sitemap), or a /sitemap.xml route.
Unique <title> per page10Check templates/layouts/pages for <title> tags or metadata exports. Flag if a single hardcoded title is used everywhere.
<meta name="description"> per page10Check templates/layouts/pages for description meta. Flag if missing or identical across pages.
Canonical URLs8For Next.js: check for alternates: { canonical: } in metadata exports of layout.tsx and page files. For Astro: look for <link rel="canonical"> in layouts. For Python/HTML: look for <link rel="canonical"> in base templates. Every indexable page needs a canonical. Missing canonicals cause "Duplicate without user-selected canonical" in Google Search Console. Also verify metadataBase is set (Next.js) so relative canonicals resolve correctly.
Mobile viewport meta5Look for <meta name="viewport"> in the base layout/HTML.

Tier 2 -- Ranking Signals

CheckWeightHow to verify
Open Graph meta (og:title, og:description, og:image)7Check layouts and page templates for OG tags.
Twitter Card meta (twitter:card, twitter:title, twitter:image)5Check for Twitter/X card meta tags.
Structured data (JSON-LD)7Search for application/ld+json script tags. Check schema type matches content (Article for blog, Product for shop, Organization for homepage).
Image alt text coverage6Search for <img tags and check what percentage have alt attributes. Flag any empty or missing alts.
Heading hierarchy5Check each page/template has exactly one <h1>. Check H2s and H3s follow logical order.
No render-blocking resources3Check for <script> tags in <head> without async or defer. Check for large CSS files without critical CSS extraction.
Image optimization4Check if images use modern formats (WebP, AVIF) or if an image optimization pipeline exists (Astro Image, next/image, sharp).

Tier 3 -- Growth Multipliers

CheckWeightHow to verify
Blog schema (Article, datePublished, author)5If the project has blog content, check for Article structured data on blog pages.
RSS/Atom feed3Look for feed file, @astrojs/rss, or a feed route.
Internal linking2Spot-check that pages link to related content (not just nav). Especially blog posts linking to each other.
404 page exists3Look for 404.html, 404.astro, not-found.tsx, or a catch-all error template.
Favicon and app icons2Check for favicon.ico, apple-touch-icon, and manifest.json/site.webmanifest.
<html lang> attribute2Check the root <html> tag has a lang attribute.

Stack-Specific Detection

Before running checks, detect the stack:

SignalStack
astro.config.* in rootAstro
next.config.* in rootNext.js
pyproject.toml or requirements.txt + templates dirPython
vite.config.* without framework pluginVite/vanilla
index.html only, no build configStatic HTML

Then look for SEO elements in the right places:

  • Astro: src/layouts/, src/pages/, astro.config.mjs (integrations), public/
  • Next.js: app/layout.tsx (metadata export), app/*/page.tsx, next.config.*, public/
  • Python (Flask/Jinja): src/templates/, src/**/templates/, route definitions, static/
  • Vite/vanilla: index.html, public/, any HTML files in src/
  • Static: all .html files in root and subdirectories

Scoring

Max score: 100 points (sum of all weights = ~107, normalize to 100).

Formula: score = (earned_points / applicable_points) * 100

Only count checks that apply to the project. A project with no blog shouldn't be penalized for missing Article schema.

Grade scale:

ScoreGrade
90-100A
80-89B
70-79C
60-69D
0-59F

Live URL Verification (--live flag)

When --live is passed, use WebFetch to check each project's live URL for:

  1. robots.txt accessible: Fetch {url}/robots.txt -- should return 200, not block important paths
  2. sitemap.xml accessible: Fetch {url}/sitemap.xml -- should return 200 with valid XML
  3. Meta tags rendered: Fetch the homepage HTML, parse for title, description, OG tags, canonical
  4. Structured data rendered: Check the fetched HTML for JSON-LD script tags
  5. Response headers: Check for X-Robots-Tag header (should not be noindex unless intentional)

Compare live results against source code findings. Flag discrepancies (e.g., meta tags in source but not rendered, SSR issues).

Output Format

Single Project Mode

## SEO Audit -- [project name]
**Score:** [score]/100 ([grade])
**Stack:** [detected stack]
**URL:** [live url]

### Passing checks
- [check name] -- [brief note]

### Gaps (fix these)
1. **[TIER 1]** [check name] -- [what's wrong] -- [how to fix for this stack]
2. **[TIER 2]** [check name] -- [what's wrong] -- [how to fix for this stack]
...

### Live verification (if --live)
- robots.txt: [pass/fail]
- sitemap.xml: [pass/fail]
- Meta tags: [pass/fail with details]
- Structured data: [pass/fail]

All Projects Mode

## SEO Audit -- [date]

| Project | Score | Grade | Gaps | Top Priority |
|---------|-------|-------|------|--------------|
| ...     | ...   | ...   | ...  | ...          |

[N] of [M] projects scanned. [X] skipped (path not found).

### [project with gaps] ([score]/100)
1. **[TIER 1]** [gap] -- [one-line fix]
2. ...

### [next project with gaps] ([score]/100)
1. ...

Sort the table by score ascending (worst first, needs most attention at top).

Fix Mode (--fix flag)

When --fix is passed, after reporting gaps, automatically fix what can be safely auto-generated:

Safe to auto-fix:

  • Create robots.txt with sensible defaults (User-agent: * / Allow: / / Sitemap: [url]/sitemap.xml)
  • Add <html lang="en"> if missing
  • Add viewport meta if missing
  • Add missing alt="" to decorative images (but flag content images for manual alt text)
  • Create a basic 404.html / 404.astro page

Requires confirmation before fixing:

  • Adding or modifying meta descriptions (content matters)
  • Adding structured data (must match actual content)
  • Adding OG/Twitter meta (needs correct image URLs)
  • Installing sitemap plugins (modifies dependencies)

Never auto-fix:

  • Internal linking strategy
  • Image optimization pipeline
  • RSS feed setup (needs content structure understanding)

Always show what was fixed and what still needs manual attention.

Important Rules

  • Read-only by default. Only modify files when --fix is explicitly passed.
  • Skip gracefully. External SSD projects may not be mounted. Note and move on.
  • Stack-aware fixes. A robots.txt fix for Astro goes in public/, for Next.js in public/, for Python it's a route or static file. Don't apply wrong-stack fixes.
  • Don't penalize what doesn't apply. No blog = no blog schema check. No shop = no Product schema check.
  • Tier 1 gaps are always the priority. Present them first, recommend fixing them first.
  • Be specific. "Add meta description" is useless. "Add <meta name='description'> to src/layouts/BaseLayout.astro line 12, after the title tag" is useful.
  • No false positives. If a sitemap is generated at build time by a plugin, that counts as having a sitemap even if the file doesn't exist in source.
  • Sort by score ascending in the all-projects table so the projects needing the most work are at the top.

Skill Run Logging

After completing this skill, append a log entry to ~/.claude/skill-log.md under the Run Log table. New entries at the top (most recent first).

Format: | YYYY-MM-DD | /skill-name | target (details) | one-line result |

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.