plugin/skills/geo-writer/SKILL.md
Use this skill when writing or editing public-facing text intended to be cited or quoted by LLMs (ChatGPT, Claude, Perplexity, Gemini, Google AI Overviews) — blog posts, landing pages, help articles, FAQ blocks, programmatic SEO templates, pillar guides — to optimize that text for GEO/AEO (Generative Engine Optimization and Answer Engine Optimization).
npx skillsauth add avav25/ai-assets geo-writerInstall 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.
Makes public-facing text extractable and citable by LLM-based search engines. Classic SEO is losing ~25% of traffic to AI Overviews, ChatGPT, Perplexity, Gemini, and Claude — content must be structured for extraction, not just for reading.
Based on the GEO-SFE framework (arXiv 2603.29979) and 2026 practitioner sources. Full guide in geo-writing-guide.md. Pre-publish checklist in pre-publish-checklist.md.
Do NOT apply to: internal docs, ADRs, code comments, commit messages, AI asset files.
It, This, They referring to prior sections.marketing/MARKETING.md at project root (if exists) for canonical brand terms, product name, category label, metric names, audience. Use these verbatim.@humanizer — remove AI-sounding patterns. GEO and humanizer are complementary: GEO optimizes structure, humanizer optimizes voice.pre-publish-checklist.md. Every item must pass or be explicitly waived.## <Question phrased as H2>
<30-60 word direct answer, no preamble, entity named explicitly.>
<Optional 1-2 supporting paragraphs, 40-80 words each, with at least one number or named source.>
<Optional bullet list, table, or code block.>
Do: ## What is an AI-Readiness Score? → first sentence fully defines the term, names the product, lists the dimensions.
Do not: ## Understanding the Score → first sentence says When it comes to AI search, there are many things to consider....
Ranked by observed citation lift:
| Pattern | Why it works | When to use |
|---|---|---|
| Comparison tables | Clean extraction across rows/columns | Tools, pricing, competitors, features |
| FAQ + matching JSON-LD | 3.1-3.2× higher extraction vs prose | End of every pillar page |
| How-to numbered steps | Maps to HowTo schema | Tutorials, onboarding, fix-it posts |
| Definition + example pairs | Matches X is Y retrieval pattern | Glossary, concept explainers |
| Named stats with year | +22% AI visibility in 2026 is quotable | Intros, thought leadership |
| Direct quotes from named experts | Quotation patterns boost visibility ~37% | Trend posts, research summaries |
Comparison articles lead citation rates at ~32.5% across all formats.
sameAs on every article)potentialAction for sitelinks search| Content type | Required schema | Pre-built template | Notes |
|---|---|---|---|
| Article / blog | Article + Person (author) | assets/jsonld-templates/Article.json + Person.json | datePublished, dateModified, author.sameAs |
| Pillar / guide with Q&A | Article + FAQPage | assets/jsonld-templates/FAQPage.json | Questions must literally match prompt phrasing |
| Tutorial / walkthrough | HowTo | assets/jsonld-templates/HowTo.json | step array with 3-8 steps |
| Product / tool page | Product or SoftwareApplication | assets/jsonld-templates/Product.json or SoftwareApplication.json | aggregateRating if honest data exists |
| Glossary entry | DefinedTerm in DefinedTermSet | assets/jsonld-templates/DefinedTerm.json | |
| Site-level (homepage) | Organization + WebSite | assets/jsonld-templates/Organization.json + WebSite.json | WebSite.potentialAction enables sitelinks search box |
| Non-homepage URL | BreadcrumbList | assets/jsonld-templates/BreadcrumbList.json | One ListItem per crumb, position 1..N |
FAQPage is the single highest-leverage schema: 4-8 questions per page, 8-20 words each; answers 40-80 words, self-contained, matching the prompt phrasing; never duplicate marketing copy. Validate in Google Rich Results Test and schema.org/validator.
Pre-built JSON-LD templates with realistic example values live in assets/jsonld-templates/. Copy the file matching your content type, replace example values with project-specific data (canonical brand from marketing/MARKETING.md, real URLs, real datePublished/dateModified), and embed inside <script type="application/ld+json">. Each template has a valid @context + @type root and validates conceptually in Google Rich Results Test before any project data is added.
Available templates: Article.json, FAQPage.json, HowTo.json, Person.json, Organization.json, WebSite.json, BreadcrumbList.json, Product.json, SoftwareApplication.json, DefinedTerm.json.
Off-site brand mentions correlate with AI visibility at 0.67 — stronger than any on-site factor. Mentions beat backlinks 3:1 for AI Overviews.
Rules:
marketing/MARKETING.md. No variant spellings, no acronyms mid-article.GEO score in one paragraph and AI-readiness rating in the next confuses retrieval.If marketing/MARKETING.md is absent — ask the user for canonical brand form, category name, and metric names before writing.
Pages not refreshed quarterly lose AI citations at ~3× the normal rate.
| Content type | Refresh cadence | |---|---| | Time-sensitive (algo updates, model releases) | 24-48 hours | | FAQ on pillar pages | Monthly | | Evergreen guides | Quarterly | | Glossary | Quarterly | | Landing / commercial pages | Quarterly |
On every refresh: update dateModified in schema, add visible Updated on YYYY-MM-DD line under H1, replace at least one stat or example with a fresher one. Perplexity materially favors updates within the last 2-3 days.
| Engine | Dominant source | Optimization lever | |---|---|---| | ChatGPT | Wikipedia (~48%), training data | Semantic authority, long-lived authoritative pages, Wikipedia entity parity | | Perplexity | Reddit (~47%) + live web | Freshness (2-3 days), Reddit presence, clear dates | | Google AI Overviews | Organic top 10 (99%) | Classic SEO + schema; top-10 or not cited | | Gemini | YouTube + Knowledge Graph | Video content with chapters, Knowledge Panel | | Claude | Curated authoritative sources | Cite your own sources inline; neutral, evidence-based tone |
Off-site portfolio for pillar topics: 1 Reddit post/comment in a relevant subreddit, 1 YouTube video with descriptive chapters (YouTube overtook Reddit as the #1 LLM citation source in October 2025 — ~16% vs ~10%), 1 LinkedIn long-form post for B2B visibility.
In this post we will explore... openings.It, This, They referring to earlier entities.Experts say is invisible to RAG.Studies show +30% with no year or link.@humanizer before publishing.When producing GEO-optimized text, deliver:
pre-publish-checklist.md, report each itemgeo-content rule auto-activates this skill for public-facing content meant to be cited by AI engines@humanizer — GEO structures extraction, humanizer removes AI voice. Always run both./content-creation (Step 4 of blog pipeline; merged from former /blog-post), /marketing (content operations; absorbed former marketing-operations skill), /docs and /docs-pack (public-facing content), /seo-review (GEO audit alongside classic SEO)content-creation (structural gate), social-media-manager (LLM-quotable post framing)geo-writing-guide.md (full reference), pre-publish-checklist.md (PR checklist template)marketing/MARKETING.md at project root — canonical terms, audience, categorydevelopment
Use this skill when running the recurring (daily) knowledge-base rescan for a repo that already has knowledge/.knowledge-sync.yml — the main-thread dispatcher that reads the config, computes the git delta since last_scanned_sha, maps changed paths to affected doc areas, early-exits cheaply when nothing changed, then fans out one Agent(content-writer) per affected area, applies the propose/direct update policy, advances the baseline only on success, and writes an L4 run log — all with the G1 untrusted-content choke-point, secret-scan, deny-list, and budget controls woven in. For first-time setup use /knowledge-sync-init.
development
Use this skill when bootstrapping scheduled knowledge-base sync for a repo that has no knowledge/.knowledge-sync.yml yet — to run one-time setup that detects the knowledge_root from CLAUDE.md/AGENTS.md, maps doc areas to source globs, records opt-in external sources (Linear/Notion/WebFetch, all disabled by default), captures a baseline last_scanned_sha, sets the per-area update policy, generates or seeds knowledge/CONVENTIONS.md, provisions the L4 memory dir, and offers to register the daily routine. Routes ongoing recurring sync operations to /knowledge-sync.
tools
Use this skill when bootstrapping a target repository to be ai-skills-aware — on the first run of any ai-skills workflow in a fresh repo, when adopting the ai-skills plugin in an existing repo, or after upgrading to a plugin version that adds new memory paths or templates, including when the user does not say "init" but asks to "set up" or "onboard" the repo — to detect codebase type, create CLAUDE.md + AGENTS.md scaffolding, initialize the .ai-skills-memory/ directory tree from L1 templates, and configure .gitignore. Idempotent — safe to re-run. Accepts `--codebase-type <type>` and `--overwrite`. Not for re-initializing only memory — use `/memory-init` instead.
tools
Use this skill when extending, repairing, or improving plugin assets, when ingesting a `/feedback` report as a fix-cycle backlog, or when you do not remember which lower-level command is right for the job — the umbrella workflow for ai-skills plugin-asset authoring and maintenance: creating, auditing, fixing, improving, refactoring, and migrating skills, agents, rules, hooks, prompts, schemas, and rubrics inside the plugin. Auto-classifies the request, loads the right knowledge skills (`@prompt-engineering`, `@context-engineering`, `@team-protocols`), and spawns the right subagents (`prompt-engineer`, `system-architect`, `python-engineer`, `software-engineer`, `qa-engineer`, `eval-judge`) via the `Agent` tool.