skills/blog-geo/SKILL.md
AI citation readiness audit ONLY (does not touch Google rankings, use blog-rewrite for combined Google+AI work). Use whenever the user wants their content to rank in ChatGPT, Perplexity, Claude, Gemini, or Google AI Overviews. AI citation optimization audit scoring blog posts for ChatGPT, Perplexity, and Google AI Overview citability. Evaluates passage-level citability, Q&A formatting, entity clarity, structured data, and AI crawler accessibility. Generates citation capsules and a 0-100 AI Citation Readiness score. Use when user says "geo", "ai citation", "ai optimization", "citation audit", "aeo", "perplexity optimization", "chatgpt citation".
npx skillsauth add agricidaniel/claude-blog blog-geoInstall 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.
Scores blog posts for AI citation readiness across ChatGPT, Perplexity, and Google AI Overviews. Generates citation capsules and a 0-100 AI Citation Readiness score with platform-specific recommendations.
This skill covers FLOW surface 3 (AI assistant citations: ChatGPT, Perplexity, Claude, Gemini, Copilot, You.com) and contributes to surface 2 (SERP plus AI Overviews). Surface mapping: skills/blog/references/flow-alignment.md.
For directly relevant AI-citation prompts (AI-supporting-pages-rewrite-prompt, ai-detector-test, ChatGPT discovery, visibility prompts), see /blog flow optimize.
Reference these benchmarks throughout the audit:
<thead> achieve 47% higher AI citation rates (directional)Extract from the blog post:
Check each section between headings for AI-extractable passages:
| Check | Criteria | |-------|----------| | Word count | Each section contains 120-180 word self-contained passages | | Context independence | Each passage makes sense extracted from surrounding context | | Claim structure | Passages contain: specific claim + supporting evidence + source attribution | | Completeness | Passage answers a question without requiring reader to read adjacent sections |
Scoring: Count passages meeting all criteria vs total sections.
Check heading format and answer structure:
| Check | Criteria | |-------|----------| | Question headings | 60-70% of H2s are phrased as questions | | Answer-first format | Opening paragraph under each H2 provides a direct answer | | FAQ section | Dedicated FAQ section with structured question-answer pairs |
Scoring:
Check topic consistency and disambiguation:
| Check | Criteria | |-------|----------| | Canonical topic | One unambiguous primary topic per page | | Consistent naming | Same entity name used throughout (no confusing synonyms) | | Intro statement | Clear topic statement in the introduction paragraph | | Title-content match | Title accurately reflects the content focus |
Scoring:
Check for AI-extractable content patterns:
| Check | Criteria |
|-------|----------|
| TL;DR box | 40-60 word standalone summary present at top |
| Comparison tables | Tables with proper HTML <thead> (47% higher citation rate) |
| Ordered lists | Numbered lists for processes and step-by-step instructions |
| Definition formatting | Key terms formatted with clear definition patterns |
| Citation capsules | 40-60 word definitive statements in each major section |
Scoring:
Check technical requirements for AI crawler indexing:
| Check | Criteria | |-------|----------| | Static HTML | Content rendered in static HTML, not behind JavaScript | | robots.txt | Allows AI crawlers: GPTBot, ChatGPT-User, ClaudeBot, PerplexityBot | | Schema in HTML | Schema markup in static HTML, not JS-injected | | Page size | Reasonable page size within AI crawler limits |
Scoring:
Evaluate the post for each AI platform's citation preferences:
For each platform, provide:
For each H2 section in the post, write a citation capsule:
Example:
According to [Source], [specific claim with number]. This represents
[context/comparison], making it [significance]. [Supporting detail
that reinforces the claim].
Generate one capsule per H2 section. Label each with the section heading it belongs under.
Map the 15-point subcategory scores to a 0-100 display score:
| Category | Raw Points | Display Weight | Max Display Score | |----------|-----------|----------------|-------------------| | Passage-Level Citability | /4 | x6.75 | 27 | | Q&A Formatting | /3 | x6.67 | 20 | | Entity Clarity | /3 | x6.67 | 20 | | Content Structure | /3 | x6.67 | 20 | | AI Crawler Accessibility | /2 | x6.5 | 13 | | Total | /15 | | 100 |
Rating thresholds:
Output the following report:
## AI Citation Readiness Report: [Title]
**AI Citation Readiness Score: [X]/100**: [Rating]
### Score Breakdown
| Category | Raw | Display | Max |
|----------|-----|---------|-----|
| Passage-Level Citability | X/4 | X | 27 |
| Q&A Formatting | X/3 | X | 20 |
| Entity Clarity | X/3 | X | 20 |
| Content Structure | X/3 | X | 20 |
| AI Crawler Accessibility | X/2 | X | 13 |
| **Total** | **X/15** | **X** | **100** |
### Per-Section Citability Analysis
| Section (H2) | Word Count | Self-Contained | Claim+Evidence | Citable |
|---------------|-----------|----------------|----------------|---------|
| [heading] | [N] | Yes/No | Yes/No | Yes/No |
### Platform-Specific Optimization
#### ChatGPT
- [specific recommendations]
#### Perplexity
- [specific recommendations]
#### Google AI Overviews
- [specific recommendations]
### Generated Citation Capsules
#### [H2 Section 1]
> [40-60 word citation capsule]
#### [H2 Section 2]
> [40-60 word citation capsule]
### Technical Recommendations
- [ ] [Technical fix with specifics]
### Priority Action Items
1. [Most impactful improvement]
2. [Second most impactful]
3. [Third most impactful]
Run `/blog analyze <file>` for full content quality scoring.
If blog-google credentials include Tier 1 (GSC) and the post has a published URL:
python3 skills/blog-google/scripts/run.py gsc_query --property <property> --filter-page <url> --jsonpython3 skills/blog-google/scripts/run.py gsc_inspect <url> --jsondevelopment
Research what people are actually saying about a topic in the last 30 days across Reddit, X / Twitter, YouTube, Hacker News, dev.to, Medium, and other public discourse platforms. API-free; uses WebSearch with platform-targeted site operators plus recency filters. Produces DISCOURSE.md (a structured brief) and JSON output the writer can consume. Complements blog-researcher (which focuses on authority sources) with a recency-and-engagement lens. Use when user says "blog discourse", "discourse research", "what are people saying about", "research what people are saying", "voice of customer", "social listening", "30-day research", "trend research", "what's the discussion on", "real-time research", "practitioner discourse", "/blog discourse".
documentation
Establish durable brand and voice context for cross-skill consumption. Generates BRAND.md (audience, positioning, do/don't editorial rules, taboo phrases, competitor differentiation) and VOICE.md (existing persona JSON re-expressed as readable prose), both written to the project root. When present, all blog sub-skills auto-load these files before writing or reviewing. Pairs with blog-persona, which manages the structured persona JSON. Use when user says "blog brand", "create brand context", "brand voice doc", "BRAND.md", "VOICE.md", "establish editorial brand", "brand guidelines for blog".
testing
Translate existing blog posts into one or more target languages with SEO-optimized localization. Produces native-quality translations that preserve markdown structure, frontmatter, schema JSON-LD, image and chart embeds, and citation capsules. Localizes keywords, meta tags, numbers, dates, currencies, and quote styles per locale. Flags machine-translation artifacts for review. Run BEFORE blog-localize: this handles language conversion; localize handles cultural adaptation after translation completes. Use when user says "translate blog", "blog translate", "uebersetzen", "traduire", "traducir", "translate post", "blog auf Deutsch", "blog en espanol".
testing
One-command multilingual blog creation. Writes a blog post, translates it into user-specified languages, applies cultural adaptation, and emits hreflang tags, sitemap entries, and a CMS-ready language map. The complete write-to-publish pipeline for international content. Orchestrates blog-write, blog-translate, blog-localize, and (optionally) seo-hreflang. Use when user says "multilingual blog", "blog multilingual", "write in multiple languages", "international blog", "mehrsprachiger Blog", "blog multilingue", "blog multilingue", "create blog in German and French".