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
- Rojios/everything-claude-codetheir own version, first seen Nov 8, 2026
- mazzeoia/MazyOStheir own version, first seen Nov 8, 2026
- ahmadvahidi/skill-atlastheir own version, first seen Nov 8, 2026
- GstMirabal/Token-Optimized-Agent-Pipelinetheir own version, first seen Nov 8, 2026
- alpit-patel/seo-aeo-geo-kittheir own version, first seen Nov 8, 2026
- Mahesh-Bishnoi/skillstheir own version, first seen Nov 8, 2026
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.
AgriciDanielSkillseo-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
timruebenachSkillseo-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
megastepSkillseo-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
timruebenachSkillseo-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
megastepSkillseo-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
renepfSkillorch-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
Other versions156 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 156
- AgriciDaniel/claude-seo★ 20ksame name
- midudev/preguntas-entrevista-react★ 7.8ksame name
- legions-developer/evilcharts★ 3.2ksame name
- gridaco/grida★ 2.7ksame name
- midudev/la-velada-web-oficial★ 1.9ksame name
- midudev/tailwind-animations★ 1.5ksame name
- Bhanunamikaze/Agentic-SEO-Skill★ 993same name
- legions-developer/invoicely★ 923same name
- Nexus-JPF/note-companion★ 874same name
- iannuttall/seo★ 610same name
146 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository13 other files it gives its agents.
- a11ySkill
- cohesionSkill
- couplingSkill
- designSkill
- driftSkill
- full-sweepSkill
- onboardSkill
- perfSkill
- privacySkill
- sessionSkill
- shipSkill
- thatsweirdSkill
- walkthroughSkill
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
- Distinctive: line 25
Only audit projects that are web-facing (have a URL users visit).
- Distinctive: line 31
If a project path doesn't exist (e.g., external SSD not mounted), skip it and note it as "skipped -- path not found".
- Distinctive: line 33
When the user adds new web projects, they should update this table.
- Distinctive: line 75
Before running checks, detect the stack:
- Distinctive: line 99
Only count checks that apply to the project.
- Very specific: line 113
When --live is passed, use WebFetch to check each project's live URL for:
- Distinctive: line 118
Structured data rendered: Check the fetched HTML for JSON-LD script tags
- Very specific: line 119
Response headers: Check for X-Robots-Tag header (should not be noindex unless intentional)
- Very specific: line 171
When --fix is passed, after reporting gaps, automatically fix what can be safely auto-generated:
- Very specific: line 174
Create robots.txt with sensible defaults (User-agent: * / Allow: / / Sitemap: [url]/sitemap.xml)
- Very specific: line 175
Add <html lang="en"> if missing
- Distinctive: line 176
Add viewport meta if missing
- Very specific: line 177
Add missing alt="" to decorative images (but flag content images for manual alt text)
- Very specific: line 178
Create a basic 404.html / 404.astro page
- Distinctive: line 191
Always show what was fixed and what still needs manual attention.
- Very specific: line 195
Read-only by default: Only modify files when --fix is explicitly passed.
- Distinctive: line 198
Don't penalize what doesn't apply: No blog = no blog schema check.
- Distinctive: line 201
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 …
- Very specific: line 207
After completing this skill, append a log entry to ~/.claude/skill-log.md under the Run Log table.
“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.
Files
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 toall --fixflag to automatically fix gaps (otherwise report-only)--liveflag 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.
| Alias | Path | Live URL | Stack | Deploy |
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)
| Check | Weight | How to verify |
robots.txt exists | 10 | Look 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 exists | 10 | Look for sitemap file, sitemap plugin/package (@astrojs/sitemap, next-sitemap), or a /sitemap.xml route. |
Unique <title> per page | 10 | Check templates/layouts/pages for <title> tags or metadata exports. Flag if a single hardcoded title is used everywhere. |
<meta name="description"> per page | 10 | Check templates/layouts/pages for description meta. Flag if missing or identical across pages. |
| Canonical URLs | 8 | For 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 meta | 5 | Look for <meta name="viewport"> in the base layout/HTML. |
Tier 2 -- Ranking Signals
| Check | Weight | How to verify |
Open Graph meta (og:title, og:description, og:image) | 7 | Check layouts and page templates for OG tags. |
Twitter Card meta (twitter:card, twitter:title, twitter:image) | 5 | Check for Twitter/X card meta tags. |
| Structured data (JSON-LD) | 7 | Search for application/ld+json script tags. Check schema type matches content (Article for blog, Product for shop, Organization for homepage). |
| Image alt text coverage | 6 | Search for <img tags and check what percentage have alt attributes. Flag any empty or missing alts. |
| Heading hierarchy | 5 | Check each page/template has exactly one <h1>. Check H2s and H3s follow logical order. |
| No render-blocking resources | 3 | Check for <script> tags in <head> without async or defer. Check for large CSS files without critical CSS extraction. |
| Image optimization | 4 | Check if images use modern formats (WebP, AVIF) or if an image optimization pipeline exists (Astro Image, next/image, sharp). |
Tier 3 -- Growth Multipliers
| Check | Weight | How to verify |
Blog schema (Article, datePublished, author) | 5 | If the project has blog content, check for Article structured data on blog pages. |
| RSS/Atom feed | 3 | Look for feed file, @astrojs/rss, or a feed route. |
| Internal linking | 2 | Spot-check that pages link to related content (not just nav). Especially blog posts linking to each other. |
| 404 page exists | 3 | Look for 404.html, 404.astro, not-found.tsx, or a catch-all error template. |
| Favicon and app icons | 2 | Check for favicon.ico, apple-touch-icon, and manifest.json/site.webmanifest. |
<html lang> attribute | 2 | Check the root <html> tag has a lang attribute. |
Stack-Specific Detection
Before running checks, detect the stack:
| Signal | Stack |
astro.config.* in root | Astro |
next.config.* in root | Next.js |
pyproject.toml or requirements.txt + templates dir | Python |
vite.config.* without framework plugin | Vite/vanilla |
index.html only, no build config | Static 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 insrc/ - Static: all
.htmlfiles 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:
| Score | Grade |
| 90-100 | A |
| 80-89 | B |
| 70-79 | C |
| 60-69 | D |
| 0-59 | F |
Live URL Verification (--live flag)
When --live is passed, use WebFetch to check each project's live URL for:
- robots.txt accessible: Fetch
{url}/robots.txt-- should return 200, not block important paths - sitemap.xml accessible: Fetch
{url}/sitemap.xml-- should return 200 with valid XML - Meta tags rendered: Fetch the homepage HTML, parse for title, description, OG tags, canonical
- Structured data rendered: Check the fetched HTML for JSON-LD script tags
- Response headers: Check for
X-Robots-Tagheader (should not benoindexunless 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.txtwith 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.astropage
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
--fixis 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 inpublic/, 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'>tosrc/layouts/BaseLayout.astroline 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 |
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
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.

