Install
openclaw skills install solo-seo-auditSEO health check for any URL — analyzes meta tags, OG, JSON-LD, sitemap, robots.txt, SERP positions, and scores 0-100. Use when user says "check SEO", "audit this page", "SEO score", "check meta tags", or "SERP position". Do NOT use for generating landing content (use /landing-gen) or social media posts (use /content-gen).
openclaw skills install solo-seo-auditSEO health check for any URL or project landing page. Fetches the page, analyzes meta tags, OG, JSON-LD, sitemap, robots.txt, checks SERP positions for target keywords, and outputs a scored report.
web_search(query, engines, include_raw_content) — SERP position check, competitor analysisproject_info(name) — get project URL if auditing by project nameIf MCP tools are not available, use Claude WebSearch/WebFetch as fallback.
Parse target from $ARGUMENTS.
http): use directly.docs/prd.md.Fetch the page via WebFetch. Extract:
<title> tag (length check: 50-60 chars ideal)<meta name="description"> (length check: 150-160 chars ideal)og:title, og:description, og:image, og:url, og:typetwitter:card, twitter:title, twitter:image<script type="application/ld+json">)<link rel="canonical"> — canonical URL<html lang="..."> — language tag<link rel="alternate" hreflang="..."> — i18n tagsCheck infrastructure files:
{origin}/sitemap.xml — exists? Valid XML? Page count?{origin}/robots.txt — exists? Disallow rules? Sitemap reference?{origin}/favicon.ico — exists?Forced reasoning — assess before scoring: Write out before proceeding:
SERP position check — for 3-5 keywords:
web_search(query="{keyword}") or WebSearch.Score calculation (0-100):
| Check | Max Points | Criteria |
|---|---|---|
| Title tag | 10 | Exists, 50-60 chars, contains primary keyword |
| Meta description | 10 | Exists, 150-160 chars, compelling |
| OG tags | 10 | og:title, og:description, og:image all present |
| JSON-LD | 10 | Valid structured data present |
| Canonical | 5 | Present and correct |
| Sitemap | 10 | Exists, valid, referenced in robots.txt |
| Robots.txt | 5 | Exists, no overly broad Disallow |
| H1 structure | 5 | Exactly one H1, descriptive |
| HTTPS | 5 | Site uses HTTPS |
| Mobile meta | 5 | Viewport tag present |
| Language | 5 | lang attribute on <html> |
| Favicon | 5 | Exists |
| SERP presence | 15 | Found in top 10 for target keywords |
Write report to docs/seo-audit.md (in project context) or print to console:
# SEO Audit: {URL}
**Date:** {YYYY-MM-DD}
**Score:** {N}/100
## Summary
{2-3 sentence overview of SEO health}
## Checks
| Check | Status | Score | Details |
|-------|--------|-------|---------|
| Title | pass/fail | X/10 | "{actual title}" (N chars) |
| ... | ... | ... | ... |
## SERP Positions
| Keyword | Position | Top Competitors |
|---------|----------|----------------|
| {kw} | #N or N/A | competitor1, competitor2, competitor3 |
## Critical Issues
- {issue with fix recommendation}
## Recommendations (Top 3)
1. {highest impact fix}
2. {second priority}
3. {third priority}
Output summary — print score and top 3 recommendations.
Cause: URL is behind authentication, CORS, or returns non-HTML. Fix: Ensure the URL is publicly accessible. For SPAs, check if content is server-rendered.
Cause: Site is new or not indexed by search engines. Fix: This is expected for new sites. Submit sitemap to Google Search Console and re-audit in 2-4 weeks.
Cause: Missing infrastructure files (sitemap.xml, robots.txt, JSON-LD). Fix: These are the highest-impact fixes. Generate sitemap, add robots.txt with sitemap reference, and add JSON-LD structured data.