plugins/seo/skills/seo-content/SKILL.md
Use when analyzing content quality. Covers E-E-A-T scoring (Experience, Expertise, Authoritativeness, Trustworthiness), anti-cannibalization, keyword distribution, AI content disclosure, search intent matching.
npx skillsauth add fusengine/agents seo-contentInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Before content recommendations, run scripts/analyze-keywords.ts (local-first, no API key). Use it as first-pass evidence for keyword distribution, semantic breadth, local modifier placement, heading coverage, and stuffing risk.
bun run scripts/analyze-keywords.ts <url-or-path> --keyword "<primary keyword>" --synonyms "<syn1,syn2>" --locations "<city1,city2>" --format markdown
It returns density, n-grams, a 0-100 stuffing score, heading coverage, and per-location contextual mentions — purely local HTML parsing.
[city] + neighbouring municipalities/[region]) must appear naturally near service terms, never as a dumped city list.[service] + [city] + proof or context.[city] with [region] and district/neighbourhood names instead of repeating the same city token.Place terms by page zone, not by hitting a density target. Anti-stuffing 2026 is multi-signal, not a fixed percentage (Google's leaked KeywordStuffingScore runs 0-127; risk rises past ~3% density).
| Zone | Primary [service] | Local modifier [city]/[region] | Synonyms + entities | Secondary terms |
|------|---------------------|----------------------------------|---------------------|-----------------|
| Title / H1 | Yes (exact or strong variant) | Local page only | — | — |
| H2 / H3 | Sparingly (1-2) | Local page only, varied | Yes (distribute) | Yes |
| First 100 words / answer capsule | Yes (once) | Local page: once | Yes | — |
| Body | Natural flow | Local page: spread | Yes (bulk of coverage) | Yes |
| Anchors / alt / meta | Variant | Geo-specific on local | Yes | — |
Reference counts for a 1000-1500 word page:
[service]: 5-8 occurrences (~1-1.5% — the sweet spot, never above ~3%).[city]/[region]: 4-6 occurrences on a LOCAL page; 1-2 mentions on a GLOBAL page (zone signal, not stuffing). On the local page, rotate [city] with [region]/district rather than repeating one city.Do not use a fixed >3% density threshold as the stuffing rule. Flag keyword stuffing only when multiple signals align:
scripts/analyze-keywords.ts computes these signals into a 0-100 stuffing score.
For entity-based optimization (knowledge graph alignment, sameAs, entity salience, semantic depth), use the seo-entity skill. Anchor each page to a primary entity and its attributes rather than to a keyword string alone.
seo-entity — entity SEO, knowledge graph, semantic depthseo-featured-snippets — answer capsule / position 0 formatsskills/seo/06-content-strategy/ (eeat-implementation, anti-cannibalization, ai-content-guidelines, keyword-research, keyword-distribution)development
Use when optimizing entity-based / semantic SEO 2026. Covers entity maps, Google Knowledge Graph resolution, salience scoring, passage-level ranking, about/sameAs/knowsAbout schema, Cloud Natural Language API validation.
development
Use when running SEO, GEO, schema, Core Web Vitals, sitemap, hreflang, E-E-A-T, AI Overviews, technical SEO, or structured data tasks. Covers full-site audits, single-page analysis, schema markup, content quality, AI search optimization, local SEO, sitemap/robots, internal linking, semantic clustering, and search experience.
development
Use when optimizing search experience (SXO). Covers intent matching, user personas, user stories, page-type analysis, dwell time, scroll depth, pogo-sticking prevention.
development
Use when optimizing local SEO. Covers Google Business Profile, NAP consistency, citations, reviews acquisition, Local Pack ranking, location pages, LocalBusiness schema.