Seo Audit
/install seo-geo-gate
You audit a website's technical SEO and GEO (Generative Engine Optimization — being found, cited, and recommended by AI assistants), report concrete problems ranked by impact, and apply fixes. This is an actionable harness, not just advice: two zero-dependency Node scripts do the measuring, the reference files tell you exactly what to fix and why.
The rules here are distilled from a production site whose build fails if any gate is violated — that discipline is why it scores high. Treat the gates as hard constraints, not suggestions.
When to use
- "Check/improve my site's SEO", "raise my PageSpeed/Lighthouse SEO score", "review before launch"
- "Make my site visible to AI / ChatGPT / Claude / Perplexity", "add llms.txt", "fix robots for AI crawlers"
- "Add structured data / JSON-LD / schema", "set up sitemap / canonical / Open Graph"
What you have
scripts/audit-seo.mjs— on-disk auditor. Runs the 12 hard-gate checks over a directory of built HTML + its local CSS/JS/images. Framework-agnostic. Node ≥18, no install.scripts/audit-live.mjs— live-URL auditor. Checks the things only visible on a deployed origin: robots.txt policy (incl. per-AI-bot allow/deny), sitemap.xml, llms.txt, homepage JSON-LD (@graph-aware), canonical, HSTS / Vary / Cache-Control.references/hard-gates.md— the 12 gates: exact thresholds, the general rule, and the Astro+Cloudflare reference implementation.references/structured-data.md— copy-paste JSON-LD recipes (Organization, WebSite, Breadcrumb, Article, Product, FAQ) using the nested@graphpattern.references/geo-ai-visibility.md— the GEO layer: robots AI-crawler allowlist (exact user-agents),llms.txtformat, AI-oriented schema, IndexNow.
Workflow
1. Locate the build output (don't audit source — audit the shipped HTML)
SEO lives in the rendered HTML. Find the build dir: Astro dist/, Next out/ (or .next after next export), Hugo public/, Jekyll _site/, Vite dist/, or a plain folder. If it doesn't exist yet, run the project's build first. Confirm with the user if ambiguous.
2. Run the on-disk audit
node scripts/audit-seo.mjs --dir \x3Cbuild-dir>
# options: --strict (warns→errors, CI mode) · --json · --max-page-kb 500 · --max-img-kb 500
Read the output: ✗ = ERROR (genuinely hurts ranking / breaks crawlers / Core Web Vitals — fix these first), ⚠ = WARN (best-practice miss). The heuristic score is a rough dial, not a Lighthouse number.
3. Run the live audit (if deployed)
node scripts/audit-live.mjs https://www.example.com
This is where GEO shows up: which AI crawlers are allowed/blocked, whether llms.txt exists, what JSON-LD @types the homepage actually ships.
4. Report and fix
- Group findings by severity; fix ERRORs first, then high-value WARNs.
- For each fix, open
references/for the exact target value and the reference implementation, then edit the source (templates/layout/config) — not the built HTML (it's regenerated). - Re-run the audit to confirm green. For CI, wire
audit-seo.mjs --strictinto the build so regressions fail the pipeline.
The 12 hard gates (cheat-sheet — full detail in references/hard-gates.md)
- Exactly one
\x3Ch1>per page. - Viewport meta
width=device-width, initial-scale=1. - Semantic landmarks —
\x3Cmain>+\x3Cnav>+\x3Cfooter>present. \x3Ctitle>present (≈10–60 chars) + meta description present (≈50–160 chars). Length is a soft warn — longer is a valid deliberate GEO choice.- Canonical — absolute-URL
\x3Clink rel="canonical">, host matches the deploy origin (build-time, never runtime). - Open Graph —
og:title+og:image. - Images — every
\x3Cimg>haswidth+height+alt; non-heroloading="lazy"; herofetchpriority="high"; each file ≤500 KB (WebP/AVIF). - No inline executable
\x3Cscript>(allow onlyapplication/ld+json/json/importmap) and noon*=handlers → strict CSPscript-src 'self'. - No external resource refs (fonts/img/css/js) — self-host for CSP + speed.
- Page weight — HTML + same-page CSS + JS ≤500 KB (images budgeted separately).
- Structured data — JSON-LD present; site-wide Organization + WebSite.
- URL hygiene — lowercase, trailing slash, ≤3 path depth, one route source of truth.
GEO layer (references/geo-ai-visibility.md): robots.txt explicitly allows the major AI crawlers, ship llms.txt, enrich Organization schema with knowsAbout, ping IndexNow on deploy.
Notes
- 404/50x pages are exempt from canonical/description/OG/JSON-LD (they're noindex by design) — the auditor already skips them.
- The auditor uses conservative regex extraction, not a full DOM — it's for audit signals. A clean run is strong evidence, not a formal guarantee.
- Don't relax a threshold to make the audit pass. Fix the page.
Purpose & Capability
seo-audit is an actionable SEO + GEO auditing harness. Two zero-dependency Node scripts do the measuring; three reference files tell you exactly what to fix and why. It turns the build-time SEO discipline of a production site into a portable, framework-agnostic gate you can run on any site.
| Capability | Description |
|---|---|
| On-disk hard-gate audit | audit-seo.mjs runs 12 hard gates (h1, viewport, landmarks, title/desc, canonical, OG, images, CSP-safe scripts, no external refs, page weight, JSON-LD, URL hygiene) over any built static dir |
| Live-URL GEO audit | audit-live.mjs checks robots.txt AI-crawler policy, sitemap.xml, llms.txt, homepage JSON-LD (@graph-aware), canonical, HSTS/Vary/Cache-Control |
| Fix references | references/ gives exact thresholds, copy-paste JSON-LD recipes, and the AI-crawler allowlist + llms.txt format |
| CI integration | audit-seo.mjs --strict turns warnings into errors so regressions fail the build |
Does NOT:
- Audit source files — it audits rendered/built HTML (run your build first)
- Modify your site — it reports; you (or the agent) apply fixes to source templates
- Replace Lighthouse — its score is a heuristic dial for audit signals, not an official number
- Send your URL or content anywhere except the live origin you explicitly pass to
audit-live.mjs
Instruction Scope
In scope (will handle):
- "Check / improve my site's SEO", "raise my Lighthouse/PageSpeed SEO score", "review before launch"
- "Make my site visible to AI / ChatGPT / Claude / Perplexity", "add llms.txt", "fix robots for AI crawlers"
- "Add structured data / JSON-LD / schema", "set up sitemap / canonical / Open Graph"
- Running either auditor and reporting findings ranked by severity, then applying fixes via
references/
Out of scope (won't handle):
- Off-page SEO, backlinks, keyword-ranking tracking, or paid-search work
- Content writing / copywriting beyond meta title & description guidance
- Auditing a directory that hasn't been built yet (build first, then point the auditor at the output)
Behavior on missing input:
audit-seo.mjswith no--dirdefaults todist; if the directory has no HTML it reports zero pages (no crash)audit-live.mjswith no URL prints usage and exits with code 2
Credentials
No credentials required. This skill uses no API keys, tokens, or accounts.
| Action | Credential | Network |
|---|---|---|
audit-seo.mjs --dir \x3Cdir> |
None | None — local filesystem read only |
audit-live.mjs \x3Curl> |
None | Outbound HTTPS to the URL you pass (and its robots.txt/sitemap/llms.txt) |
No hardcoded secrets exist anywhere in the scripts.
Persistence & Privilege
Writes: nothing by default. Both scripts print reports to stdout; --json still prints to stdout. Output is persisted only where you redirect it (e.g. > report.json).
Does NOT write:
- No files inside your project, the skill directory, or your home directory
- No shell-config or credential files
- No cron jobs or background processes
Privilege: runs as the current user, no sudo or elevated permission. Requires only Node ≥18 (global fetch).
Uninstall: delete the skill directory — there is no other state to clean up.
Install Mechanism
Standard install (clawHub)
clawhub install seo-audit
Manual install
cp -r /path/to/seo-audit ~/.claude/skills/seo-audit/
Verify install
node scripts/audit-seo.mjs --help 2>/dev/null || node scripts/audit-seo.mjs --dir . --json | head
node scripts/audit-live.mjs # should print usage and exit 2
Both scripts are zero-dependency (Node ≥18). No npm install step is needed.
- 确保已安装 OpenClaw(本地或 Docker 部署)
- 在对话框中输入安装命令:
/install seo-geo-gate - 安装完成后,直接呼叫该 Skill 的名称或使用
/seo-geo-gate触发 - 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
Seo Audit 是什么?
Audit and optimize any website's SEO + GEO (AI/LLM visibility), then fix what's broken. Runs a portable, zero-dependency hard-gate audit over a build output... 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 31 次。
如何安装 Seo Audit?
在 OpenClaw 或 Claude Code 对话框中运行命令「/install seo-geo-gate」即可一键安装,无需额外配置。
Seo Audit 是免费的吗?
是的,Seo Audit 完全免费,采用 MIT-0 许可证,可自由下载、安装和使用。
Seo Audit 支持哪些平台?
Seo Audit 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。
谁开发了 Seo Audit?
由 Cosmos Fang(@cosmofang)开发并维护,当前版本 v1.0.0。