Audit cuecards SEO health — check titles, descriptions, JSON-LD, robots.txt, and sitemap against content/seo/*.yml
Scanned 9/2/2026
Install to Claude Code
npx -y skills add opencue/cuecards --skill source-command-audit-seo --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Source Command Audit Seo?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/opencue-source-command-audit-seo)More formats (shields.io, HTML) on the badges page.
---
name: "source-command-audit-seo"
description: "Audit cuecards SEO health — check titles, descriptions, JSON-LD, robots.txt, and sitemap against content/seo/*.yml"
---
# source-command-audit-seo
Use this skill when the user asks to run the migrated source command `audit-seo`.
## Command Template
# /audit-seo — SEO Health Check for cuecards
Audit the cuecards repo for SEO completeness and correctness.
## What to check
### 1. JSON-LD structured data in README.md
- Verify `<script type="application/ld+json">` block is NOT inside an HTML comment
- Validate JSON parses cleanly: `python3 -c "import json; json.loads(open('README.md').read().split('application/ld+json\">')[1].split('</script>')[0])"`
- Check `@type`, `name`, `description`, `url`, `codeRepository`, `offers` are all present
### 2. web/public/robots.txt
- Exists: `test -f web/public/robots.txt`
- Contains `Sitemap:` directive pointing to sitemap.xml
- Does not disallow `/` globally
### 3. web/public/sitemap.xml
- Exists: `test -f web/public/sitemap.xml`
- Valid XML: `python3 -c "import xml.etree.ElementTree as ET; ET.parse('web/public/sitemap.xml')"`
- All `<loc>` URLs use HTTPS
### 4. web/public/llms.txt
- Exists and contains the product name and at least one `## ` section
### 5. content/seo/ completeness
- All 5 files present: `ls content/seo/ | wc -l` = 5
- `keywords.yml` has at least 3 clusters
- `page-titles.yml` covers home, getting_started, faq at minimum
- `meta-descriptions.yml` ≤ 155 chars per entry: check with
`python3 -c "import yaml; d=yaml.safe_load(open('content/seo/meta-descriptions.yml')); [print(k,len(v)) for k,v in d['pages'].items() if len(v)>155]"`
### 6. content/geo/ completeness
- All 5 files present: `ls content/geo/ | wc -l` = 5
- `entity-profile.json` validates: `python3 -m json.tool content/geo/entity-profile.json > /dev/null`
## Report format
Output a table:
| Check | Status | Notes |
|---|---|---|
| JSON-LD live in README | ✅/❌ | ... |
| robots.txt | ✅/❌ | ... |
| sitemap.xml | ✅/❌ | ... |
| llms.txt (web) | ✅/❌ | ... |
| content/seo/ (5 files) | ✅/❌ | ... |
| content/geo/ (5 files) | ✅/❌ | ... |
| meta-descriptions ≤155 | ✅/❌ | list any violations |
End with a prioritised fix list for any ❌ items.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!