{"owner":"zubair-trabzada","repo":"geo-seo-claude","hasSkills":true,"totalSkillsCount":18,"totalTokensCount":57609,"categories":["claude-rule","project-spec","anthropic-skill"],"hasMcp":false,"mcpConfig":null,"found":["CLAUDE.md","docs/architecture.md","geo/SKILL.md","skills/geo-audit/SKILL.md","skills/geo-brand-mentions/SKILL.md","skills/geo-citability/SKILL.md","skills/geo-compare/SKILL.md","skills/geo-content/SKILL.md","skills/geo-crawlers/SKILL.md","skills/geo-llmstxt/SKILL.md","skills/geo-platform-optimizer/SKILL.md","skills/geo-proposal/SKILL.md","skills/geo-prospect/SKILL.md","skills/geo-report-pdf/SKILL.md","skills/geo-report/SKILL.md","skills/geo-schema/SKILL.md","skills/geo-technical/SKILL.md","skills/geo-update/SKILL.md"],"skills":{"CLAUDE.md":"# CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.\n\n## What this is\n\nA **GEO-SEO analysis toolkit** distributed as a suite of Claude Code skills + subagents + Python\nscripts. \"GEO\" = Generative Engine Optimization — optimizing websites for AI search engines\n(ChatGPT, Claude, Perplexity, Gemini, Google AI Overviews) rather than only traditional search.\nPhilosophy: **GEO-first, SEO-supported.**\n\nThis repo is the **source**. Users install it into `~/.claude/` (see [install](#install--uninstall)),\nthen invoke `/geo <command> <url>` inside Claude Code. Audits are run from the user's own working\ndirectory and deliverables land there — never in this repo.\n\nDeep documentation already lives in [`docs/`](docs/) — read it before large changes and keep it in\nsync (per `CONTRIBUTING.md`):\n\n| Topic | File |\n|-------|------|\n| Component architecture & data flow | `docs/architecture.md` |\n| Composite GEO Score weights & formulas | `docs/scoring-methodology.md` |\n| Skills / agents / scripts / schemas map | `docs/skills-and-agents.md` |\n| Every `/geo` subcommand | `docs/commands-reference.md` |\n\n## Repository layout\n\n| Path | Contents |\n|------|----------|\n| `geo/SKILL.md` | Orchestrator — routes `/geo` subcommands, detects business type, fans out and synthesizes the audit |\n| `skills/geo-*/` | 15 sub-skills (one `SKILL.md` each) — the reusable units and single-purpose subcommands |\n| `agents/geo-*.md` | 5 parallel subagents launched during a full audit |\n| `scripts/*.py` | Python analysis scripts (`fetch_page`, `citability_scorer`, `brand_scanner`, `llmstxt_generator`, `crm_dashboard`) |\n| `scripts/webapp/` | Flask + HTMX CRM web UI (`app.py`) |\n| `schema/*.json` | JSON-LD schema templates by business type |\n| `templates/` | `geo-report-style.css` + `geo-report-template.html` for the PDF report |\n| `docs/` | Long-form documentation (keep in sync with code) |\n| `examples/` | Sample audit outputs, proposals, demo CRM data |\n| `tests/` | Test suite (see [Testing](#testing)) |\n| `white-label/` | Agency rebranding config (`brand_config.py`, `brand.example.json`) |\n| `install.sh` / `install-win.sh` / `uninstall.sh` | Installers and uninstaller |\n\n## Architecture (in brief)\n\nThree layers — see `docs/architecture.md` for the full picture:\n\n1. **Orchestrator** (`geo/SKILL.md`) routes subcommands, detects business type\n   (SaaS / Local / E-commerce / Publisher / Agency / Other, which tailors recommendations), and\n   for a full `/geo audit` fans out to subagents then synthesizes a composite **GEO Score (0-100)**.\n2. **5 parallel subagents** (`agents/geo-*.md`) run simultaneously during an audit; each owns a\n   slice (AI visibility, platform analysis, technical, content, schema) and writes a report section.\n3. **15 sub-skills** (`skills/geo-*/`) are the reusable units the subagents invoke and the targets\n   of single-purpose subcommands (`citability`, `crawlers`, `llmstxt`, …), plus the agency layer\n   (`geo-prospect` CRM, `geo-proposal`, `geo-compare`, `geo-report-pdf`, `geo-update`).\n\n**Two kinds of state:** audit deliverables are written to the user's current working directory;\nagency/CRM data persists under `~/.geo-prospects/` (`prospects.json`, `audits/`, `proposals/`,\n`reports/`), which the Python scripts and the Flask webapp read/write directly.\n\n## Install / uninstall\n\n`install.sh` copies `geo/`, `skills/`, `agents/`, `scripts/`, `schema/`, and `templates/` into\n`~/.claude/`, creates a Python venv at `~/.claude/skills/geo/.venv` (using `uv` if available, else\nstdlib `venv` + `pip`), installs `requirements.txt`, and **rewrites the script shebangs to point at\nthat venv**. That is why installed scripts run under `~/.claude/skills/geo/.venv/bin/python3`\n(`.venv/Scripts/python.exe` when `install.sh` is run from Git Bash on Windows) while\nthe scripts in this repo carry a portable `#!/usr/bin/env python3`. `uninstall.sh` reverses it.\n\n## Running the scripts (from the repo)\n\nScripts print **JSON to stdout** so skills/agents can parse them — preserve that contract. Run them\nwith any Python that has `requirements.txt` installed (beautifulsoup4, requests, lxml, playwright,\nPillow, flask, rich, validators):\n\n```bash\npython3 -m venv .venv && . .venv/bin/activate && pip install -r requirements.txt\npython3 -m playwright install chromium   # fetch_page.py uses Playwright for SSR/JS checks\n\npython3 scripts/fetch_page.py <url>\npython3 scripts/citability_scorer.py <url>\npython3 scripts/brand_scanner.py \"<brand name>\"\npython3 scripts/llmstxt_generator.py <url>\npython3 scripts/crm_dashboard.py          # rich CLI over ~/.geo-prospects\npython3 scripts/webapp/app.py             # CRM web UI at http://localhost:5050\n```\n\n## Testing\n\nTests are pytest-style classes (`tests/test_fetch_page_ssr.py`, using `unittest.mock`, no network).\n`unittest discover` does not collect them, so run them with pytest (`pip install pytest`):\n\n```bash\npython3 -m pytest tests/                                        # all tests\npython3 -m pytest tests/test_fetch_page_ssr.py -k ssr_content   # a single test\n```\n\n## Conventions\n\n- **Docs stay in sync:** when changing code or behavior, update the matching file in `docs/`\n  (a `CONTRIBUTING.md` requirement). Match existing structure and tone.\n- **Commit messages:** imperative present tense, first line ≤ 72 chars, reference issues after.\n- **Scripts → JSON stdout.** Keep the machine-readable output contract.\n- Some code and docstrings are in Italian (e.g. `scripts/crm_dashboard.py`) — match the language of\n  the file you edit.\n- Crawl quality gates (from `geo/SKILL.md`): max 50 pages/audit, 30s fetch timeout, 1s delay between\n  requests, max 5 concurrent, always respect robots.txt.\n- Market-context stats and dates in `geo/SKILL.md` / `README.md` are editorial point-in-time content,\n  not code.\n- White-labeling for agencies is driven by `white-label/` — don't hardcode brand strings that belong\n  in `brand.example.json`.\n","docs/architecture.md":"# Architecture & Design\n\nThe repository is structured to seamlessly provide GEO+SEO support by using Claude's tool capabilities alongside agents and python utility scripts.\n\n```\ngeo-seo-claude/\n├── geo/                          # Main skill orchestrator\n│   └── SKILL.md                  # Primary skill file with commands & routing\n├── skills/                       # 13 specialized sub-skills\n│   ├── geo-audit/                # Full audit orchestration & scoring\n│   ├── geo-citability/           # AI citation readiness scoring\n│   ├── geo-crawlers/             # AI crawler access analysis\n│   ├── geo-llmstxt/              # llms.txt standard analysis & generation\n│   ├── geo-brand-mentions/       # Brand presence on AI-cited platforms\n│   ├── geo-platform-optimizer/   # Platform-specific AI search optimization\n│   ├── geo-schema/               # Structured data for AI discoverability\n│   ├── geo-technical/            # Technical SEO foundations\n│   ├── geo-content/              # Content quality & E-E-A-T\n│   ├── geo-report/               # Client-ready markdown report generation\n│   ├── geo-report-pdf/           # Professional PDF report with charts\n│   ├── geo-prospect/             # CRM-lite prospect pipeline management\n│   ├── geo-proposal/             # Auto-generate client proposals\n│   └── geo-compare/              # Monthly delta tracking & progress reports\n├── agents/                       # 5 parallel subagents\n│   ├── geo-ai-visibility.md      # GEO audit, citability, crawlers, brands\n│   ├── geo-platform-analysis.md  # Platform-specific optimization\n│   ├── geo-technical.md          # Technical SEO analysis\n│   ├── geo-content.md            # Content & E-E-A-T analysis\n│   └── geo-schema.md             # Schema markup analysis\n├── scripts/                      # Python utilities\n│   ├── fetch_page.py             # Page fetching & parsing\n│   ├── citability_scorer.py      # AI citability scoring engine\n│   ├── brand_scanner.py          # Brand mention detection\n│   ├── llmstxt_generator.py      # llms.txt validation & generation\n│   └── generate_pdf_report.py    # PDF report generator (ReportLab)\n├── schema/                       # JSON-LD templates\n│   ├── organization.json         # Organization schema (with sameAs)\n│   ├── local-business.json       # LocalBusiness schema\n│   ├── article-author.json       # Article + Person schema (E-E-A-T)\n│   ├── software-saas.json        # SoftwareApplication schema\n│   ├── product-ecommerce.json    # Product schema with offers\n│   └── website-searchaction.json # WebSite + SearchAction schema\n├── install.sh                    # One-command installer\n├── uninstall.sh                  # Uninstaller\n├── requirements.txt              # Python dependencies\n└── README.md                     # Main project view\n```\n\n### Full Audit Flow\n\nWhen you run `/geo audit https://example.com`:\n\n1. **Discovery** — Fetches homepage, detects business type, crawls sitemap\n2. **Parallel Analysis** — Launches 5 subagents simultaneously:\n   - AI Visibility (citability, crawlers, llms.txt, brand mentions)\n   - Platform Analysis (ChatGPT, Perplexity, Google AIO readiness)\n   - Technical SEO (Core Web Vitals, SSR, security, mobile)\n   - Content Quality (E-E-A-T, readability, freshness)\n   - Schema Markup (detection, validation, generation)\n3. **Synthesis** — Aggregates scores, generates composite GEO Score (0-100)\n4. **Report** — Outputs prioritized action plan with quick wins\n\n### Data Storage\n\nThe CRM and reporting skills (`/geo prospect`, `/geo proposal`, `/geo compare`) store runtime data outside the Claude Code directory:\n\n```\n~/.geo-prospects/\n├── prospects.json              # Client/prospect pipeline data\n├── proposals/                  # Generated proposal documents\n│   └── <domain>-proposal-<date>.md\n└── reports/                    # Monthly delta reports\n    └── <domain>-monthly-<YYYY-MM>.md\n```\n\nThis directory is **not removed** by the uninstaller — delete it manually if you no longer need your prospect data.\n","geo/SKILL.md":"---\nname: geo\ndescription: >\n  GEO-first SEO analysis tool. Optimizes websites for AI-powered search engines\n  (ChatGPT, Claude, Perplexity, Gemini, Google AI Overviews) while maintaining\n  traditional SEO foundations. Performs full GEO audits, citability scoring,\n  AI crawler analysis, llms.txt generation, brand mention scanning, platform-specific\n  optimization, schema markup, technical SEO, content quality (E-E-A-T), and\n  client-ready GEO report generation. Use when user says \"geo\", \"seo\", \"audit\",\n  \"AI search\", \"AI visibility\", \"optimize\", \"citability\", \"llms.txt\", \"schema\",\n  \"brand mentions\", \"GEO report\", or any URL for analysis.\nallowed-tools: Read, Grep, Glob, Bash, WebFetch, Write\n---\n\n# GEO-SEO Analysis Tool — Claude Code Skill (February 2026)\n\n> **Philosophy:** GEO-first, SEO-supported. AI search is eating traditional search.\n> This tool optimizes for where traffic is going, not where it was.\n\n---\n\n## Quick Reference\n\n| Command | What It Does |\n|---------|-------------|\n| `/geo audit <url>` | Full GEO + SEO audit with parallel subagents |\n| `/geo page <url>` | Deep single-page GEO analysis |\n| `/geo citability <url>` | Score content for AI citation readiness |\n| `/geo crawlers <url>` | Check AI crawler access (robots.txt analysis) |\n| `/geo llmstxt <url>` | Analyze or generate llms.txt file |\n| `/geo brands <url>` | Scan brand mentions across AI-cited platforms |\n| `/geo platforms <url>` | Platform-specific optimization (ChatGPT, Perplexity, Google AIO) |\n| `/geo schema <url>` | Detect, validate, and generate structured data |\n| `/geo technical <url>` | Traditional technical SEO audit |\n| `/geo content <url>` | Content quality and E-E-A-T assessment |\n| `/geo report <url>` | Generate client-ready GEO deliverable |\n| `/geo report-pdf <url>` | Generate professional PDF report with charts and scores |\n| `/geo quick <url>` | 60-second GEO visibility snapshot |\n| `/geo prospect <cmd>` | CRM-lite: manage prospects through the sales pipeline |\n| `/geo proposal <domain>` | Auto-generate client proposal from audit data |\n| `/geo compare <domain>` | Monthly delta report: show score improvements to client |\n| `/geo update` | Pull latest GEO skill updates from upstream |\n\n---\n\n## Market Context (Why GEO Matters)\n\n| Metric | Value | Source |\n|--------|-------|--------|\n| GEO services market (2025) | $850M-$886M | Yahoo Finance / Superlines |\n| Projected GEO market (2031) | $7.3B (34% CAGR) | Industry analysts |\n| AI-referred sessions growth | +527% (Jan-May 2025) | SparkToro |\n| AI traffic conversion vs organic | 4.4x higher | Industry data |\n| Google AI Overviews reach | 1.5B users/month, 200+ countries | Google |\n| ChatGPT weekly active users | 900M+ | OpenAI |\n| Perplexity monthly queries | 500M+ | Perplexity |\n| Gartner: search traffic drop by 2028 | -50% | Gartner |\n| Marketers investing in GEO | Only 23% | Industry surveys |\n| Brand mentions vs backlinks for AI | 3x stronger correlation | Ahrefs (Dec 2025) |\n\n---\n\n## Orchestration Logic\n\n### Full Audit (`/geo audit <url>`)\n\n**Phase 1: Discovery (Sequential)**\n1. Fetch homepage HTML (curl or WebFetch)\n2. Detect business type (SaaS, Local, E-commerce, Publisher, Agency, Other)\n3. Extract key pages from sitemap.xml or internal links (up to 50 pages)\n\n**Phase 2: Parallel Analysis (Delegate to Subagents)**\nLaunch these 5 subagents simultaneously:\n\n| Subagent | File | Responsibility |\n|----------|------|---------------|\n| geo-ai-visibility | `agents/geo-ai-visibility.md` | GEO audit, citability, AI crawlers, llms.txt, brand mentions |\n| geo-platform-analysis | `agents/geo-platform-analysis.md` | Platform-specific optimization (ChatGPT, Perplexity, Google AIO) |\n| geo-technical | `agents/geo-technical.md` | Technical SEO, Core Web Vitals, crawlability, indexability |\n| geo-content | `agents/geo-content.md` | Content quality, E-E-A-T, readability, AI content detection |\n| geo-schema | `agents/geo-schema.md` | Schema markup detection, validation, generation |\n\n**Phase 3: Synthesis (Sequential)**\n1. Collect all subagent reports\n2. Calculate composite GEO Score (0-100)\n3. Generate prioritized action plan\n4. Output client-ready report\n\n### Scoring Methodology\n\n| Category | Weight | Measured By |\n|----------|--------|-------------|\n| AI Citability & Visibility | 25% | Passage scoring, answer block quality, AI crawler access |\n| Brand Authority Signals | 20% | Mentions on Reddit, YouTube, Wikipedia, LinkedIn; entity presence |\n| Content Quality & E-E-A-T | 20% | Expertise signals, original data, author credentials |\n| Technical Foundations | 15% | SSR, Core Web Vitals, crawlability, mobile, security |\n| Structured Data | 10% | Schema completeness, JSON-LD validation, rich result eligibility |\n| Platform Optimization | 10% | Platform-specific readiness (Google AIO, ChatGPT, Perplexity) |\n\n---\n\n## Business Type Detection\n\nAnalyze homepage for patterns:\n\n| Type | Signals |\n|------|---------|\n| **SaaS** | Pricing page, \"Sign up\", \"Free trial\", \"/app\", \"/dashboard\", API docs |\n| **Local Service** | Phone number, address, \"Near me\", Google Maps embed, service area |\n| **E-commerce** | Product pages, cart, \"Add to cart\", price elements, product schema |\n| **Publisher** | Blog, articles, bylines, publication dates, article schema |\n| **Agency** | Portfolio, case studies, \"Our services\", client logos, testimonials |\n| **Other** | Default — apply general GEO best practices |\n\nAdjust recommendations based on detected type. Local businesses need LocalBusiness schema and Google Business Profile optimization. SaaS needs SoftwareApplication schema and comparison page strategy. E-commerce needs Product schema and review aggregation.\n\n---\n\n## Sub-Skills (14 Specialized Components)\n\n| # | Skill | Directory | Purpose |\n|---|-------|-----------|---------|\n| 1 | geo-audit | `skills/geo-audit/` | Full audit orchestration and scoring |\n| 2 | geo-citability | `skills/geo-citability/` | Passage-level AI citation readiness |\n| 3 | geo-crawlers | `skills/geo-crawlers/` | AI crawler access and robots.txt |\n| 4 | geo-llmstxt | `skills/geo-llmstxt/` | llms.txt standard analysis and generation |\n| 5 | geo-brand-mentions | `skills/geo-brand-mentions/` | Brand presence on AI-cited platforms |\n| 6 | geo-platform-optimizer | `skills/geo-platform-optimizer/` | Platform-specific AI search optimization |\n| 7 | geo-schema | `skills/geo-schema/` | Structured data for AI discoverability |\n| 8 | geo-technical | `skills/geo-technical/` | Technical SEO foundations |\n| 9 | geo-content | `skills/geo-content/` | Content quality and E-E-A-T |\n| 10 | geo-report | `skills/geo-report/` | Client-ready deliverable generation |\n| 11 | geo-prospect | `skills/geo-prospect/` | CRM-lite prospect and client pipeline management |\n| 12 | geo-proposal | `skills/geo-proposal/` | Auto-generate client proposals from audit data |\n| 13 | geo-compare | `skills/geo-compare/` | Monthly delta tracking and progress reports |\n| 14 | geo-update | `skills/geo-update/` | Pull latest updates from upstream repository |\n\n---\n\n## Subagents (5 Parallel Workers)\n\n| Agent | File | Skills Used |\n|-------|------|-------------|\n| geo-ai-visibility | `agents/geo-ai-visibility.md` | geo-citability, geo-crawlers, geo-llmstxt, geo-brand-mentions |\n| geo-platform-analysis | `agents/geo-platform-analysis.md` | geo-platform-optimizer |\n| geo-technical | `agents/geo-technical.md` | geo-technical |\n| geo-content | `agents/geo-content.md` | geo-content |\n| geo-schema | `agents/geo-schema.md` | geo-schema |\n\n---\n\n## Output Files\n\nAll commands generate structured output:\n\n| Command | Output File |\n|---------|------------|\n| `/geo audit` | `GEO-AUDIT-REPORT.md` |\n| `/geo page` | `GEO-PAGE-ANALYSIS.md` |\n| `/geo citability` | `GEO-CITABILITY-SCORE.md` |\n| `/geo crawlers` | `GEO-CRAWLER-ACCESS.md` |\n| `/geo llmstxt` | `llms.txt` (ready to deploy) |\n| `/geo brands` | `GEO-BRAND-MENTIONS.md` |\n| `/geo platforms` | `GEO-PLATFORM-OPTIMIZATION.md` |\n| `/geo schema` | `GEO-SCHEMA-REPORT.md` + generated JSON-LD |\n| `/geo technical` | `GEO-TECHNICAL-AUDIT.md` |\n| `/geo content` | `GEO-CONTENT-ANALYSIS.md` |\n| `/geo report` | `GEO-CLIENT-REPORT.md` (presentation-ready) |\n| `/geo report-pdf` | `GEO-REPORT.pdf` (professional PDF with charts) |\n| `/geo quick` | Inline summary (no file) |\n| `/geo prospect` | Updates `~/.geo-prospects/prospects.json` |\n| `/geo proposal` | `~/.geo-prospects/proposals/<domain>-proposal-<date>.md` |\n| `/geo compare` | `~/.geo-prospects/reports/<domain>-monthly-<YYYY-MM>.md` |\n\n---\n\n## PDF Report Generation\n\nThe `/geo report-pdf <url>` command converts `GEO-AUDIT-REPORT.md` into a styled, client-ready PDF.\n\n### Requirements\n- **pandoc** — `brew install pandoc`\n- **Google Chrome** — `/Applications/Google Chrome.app/` (standard Mac install)\n\nNo Python dependencies required for PDF generation.\n\n### What the PDF Includes\n- **Cover page** — dark navy gradient, GEO score badge, brand/domain/date/location metadata\n- **Color-coded score tables** — cells with `XX/100` values are automatically colored green/blue/amber/orange/red\n- **Severity-tagged findings** — Critical/High/Medium/Low sections get colored left-border callout blocks\n- **Section page breaks** — major sections break to new pages automatically\n- **Styled code blocks** — JSON schema templates render with dark monospace theme\n\n### Templates\nBundled at `~/.claude/skills/geo/templates/`:\n- `geo-report-style.css` — stylesheet (edit colors, fonts, layout here)\n- `geo-report-template.html` — pandoc HTML template (edit cover fields here)\n\n### Workflow\n1. Run `/geo audit <url>` to produce `GEO-AUDIT-REPORT.md`\n2. Run `/geo report-pdf` — extracts metadata from the report and runs:\n   ```bash\n   pandoc GEO-AUDIT-REPORT.md \\\n     --to html5 --standalone --embed-resources \\\n     --template ~/.claude/skills/geo/templates/geo-report-template.html \\\n     --css ~/.claude/skills/geo/templates/geo-report-style.css \\\n     --metadata brand_name=\"...\" --metadata geo_score=\"...\" \\\n     -o GEO-REPORT.html\n\n   \"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome\" \\\n     --headless=new --disable-gpu --no-sandbox \\\n     --print-to-pdf=\"$(pwd)/GEO-REPORT.pdf\" \\\n     --print-to-pdf-no-header --no-pdf-header-footer \\\n     --virtual-time-budget=5000 \\\n     \"file://$(pwd)/GEO-REPORT.html\"\n   ```\n3. Output: `GEO-REPORT.pdf` in the current directory\n\n---\n\n## Quality Gates\n\n- **Crawl limit:** Max 50 pages per audit (focus on quality over quantity)\n- **Timeout:** 30 seconds per page fetch\n- **Rate limiting:** 1-second delay between requests, max 5 concurrent\n- **Robots.txt:** Always respect, always check\n- **Duplicate detection:** Skip pages with >80% content similarity\n\n---\n\n## Quick Start Examples\n\n```\n# Full GEO audit of a website\n/geo audit https://example.com\n\n# Check if AI bots can see your site\n/geo crawlers https://example.com\n\n# Score a specific page for AI citability\n/geo citability https://example.com/blog/best-article\n\n# Generate an llms.txt file for your site\n/geo llmstxt https://example.com\n\n# Get a 60-second visibility snapshot\n/geo quick https://example.com\n\n# Generate a client-ready report\n/geo report https://example.com\n```\n","skills/geo-audit/SKILL.md":"---\nname: geo-audit\ndescription: Full website GEO+SEO audit with parallel subagent delegation. Orchestrates a comprehensive Generative Engine Optimization audit across AI citability, platform analysis, technical infrastructure, content quality, and schema markup. Produces a composite GEO Score (0-100) with prioritized action plan.\nallowed-tools:\n  - Read\n  - Grep\n  - Glob\n  - Bash\n  - WebFetch\n  - Write\n---\n\n# GEO Audit Orchestration Skill\n\n## Purpose\n\nThis skill performs a comprehensive Generative Engine Optimization (GEO) audit of any website. GEO is the practice of optimizing web content so that AI systems (ChatGPT, Claude, Perplexity, Gemini, etc.) can discover, understand, cite, and recommend it. This audit measures how well a site performs across all GEO dimensions and produces an actionable improvement plan.\n\n## Key Insight\n\nTraditional SEO optimizes for search engine rankings. GEO optimizes for AI citation and recommendation. Sites that score high on GEO metrics see 30-115% more visibility in AI-generated responses (Georgia Tech / Princeton / IIT Delhi 2024 study). The two disciplines overlap but have distinct requirements.\n\n---\n\n## Audit Workflow\n\n### Phase 1: Discovery and Reconnaissance\n\n**Step 1: Fetch Homepage and Detect Business Type**\n\n1. Use WebFetch to retrieve the homepage at the provided URL.\n2. Extract the following signals:\n   - Page title, meta description, H1 heading\n   - Navigation menu items (reveals site structure)\n   - Footer content (reveals business info, location, legal pages)\n   - Schema.org markup on homepage (Organization, LocalBusiness, etc.)\n   - Pricing page link (SaaS indicator)\n   - Product listing patterns (E-commerce indicator)\n   - Blog/resource section (Publisher indicator)\n   - Service pages (Agency indicator)\n   - Address/phone/Google Maps embed (Local business indicator)\n\n3. Classify the business type using these patterns:\n\n| Business Type | Detection Signals |\n|---|---|\n| **SaaS** | Pricing page, \"Sign up\" / \"Free trial\" CTAs, app.domain.com subdomain, feature comparison tables, integration pages |\n| **Local Business** | Physical address on homepage, Google Maps embed, \"Near me\" content, LocalBusiness schema, service area pages |\n| **E-commerce** | Product listings, shopping cart, product schema, category pages, price displays, \"Add to cart\" buttons |\n| **Publisher** | Blog-heavy navigation, article schema, author pages, date-based archives, RSS feeds, high content volume |\n| **Agency/Services** | Case studies, portfolio, \"Our Work\" section, team page, client logos, service descriptions |\n| **Hybrid** | Combination of above signals -- classify by dominant pattern |\n\n**Step 2: Crawl Sitemap and Internal Links**\n\n1. Attempt to fetch `/sitemap.xml` and `/sitemap_index.xml`.\n2. If sitemap exists, extract up to 50 unique page URLs prioritized by:\n   - Homepage (always include)\n   - Top-level navigation pages\n   - High-value pages (pricing, about, contact, key service/product pages)\n   - Blog posts (sample 5-10 most recent)\n   - Category/landing pages\n3. If no sitemap exists, crawl internal links from the homepage:\n   - Extract all `<a href>` links pointing to the same domain\n   - Follow up to 2 levels deep\n   - Prioritize pages linked from main navigation\n4. Respect `robots.txt` directives -- do not fetch disallowed paths.\n5. Enforce a maximum of 50 pages and a 30-second timeout per fetch.\n\n**Step 3: Collect Page-Level Data**\n\nFor each page in the crawl set, record:\n- URL, title, meta description, canonical URL\n- H1-H6 heading structure\n- Word count of main content\n- Schema.org types present\n- Internal/external link counts\n- Images with/without alt text\n- Open Graph and Twitter Card meta tags\n- Response status code\n- Whether the page has structured data\n\n---\n\n### Phase 2: Parallel Subagent Delegation\n\nDelegate analysis to 5 specialized subagents. Each subagent operates on the collected page data and produces a category score (0-100) plus findings.\n\n**Subagent 1: AI Visibility Analysis (geo-ai-visibility)**\n- Analyze content blocks for quotability by AI systems (citability scoring)\n- Check AI crawler access via robots.txt and llms.txt presence\n- Scan brand presence across YouTube, Reddit, Wikipedia, LinkedIn\n- Score brand authority signals that AI models use for entity recognition\n\n**Subagent 2: Platform Optimization (geo-platform-analysis)**\n- Assess readiness for Google AI Overviews, ChatGPT, Perplexity, Gemini, Bing Copilot\n- Check platform-specific ranking factors and optimization opportunities\n\n**Subagent 3: Technical GEO Infrastructure (geo-technical)**\n- Analyze robots.txt for AI crawler access\n- Verify meta tags, headers, and technical accessibility for AI systems\n- Check page speed, server-side rendering, and Core Web Vitals\n- Assess security headers and mobile optimization\n\n**Subagent 4: Content E-E-A-T Quality (geo-content)**\n- Evaluate Experience, Expertise, Authoritativeness, Trustworthiness signals\n- Check author bios, credentials, source citations\n- Assess content freshness, depth, and originality\n- Verify \"About\" page quality and team credentials\n\n**Subagent 5: Schema & Structured Data (geo-schema)**\n- Validate all schema.org markup\n- Check for GEO-critical schema types (FAQ, HowTo, Organization, Product, Article)\n- Assess schema completeness and accuracy\n- Identify missing schema opportunities\n\n---\n\n### Phase 3: Score Aggregation and Report Generation\n\n#### Composite GEO Score Calculation\n\nThe overall GEO Score (0-100) is a weighted average of six category scores:\n\n| Category | Weight | What It Measures |\n|---|---|---|\n| **AI Citability** | 25% | How quotable/extractable content is for AI systems |\n| **Brand Authority** | 20% | Third-party mentions, entity recognition signals |\n| **Content E-E-A-T** | 20% | Experience, Expertise, Authoritativeness, Trustworthiness |\n| **Technical GEO** | 15% | AI crawler access, llms.txt, rendering, speed |\n| **Schema & Structured Data** | 10% | Schema.org markup quality and completeness |\n| **Platform Optimization** | 10% | Presence on platforms AI models train on and cite |\n\n**Formula:**\n```\nGEO_Score = (Citability * 0.25) + (Brand * 0.20) + (EEAT * 0.20) + (Technical * 0.15) + (Schema * 0.10) + (Platform * 0.10)\n```\n\n#### Score Interpretation\n\n| Score Range | Rating | Interpretation |\n|---|---|---|\n| 90-100 | Excellent | Top-tier GEO optimization; site is highly likely to be cited by AI |\n| 75-89 | Good | Strong GEO foundation with room for improvement |\n| 60-74 | Fair | Moderate GEO presence; significant optimization opportunities exist |\n| 40-59 | Poor | Weak GEO signals; AI systems may struggle to cite or recommend |\n| 0-39 | Critical | Minimal GEO optimization; site is largely invisible to AI systems |\n\n---\n\n## Issue Severity Classification\n\nEvery issue found during the audit is classified by severity:\n\n### Critical (Fix Immediately)\n- All AI crawlers blocked in robots.txt\n- No indexable content (JavaScript-rendered only with no SSR)\n- Domain-level noindex directive\n- Site returns 5xx errors on key pages\n- Complete absence of any structured data\n- Brand not recognized as an entity by any AI system\n\n### High (Fix Within 1 Week)\n- Key AI crawlers (GPTBot, ClaudeBot, PerplexityBot) blocked\n- No llms.txt file present\n- Zero question-answering content blocks on key pages\n- Missing Organization or LocalBusiness schema\n- No author attribution on content pages\n- All content behind login/paywall with no preview\n\n### Medium (Fix Within 1 Month)\n- Partial AI crawler blocking (some allowed, some blocked)\n- llms.txt exists but is incomplete or malformed\n- Content blocks average under 50 citability score\n- Missing FAQ schema on pages with FAQ content\n- Thin author bios without credentials\n- No Wikipedia or Reddit brand presence\n\n### Low (Optimize When Possible)\n- Minor schema validation errors\n- Some images missing alt text\n- Content freshness issues on non-critical pages\n- Missing Open Graph tags\n- Suboptimal heading hierarchy on some pages\n- LinkedIn company page exists but is incomplete\n\n---\n\n## Output Format\n\nGenerate a file called `GEO-AUDIT-REPORT.md` with the following structure:\n\n```markdown\n# GEO Audit Report: [Site Name]\n\n**Audit Date:** [Date]\n**URL:** [URL]\n**Business Type:** [Detected Type]\n**Pages Analyzed:** [Count]\n\n---\n\n## Executive Summary\n\n**Overall GEO Score: [X]/100 ([Rating])**\n\n[2-3 sentence summary of the site's GEO health, biggest strengths, and most critical gaps.]\n\n### Score Breakdown\n\n| Category | Score | Weight | Weighted Score |\n|---|---|---|---|\n| AI Citability | [X]/100 | 25% | [X] |\n| Brand Authority | [X]/100 | 20% | [X] |\n| Content E-E-A-T | [X]/100 | 20% | [X] |\n| Technical GEO | [X]/100 | 15% | [X] |\n| Schema & Structured Data | [X]/100 | 10% | [X] |\n| Platform Optimization | [X]/100 | 10% | [X] |\n| **Overall GEO Score** | | | **[X]/100** |\n\n---\n\n## Critical Issues (Fix Immediately)\n\n[List each critical issue with specific page URLs and recommended fix]\n\n## High Priority Issues\n\n[List each high-priority issue with details]\n\n## Medium Priority Issues\n\n[List each medium-priority issue]\n\n## Low Priority Issues\n\n[List each low-priority issue]\n\n---\n\n## Category Deep Dives\n\n### AI Citability ([X]/100)\n[Detailed findings, examples of good/bad passages, rewrite suggestions]\n\n### Brand Authority ([X]/100)\n[Platform presence map, mention volume, sentiment]\n\n### Content E-E-A-T ([X]/100)\n[Author quality, source citations, freshness, depth]\n\n### Technical GEO ([X]/100)\n[Crawler access, llms.txt, rendering, headers]\n\n### Schema & Structured Data ([X]/100)\n[Schema types found, validation results, missing opportunities]\n\n### Platform Optimization ([X]/100)\n[Presence on YouTube, Reddit, Wikipedia, etc.]\n\n---\n\n## Quick Wins (Implement This Week)\n\n1. [Specific, actionable quick win with expected impact]\n2. [Another quick win]\n3. [Another quick win]\n4. [Another quick win]\n5. [Another quick win]\n\n## 30-Day Action Plan\n\n### Week 1: [Theme]\n- [ ] Action item 1\n- [ ] Action item 2\n\n### Week 2: [Theme]\n- [ ] Action item 1\n- [ ] Action item 2\n\n### Week 3: [Theme]\n- [ ] Action item 1\n- [ ] Action item 2\n\n### Week 4: [Theme]\n- [ ] Action item 1\n- [ ] Action item 2\n\n---\n\n## Appendix: Pages Analyzed\n\n| URL | Title | GEO Issues |\n|---|---|---|\n| [url] | [title] | [issue count] |\n```\n\n---\n\n## Quality Gates\n\n- **Page Limit:** Never crawl more than 50 pages per audit. Prioritize high-value pages.\n- **Timeout:** 30-second maximum per page fetch. Skip pages that exceed this.\n- **Robots.txt:** Always check and respect robots.txt before crawling. Note any AI-specific directives.\n- **Rate Limiting:** Wait at least 1 second between page fetches to avoid overloading the server.\n- **Error Handling:** Log failed fetches but continue the audit. Report fetch failures in the appendix.\n- **Content Type:** Only analyze HTML pages. Skip PDFs, images, and other binary content.\n- **Deduplication:** Canonicalize URLs before crawling. Skip duplicate content (e.g., HTTP vs HTTPS, www vs non-www, trailing slashes).\n\n---\n\n## Business-Type-Specific Audit Adjustments\n\n### SaaS Sites\n- Extra weight on: Feature comparison tables (high citability), integration pages, documentation quality\n- Check for: API documentation structure, changelog pages, knowledge base organization\n- Key schema: SoftwareApplication, FAQPage, HowTo\n\n### Local Businesses\n- Extra weight on: NAP consistency, Google Business Profile signals, local schema\n- Check for: Service area pages, location-specific content, review markup\n- Key schema: LocalBusiness, GeoCoordinates, OpeningHoursSpecification\n\n### E-commerce Sites\n- Extra weight on: Product descriptions (citability), comparison content, buying guides\n- Check for: Product schema completeness, review aggregation, FAQ sections on product pages\n- Key schema: Product, AggregateRating, Offer, BreadcrumbList\n\n### Publishers\n- Extra weight on: Article quality, author credentials, source citation practices\n- Check for: Article schema, author pages, publication date freshness, original research\n- Key schema: Article, NewsArticle, Person (author), ClaimReview\n\n### Agency/Services\n- Extra weight on: Case studies (citability), expertise demonstration, thought leadership\n- Check for: Portfolio schema, team credentials, industry-specific expertise signals\n- Key schema: Organization, Service, Person (team), Review\n","skills/geo-brand-mentions/SKILL.md":"---\nname: geo-brand-mentions\ndescription: Brand mention and authority scanner for AI visibility. Analyzes brand presence across platforms that AI models rely on for entity recognition and citation decisions. Produces a Brand Authority Score (0-100) with platform-specific recommendations.\nallowed-tools:\n  - Read\n  - Grep\n  - Glob\n  - Bash\n  - WebFetch\n  - Write\n---\n\n# Brand Mention Scanner Skill\n\n## Core Insight\n\nBrand mentions correlate approximately 3x more strongly with AI visibility than traditional backlinks. An Ahrefs study published in December 2025, analyzing 75,000 brands across AI search platforms, found that **unlinked brand mentions** -- references to a brand name without a hyperlink -- are a stronger predictor of whether AI systems cite and recommend a brand than Domain Rating or backlink count.\n\nThe critical finding: **the platform where the mention appears matters enormously.** Not all mentions are equal. A mention on YouTube or Reddit carries far more weight for AI citation than a mention on a low-authority blog, because AI training data and retrieval systems disproportionately index high-engagement platforms.\n\nThis inverts a core assumption of traditional SEO. In traditional SEO, a backlink from a high-DR site is the gold standard. In GEO, an unlinked mention on Reddit or a YouTube video description may be more valuable than a dofollow backlink from a DR 70 blog.\n\n---\n\n## Platform Importance Ranking for AI Citations\n\nBased on the Ahrefs December 2025 study and corroborating research from Profound (2025) and Terakeet (2025):\n\n### 1. YouTube Mentions -- Correlation ~0.737 (STRONGEST)\n\n**Why YouTube matters most:**\n- YouTube is the second-largest search engine and the largest video platform globally (2.5B+ monthly users).\n- AI training datasets heavily incorporate YouTube transcripts, descriptions, and metadata.\n- Google's Gemini and AI Overviews directly reference YouTube content.\n- Perplexity and ChatGPT both index and cite YouTube video content.\n- YouTube transcripts are particularly valuable because they contain natural language mentions in conversational context, which aligns with how AI models process and generate text.\n\n**What to check:**\n- **Brand YouTube channel:** Does the brand have an active YouTube channel? How many subscribers? Video count? Upload frequency?\n- **Third-party video mentions:** Are other YouTubers or channels mentioning the brand? In what context (reviews, tutorials, comparisons)?\n- **Video descriptions:** Does the brand name appear in video descriptions of industry-relevant content?\n- **Video transcripts:** Is the brand mentioned in spoken content of relevant videos? (AI models index transcripts)\n- **YouTube search presence:** When searching \"[brand name]\" on YouTube, do results appear? Are they positive?\n- **Comment mentions:** Is the brand mentioned in comments on relevant industry videos?\n\n**Scoring for YouTube (0-100):**\n\n| Score | Criteria |\n|---|---|\n| 90-100 | Active channel with 10K+ subscribers, regular uploads, brand mentioned in 20+ third-party videos, appears in YouTube search results for industry terms |\n| 70-89 | Active channel with 1K+ subscribers, brand mentioned in 10-19 third-party videos, some YouTube search presence |\n| 50-69 | Channel exists with some content, brand mentioned in 5-9 third-party videos, limited YouTube search presence |\n| 30-49 | Channel exists but inactive, brand mentioned in 1-4 third-party videos |\n| 10-29 | No channel or empty channel, brand mentioned in 1-2 videos only |\n| 0-9 | No YouTube presence whatsoever |\n\n---\n\n### 2. Reddit Mentions -- High Correlation\n\n**Why Reddit matters:**\n- Reddit is one of the most heavily indexed platforms in AI training data (confirmed in Google's $60M/year Reddit licensing deal, 2024).\n- AI systems heavily weight Reddit for product recommendations, comparisons, and user sentiment.\n- \"Reddit\" is now appended to an estimated 10-15% of Google searches by users seeking authentic opinions.\n- Perplexity frequently cites Reddit threads as sources.\n- ChatGPT and Claude both reference Reddit discussions when answering product/service questions.\n\n**What to check:**\n- **Subreddit presence:** Is the brand discussed in relevant subreddits? Which ones?\n- **Mention volume:** How many Reddit threads mention the brand? What is the trend (increasing/decreasing)?\n- **Sentiment:** Are mentions mostly positive, negative, or neutral? What are common praise points and complaints?\n- **Official presence:** Does the brand have an official Reddit account? Do they participate in discussions? Have they done AMAs?\n- **Recommendation threads:** Does the brand appear in \"What do you recommend for X?\" threads? Is it the top recommendation or an also-ran?\n- **Subreddit community:** Does the brand have its own subreddit? How active is it?\n\n**Scoring for Reddit (0-100):**\n\n| Score | Criteria |\n|---|---|\n| 90-100 | Frequently recommended in relevant subreddits, predominantly positive sentiment, active official presence, own subreddit with 5K+ members, appears in top recommendations for industry queries |\n| 70-89 | Regularly mentioned in relevant subreddits, mostly positive sentiment, some official presence, appears in multiple recommendation threads |\n| 50-69 | Mentioned in several relevant threads, mixed sentiment, brand name is recognized by community members |\n| 30-49 | Occasional mentions, limited to 1-2 subreddits, no official presence |\n| 10-29 | Rare mentions, brand largely unknown on Reddit |\n| 0-9 | No Reddit presence |\n\n---\n\n### 3. Wikipedia Presence -- High Correlation\n\n**Why Wikipedia matters:**\n- Wikipedia is one of the highest-authority sources in AI training data. All major AI models have been trained on Wikipedia dumps.\n- AI systems use Wikipedia as a primary source for entity recognition -- determining whether a brand is a \"real\" entity worth knowing about.\n- Wikidata (Wikipedia's structured data sibling) provides machine-readable facts that AI models use for knowledge graph construction.\n- Having a Wikipedia page is a strong signal of notability, which correlates with AI systems treating the brand as an authoritative entity.\n\n**What to check:**\n- **Wikipedia page:** Does the brand or company have its own Wikipedia article? Is it marked for deletion or quality issues?\n- **Founder page:** Does the founder/CEO have a Wikipedia page? (Strong authority signal)\n- **Wikipedia citations:** Is the brand's website cited as a reference in any Wikipedia articles?\n- **Wikidata entry:** Does the brand have a Wikidata item (Q-number)? How complete is it?\n- **Wikipedia mentions:** Is the brand mentioned in other Wikipedia articles (industry articles, competitor pages, category pages)?\n- **Article quality:** If a Wikipedia page exists, is it a stub, start-class, or higher quality?\n\n**Scoring for Wikipedia (0-100):**\n\n| Score | Criteria |\n|---|---|\n| 90-100 | Detailed Wikipedia article (B-class or higher), Wikidata entry with complete properties, brand cited as reference in multiple articles, founder has Wikipedia page |\n| 70-89 | Wikipedia article exists (start-class or higher), Wikidata entry exists, brand mentioned in 2+ other Wikipedia articles |\n| 50-69 | Wikipedia article exists (stub or start), basic Wikidata entry, limited mentions in other articles |\n| 30-49 | No Wikipedia article but brand is mentioned in other articles or cited as reference; Wikidata entry may exist |\n| 10-29 | Brand mentioned in 1-2 Wikipedia articles as a passing reference only |\n| 0-9 | No Wikipedia or Wikidata presence of any kind |\n\n---\n\n### 4. LinkedIn Presence -- Moderate Correlation\n\n**Why LinkedIn matters:**\n- LinkedIn content is increasingly indexed by AI systems for professional and B2B context.\n- Company LinkedIn pages and employee thought leadership posts build brand entity signals.\n- AI models reference LinkedIn for company information, team credentials, and professional authority.\n- LinkedIn articles and posts are indexed by search engines and AI crawlers.\n\n**What to check:**\n- **Company page:** Does the brand have a LinkedIn company page? Follower count? Post frequency?\n- **Employee thought leadership:** Are employees (especially leadership) posting thought leadership content that mentions the brand?\n- **Company mentions:** Is the brand mentioned in LinkedIn posts by non-employees? Industry analysts? Customers?\n- **LinkedIn articles:** Are there long-form LinkedIn articles about or mentioning the brand?\n- **Employee profiles:** Do employees list the company with detailed descriptions? Do they have strong professional profiles?\n- **Engagement metrics:** What is the typical engagement (likes, comments, shares) on company posts?\n\n**Scoring for LinkedIn (0-100):**\n\n| Score | Criteria |\n|---|---|\n| 90-100 | Active company page with 10K+ followers, leadership regularly posts thought leadership, brand frequently mentioned by industry professionals, strong employee profiles |\n| 70-89 | Active company page with 5K+ followers, some employee thought leadership, occasional third-party mentions |\n| 50-69 | Company page exists with 1K+ followers, irregular posting, limited third-party mentions |\n| 30-49 | Company page exists but is sparse or inactive, few followers, no third-party mentions |\n| 10-29 | Basic company page with minimal information |\n| 0-9 | No LinkedIn company page |\n\n---\n\n### 5. Other Platform Presence -- Supplementary\n\nThese platforms have lower but still meaningful correlation with AI visibility:\n\n#### Quora\n- **Relevance:** Quora answers are frequently included in AI training data and cited by Perplexity.\n- **What to check:** Is the brand mentioned in Quora answers to industry-relevant questions? Does the brand have an official Quora presence?\n- **Signal strength:** Moderate for B2C, lower for B2B.\n\n#### Stack Overflow / Stack Exchange\n- **Relevance:** Critical for developer-facing brands (SaaS, dev tools, APIs).\n- **What to check:** Is the brand's product discussed in Stack Overflow questions/answers? Does the brand have a tag? Do they have an official account answering questions?\n- **Signal strength:** High for technical products, irrelevant for most B2C.\n\n#### GitHub\n- **Relevance:** Critical for open-source and developer-focused brands.\n- **What to check:** Does the brand have a GitHub organization? Stars on repositories? Mentions in other repos' documentation or discussions?\n- **Signal strength:** High for dev tools and open-source, low for non-technical brands.\n\n#### Industry Forums and Communities\n- **Relevance:** Niche authority signals that AI models pick up from domain-specific training data.\n- **What to check:** Is the brand discussed in industry-specific forums (e.g., Hacker News for tech, ProductHunt for startups, industry-specific Slack communities)?\n- **Signal strength:** Moderate, but valuable for establishing niche authority.\n\n#### News and Press\n- **Relevance:** News mentions build entity authority and recency signals.\n- **What to check:** Has the brand been covered by major news outlets or industry publications? How recently? What was the context?\n- **Signal strength:** Moderate. Recency matters -- a mention in the last 6 months is far more valuable than one from 3 years ago.\n\n#### Podcasts\n- **Relevance:** Growing AI training data source. Transcripts are increasingly indexed.\n- **What to check:** Has the brand or its leadership appeared on podcasts? Are podcast transcripts mentioning the brand indexed by search engines?\n- **Signal strength:** Moderate and growing.\n\n---\n\n## Composite Brand Authority Score\n\n### Scoring Formula\n\n| Platform | Weight | Rationale |\n|---|---|---|\n| YouTube Presence | 25% | Strongest correlation with AI citation (0.737) |\n| Reddit Presence | 25% | Second strongest correlation; critical for product recommendations |\n| Wikipedia / Wikidata | 20% | Entity recognition foundation; AI training data cornerstone |\n| LinkedIn Authority | 15% | Professional authority signals; B2B relevance |\n| Other Platforms | 15% | Supplementary signals from Quora, GitHub, news, forums, podcasts |\n\n**Formula:**\n```\nBrand_Authority_Score = (YouTube * 0.25) + (Reddit * 0.25) + (Wikipedia * 0.20) + (LinkedIn * 0.15) + (Other * 0.15)\n```\n\n### Score Interpretation\n\n| Score Range | Rating | Interpretation |\n|---|---|---|\n| 85-100 | Dominant | Brand is a well-recognized entity across AI platforms. Highly likely to be cited and recommended by AI systems. |\n| 70-84 | Strong | Brand has solid cross-platform presence. AI systems likely recognize and cite it for relevant queries. |\n| 50-69 | Moderate | Brand has presence on some platforms but gaps exist. AI citation is inconsistent. |\n| 30-49 | Weak | Brand has limited platform presence. AI systems may not recognize it as a distinct entity. |\n| 0-29 | Minimal | Brand has negligible platform presence. AI systems are unlikely to cite or recommend it. |\n\n---\n\n## Analysis Procedure\n\n### Step 1: Identify Brand Information\n\nGather the following from the user or from the website:\n- **Brand name** (exact spelling, including any official variants)\n- **Founder/CEO name(s)**\n- **Domain URL**\n- **Industry/category**\n- **Key products or services** (top 3)\n- **Key competitors** (for comparison context)\n\n### Step 2: Platform Scanning\n\nFor each platform, use WebFetch to search and assess presence:\n\n**YouTube Check:**\n1. Search: `[brand name] site:youtube.com`\n2. Check: `youtube.com/@[brand-name]` or `youtube.com/c/[brand-name]` for official channel\n3. Search: `\"[brand name]\" site:youtube.com` (exact match for mentions in descriptions)\n4. Note: Channel subscriber count, video count, latest upload date, third-party mention count\n\n**Reddit Check:**\n1. Search: `[brand name] site:reddit.com`\n2. Search: `\"[brand name]\" site:reddit.com` (exact match)\n3. Check: `reddit.com/r/[brand-name]` for official subreddit\n4. Check: `reddit.com/user/[brand-name]` for official account\n5. Note: Thread count, dominant subreddits, sentiment (positive/negative/neutral), recommendation frequency\n\n**Wikipedia Check (IMPORTANT — use BOTH methods to avoid false negatives):**\n\n**Method 1 — Python API check (MOST RELIABLE, do this FIRST):**\n```bash\npython3 -c \"\nimport requests, json\nfrom urllib.parse import quote_plus\nbrand = '[Brand_Name]'\n# Check Wikipedia API directly\napi_url = f'https://en.wikipedia.org/w/api.php?action=query&list=search&srsearch={quote_plus(brand)}&format=json'\nr = requests.get(api_url, headers={'User-Agent': 'GEO-Audit/1.0'}, timeout=15)\ndata = r.json()\nresults = data.get('query', {}).get('search', [])\nif results and brand.lower() in results[0].get('title', '').lower():\n    print(f'WIKIPEDIA PAGE EXISTS: {results[0][\\\"title\\\"]}')\n    print(f'URL: https://en.wikipedia.org/wiki/{results[0][\\\"title\\\"].replace(\\\" \\\", \\\"_\\\")}')\nelse:\n    print('No direct Wikipedia page found')\n# Check Wikidata\nwd_url = f'https://www.wikidata.org/w/api.php?action=wbsearchentities&search={quote_plus(brand)}&language=en&format=json'\nr2 = requests.get(wd_url, headers={'User-Agent': 'GEO-Audit/1.0'}, timeout=15)\nwd = r2.json()\nentities = wd.get('search', [])\nif entities:\n    print(f'WIKIDATA ENTRY: {entities[0].get(\\\"id\\\", \\\"\\\")} — {entities[0].get(\\\"description\\\", \\\"\\\")}')\n\"\n```\n\n**Method 2 — Direct URL check (backup verification):**\n1. WebFetch: `https://en.wikipedia.org/wiki/[Brand_Name]` — check if the page loads (not a redirect to search)\n2. WebFetch: `https://en.wikipedia.org/wiki/[Founder_Name]` for founder article\n\n**Method 3 — Search (least reliable, use only for supplemental info):**\n1. Search: `[brand name] site:wikipedia.org`\n2. Search: `[brand name] site:wikidata.org`\n\n**CRITICAL:** Web search alone is NOT reliable for determining Wikipedia presence. ALWAYS run the Python API check first. If the API says a page exists, it exists — do not override this with a search result that fails to find it.\n\n5. Note: Article existence, quality, edit history, Wikidata completeness\n\n**LinkedIn Check:**\n1. Search: `[brand name] site:linkedin.com`\n2. Check: `linkedin.com/company/[brand-name]` for company page\n3. Note: Follower count, post frequency, employee count listed, engagement levels\n\n**Other Platforms:**\n1. Search: `[brand name] site:quora.com`\n2. Search: `[brand name] site:stackoverflow.com` (if technical brand)\n3. Search: `[brand name] site:github.com` (if technical brand)\n4. Search: `[brand name] site:news.ycombinator.com` (Hacker News)\n5. Search: `\"[brand name]\"` broadly for news mentions (filter to last 6 months)\n6. Note: Presence/absence and quality of mentions on each platform\n\n### Step 3: Sentiment Assessment\n\nFor Reddit and other discussion platforms, assess sentiment by analyzing the most recent and most prominent mentions:\n\n| Sentiment | Indicators |\n|---|---|\n| **Positive** | Recommendations (\"I love [brand],\" \"We switched to [brand] and...\", \"Highly recommend\"), upvoted mentions, positive comparison against competitors |\n| **Neutral** | Factual mentions (\"We use [brand] for...\", \"[Brand] offers...\"), questions about the brand, balanced comparisons |\n| **Negative** | Complaints (\"Avoid [brand]\", \"[Brand] has terrible support\"), downvoted recommendations, negative comparisons |\n| **Mixed** | Combination of positive and negative. Note the ratio and primary themes. |\n\n### Step 4: Competitive Comparison (Optional)\n\nIf competitors are identified, do a quick scan of their platform presence for context. This helps calibrate the score -- a brand with \"moderate\" Reddit presence in an industry where competitors have zero Reddit presence is relatively strong.\n\n### Step 5: Score Calculation\n\n1. Score each platform (0-100) using the rubrics above.\n2. Apply weights to calculate the composite Brand Authority Score.\n3. Identify the strongest and weakest platforms.\n4. Generate specific, actionable recommendations for the weakest platforms.\n\n---\n\n## Output Format\n\nGenerate a file called `GEO-BRAND-MENTIONS.md`:\n\n```markdown\n# Brand Authority Report: [Brand Name]\n\n**Analysis Date:** [Date]\n**Brand:** [Brand Name]\n**Domain:** [URL]\n**Industry:** [Industry]\n\n---\n\n## Brand Authority Score: [X]/100 ([Rating])\n\n### Platform Breakdown\n\n| Platform | Score | Weight | Weighted | Status |\n|---|---|---|---|---|\n| YouTube | [X]/100 | 25% | [X] | [Active Channel / Mentioned / Absent] |\n| Reddit | [X]/100 | 25% | [X] | [Active / Discussed / Absent] |\n| Wikipedia | [X]/100 | 20% | [X] | [Article / Mentioned / Absent] |\n| LinkedIn | [X]/100 | 15% | [X] | [Active / Basic / Absent] |\n| Other Platforms | [X]/100 | 15% | [X] | [Summary] |\n| **Total** | | | **[X]/100** | |\n\n---\n\n## Platform Detail\n\n### YouTube ([X]/100)\n\n**Official Channel:** [Yes/No] | [URL if exists]\n**Subscribers:** [Count or N/A]\n**Videos:** [Count or N/A]\n**Last Upload:** [Date or N/A]\n**Third-Party Mentions:** [Estimated count]\n**Key Findings:**\n- [Finding 1]\n- [Finding 2]\n\n### Reddit ([X]/100)\n\n**Official Account:** [Yes/No] | [URL if exists]\n**Own Subreddit:** [Yes/No] | [URL and member count if exists]\n**Mention Volume:** [Estimated thread count]\n**Primary Subreddits:** [List of subreddits where brand is discussed]\n**Sentiment:** [Positive/Negative/Neutral/Mixed]\n**Key Findings:**\n- [Finding 1]\n- [Finding 2]\n\n### Wikipedia ([X]/100)\n\n**Company Article:** [Yes/No] | [URL if exists]\n**Founder Article:** [Yes/No] | [URL if exists]\n**Wikidata Entry:** [Yes/No] | [Q-number if exists]\n**Cited in Other Articles:** [Yes/No] | [Which articles]\n**Key Findings:**\n- [Finding 1]\n- [Finding 2]\n\n### LinkedIn ([X]/100)\n\n**Company Page:** [Yes/No] | [URL if exists]\n**Followers:** [Count or N/A]\n**Post Frequency:** [Weekly/Monthly/Rare/Never]\n**Key Findings:**\n- [Finding 1]\n- [Finding 2]\n\n### Other Platforms ([X]/100)\n\n| Platform | Presence | Notes |\n|---|---|---|\n| Quora | [Yes/No] | [Brief note] |\n| Stack Overflow | [Yes/No] | [Brief note] |\n| GitHub | [Yes/No] | [Brief note] |\n| Hacker News | [Yes/No] | [Brief note] |\n| News/Press | [Yes/No] | [Brief note] |\n| Podcasts | [Yes/No] | [Brief note] |\n\n---\n\n## Recommendations\n\n### Immediate Actions (Week 1-2)\n\n1. **[Platform]:** [Specific action to take with expected impact]\n2. **[Platform]:** [Specific action]\n\n### Short-Term Strategy (Month 1-3)\n\n1. **[Platform]:** [Strategy with tactics]\n2. **[Platform]:** [Strategy with tactics]\n\n### Long-Term Authority Building (Month 3-12)\n\n1. **[Platform]:** [Long-term strategy]\n2. **[Platform]:** [Long-term strategy]\n\n---\n\n## Competitive Context\n\n[If competitors were analyzed, show a brief comparison table]\n\n| Brand | YouTube | Reddit | Wikipedia | LinkedIn | Other | Total |\n|---|---|---|---|---|---|---|\n| [Subject Brand] | [X] | [X] | [X] | [X] | [X] | **[X]** |\n| [Competitor 1] | [X] | [X] | [X] | [X] | [X] | **[X]** |\n| [Competitor 2] | [X] | [X] | [X] | [X] | [X] | **[X]** |\n\n## Key Takeaway\n\n[1-2 sentence summary of the brand's AI visibility standing and the single most impactful action to take]\n```\n\n---\n\n## Reference Data\n\n### Correlation Strengths (Ahrefs Dec 2025, 75K Brands)\n\n| Signal | Correlation with AI Citation | Traditional SEO Value |\n|---|---|---|\n| YouTube mentions | ~0.737 | Low (not a ranking factor) |\n| Reddit mentions | High (exact coefficient not published) | Low |\n| Wikipedia presence | High | Moderate (trust signal) |\n| LinkedIn presence | Moderate | Low |\n| Domain Rating | ~0.266 | Very High |\n| Backlink count | ~0.266 | Very High |\n| Organic traffic | Moderate | Very High |\n\n**Key insight:** The signals that matter most for AI visibility (YouTube, Reddit) are almost irrelevant in traditional SEO, and the signals that matter most for traditional SEO (backlinks, DR) are weak predictors of AI visibility. This requires a fundamentally different optimization strategy.\n\n### Platform-Specific Tips for Building Presence\n\n**YouTube Quick Wins:**\n- Create a channel and upload 3-5 explainer videos about your core topics.\n- Ensure your brand name appears in video titles, descriptions, and spoken content.\n- Pursue guest appearances on relevant industry YouTube channels.\n- Create comparison or \"alternatives\" videos (these get cited by AI for comparison queries).\n\n**Reddit Quick Wins:**\n- Identify 3-5 subreddits where your target audience is active.\n- Participate authentically (do not shill -- Reddit communities detect and punish this).\n- Do an AMA if appropriate for your brand.\n- Monitor and respond to mentions of your brand.\n- Create genuinely helpful posts that naturally mention your brand's expertise.\n\n**Wikipedia Strategy:**\n- Hire a Wikipedia-knowledgeable consultant -- do NOT edit your own article (conflict of interest).\n- Build notability through press coverage, academic citations, and industry recognition first.\n- Ensure your Wikidata entry is complete even if you do not have a Wikipedia article.\n- Contribute to industry-relevant articles where your brand can be naturally cited as a source.\n\n**LinkedIn Quick Wins:**\n- Optimize your company page with complete information and regular posting.\n- Encourage leadership to post thought leadership content weekly.\n- Publish LinkedIn articles on topics where your brand has unique expertise.\n- Engage with industry discussions to increase brand visibility in professional contexts.\n","skills/geo-citability/SKILL.md":"---\nname: geo-citability\ndescription: AI citability scoring and optimization. Analyzes web page content to determine how likely AI systems (ChatGPT, Claude, Perplexity, Gemini) are to cite or quote passages from the page. Provides a citability score (0-100) with specific rewrite suggestions.\nallowed-tools:\n  - Read\n  - Grep\n  - Glob\n  - Bash\n  - WebFetch\n  - Write\n---\n\n# AI Citability Scoring Skill\n\n## Core Insight\n\nAI language models cite passages that meet specific structural criteria. Research from Princeton, Georgia Tech, and IIT Delhi (2024) found that GEO-optimized content achieves 30-115% higher visibility in AI-generated responses. The key finding: AI systems preferentially extract and cite passages that are **134-167 words long**, **self-contained** (understandable without surrounding context), **fact-rich** (containing specific statistics, dates, or named entities), and **directly answer a question** in the first 1-2 sentences.\n\nThis is fundamentally different from traditional SEO copywriting, which optimizes for keyword density and user engagement metrics. GEO citability optimizes for **extractability** -- the ease with which an AI system can pull a passage from your content and present it as a direct answer.\n\n---\n\n## Citability Scoring Rubric (0-100)\n\n### Category 1: Answer Block Quality (30% of total score)\n\nThis measures whether content contains clear, quotable answer passages that AI systems can extract verbatim.\n\n**Scoring Criteria:**\n\n| Score | Criteria |\n|---|---|\n| **90-100** | Every major section opens with a 1-2 sentence direct answer. Uses \"X is...\" or \"X refers to...\" patterns. First 40-60 words of each section can stand alone as a complete answer. |\n| **70-89** | Most sections have clear answer openings. Some definition patterns present. Answers are identifiable but may need minor context. |\n| **50-69** | Some sections have answer-like openings but many bury the answer in the middle or end of paragraphs. Few explicit definition patterns. |\n| **30-49** | Answers are generally buried in long paragraphs. No consistent definition patterns. Content is narrative-driven rather than answer-driven. |\n| **0-29** | No identifiable answer blocks. Content is entirely narrative, conversational, or fragmented. AI would struggle to extract any quotable passage. |\n\n**What to look for:**\n\n- **Definition patterns:** \"X is [definition].\" / \"X refers to [explanation].\" / \"X means [meaning].\"\n- **Answer-first structure:** The answer appears in the first sentence, followed by supporting detail.\n- **Quantified answers:** \"The average cost of X is $Y\" rather than \"Many factors affect the cost of X.\"\n- **Comparison answers:** \"X differs from Y in three ways: [list]\" rather than \"X and Y are often confused.\"\n\n**High-citability example:**\n```\nContent delivery networks (CDNs) are distributed server systems that cache and serve\nweb content from locations geographically close to end users. A CDN reduces latency\nby 50-70% on average by serving assets from edge servers rather than a single origin\nserver. The three largest CDN providers as of 2025 are Cloudflare (serving approximately\n20% of all websites), Amazon CloudFront, and Akamai Technologies.\n```\nWord count: 58. Self-contained: Yes. Facts: 3 specific data points. Definition pattern: Yes.\n\n**Low-citability example:**\n```\nIf you've ever wondered why some websites load faster than others, the answer might\nsurprise you. There's this amazing technology that has been around for a while now.\nIt's changed the way we think about web performance. Let me explain how it works and\nwhy you should care about it for your business.\n```\nWord count: 52. Self-contained: No (no topic identified). Facts: 0. Definition pattern: No.\n\n---\n\n### Category 2: Passage Self-Containment (25% of total score)\n\nThis measures whether individual passages can be extracted and understood without needing the surrounding content.\n\n**Scoring Criteria:**\n\n| Score | Criteria |\n|---|---|\n| **90-100** | 80%+ of content blocks are fully self-contained. Each passage names its subject explicitly. No reliance on pronouns referencing earlier content. Contains specific facts within the passage. |\n| **70-89** | 60-79% of content blocks are self-contained. Most passages name their subject. Occasional pronoun references that require context. |\n| **50-69** | 40-59% of content blocks are self-contained. Mixed use of explicit subjects and pronouns. Some passages require reading prior sections. |\n| **30-49** | 20-39% of content blocks are self-contained. Heavy reliance on pronouns and contextual references. Most passages need surrounding text. |\n| **0-29** | Under 20% self-contained. Content reads as a continuous narrative where extracting any paragraph loses meaning. |\n\n**Self-containment checklist for each passage:**\n\n1. Does the passage explicitly name the subject (not \"it,\" \"this,\" \"they\")?\n2. Can someone understand the main point reading ONLY this passage?\n3. Does the passage contain at least one specific fact, statistic, or named entity?\n4. Is the passage between 50-200 words (the optimal extraction length)?\n5. Does the passage avoid starting with conjunctions (\"But,\" \"However,\" \"And\") that imply prior context?\n\n---\n\n### Category 3: Structural Readability (20% of total score)\n\nThis measures the structural formatting that helps AI systems parse and segment content.\n\n**Scoring Criteria:**\n\n| Score | Criteria |\n|---|---|\n| **90-100** | Clean H1 > H2 > H3 hierarchy. Question-based headings for informational content. Short paragraphs (2-4 sentences). Tables for comparisons. Ordered lists for processes. Unordered lists for features/options. |\n| **70-89** | Good heading hierarchy with minor skips. Some question-based headings. Mostly short paragraphs. Some use of tables and lists. |\n| **50-69** | Heading hierarchy present but inconsistent. Few question-based headings. Mix of short and long paragraphs. Limited tables/lists. |\n| **30-49** | Minimal heading structure. No question-based headings. Long paragraphs dominate. Rare use of tables/lists. |\n| **0-29** | No heading structure or severely broken hierarchy. Wall-of-text paragraphs. No tables or lists. |\n\n**Structural best practices for AI citability:**\n\n- **Heading hierarchy:** H1 (page title) > H2 (major sections) > H3 (subsections). Never skip levels.\n- **Question-based headings:** \"What is [topic]?\" and \"How does [topic] work?\" are directly matchable to AI queries.\n- **Paragraph length:** 2-4 sentences per paragraph. AI systems parse short paragraphs more reliably.\n- **Tables:** Use for any comparison of 3+ items. AI systems extract table data with high accuracy.\n- **Lists:** Use ordered lists for sequential processes, unordered lists for non-sequential items.\n- **Bold key terms:** Bold the first use of important terms. This aids AI entity recognition.\n\n---\n\n### Category 4: Statistical Density (15% of total score)\n\nThis measures the presence of specific, verifiable data points that AI systems prioritize when selecting citation sources.\n\n**Scoring Criteria:**\n\n| Score | Criteria |\n|---|---|\n| **90-100** | 5+ specific statistics per 500 words. All claims backed by named sources or dates. Uses exact numbers (not \"many\" or \"several\"). Includes percentages, dollar amounts, timeframes, and named studies. |\n| **70-89** | 3-4 statistics per 500 words. Most claims have sources. Mostly specific numbers with occasional vague quantifiers. |\n| **50-69** | 1-2 statistics per 500 words. Some claims sourced. Mix of specific and vague numbers. |\n| **30-49** | Less than 1 statistic per 500 words. Few sourced claims. Predominantly vague quantifiers. |\n| **0-29** | No statistics. No sourced claims. All quantifiers are vague (\"many,\" \"most,\" \"a lot\"). |\n\n**What counts as a statistic:**\n- Specific percentages: \"73% of marketers report...\"\n- Dollar amounts: \"The average cost is $4,500 per month\"\n- Timeframes: \"Implementation takes 6-8 weeks on average\"\n- Named studies: \"According to the 2025 HubSpot State of Marketing Report...\"\n- Specific counts: \"The platform integrates with 340+ tools\"\n- Comparison data: \"40% faster than the industry average\"\n\n**What does NOT count:**\n- \"Many companies use...\" (vague)\n- \"A significant percentage...\" (vague)\n- \"Studies show that...\" (no named source)\n- \"Experts agree...\" (no named experts)\n\n---\n\n### Category 5: Uniqueness & Original Data (10% of total score)\n\nThis measures whether the content provides information that AI systems cannot find elsewhere, making it a necessary citation source.\n\n**Scoring Criteria:**\n\n| Score | Criteria |\n|---|---|\n| **90-100** | Contains first-party research, proprietary data, original surveys, or unique datasets. Presents analysis or insights not found on any other page. Clear methodological descriptions. |\n| **70-89** | Contains some original insights or unique analysis of existing data. Offers a distinct perspective with original examples. |\n| **50-69** | Mostly synthesizes existing information but adds some unique commentary or examples. |\n| **30-49** | Largely derivative content that restates common knowledge with minimal original contribution. |\n| **0-29** | Entirely derivative. All information is available (often verbatim) on higher-authority sources. |\n\n**Signals of unique content:**\n- \"Our analysis of [X] data found...\"\n- \"We surveyed [N] [professionals] and found...\"\n- \"Based on our experience with [N] clients...\"\n- Custom charts, graphs, or data visualizations\n- Case studies with specific named outcomes\n- Original frameworks, methodologies, or taxonomies\n\n---\n\n## Analysis Procedure\n\n### Step 1: Fetch and Parse Page Content\n\n1. Use WebFetch to retrieve the target URL.\n2. Extract the main content area (exclude navigation, footer, sidebar, ads).\n3. Preserve heading structure (H1-H6 tags).\n4. Preserve paragraph boundaries, lists, and tables.\n5. Calculate total word count of main content.\n\n### Step 2: Segment Content into Blocks\n\n1. Split content at each heading (H2 or H3) to create content blocks.\n2. For each block, record:\n   - The heading text\n   - The full text content under that heading\n   - Word count of the block\n   - Number of paragraphs\n   - Number of lists and tables\n   - Number of statistics/data points\n   - Whether the block contains a definition pattern\n   - Whether the first 60 words form a standalone answer\n\n### Step 3: Score Each Block\n\nFor each content block, calculate:\n- Answer Block Quality sub-score (0-100)\n- Self-Containment sub-score (0-100)\n- Structural Readability sub-score (0-100)\n- Statistical Density sub-score (0-100)\n- Uniqueness sub-score (0-100)\n\n**Block Citability Score** = (Answer * 0.30) + (SelfContain * 0.25) + (Structure * 0.20) + (Stats * 0.15) + (Unique * 0.10)\n\n### Step 4: Calculate Page-Level Score\n\n1. Calculate the average of all block scores for the page-level citability score.\n2. Identify the top 3 highest-scoring blocks (highlight as strengths).\n3. Identify the bottom 3 lowest-scoring blocks (flag for rewriting).\n4. Calculate the percentage of blocks scoring above 70 (the \"citability coverage\" metric).\n\n### Step 5: Generate Rewrite Suggestions\n\nFor each block scoring below 60, generate a specific rewrite suggestion:\n1. Identify the primary weakness (buried answer, lack of facts, poor structure, etc.).\n2. Propose a rewritten opening sentence using a definition or answer-first pattern.\n3. Suggest specific statistics or facts that could be added.\n4. Recommend structural improvements (add list, add table, split paragraph).\n\n---\n\n## Output Format\n\nGenerate a file called `GEO-CITABILITY-SCORE.md`:\n\n```markdown\n# AI Citability Analysis: [Page Title]\n\n**URL:** [URL]\n**Analysis Date:** [Date]\n**Overall Citability Score: [X]/100**\n**Citability Coverage:** [X]% of content blocks score above 70\n\n---\n\n## Score Summary\n\n| Category | Score | Weight | Weighted |\n|---|---|---|---|\n| Answer Block Quality | [X]/100 | 30% | [X] |\n| Passage Self-Containment | [X]/100 | 25% | [X] |\n| Structural Readability | [X]/100 | 20% | [X] |\n| Statistical Density | [X]/100 | 15% | [X] |\n| Uniqueness & Original Data | [X]/100 | 10% | [X] |\n| **Overall** | | | **[X]/100** |\n\n---\n\n## Strongest Content Blocks\n\n### 1. \"[Heading]\" -- Score: [X]/100\n> [First 2 sentences of the block]\n\n**Why it works:** [Explanation]\n\n### 2. \"[Heading]\" -- Score: [X]/100\n> [First 2 sentences of the block]\n\n**Why it works:** [Explanation]\n\n---\n\n## Weakest Content Blocks (Rewrite Priority)\n\n### 1. \"[Heading]\" -- Score: [X]/100\n\n**Current opening:**\n> [First 2 sentences as they exist]\n\n**Problem:** [Specific issue -- buried answer, no facts, etc.]\n\n**Suggested rewrite:**\n> [Rewritten opening 2-3 sentences with answer-first pattern and facts]\n\n**Additional improvements:**\n- [Add table comparing X, Y, Z]\n- [Include statistic about ...]\n- [Split long paragraph into 2-3 shorter ones]\n\n---\n\n## Quick Win Reformatting Recommendations\n\n1. **[Specific recommendation]** -- Expected citability lift: +[X] points\n2. **[Specific recommendation]** -- Expected citability lift: +[X] points\n3. **[Specific recommendation]** -- Expected citability lift: +[X] points\n4. **[Specific recommendation]** -- Expected citability lift: +[X] points\n5. **[Specific recommendation]** -- Expected citability lift: +[X] points\n\n---\n\n## Per-Section Scores\n\n| Section Heading | Words | Answer Quality | Self-Contained | Structure | Stats | Unique | Overall |\n|---|---|---|---|---|---|---|---|\n| [H2 heading] | [N] | [X] | [X] | [X] | [X] | [X] | [X] |\n```\n\n---\n\n## Reference Data\n\n### Optimal Passage Characteristics (from GEO Research)\n\n- **Optimal length for AI citation:** 134-167 words (Bortolato 2025 analysis of AI Overview passages)\n- **Definition patterns increase citation rate by:** 2.1x (Georgia Tech 2024)\n- **Adding statistics to passages increases citation by:** 40% (Princeton GEO study 2024)\n- **Adding quotations from authorities increases citation by:** 115% in certain categories (IIT Delhi 2024)\n- **Fluency optimization increases visibility by:** 30% on average across all query types\n- **Content with source citations is cited:** 20-25% more often by Perplexity and ChatGPT search\n\n### AI System Citation Preferences\n\n| AI System | Citation Preference |\n|---|---|\n| **ChatGPT (Search)** | Prefers passages with explicit definitions, named sources, and recent dates. Tends to cite 2-4 sources per response. |\n| **Perplexity** | Heavily favors fact-dense passages with statistics. Cites 4-8 sources per response. Values recency highly. |\n| **Claude** | Prefers well-structured, comprehensive passages. Values nuance and accuracy over brevity. |\n| **Gemini (AI Overviews)** | Prefers concise answer blocks (40-60 words). Values content already ranking in top 10 organic results. |\n| **Copilot (Bing)** | Similar to Gemini. Prefers passages from high-authority domains with clear factual claims. |\n","skills/geo-compare/SKILL.md":"---\nname: geo-compare\ndescription: >\n  Monthly delta tracking and progress reporting for GEO clients. Compares two\n  GEO audits (baseline vs. current), calculates score improvements across all\n  categories, tracks action item completion, and generates a \"here's your progress\"\n  client report. Use when user says \"compare\", \"delta\", \"monthly report\", \"progress\",\n  \"confronta\", \"progressi\", \"report mensile\", or when running a monthly client check-in.\nversion: 1.0.0\ntags: [geo, business, delta, monthly, reporting, client, progress]\nallowed-tools: Read, Write, Bash, Glob\n---\n\n# GEO Monthly Delta Report Generator\n\n## Purpose\n\nThe single most powerful retention tool for a GEO agency: show clients **exactly**\nwhat improved since they started working with you. Every point gained on the GEO\nscore is proof of value. This skill generates the \"here's your progress\" report.\n\n---\n\n## Commands\n\n```\n/geo compare <domain>\n/geo compare <baseline-file> <current-file>\n/geo compare electron-srl.com --month march-2026\n```\n\n**Examples:**\n```\n/geo compare electron-srl.com\n/geo compare ~/.geo-prospects/audits/electron-srl.com-2026-01-15.md ~/.geo-prospects/audits/electron-srl.com-2026-03-12.md\n```\n\n---\n\n## Workflow\n\n### Step 1: Find Audit Files\n\nIf only domain is provided:\n1. Look in `~/.geo-prospects/audits/` for files matching `<domain>-*.md`\n2. Sort by date\n3. Use oldest as baseline, newest as current\n4. If only one file exists: use it as baseline, run a fresh quick audit as current\n5. If no files exist: suggest running `/geo prospect audit <domain>` first\n\n### Step 2: Parse Both Audits\n\nExtract from each audit file:\n- Overall GEO Score\n- Per-category scores (6 categories)\n- Per-platform scores (5 platforms)\n- AI crawler status (14 crawlers)\n- Critical issues list\n- Action items list with status\n\n### Step 3: Calculate Deltas\n\nFor each metric:\n- Delta = Current - Baseline\n- Trend = ▲ (improved), ▼ (declined), ── (unchanged)\n- Color coding in report: green (+), red (-), gray (=)\n\n### Step 4: Generate Monthly Report\n\nOutput to `~/.geo-prospects/reports/<domain>-monthly-<date>.md`\n\n---\n\n## Report Template\n\nGenerate the following document:\n\n```markdown\n# GEO Monthly Progress Report\n## [COMPANY NAME] — [MONTH YEAR]\n\n**Reporting period:** [BASELINE DATE] → [CURRENT DATE]\n**Prepared by:** [AGENCY NAME]\n**Report reference:** GEO-MONTHLY-[DOMAIN]-[YYMMDD]\n\n---\n\n## Executive Summary\n\n[2-3 sentences: What improved, what's the trend, what to focus on next month.]\n\nExample: \"Electron Srl's GEO Score improved from 32 to 44 this month (+12 points),\nplacing the site firmly in the 'Below Average' tier and on track to reach 'Moderate'\nby May. The biggest wins were AI crawler access (+3 crawlers now allowed) and schema\nimplementation (+Organization and LocalBusiness schemas live). Next month's focus is\ncontent citability — the highest-weighted remaining gap.\"\n\n---\n\n## GEO Score Progress\n\n```\nOVERALL GEO SCORE\n\n  Baseline   [▓▓▓▓░░░░░░░░░░░░░░░░]  32/100  (Critical)\n  Current    [▓▓▓▓▓▓▓▓░░░░░░░░░░░░]  44/100  (Below Average)\n  Change     ▲ +12 points (+37.5%)\n\n  Target:    65/100 by Month 6 (on track ✓)\n```\n\n---\n\n## Score Breakdown: Before vs. After\n\n| Category | Baseline | Current | Change | Trend |\n|----------|---------|---------|--------|-------|\n| AI Citability & Visibility | [X]/100 | [X]/100 | [+/-X] | [▲/▼/──] |\n| Brand Authority Signals | [X]/100 | [X]/100 | [+/-X] | [▲/▼/──] |\n| Content Quality & E-E-A-T | [X]/100 | [X]/100 | [+/-X] | [▲/▼/──] |\n| Technical Foundations | [X]/100 | [X]/100 | [+/-X] | [▲/▼/──] |\n| Structured Data | [X]/100 | [X]/100 | [+/-X] | [▲/▼/──] |\n| Platform Optimization | [X]/100 | [X]/100 | [+/-X] | [▲/▼/──] |\n| **TOTAL** | **[X]/100** | **[X]/100** | **[+/-X]** | **[▲/▼]** |\n\n---\n\n## Platform Readiness: Before vs. After\n\n| AI Platform | Baseline | Current | Change |\n|-------------|---------|---------|--------|\n| Google AI Overviews | [X]/100 | [X]/100 | [+/-X] |\n| ChatGPT Web Search | [X]/100 | [X]/100 | [+/-X] |\n| Perplexity AI | [X]/100 | [X]/100 | [+/-X] |\n| Google Gemini | [X]/100 | [X]/100 | [+/-X] |\n| Bing Copilot | [X]/100 | [X]/100 | [+/-X] |\n\n---\n\n## AI Crawler Access Changes\n\n| Crawler | Baseline | Current | Change |\n|---------|---------|---------|--------|\n| GPTBot (ChatGPT) | Blocked/Allowed | Blocked/Allowed | ✓ Fixed / No change |\n| ClaudeBot (Anthropic) | Blocked/Allowed | Blocked/Allowed | ✓ Fixed / No change |\n| PerplexityBot | Blocked/Allowed | Blocked/Allowed | ✓ Fixed / No change |\n| Google-Extended (Gemini) | Blocked/Allowed | Blocked/Allowed | ✓ Fixed / No change |\n| Bingbot | Blocked/Allowed | Blocked/Allowed | ✓ Fixed / No change |\n\n[Show only crawlers that changed, or all if few crawlers.]\n\n---\n\n## Action Plan Progress\n\n### Quick Wins — Status Update\n\n| # | Action | Assigned | Status | Impact |\n|---|--------|---------|--------|--------|\n| 1 | Allow all AI crawlers in robots.txt | Client dev | ✅ Done | +3 crawlers |\n| 2 | Add Organization schema to homepage | Client dev | ✅ Done | Schema score +15 |\n| 3 | Create llms.txt | Agency | ✅ Done | AI visibility +8 |\n| 4 | Add author bylines to all articles | Client content | 🔄 In Progress | — |\n| 5 | Fix meta descriptions (47 pages missing) | Client dev | ❌ Not started | — |\n\n**Quick wins completed: [X]/[Y] ([%])**\n\n### Medium-Term — Status Update\n\n| # | Action | Target Month | Status |\n|---|--------|-------------|--------|\n| 1 | Rewrite top 10 pages with Q&A structure | Month 2 | 🔄 3/10 done |\n| 2 | E-E-A-T: Create author pages | Month 2 | ❌ Not started |\n| 3 | Register Bing Webmaster Tools | Month 1 | ✅ Done |\n| 4 | Implement IndexNow | Month 2 | 🔄 In Progress |\n\n### Strategic — Status Update\n\n| # | Action | Target | Status |\n|---|--------|--------|--------|\n| 1 | Wikipedia entity creation | Month 4 | 📋 Planned |\n| 2 | YouTube channel launch | Month 3 | 📋 Planned |\n| 3 | Reddit presence (industry subs) | Month 3 | 📋 Planned |\n\n---\n\n## This Month's Wins\n\n> Use this section to celebrate — clients need to see the value clearly.\n\n✅ **[WIN 1]:** [Specific, tangible result — e.g., \"GPTBot and ClaudeBot are now allowed. ChatGPT can now crawl and cite your content.\"]\n✅ **[WIN 2]:** [e.g., \"Organization schema implemented on homepage. Your brand entity is now machine-readable.\"]\n✅ **[WIN 3]:** [e.g., \"llms.txt created and deployed at electron-srl.com/llms.txt — one of only ~12% of sites in your industry to have this.\"]\n\n---\n\n## New Issues Discovered\n\n> Issues found in current audit that weren't in baseline.\n\n⚠️ **[ISSUE 1]:** [What it is, what it means, how we'll fix it]\n⚠️ **[ISSUE 2]:** [What it is, what it means, how we'll fix it]\n\n---\n\n## Next Month Focus\n\n### Priority Actions for [NEXT MONTH]:\n\n| Priority | Action | Owner | Expected Impact |\n|----------|--------|-------|----------------|\n| 1 | [Highest ROI action] | [Agency/Client] | +[X] GEO points |\n| 2 | [Second priority] | [Agency/Client] | +[X] GEO points |\n| 3 | [Third priority] | [Agency/Client] | +[X] GEO points |\n\n**Target GEO Score next month:** [CURRENT + estimated gain]/100\n\n---\n\n## 6-Month Trajectory\n\n| Month | Date | Score | Delta | Key Achievement |\n|-------|------|-------|-------|----------------|\n| Baseline | [Date] | [Score] | — | Initial audit |\n| Month 1 | [Date] | [Score] | [+X] | Quick wins implemented |\n| Month 2 | [Date] | [Score] | [+X] | *Current month* |\n| Month 3 | [Date] | — | — | Content citability |\n| Month 4 | — | — | — | Brand authority |\n| Month 5 | — | — | — | Strategic initiatives |\n| Month 6 | — | **Target: [X]** | — | Full review |\n\n[Only fill rows that have happened. Show projected rows as \"—\"]\n\n---\n\n## Estimated Business Impact\n\nBased on the [X]-point improvement this month:\n\n- **AI citation likelihood:** Increased by approximately [X]%\n- **Crawlers with access:** [X]/14 → [Y]/14 (better coverage on [platforms])\n- **Estimated monthly AI-referred traffic improvement:** +[X]% (conservative)\n- **Traffic value at current conversion rates:** +€[X]/month in organic value\n\n*Note: Full traffic impact from GEO changes typically takes 4-8 weeks to materialize\nas AI platforms re-index and update their knowledge bases.*\n\n---\n\n*GEO Monthly Report — [COMPANY NAME] — [DATE]*\n*Questions or comments? [CONTACT EMAIL]*\n```\n\n---\n\n## Delta Calculation Logic\n\nWhen parsing two audit files, look for these patterns:\n\n```\nScore markers to extract:\n- \"GEO Score: XX/100\"\n- \"Overall Score: XX\"\n- \"AI Citability: XX/100\"\n- \"Brand Authority: XX/100\"\n- \"Technical: XX/100\"\n- \"Schema: XX/100\"\n- \"Platform: XX/100\"\n- \"Content: XX/100\"\n- \"GPTBot: Allowed/Blocked\"\n- \"ClaudeBot: Allowed/Blocked\"\n```\n\nIf exact scores are not found in audit files, use contextual analysis of the\nwritten findings to estimate approximate scores based on issues described.\n\n---\n\n## Trend Interpretation\n\n| Delta | Trend Symbol | Meaning |\n|-------|-------------|---------|\n| +5 or more | ▲▲ | Strong improvement |\n| +1 to +4 | ▲ | Improvement |\n| 0 | ── | No change |\n| -1 to -4 | ▼ | Slight decline |\n| -5 or more | ▼▼ | Significant decline — needs discussion |\n\nA decline is not necessarily bad — it can mean new issues were discovered in the\nfresh audit that weren't visible before. Frame declines as \"newly discovered opportunities.\"\n\n---\n\n## Output\n\n1. Save report to `~/.geo-prospects/reports/<domain>-monthly-<YYYY-MM>.md`\n2. Print confirmation with key stats:\n   ```\n   ✓ Monthly report generated: ~/.geo-prospects/reports/electron-srl.com-monthly-2026-03.md\n\n   SUMMARY:\n   GEO Score: 32 → 44 (+12 points) ▲\n   Quick wins completed: 3/5 (60%)\n   New issues found: 2 (minor)\n   On track for Month 6 target: YES (65/100)\n   ```\n3. Suggest next action: \"Share with client or run `/geo report-pdf` for a visual version\"\n","skills/geo-content/SKILL.md":"---\nname: geo-content\ndescription: Content quality and E-E-A-T assessment for AI citability — evaluate experience, expertise, authoritativeness, trustworthiness, and content structure\nversion: 1.0.0\nauthor: geo-seo-claude\ntags: [geo, content-quality, eeat, citability, ai-content, topical-authority]\nallowed-tools: Read, Grep, Glob, Bash, WebFetch, Write\n---\n\n# GEO Content Quality & E-E-A-T Assessment\n\n## Purpose\n\nAI search platforms do not just find content — they evaluate whether content deserves to be cited. The primary framework for this evaluation is **E-E-A-T** (Experience, Expertise, Authoritativeness, Trustworthiness), which per Google's December 2025 Quality Rater Guidelines update now applies to **ALL competitive queries**, not just YMYL (Your Money Your Life) topics. Content that scores high on E-E-A-T is dramatically more likely to be cited by AI platforms.\n\nThis skill evaluates content through two lenses:\n1. **E-E-A-T signals** — does the content demonstrate real expertise and trust?\n2. **AI citability** — is the content structured so AI platforms can extract and cite specific claims?\n\n## How to Use This Skill\n\n1. Fetch the target page(s) — homepage, key blog posts, service/product pages\n2. Evaluate E-E-A-T across the 4 dimensions (25% each)\n3. Assess content quality metrics (structure, readability, depth)\n4. Check for AI content quality signals\n5. Evaluate topical authority across the site\n6. Score and generate GEO-CONTENT-ANALYSIS.md\n\n---\n\n## E-E-A-T Framework (100 points total)\n\n### Experience — 25 points\nFirst-hand knowledge and direct involvement with the topic. AI platforms increasingly distinguish between content that reports on a topic and content from someone who has DONE it.\n\n**Signals to evaluate:**\n\n| Signal | Points | How to Score |\n|---|---|---|\n| First-person accounts (\"I tested...\", \"We implemented...\") | 5 | 5 if present and specific, 3 if generic, 0 if absent |\n| Original research or data not available elsewhere | 5 | 5 if original data, 3 if references original work, 0 if none |\n| Case studies with specific results | 4 | 4 if detailed with numbers, 2 if general, 0 if none |\n| Screenshots, photos, or evidence of direct use | 3 | 3 if authentic evidence, 1 if stock/generic, 0 if none |\n| Specific examples from personal experience | 4 | 4 if specific and unique, 2 if somewhat specific, 0 if generic |\n| Demonstrations of process (not just outcome) | 4 | 4 if step-by-step from experience, 2 if partial, 0 if none |\n\n**What to flag as weak Experience:**\n- Content that only summarizes what other sources say without adding new perspective\n- Generic advice that could apply to any situation (\"It depends on your needs\")\n- No mention of actual usage, testing, or direct involvement\n- Hedging language that suggests lack of direct knowledge (\"reportedly\", \"supposedly\", \"some say\")\n\n### Expertise — 25 points\nDemonstrated knowledge depth and professional competence in the subject matter.\n\n**Signals to evaluate:**\n\n| Signal | Points | How to Score |\n|---|---|---|\n| Author credentials visible (bio, degrees, certifications) | 5 | 5 if full credentials, 3 if basic bio, 0 if no author |\n| Technical depth appropriate to topic | 5 | 5 if thorough technical treatment, 3 if adequate, 0 if superficial |\n| Methodology explanation (how conclusions were reached) | 4 | 4 if clear methodology, 2 if some explanation, 0 if none |\n| Data-backed claims (statistics, research citations) | 4 | 4 if well-sourced, 2 if some data, 0 if unsupported claims |\n| Industry-specific terminology used correctly | 3 | 3 if accurate specialized language, 1 if basic, 0 if errors |\n| Author page with detailed professional background | 4 | 4 if dedicated author page, 2 if brief bio, 0 if none |\n\n**What to flag as weak Expertise:**\n- Claims without supporting evidence or sources\n- Surface-level coverage of complex topics\n- Misuse of technical terminology\n- No visible author or author without relevant credentials\n- Content that is broad and generic rather than deep and specific\n\n### Authoritativeness — 25 points\nRecognition by others as a credible source on the topic.\n\n**Signals to evaluate:**\n\n| Signal | Points | How to Score |\n|---|---|---|\n| Inbound citations from authoritative sources | 5 | 5 if cited by major sources, 3 if some citations, 0 if none |\n| Author quoted or cited in press/media | 4 | 4 if media mentions, 2 if industry mentions, 0 if none |\n| Industry awards or recognition mentioned | 3 | 3 if relevant awards, 1 if tangential, 0 if none |\n| Speaker credentials (conferences, events) | 3 | 3 if listed, 0 if none |\n| Published in peer-reviewed or respected outlets | 4 | 4 if tier-1 publications, 2 if industry outlets, 0 if none |\n| Comprehensive topic coverage (topical authority) | 3 | 3 if site covers topic thoroughly, 1 if some coverage, 0 if isolated |\n| Brand mentioned on Wikipedia or authoritative references | 3 | 3 if Wikipedia, 2 if other encyclopedic refs, 0 if none |\n\n**What to flag as weak Authoritativeness:**\n- Single-topic site with no depth of coverage\n- No external validation of expertise claims\n- No backlinks from authoritative sources\n- Claims of authority without evidence (self-proclaimed \"expert\")\n\n### Trustworthiness — 25 points\nSignals that the content and its publisher are reliable and transparent.\n\n**Signals to evaluate:**\n\n| Signal | Points | How to Score |\n|---|---|---|\n| Contact information visible (address, phone, email) | 4 | 4 if full contact info, 2 if email only, 0 if none |\n| Privacy policy present and linked | 2 | 2 if present, 0 if absent |\n| Terms of service present | 1 | 1 if present, 0 if absent |\n| HTTPS with valid certificate | 2 | 2 if valid HTTPS, 0 if not |\n| Editorial standards or corrections policy | 3 | 3 if documented, 1 if implicit, 0 if none |\n| Transparent about business model and conflicts | 3 | 3 if clear disclosures, 1 if some, 0 if none |\n| Reviews and testimonials from real customers | 3 | 3 if verified reviews, 1 if testimonials, 0 if none |\n| Accurate claims (no misinformation detected) | 4 | 4 if all claims accurate, 2 if mostly accurate, 0 if errors found |\n| Clear affiliate/sponsorship disclosures | 3 | 3 if properly disclosed, 0 if undisclosed or absent |\n\n**What to flag as weak Trustworthiness:**\n- No contact information or physical address\n- Missing privacy policy or terms\n- Undisclosed affiliate links or sponsored content\n- Claims that are verifiably false or misleading\n- No way to contact the publisher for corrections\n\n---\n\n## Content Quality Metrics\n\n### Word Count Benchmarks\nThese are **floors, not targets**. More words does not mean better content. The benchmark is the minimum length to adequately cover a topic for AI citability.\n\n| Page Type | Minimum Words | Ideal Range | Notes |\n|---|---|---|---|\n| Homepage | 500 | 500-1,500 | Clear value proposition, not a wall of text |\n| Blog post | 1,500 | 1,500-3,000 | Thorough but focused |\n| Pillar content / Ultimate guide | 2,000 | 2,500-5,000 | Comprehensive topic coverage |\n| Product page | 300 | 500-1,500 | Descriptions, specs, use cases |\n| Service page | 500 | 800-2,000 | What, how, why, for whom |\n| About page | 300 | 500-1,000 | Company/person story and credentials |\n| FAQ page | 500 | 1,000-2,500 | Thorough answers, not one-liners |\n\n### Readability Assessment\n- **Target Flesch Reading Ease**: 60-70 (8th-9th grade level)\n- This is NOT a direct ranking factor but affects citability — AI platforms prefer content that is clear and unambiguous\n- Overly academic writing (score < 30) reduces citability for general queries\n- Overly simple writing (score > 80) may lack the depth needed for expertise signals\n\n**How to estimate without a tool:**\n- Average sentence length: 15-20 words is ideal\n- Average paragraph length: 2-4 sentences\n- Presence of jargon: should be defined when first used\n- Passive voice: < 15% of sentences\n\n### Paragraph Structure for AI Parsing\nAI platforms extract content at the paragraph level. Each paragraph should be a self-contained unit of meaning.\n\n**Optimal paragraph structure:**\n- **2-4 sentences** per paragraph (1-sentence paragraphs are weak; 5+ sentences are hard to extract)\n- **One idea per paragraph** — do not mix topics within a paragraph\n- **Lead with the key claim** — first sentence should contain the main point\n- **Support with evidence** — remaining sentences provide data, examples, or context\n- **Quotable standalone** — each paragraph should make sense if extracted in isolation\n\n### Heading Structure\n- **One H1 per page** — the primary topic/title\n- **H2 for major sections** — should represent distinct subtopics\n- **H3 for subsections** — nested under relevant H2\n- **No skipped levels** — do not go from H1 to H3 without an H2\n- **Descriptive headings** — \"How to Optimize for AI Search\" not \"Section 2\"\n- **Question-based headings** where appropriate — these map directly to AI queries\n\n### Internal Linking\n- Every content page should link to 3-5 related pages on the same site\n- Links should use descriptive anchor text (not \"click here\")\n- Create a topic cluster structure: pillar page linked to/from all related subtopic pages\n- Orphan pages (no internal links pointing to them) are rarely cited by AI\n\n---\n\n## AI Content Assessment\n\n### AI-Generated Content Policy\nAI-generated content is **acceptable** per Google's guidance (March 2024 clarification) as long as it demonstrates genuine E-E-A-T signals and has human oversight. The concern is not HOW content is created but WHETHER it provides value.\n\n### Signs of Low-Quality AI Content (flag these)\n\n| Signal | Description |\n|---|---|\n| Generic phrasing | \"In today's fast-paced world...\", \"It's important to note that...\", \"At the end of the day...\" |\n| No original insight | Content that only rephrases widely available information |\n| Lack of first-hand experience | No personal anecdotes, case studies, or specific examples |\n| Perfect but empty structure | Well-formatted headings with shallow content beneath them |\n| No specific examples | Uses abstract explanations without concrete instances |\n| Repetitive conclusions | Each section ends with a variation of the same point |\n| Hedging overload | \"Generally speaking\", \"In most cases\", \"It depends on various factors\" without specifying which factors |\n| Missing human voice | No opinions, preferences, or professional judgment expressed |\n| Filler content | Paragraphs that could be deleted without losing information |\n| No data or sources | Claims presented as facts without attribution or evidence |\n\n### High-Quality Content Signals (regardless of production method)\n\n| Signal | Description |\n|---|---|\n| Original data | Surveys, experiments, benchmarks, proprietary analysis |\n| Specific examples | Named products, companies, dates, numbers |\n| Contrarian or nuanced views | Disagreement with conventional wisdom, backed by reasoning |\n| First-person experience | \"When I tested this...\" or \"Our team found...\" |\n| Updated information | References to recent events, current data |\n| Expert opinion | Clear professional judgment, not just facts |\n| Practical recommendations | Specific, actionable advice, not vague guidance |\n| Trade-offs acknowledged | \"This approach works well for X but not for Y because...\" |\n\n---\n\n## Content Freshness Assessment\n\n### Publication Dates\n- Check for visible `datePublished` and `dateModified` in both the content and structured data\n- Content without dates is treated as less trustworthy by AI platforms\n- Dates should be specific (January 15, 2026) not vague (\"recently\")\n\n### Freshness Scoring\n\n| Criterion | Score |\n|---|---|\n| Updated within 3 months | Excellent — current and relevant |\n| Updated within 6 months | Good — still reasonably current |\n| Updated within 12 months | Acceptable — may need refresh |\n| Updated 12-24 months ago | Warning — review for accuracy |\n| No date or 24+ months old | Critical — AI platforms may deprioritize |\n\n### Evergreen Indicators\nSome content remains relevant regardless of age. Flag content as evergreen if:\n- It covers fundamental concepts that do not change (physics, basic math, legal definitions)\n- It is clearly labeled as a reference/guide for lasting concepts\n- It does not contain time-dependent claims (\"the latest\", \"currently\", \"in 2024\")\n\n---\n\n## Topical Authority Assessment\n\n### What It Is\nTopical authority measures whether a site comprehensively covers a topic rather than touching on it superficially. AI platforms prefer citing sites that are recognized authorities on their topics.\n\n### How to Assess\n1. **Content breadth**: Does the site have multiple pages covering different aspects of its core topic?\n2. **Content depth**: Do individual pages go deep into subtopics?\n3. **Topic clustering**: Are pages organized into logical groups with internal linking?\n4. **Content gaps**: Are there obvious subtopics that the site should cover but does not?\n5. **Competitor comparison**: Do competitors cover subtopics that this site misses?\n\n### Scoring\n\n| Level | Description | Score Impact |\n|---|---|---|\n| Authority | 20+ pages covering topic comprehensively, strong clustering | +10 bonus |\n| Developing | 10-20 pages with some clustering | +5 bonus |\n| Emerging | 5-10 pages on topic, limited clustering | +0 |\n| Thin | < 5 pages, no clustering | -5 penalty |\n\n---\n\n## Overall Scoring (0-100)\n\n### Score Composition\n| Component | Weight | Max Points |\n|---|---|---|\n| Experience | 25% | 25 |\n| Expertise | 25% | 25 |\n| Authoritativeness | 25% | 25 |\n| Trustworthiness | 25% | 25 |\n| **Subtotal** | | **100** |\n| Topical Authority Modifier | | +10 to -5 |\n| **Final Score** | | **Capped at 100** |\n\n### Score Interpretation\n- **85-100**: Exceptional — strong AI citation candidate across platforms\n- **70-84**: Good — solid foundation, specific improvements will increase citability\n- **55-69**: Average — multiple E-E-A-T gaps reducing AI visibility\n- **40-54**: Below Average — significant content quality and trust issues\n- **0-39**: Poor — fundamental content strategy overhaul needed\n\n---\n\n## Output Format\n\nGenerate **GEO-CONTENT-ANALYSIS.md** with:\n\n```markdown\n# GEO Content Quality & E-E-A-T Analysis — [Domain]\nDate: [Date]\n\n## Content Score: XX/100\n\n## E-E-A-T Breakdown\n| Dimension | Score | Key Finding |\n|---|---|---|\n| Experience | XX/25 | [One-line summary] |\n| Expertise | XX/25 | [One-line summary] |\n| Authoritativeness | XX/25 | [One-line summary] |\n| Trustworthiness | XX/25 | [One-line summary] |\n\n## Topical Authority Modifier: [+10 to -5]\n\n## Pages Analyzed\n| Page | Word Count | Readability | Heading Structure | Citability Rating |\n|---|---|---|---|---|\n| [URL] | [Count] | [Score] | [Pass/Warn/Fail] | [High/Medium/Low] |\n\n## E-E-A-T Detailed Findings\n\n### Experience\n[Specific passages and pages with strong/weak experience signals]\n\n### Expertise\n[Author credentials found, technical depth assessment, specific gaps]\n\n### Authoritativeness\n[External validation found, topical authority assessment, gaps]\n\n### Trustworthiness\n[Trust signals present/missing, accuracy concerns if any]\n\n## Content Quality Issues\n[Specific passages flagged with reasons and rewrite suggestions]\n\n## AI Content Concerns\n[Any low-quality AI content patterns detected, with specific examples]\n\n## Freshness Assessment\n| Page | Published | Last Updated | Status |\n|---|---|---|---|\n| [URL] | [Date] | [Date] | [Current/Stale/No Date] |\n\n## Citability Assessment\n### Most Citable Passages\n[Top 5 passages that AI platforms are most likely to cite, with reasons]\n\n### Least Citable Pages\n[Pages with lowest citability, with specific improvement recommendations]\n\n## Improvement Recommendations\n### Quick Wins\n[Specific content changes that can be made immediately]\n\n### Content Gaps\n[Topics the site should cover to strengthen topical authority]\n\n### Author/E-E-A-T Improvements\n[Specific steps to strengthen E-E-A-T signals]\n```\n","skills/geo-crawlers/SKILL.md":"---\nname: geo-crawlers\ndescription: AI crawler access analysis. Checks robots.txt, meta tags, and HTTP headers to determine which AI crawlers can access the site. Provides a complete access map and recommendations for maximizing AI visibility while maintaining appropriate control.\nallowed-tools:\n  - Read\n  - Grep\n  - Glob\n  - Bash\n  - WebFetch\n  - Write\n---\n\n# AI Crawler Access Analysis Skill\n\n## Purpose\n\nThis skill analyzes a website's accessibility to AI crawlers -- the bots that AI companies use to discover, index, and train on web content. If AI crawlers are blocked, the site's content cannot appear in AI-generated responses regardless of its quality. Crawler access is the foundational technical requirement for GEO.\n\n## Key Insight\n\nAs of early 2026, many websites inadvertently block AI crawlers through overly aggressive robots.txt rules, inherited from legacy SEO configurations. An Originality.ai 2025 study found that over 35% of the top 1,000 websites block at least one major AI crawler, and 5-10% block all AI crawlers. Blocking AI crawlers is the single fastest way to become invisible in AI-generated search results.\n\n---\n\n## Complete AI Crawler Reference\n\n### Tier 1: Critical for AI Search Visibility (RECOMMEND: ALLOW)\n\nThese crawlers power the AI search products where users actively look for answers. Blocking them directly reduces your visibility in AI-generated responses.\n\n#### GPTBot\n- **Operator:** OpenAI\n- **User-Agent:** `GPTBot`\n- **Full User-Agent String:** `Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; GPTBot/1.2; +https://openai.com/gptbot)`\n- **Purpose:** Fetches content for ChatGPT's web browsing, plugins, and search features. Content accessed by GPTBot may be used to improve OpenAI models.\n- **Impact of Blocking:** Content will NOT appear in ChatGPT Search results or be accessible when users ask ChatGPT to browse the web. This is the highest-impact AI crawler to allow.\n- **Recommendation:** **ALLOW** -- ChatGPT has 300M+ weekly active users as of 2025. Blocking GPTBot removes your content from one of the largest AI search surfaces.\n\n#### OAI-SearchBot\n- **Operator:** OpenAI\n- **User-Agent:** `OAI-SearchBot`\n- **Full User-Agent String:** `Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; OAI-SearchBot/1.0; +https://docs.openai.com/bots/overview)`\n- **Purpose:** Specifically powers ChatGPT's search feature. Unlike GPTBot, content accessed by OAI-SearchBot is NOT used for model training -- only for live search results.\n- **Impact of Blocking:** Content will not appear in ChatGPT's search results even if GPTBot is allowed.\n- **Recommendation:** **ALLOW** -- This is a search-only crawler with no training implications. There is no strategic reason to block it.\n\n#### ChatGPT-User\n- **Operator:** OpenAI\n- **User-Agent:** `ChatGPT-User`\n- **Full User-Agent String:** `Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ChatGPT-User/1.0; +https://openai.com/bot)`\n- **Purpose:** Used when a ChatGPT user explicitly asks the model to visit a specific URL. Acts like a browser agent on behalf of the user.\n- **Impact of Blocking:** ChatGPT cannot visit your pages when users ask it to read or summarize them. This prevents direct user-initiated traffic.\n- **Recommendation:** **ALLOW** -- Blocking this bot prevents users who are actively trying to engage with your content from accessing it through ChatGPT.\n\n#### ClaudeBot\n- **Operator:** Anthropic\n- **User-Agent:** `ClaudeBot`\n- **Full User-Agent String:** `ClaudeBot/1.0; +https://www.anthropic.com/claude-bot`\n- **Purpose:** Fetches web content for Claude's features including web search, citations, and analysis tools.\n- **Impact of Blocking:** Content will not be accessible to Claude for web search or when users ask Claude to analyze specific URLs.\n- **Recommendation:** **ALLOW** -- Claude is a major AI assistant with growing market share. Blocking ClaudeBot reduces your AI search footprint.\n\n#### PerplexityBot\n- **Operator:** Perplexity AI\n- **User-Agent:** `PerplexityBot`\n- **Full User-Agent String:** `Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; PerplexityBot/1.0; +https://perplexity.ai/perplexitybot)`\n- **Purpose:** Powers Perplexity's AI search engine, which provides sourced answers with direct citations and links back to source pages.\n- **Impact of Blocking:** Content will not appear in Perplexity search results. Perplexity is one of the best referral traffic sources among AI search products because it always displays source links.\n- **Recommendation:** **ALLOW** -- Perplexity drives actual referral traffic and always attributes sources. High-value AI crawler for publishers and businesses.\n\n---\n\n### Tier 2: Important for Broader AI Ecosystem (RECOMMEND: ALLOW)\n\nThese crawlers serve large AI platforms or search ecosystems. Allowing them increases your content's reach.\n\n#### Google-Extended\n- **Operator:** Google\n- **User-Agent:** `Google-Extended`\n- **Purpose:** Controls whether Google uses your content for Gemini model training and AI Overviews improvement. **CRITICAL NOTE:** Blocking Google-Extended does NOT affect your Google Search rankings or your appearance in Google Search results. That is controlled by the standard Googlebot.\n- **Impact of Blocking:** Content may not be used for Gemini training or to improve AI Overviews. However, your content can still appear in AI Overviews based on standard search indexing.\n- **Recommendation:** **ALLOW** -- Blocking provides minimal content protection upside while reducing your presence in Google's AI features. Since it does not affect standard search ranking, the only reason to block is philosophical objection to training data usage.\n\n#### GoogleOther\n- **Operator:** Google\n- **User-Agent:** `GoogleOther`\n- **Purpose:** Used by Google for various non-search-ranking purposes including research, one-off crawls, and AI-related data collection.\n- **Impact of Blocking:** Minimal impact on search rankings. May reduce presence in Google's AI research and experimental features.\n- **Recommendation:** **ALLOW** -- Low risk, moderate potential benefit for AI feature inclusion.\n\n#### Applebot-Extended\n- **Operator:** Apple\n- **User-Agent:** `Applebot-Extended`\n- **Purpose:** Used by Apple to train and improve Apple Intelligence features, Siri, and Apple's AI products. Separate from standard Applebot (which powers Siri search and Spotlight Suggestions).\n- **Impact of Blocking:** Content may not be used in Apple Intelligence features. Standard Siri and Spotlight functionality is unaffected (controlled by Applebot).\n- **Recommendation:** **ALLOW** -- Apple Intelligence is integrated into all Apple devices (2B+ active devices). Presence in Apple's AI features has growing strategic value.\n\n#### Amazonbot\n- **Operator:** Amazon\n- **User-Agent:** `Amazonbot`\n- **Full User-Agent String:** `Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/600.2.5 (KHTML, like Gecko) Version/8.0.2 Safari/600.2.5 (compatible; Amazonbot/0.1; +https://developer.amazon.com/support/amazonbot)`\n- **Purpose:** Indexes content for Alexa answers and Amazon's AI features.\n- **Impact of Blocking:** Content will not appear in Alexa voice responses or Amazon's AI-powered search features.\n- **Recommendation:** **ALLOW** -- Relevant for voice search optimization. Lower priority than Tier 1 crawlers but no downside to allowing.\n\n#### FacebookBot\n- **Operator:** Meta\n- **User-Agent:** `FacebookBot`\n- **Purpose:** Used by Meta for AI features across Facebook, Instagram, WhatsApp, and Meta AI assistant.\n- **Impact of Blocking:** Content may not be accessible to Meta AI. Link previews on Facebook/Instagram are handled by a different crawler and are unaffected.\n- **Recommendation:** **ALLOW** -- Meta AI is embedded in apps with 3B+ combined users. Growing importance for AI visibility.\n\n---\n\n### Tier 3: Training-Only Crawlers (ALLOW or BLOCK Based on Strategy)\n\nThese crawlers are primarily used for AI model training rather than live search features. Blocking them does not affect AI search visibility.\n\n#### CCBot\n- **Operator:** Common Crawl (nonprofit)\n- **User-Agent:** `CCBot`\n- **Full User-Agent String:** `CCBot/2.0 (https://commoncrawl.org/faq/)`\n- **Purpose:** Builds the Common Crawl dataset, which is used as training data by many AI companies (Google, Meta, Stability AI, and others).\n- **Impact of Blocking:** Content will not appear in future Common Crawl datasets. Does NOT affect any live AI search product.\n- **Recommendation:** **CONTEXT-DEPENDENT** -- Allow if you want maximum long-term AI training presence. Block if you want to control training data usage. No impact on search visibility.\n\n#### anthropic-ai\n- **Operator:** Anthropic\n- **User-Agent:** `anthropic-ai`\n- **Purpose:** Used by Anthropic for AI safety research and Claude model training. Separate from ClaudeBot (which powers live features).\n- **Impact of Blocking:** Content will not be used for Claude training. Does NOT affect Claude's live search or web browsing features (controlled by ClaudeBot).\n- **Recommendation:** **CONTEXT-DEPENDENT** -- Similar to CCBot. Allow for training presence, block for training data control. No impact on live AI search.\n\n#### Bytespider\n- **Operator:** ByteDance\n- **User-Agent:** `Bytespider`\n- **Purpose:** Used by ByteDance for various AI products including TikTok's AI features and Doubao (their ChatGPT competitor in China).\n- **Impact of Blocking:** Content will not be used for ByteDance AI products. Minimal impact for Western-market businesses.\n- **Recommendation:** **BLOCK** for most Western businesses (aggressive crawling behavior reported, minimal search visibility benefit). **ALLOW** if targeting Chinese/Asian markets.\n\n#### cohere-ai\n- **Operator:** Cohere\n- **User-Agent:** `cohere-ai`\n- **Purpose:** Used by Cohere for model training. Cohere powers enterprise AI solutions and the Coral chat product.\n- **Impact of Blocking:** Content will not be used for Cohere model training. Minimal direct consumer-facing impact.\n- **Recommendation:** **CONTEXT-DEPENDENT** -- Low priority. Allow or block based on general training data stance.\n\n---\n\n## Recommendation Matrix Summary\n\n| Crawler | Tier | Recommendation | Reason |\n|---|---|---|---|\n| GPTBot | 1 | **ALLOW** | Powers ChatGPT Search (300M+ users) |\n| OAI-SearchBot | 1 | **ALLOW** | Search-only, no training use |\n| ChatGPT-User | 1 | **ALLOW** | User-initiated browsing |\n| ClaudeBot | 1 | **ALLOW** | Claude web search and analysis |\n| PerplexityBot | 1 | **ALLOW** | Best referral traffic AI search |\n| Google-Extended | 2 | **ALLOW** | Gemini features; no search rank impact |\n| GoogleOther | 2 | **ALLOW** | Google AI research |\n| Applebot-Extended | 2 | **ALLOW** | Apple Intelligence (2B+ devices) |\n| Amazonbot | 2 | **ALLOW** | Alexa and Amazon AI |\n| FacebookBot | 2 | **ALLOW** | Meta AI (3B+ app users) |\n| CCBot | 3 | Context | Training data only |\n| anthropic-ai | 3 | Context | Training data only |\n| Bytespider | 3 | **BLOCK** | Aggressive crawler, low benefit |\n| cohere-ai | 3 | Context | Training data only |\n\n### Maximum AI Visibility Configuration (robots.txt)\n\nFor sites wanting maximum AI search visibility:\n\n```\n# AI Crawlers - ALLOWED for AI search visibility\nUser-agent: GPTBot\nAllow: /\n\nUser-agent: OAI-SearchBot\nAllow: /\n\nUser-agent: ChatGPT-User\nAllow: /\n\nUser-agent: ClaudeBot\nAllow: /\n\nUser-agent: anthropic-ai\nAllow: /\n\nUser-agent: PerplexityBot\nAllow: /\n\nUser-agent: Google-Extended\nAllow: /\n\nUser-agent: GoogleOther\nAllow: /\n\nUser-agent: Applebot-Extended\nAllow: /\n\nUser-agent: Amazonbot\nAllow: /\n\nUser-agent: FacebookBot\nAllow: /\n\n# AI Crawlers - BLOCKED (aggressive/low value)\nUser-agent: Bytespider\nDisallow: /\n\nUser-agent: CCBot\nDisallow: /\n```\n\n---\n\n## Analysis Procedure\n\n### Step 1: Fetch and Parse robots.txt\n\n1. Use WebFetch to retrieve `[domain]/robots.txt`.\n2. Parse all User-agent directives and their associated Allow/Disallow rules.\n3. For each AI crawler in the reference list above:\n   - Check if there is a specific User-agent block for that crawler\n   - Check if there is a wildcard (`User-agent: *`) block that would apply\n   - Determine effective access: **Allowed**, **Blocked**, or **Not Mentioned** (inherits wildcard rules)\n4. Note any `Crawl-delay` directives that may slow AI crawler access.\n5. Check for `Sitemap` directives (AI crawlers use these for discovery).\n\n### Step 2: Check Meta Robots Tags\n\n1. For a sample of 5-10 key pages, fetch the HTML and check for:\n   - `<meta name=\"robots\" content=\"noindex\">` -- blocks all bots\n   - `<meta name=\"robots\" content=\"nofollow\">` -- prevents link following\n   - `<meta name=\"robots\" content=\"noai\">` -- emerging tag to block AI use\n   - `<meta name=\"robots\" content=\"noimageai\">` -- blocks AI image training\n   - Bot-specific meta tags: `<meta name=\"GPTBot\" content=\"noindex\">`\n2. Record any page-level overrides of the robots.txt directives.\n\n### Step 3: Check HTTP Headers\n\n1. For the same sample pages, check response headers for:\n   - `X-Robots-Tag: noindex` -- HTTP header equivalent of meta noindex\n   - `X-Robots-Tag: noai` -- HTTP header to block AI use\n   - `X-Robots-Tag: noimageai` -- blocks AI image training\n   - Bot-specific headers: `X-Robots-Tag: GPTBot: noindex`\n2. Note that HTTP headers override meta tags and apply to non-HTML resources too.\n\n### Step 4: Check for AI-Specific Files\n\n1. Check for `/llms.txt` (emerging standard for AI crawler guidance).\n2. Check for `/.well-known/ai-plugin.json` (OpenAI plugin manifest).\n3. Check for `/ai.txt` (proposed standard, similar to ads.txt for AI).\n4. Record presence/absence and quality of each file.\n\n### Step 5: Assess JavaScript Rendering Requirements\n\n1. Check if the site is a Single Page Application (SPA) or heavily JavaScript-rendered.\n2. AI crawlers vary in their JavaScript rendering capabilities:\n   - GPTBot: Limited JS rendering\n   - ClaudeBot: Limited JS rendering\n   - PerplexityBot: Limited JS rendering\n   - Googlebot: Full JS rendering (but Google-Extended inherits this)\n3. If critical content requires JS rendering, flag this as a potential issue.\n4. Check for Server-Side Rendering (SSR) or Static Site Generation (SSG) as mitigations.\n\n### Step 6: Parse Content Signals\n\nUsing the already-fetched robots.txt from Step 1, scan for `Content-Signal:` directives (IETF draft `draft-romm-aipref-contentsignals`).\n\n1. Scan every line for a line starting with `Content-Signal:` (case-insensitive).\n2. If found:\n   - Parse all key=value pairs (split on `,` then on `=`).\n   - Validate keys against the known set: `ai-train`, `search`, `ai-personalization`, `ai-retrieval`.\n   - Validate values: only `yes` and `no` are valid.\n   - Flag any unknown keys or invalid values as a warning — the spec is still an IETF draft.\n   - Record the result as **Pass** and surface parsed values with plain-English meaning.\n3. If absent: record as **Recommendation** — the site has not declared AI usage preferences.\n\nNo additional HTTP request is needed. robots.txt is already fetched in Step 1.\n\n### Step 7: Detect Cloudflare Managed robots.txt\n\nUsing the already-fetched robots.txt from Step 1, check for a block starting with `# BEGIN Cloudflare Managed content` (case-insensitive).\n\n1. If found, Cloudflare is prepending its managed robots.txt to the site's own file. That block disallows GPTBot, ClaudeBot, Google-Extended, Applebot-Extended, Amazonbot, Bytespider, CCBot and meta-externalagent.\n2. Record it as a **Critical Issue** if the site owner's own rules allow AI crawlers. The owner usually doesn't know it's on, because the block never appears in the robots.txt file on their server, only in the live response.\n3. Recommend: in the Cloudflare dashboard, go to Security Settings, filter by \"Bot traffic\", and turn off \"block training in robots.txt\" if the site wants to be used by AI. If blocking training is intentional, note it as a deliberate choice, not an issue.\n\nNo additional HTTP request is needed. `fetch_page.py robots` returns this as `cloudflare_managed: true`.\n\n---\n\n## Output Format\n\nGenerate a file called `GEO-CRAWLER-ACCESS.md`:\n\n```markdown\n# AI Crawler Access Report: [Domain]\n\n**Analysis Date:** [Date]\n**Domain:** [Domain]\n**robots.txt Status:** [Found/Not Found/Error]\n\n---\n\n## Crawler Access Summary\n\n| Crawler | Operator | Tier | Status | Impact |\n|---|---|---|---|---|\n| GPTBot | OpenAI | 1 | [Allowed/Blocked/Not Mentioned] | [Impact description] |\n| OAI-SearchBot | OpenAI | 1 | [Status] | [Impact] |\n| ChatGPT-User | OpenAI | 1 | [Status] | [Impact] |\n| ClaudeBot | Anthropic | 1 | [Status] | [Impact] |\n| PerplexityBot | Perplexity | 1 | [Status] | [Impact] |\n| Google-Extended | Google | 2 | [Status] | [Impact] |\n| GoogleOther | Google | 2 | [Status] | [Impact] |\n| Applebot-Extended | Apple | 2 | [Status] | [Impact] |\n| Amazonbot | Amazon | 2 | [Status] | [Impact] |\n| FacebookBot | Meta | 2 | [Status] | [Impact] |\n| CCBot | Common Crawl | 3 | [Status] | [Impact] |\n| anthropic-ai | Anthropic | 3 | [Status] | [Impact] |\n| Bytespider | ByteDance | 3 | [Status] | [Impact] |\n| cohere-ai | Cohere | 3 | [Status] | [Impact] |\n\n## AI Visibility Score: [X]/100\n\n**Tier 1 Access:** [X/5 crawlers allowed]\n**Tier 2 Access:** [X/5 crawlers allowed]\n**Tier 3 Access:** [X/4 crawlers allowed]\n\n---\n\n## Critical Issues\n\n[List any Tier 1 crawlers that are blocked]\n\n## Recommendations\n\n### Immediate Actions\n[Specific robots.txt changes needed]\n\n### robots.txt Recommendation\n```\n[Complete recommended robots.txt content for AI crawlers]\n```\n\n### Additional Technical Findings\n- **Meta Robots Tags:** [Findings]\n- **X-Robots-Tag Headers:** [Findings]\n- **JavaScript Rendering:** [Assessment]\n- **llms.txt:** [Present/Absent]\n- **Sitemap Accessibility:** [Assessment]\n\n### Content Signals (IETF Draft)\n\n**Status:** Present / Absent\n\n<!-- If present: -->\n| Signal Key | Value | Meaning |\n|---|---|---|\n| ai-train | no | Opted out of AI model training |\n| search | yes | Permits use in AI-powered search results |\n\n<!-- If absent: -->\n**Recommendation:** Add a `Content-Signal:` directive to robots.txt to declare AI usage preferences explicitly. Example:\n\n`Content-Signal: ai-train=no, search=yes, ai-retrieval=yes`\n\nSee https://contentsignals.org/ for the full specification.\n```\n\n---\n\n## Scoring for Crawler Access\n\nThe AI Crawler Access Score is calculated as:\n\n| Component | Weight | Scoring |\n|---|---|---|\n| Tier 1 Crawlers Allowed | 50% | 20 points per Tier 1 crawler allowed (5 crawlers = 100 points max, scaled to 50) |\n| Tier 2 Crawlers Allowed | 25% | 20 points per Tier 2 crawler allowed (5 crawlers = 100 points max, scaled to 25) |\n| No Blanket AI Blocks | 15% | Full points if no `User-agent: *` Disallow: / and no noai meta tags |\n| AI-Specific Files Present | 10% | 5 points for llms.txt, 5 points for sitemap accessible to AI crawlers |\n\nFinal score = sum of all weighted components, capped at 100.\n","skills/geo-llmstxt/SKILL.md":"---\nname: geo-llmstxt\ndescription: Analyzes and generates llms.txt files -- the emerging standard for helping AI systems understand website structure and content. Can validate existing llms.txt files or generate new ones from scratch by crawling the site.\nallowed-tools:\n  - Read\n  - Grep\n  - Glob\n  - Bash\n  - WebFetch\n  - Write\n---\n\n# llms.txt Standard Analysis and Generation Skill\n\n## Purpose\n\nThis skill handles everything related to the `llms.txt` standard -- an emerging convention (proposed by Jeremy Howard in September 2024, gaining adoption through 2025-2026) that allows websites to provide structured guidance to AI systems about their content, structure, and key information. It is analogous to `robots.txt` (which tells crawlers what NOT to access) but instead tells AI systems what IS most useful to understand about the site.\n\n## Why llms.txt Matters\n\nAI language models face a fundamental challenge when processing websites: they must determine which pages are most important, what the site is about, and how content is organized -- typically by crawling many pages and inferring structure. `llms.txt` solves this by providing an explicit, machine-readable (and human-readable) summary.\n\n**Benefits of having a well-crafted llms.txt:**\n\n1. **Faster AI comprehension:** AI systems can understand your site's purpose and structure from a single file rather than crawling dozens of pages.\n2. **Controlled narrative:** You choose which pages and facts AI systems see first, shaping how they represent your brand.\n3. **Higher citation accuracy:** AI systems that consult llms.txt can cite the correct, authoritative page for each topic.\n4. **Reduced misrepresentation:** Key facts (pricing, features, locations) are stated explicitly, reducing AI hallucination about your business.\n5. **Early adopter advantage:** As of early 2026, fewer than 5% of websites have an llms.txt file, making it a differentiator.\n\n---\n\n## The llms.txt Specification\n\n### File Location\n\nThe file MUST be located at the root of the domain:\n```\nhttps://example.com/llms.txt\n```\n\n### Format Specification\n\nThe file uses Markdown formatting with specific conventions:\n\n```markdown\n# [Site Name]\n\n> [One-sentence description of what the site/business does. Keep under 200 characters.]\n\n## Docs\n\n- [Page Title](https://example.com/page-url): Concise description of what this page covers and why it matters.\n- [Another Page](https://example.com/another-page): Description of content.\n\n## Optional\n\n- [Less Critical Page](https://example.com/optional-page): Description.\n```\n\n### Detailed Format Rules\n\n**1. Title (Required)**\n```markdown\n# Site Name\n```\n- Must be the first line of the file.\n- Should be the official business/site name.\n- Use the H1 heading format (single `#`).\n\n**2. Description (Required)**\n```markdown\n> Brief description of the site/business\n```\n- Must appear immediately after the title.\n- Use Markdown blockquote format (`>`).\n- Keep under 200 characters.\n- Should clearly state what the business does and who it serves.\n- Avoid marketing fluff -- be factual and specific.\n\n**3. Main Sections (Required -- at least one)**\n\nUse H2 headings (`##`) to organize pages by category. Common section names:\n\n| Section Name | Purpose | Example Content |\n|---|---|---|\n| `## Docs` | Primary documentation or key pages | Product pages, service descriptions, core content |\n| `## Optional` | Secondary pages worth knowing about | Blog posts, supplementary resources |\n| `## API` | API documentation | API reference, authentication guides |\n| `## Blog` | Blog or news content | Recent/popular articles |\n| `## Products` | Product catalog | Product pages, pricing |\n| `## Services` | Service offerings | Service descriptions, process pages |\n| `## About` | Company information | About page, team, mission |\n| `## Resources` | Educational/reference content | Guides, tutorials, whitepapers |\n| `## Legal` | Legal documents | Terms of service, privacy policy |\n| `## Contact` | Contact information | Contact page, support channels |\n\n**4. Page Entries (Required)**\n\nEach entry follows the format:\n```markdown\n- [Page Title](URL): Description of page content\n```\n\nRules for page entries:\n- **Title:** Use the actual page title or a clear descriptive title.\n- **URL:** Must be a full, absolute URL (not relative paths).\n- **Description:** 10-30 words describing what the page covers. Be specific about the information available.\n- **Order:** List pages in order of importance within each section.\n- **Limit:** Include 10-30 page entries total. Prioritize your most authoritative and useful pages.\n\n**5. Key Facts Section (Recommended)**\n\n```markdown\n## Key Facts\n- Founded in [year] by [founder(s)]\n- Headquarters: [City, Country]\n- [X] customers/users in [Y] countries\n- Key products: [Product A], [Product B], [Product C]\n- Industry: [Industry classification]\n```\n\nThis section provides quick reference data that AI systems frequently need to answer user queries about your business.\n\n**6. Contact Section (Recommended)**\n\n```markdown\n## Contact\n- Website: https://example.com\n- Email: hello@example.com\n- Support: support@example.com\n- Phone: +1-555-123-4567\n- Address: 123 Main St, City, State, ZIP, Country\n```\n\n---\n\n## llms-full.txt (Extended Version)\n\nIn addition to `llms.txt`, sites can provide `/llms-full.txt` -- an extended version with more detail.\n\n**Differences from llms.txt:**\n\n| Feature | llms.txt | llms-full.txt |\n|---|---|---|\n| **Length** | Concise (50-150 lines) | Comprehensive (150-500+ lines) |\n| **Page entries** | 10-30 key pages | 30-100+ pages |\n| **Descriptions** | 10-30 words per entry | 30-100 words per entry, may include key facts from each page |\n| **Audience** | Quick AI comprehension | Deep AI analysis |\n| **Sections** | 3-6 sections | 8-15 sections |\n| **Key facts** | Business-level facts | Page-level facts and data points |\n\nBoth files can coexist. AI systems check for `llms.txt` first, then may optionally load `llms-full.txt` for deeper understanding.\n\n---\n\n## Analysis Mode\n\nWhen checking an existing llms.txt file:\n\n### Step 1: Fetch the File\n\n1. Use WebFetch to retrieve `[domain]/llms.txt`.\n2. Also check for `[domain]/llms-full.txt`.\n3. Record HTTP status code:\n   - **200:** File exists -- proceed to validation.\n   - **404:** File does not exist -- recommend generation.\n   - **403:** File exists but is blocked -- flag as misconfiguration.\n   - **301/302:** Redirect -- follow and note the redirect.\n\n### Step 2: Validate Format\n\nCheck each structural element:\n\n| Element | Check | Severity if Missing |\n|---|---|---|\n| H1 Title | Present, matches business name | Critical |\n| Blockquote description | Present, under 200 chars, factual | High |\n| At least one H2 section | Present | Critical |\n| Page entries with URLs | At least 5 entries present | High |\n| URLs are absolute | All URLs use full https:// paths | High |\n| URLs are valid | All URLs return 200 status | Medium |\n| Descriptions present | Every entry has a description after the colon | Medium |\n| Key Facts section | Present with business information | Medium |\n| Contact section | Present with at least email | Low |\n| Reasonable length | 30-200 lines | Low |\n| No broken Markdown | Proper formatting throughout | Medium |\n\n### Step 3: Assess Content Quality\n\nRate the llms.txt on these dimensions:\n\n**Completeness (0-100):**\n- Does it cover all major site sections visible in the navigation?\n- Are the most important/highest-traffic pages included?\n- Is the Key Facts section present with accurate business data?\n- Does it include recent/updated content?\n\n**Accuracy (0-100):**\n- Do descriptions accurately reflect page content?\n- Are URLs valid and pointing to the correct pages?\n- Are Key Facts verifiable and current?\n- Is the business description accurate?\n\n**Usefulness (0-100):**\n- Would an AI system understand the site's purpose from this file alone?\n- Are descriptions specific enough to differentiate pages?\n- Are the most citation-worthy pages highlighted?\n- Is the organization logical and intuitive?\n\n**Overall llms.txt Score** = (Completeness * 0.40) + (Accuracy * 0.35) + (Usefulness * 0.25)\n\n### Step 4: Compare Against Site Content\n\n1. Crawl the site's main navigation and sitemap.\n2. Identify important pages NOT listed in llms.txt.\n3. Check if any listed URLs are broken or redirected.\n4. Verify that the business description matches current homepage messaging.\n5. Flag stale entries (pages that have been significantly updated since the llms.txt was written).\n\n---\n\n## Generation Mode\n\nWhen creating a new llms.txt file from scratch:\n\n### Step 1: Site Discovery\n\n1. Fetch the homepage and extract:\n   - Site name (from `<title>`, `<meta property=\"og:site_name\">`, or H1)\n   - Business description (from meta description or hero section)\n   - Main navigation links\n   - Footer links\n2. Fetch `/sitemap.xml` to discover all public pages.\n3. Identify the site's primary business type (SaaS, E-commerce, Local, Publisher, Agency).\n\n### Step 2: Page Prioritization\n\nCategorize all discovered pages and select the most important ones:\n\n**Always Include:**\n- Homepage\n- About / Company page\n- Pricing page (if exists)\n- Primary product/service pages (top 3-5)\n- Contact page\n- Documentation landing page (if exists)\n\n**Include if High Quality:**\n- Top blog posts (by apparent importance, recency, or comprehensiveness)\n- Case studies or customer stories\n- Key resource/guide pages\n- FAQ page\n- Careers page (for large companies)\n\n**Skip:**\n- Thin category/tag pages\n- Pagination pages\n- Login/signup pages\n- Legal boilerplate (unless specifically relevant)\n- Duplicate or near-duplicate content\n- Pages with minimal unique content\n\n### Step 3: Write Descriptions\n\nFor each selected page:\n\n1. Fetch the page content using WebFetch.\n2. Read the H1, meta description, and first 2-3 paragraphs.\n3. Write a description that:\n   - Is 10-30 words long\n   - States what information is on the page\n   - Mentions specific topics, data, or features covered\n   - Avoids marketing language (\"best,\" \"leading,\" \"revolutionary\")\n   - Uses factual, informative language\n\n**Good description examples:**\n- `Explains the three pricing tiers (Free, Pro, Enterprise) with feature comparison and annual/monthly costs.`\n- `Details the company's founding in 2018, team of 45 employees, and office locations in Austin and London.`\n- `Covers integration setup for Slack, Salesforce, and HubSpot with step-by-step guides and API endpoints.`\n\n**Bad description examples:**\n- `Our amazing pricing page!` (marketing language, no specifics)\n- `Learn more about our company.` (too vague)\n- `Click here for details.` (not descriptive)\n\n### Step 4: Compile Key Facts\n\nGather key business facts from the site:\n\n- Year founded\n- Founder name(s)\n- Headquarters location\n- Number of employees (if public)\n- Number of customers/users (if public)\n- Key products or services (list top 3-5)\n- Industry classification\n- Notable clients or partnerships (if public)\n- Key differentiators (what makes this business unique)\n- Recent milestones or achievements (last 12 months)\n\n### Step 5: Assemble the File\n\nConstruct the llms.txt following this template:\n\n```markdown\n# [Site Name]\n\n> [One clear sentence: what the business does, who it serves, and its primary value proposition. Under 200 characters.]\n\n## Docs\n\n- [Most Important Page](https://example.com/page): Description covering the key content on this page.\n- [Second Page](https://example.com/page-2): Description of this page's content and value.\n- [Third Page](https://example.com/page-3): What users and AI systems will find here.\n\n## Products\n\n- [Product A](https://example.com/product-a): Core features, target users, and pricing model for Product A.\n- [Product B](https://example.com/product-b): What Product B does and how it differs from Product A.\n\n## Resources\n\n- [Guide Title](https://example.com/guide): Comprehensive guide covering [topic] with [X] sections and practical examples.\n- [Blog Post](https://example.com/blog/post): Analysis of [topic] with original data from [source].\n\n## Key Facts\n\n- Founded in [year] by [name(s)]\n- Headquartered in [City, Country]\n- [Specific metric: e.g., \"Serves 10,000+ businesses in 40 countries\"]\n- [Key differentiator: e.g., \"Only platform offering real-time X and Y integration\"]\n- Industry: [Classification]\n\n## Contact\n\n- Website: https://example.com\n- Email: [primary contact email]\n- Support: [support URL or email]\n```\n\n### Step 6: Validate the Generated File\n\nBefore outputting:\n1. Verify all URLs are reachable (200 status).\n2. Confirm total entry count is between 10-30.\n3. Check that no description exceeds 50 words.\n4. Verify the overall file length is 50-150 lines.\n5. Ensure Markdown formatting is clean and consistent.\n\n---\n\n## Output Format\n\n### For Analysis Mode\n\nGenerate `GEO-LLMSTXT-ANALYSIS.md`:\n\n```markdown\n# llms.txt Analysis: [Domain]\n\n**Analysis Date:** [Date]\n**llms.txt Status:** [Found at URL / Not Found / Error]\n**llms-full.txt Status:** [Found / Not Found]\n\n---\n\n## Overall llms.txt Score: [X]/100\n\n| Dimension | Score |\n|---|---|\n| Completeness | [X]/100 |\n| Accuracy | [X]/100 |\n| Usefulness | [X]/100 |\n\n---\n\n## Format Validation\n\n| Element | Status | Notes |\n|---|---|---|\n| H1 Title | [Pass/Fail] | [Notes] |\n| Description blockquote | [Pass/Fail] | [Notes] |\n| H2 Sections | [Pass/Fail] | [X sections found] |\n| Page entries | [Pass/Fail] | [X entries found] |\n| URL validity | [Pass/Fail] | [X broken URLs] |\n| Entry descriptions | [Pass/Fail] | [X missing descriptions] |\n| Key Facts | [Pass/Fail] | [Notes] |\n| Contact section | [Pass/Fail] | [Notes] |\n\n---\n\n## Missing Pages\n\nThese important pages were found on the site but not in llms.txt:\n\n1. [Page Title](URL) -- [Why it should be included]\n2. [Page Title](URL) -- [Why it should be included]\n\n## Improvement Recommendations\n\n1. [Specific recommendation]\n2. [Specific recommendation]\n3. [Specific recommendation]\n\n## Suggested Updated llms.txt\n\n[Complete rewritten llms.txt file if significant improvements are needed]\n```\n\n### For Generation Mode\n\nOutput the complete `llms.txt` file content, ready to be saved to the site's root directory. Also output a brief `GEO-LLMSTXT-GENERATION.md` report explaining:\n- How many pages were discovered and how many were selected\n- The prioritization rationale\n- Any pages that were borderline (might add later)\n- Recommended update frequency (e.g., monthly for active blogs, quarterly for stable sites)\n\n---\n\n## Best Practices Reference\n\n1. **Update regularly.** If your site publishes weekly blog posts, update llms.txt monthly. If your product changes quarterly, update after each release.\n2. **Lead with your strongest content.** The first entries in each section should be your most authoritative, comprehensive pages.\n3. **Be specific in descriptions.** \"Comprehensive 3,000-word guide to React Server Components with code examples\" is far more useful than \"React guide.\"\n4. **Include your differentiators.** If your site has unique data, original research, or exclusive features, highlight these in descriptions and Key Facts.\n5. **Keep it concise.** The llms.txt should be scannable in under 60 seconds. Save detail for llms-full.txt.\n6. **Use absolute URLs.** Always include the full `https://` URL, never relative paths.\n7. **Test after deployment.** After uploading, verify the file is accessible at `https://yourdomain.com/llms.txt` with no redirects.\n8. **Coordinate with robots.txt.** Ensure pages listed in llms.txt are not blocked in robots.txt for AI crawlers.\n9. **Mirror your site structure.** Section names in llms.txt should roughly correspond to your main navigation categories.\n10. **Avoid sensitive pages.** Do not include internal tools, admin panels, or pages with sensitive information.\n","skills/geo-platform-optimizer/SKILL.md":"---\nname: geo-platform-optimizer\ndescription: Platform-specific AI search optimization — audit and optimize for Google AI Overviews, ChatGPT, Perplexity, Gemini, and Bing Copilot individually\nversion: 1.0.0\nauthor: geo-seo-claude\ntags: [geo, ai-search, platform-optimization, chatgpt, perplexity, gemini, aio]\nallowed-tools: Read, Grep, Glob, Bash, WebFetch, Write\n---\n\n# GEO Platform Optimizer\n\n## Core Insight\n\nOnly **11% of domains** are cited by BOTH ChatGPT and Google AI Overviews for the same query. Each AI search platform uses different indexes, ranking logic, and source preferences. A page optimized for Google AI Overviews may be invisible to ChatGPT, and vice versa. Platform-specific optimization is not optional — it is the foundation of any serious GEO strategy.\n\n## How to Use This Skill\n\n1. Collect the target URL and the site's primary topic/industry\n2. Run each platform checklist below against the site\n3. Score each platform on the 0-100 rubric\n4. Generate GEO-PLATFORM-OPTIMIZATION.md with per-platform scores, gaps, and action items\n\n---\n\n## Platform 1: Google AI Overviews (AIO)\n\n### How AIO Selects Sources\n- 92% of AIO citations come from pages already ranking in the **top 10 organic results** — traditional SEO is the gateway\n- However, 47% of citations come from pages ranking **below position 5** — AIO has its own selection logic favoring clarity and directness over raw rank\n- AIO strongly favors pages with **clean structure, direct answers, and scannable formatting**\n- Featured snippet optimization has ~70% overlap with AIO optimization\n- AIO prefers **concise, factual, unambiguous answers** — hedging and filler reduce citation probability\n\n### Optimization Checklist\n\n1. **Question-Based Headings**: Use H2/H3 headings phrased as questions matching real user queries. Check Google's \"People Also Ask\" for the target topic and mirror those exact phrasings.\n2. **Direct Answer in First Paragraph**: After each question heading, provide a clear 1-2 sentence answer immediately. Then expand with supporting detail. The first sentence should be a standalone citation candidate.\n3. **Tables and Structured Comparisons**: AIO heavily cites tables. Convert any comparison, pricing, specification, or feature data into HTML tables. Use clear column headers.\n4. **Ordered and Unordered Lists**: Step-by-step processes should use ordered lists. Feature lists should use unordered lists. AIO extracts these directly.\n5. **FAQ Sections**: Add a dedicated FAQ section with 5-10 real questions. Use proper H3 headings for each question. While FAQPage schema rich results are restricted to govt/health sites since Aug 2023, the content pattern still helps AIO extraction.\n6. **Definitions and Glossary Boxes**: For any industry-specific term, provide a clear definition. Format: \"**[Term]** is [concise definition].\" AIO frequently cites definitions.\n7. **Statistics with Sources**: Include specific numbers with attribution. \"According to [Source], [statistic].\" AIO prefers citeable, specific claims over vague assertions.\n8. **Publication Date**: Include a visible publication date and last-updated date. AIO deprioritizes undated content for time-sensitive queries.\n9. **Author Byline**: Display author name with credentials. Link to an author page with bio, credentials, and sameAs links.\n10. **Page Depth**: Keep target pages within 3 clicks of homepage. AIO rarely cites deep, orphaned content.\n\n### Scoring Rubric (0-100)\n\n| Criterion | Points | How to Score |\n|---|---|---|\n| Ranks in top 10 for target queries | 20 | 20 if yes, 10 if top 20, 0 if beyond |\n| Question-based headings present | 10 | 2 points per question heading, max 10 |\n| Direct answers after headings | 15 | 3 points per direct answer, max 15 |\n| Tables present for comparison data | 10 | 10 if tables used appropriately, 5 if partial, 0 if absent |\n| Lists for processes/features | 10 | 10 if present, 5 if partial |\n| FAQ section with 5+ questions | 10 | 10 if 5+, 5 if 1-4, 0 if none |\n| Statistics with citations | 10 | 2 points per cited stat, max 10 |\n| Publication/updated date visible | 5 | 5 if both dates, 3 if one, 0 if none |\n| Author byline with credentials | 5 | 5 if full byline, 3 if name only, 0 if none |\n| Clean URL + heading hierarchy | 5 | 5 if H1>H2>H3 clean, 3 if minor issues, 0 if broken |\n\n---\n\n## Platform 2: ChatGPT Web Search\n\n### How ChatGPT Selects Sources\n- Uses **Bing's search index** as its foundation (not Google)\n- Top citation sources by domain share: **Wikipedia (47.9%)**, Reddit (11.3%), YouTube, major news outlets\n- ChatGPT heavily weights **entity recognition** — if your brand exists as a structured entity (Wikipedia, Wikidata, Crunchbase), it is far more likely to be cited\n- Prefers **authoritative, well-established sources** over new or niche sites\n- Longer, more comprehensive articles get cited more often than short pieces\n- ChatGPT tends to cite **the most canonical source** for a claim rather than the original\n\n### Optimization Checklist\n\n1. **Wikipedia Presence**: Check if the brand/person/product has a Wikipedia article. If not, assess notability criteria. If notable, create a draft. If an article exists, ensure it is accurate and current.\n2. **Wikidata Entity**: Verify the entity exists on Wikidata (wikidata.org). If not, create a Wikidata item with key properties: instance of, official website, social media links, founding date, headquarters location.\n3. **Bing Webmaster Tools**: Verify the site is registered in Bing Webmaster Tools. Submit sitemap. Check for crawl errors.\n4. **Bing Index Coverage**: Use `site:domain.com` on Bing to verify key pages are indexed. Bing may have different indexed pages than Google.\n5. **Reddit Authority**: Check for brand mentions on Reddit. Identify relevant subreddits. Assess whether the brand participates authentically in discussions.\n6. **YouTube Presence**: Verify YouTube channel exists with relevant content. Video descriptions should contain full URLs and entity information.\n7. **Authoritative Backlinks**: ChatGPT/Bing weight .edu, .gov, and major publication backlinks heavily. Audit backlink profile for these sources.\n8. **Entity Consistency**: Brand name, founding date, leadership, and key facts must be consistent across Wikipedia, Crunchbase, LinkedIn, and the official website.\n9. **Comprehensive Content**: Pages targeting ChatGPT citation should be **2000+ words** with thorough topic coverage. ChatGPT prefers single authoritative sources over combining multiple thin pages.\n10. **Clear Attribution**: Include \"About\" sections, company descriptions, and founding stories. ChatGPT uses these for entity grounding.\n\n### Scoring Rubric (0-100)\n\n| Criterion | Points | How to Score |\n|---|---|---|\n| Wikipedia article exists and is accurate | 20 | 20 if exists, 10 if stub, 0 if none |\n| Wikidata entity with 5+ properties | 10 | 10 if complete, 5 if basic, 0 if none |\n| Bing index coverage of key pages | 10 | 10 if full, 5 if partial, 0 if poor |\n| Reddit brand mentions (positive) | 10 | 10 if active discussions, 5 if mentions, 0 if none |\n| YouTube channel with relevant content | 10 | 10 if active, 5 if present but sparse, 0 if none |\n| Authoritative backlinks (.edu, .gov, press) | 15 | 3 points per authoritative backlink category, max 15 |\n| Entity consistency across platforms | 10 | 10 if consistent, 5 if minor discrepancies, 0 if major |\n| Content comprehensiveness (2000+ words) | 10 | 10 if thorough, 5 if adequate, 0 if thin |\n| Bing Webmaster Tools configured | 5 | 5 if verified, 0 if not |\n\n---\n\n## Platform 3: Perplexity AI\n\n### How Perplexity Selects Sources\n- Top citation sources: **Reddit (46.7%)**, Wikipedia, YouTube, major publications\n- Perplexity places the **heaviest emphasis on community validation** of all AI search platforms\n- Strongly favors **discussion threads** where claims are debated, validated, or expanded by multiple participants\n- Prefers recent content — publication date is a strong ranking signal\n- Cites **multiple sources per answer** (typically 5-15), so there is more opportunity for mid-authority sites to appear\n- Uses its own crawling infrastructure in addition to search APIs\n\n### Optimization Checklist\n\n1. **Active Reddit Presence**: The brand or its representatives should participate authentically in relevant subreddit discussions. Not promotional — helpful, specific, and community-oriented.\n2. **Reddit AMAs and Threads**: Encourage or participate in AMAs, detailed discussion threads, and community Q&As. Perplexity treats these as high-signal content.\n3. **Forum and Community Presence**: Beyond Reddit, check Hacker News, Stack Overflow, Quora, and niche industry forums. Perplexity indexes these heavily.\n4. **Discussion-Friendly Content**: Publish content that invites discussion — opinion pieces, research findings, contrarian takes, original data. Content that gets shared and debated in communities ranks higher.\n5. **Freshness Signals**: Publish content with clear dates. Update content regularly. Perplexity deprioritizes stale content more aggressively than other platforms.\n6. **Multiple Source Validation**: Claims in your content should be supported by other sources. Perplexity cross-references and prefers claims it can verify from multiple origins.\n7. **YouTube Video Content**: Create video content that Perplexity can reference. Ensure video titles, descriptions, and transcripts contain target information.\n8. **Direct, Quotable Passages**: Write paragraphs that can stand alone as citations. Each paragraph should make one clear point with supporting evidence.\n9. **Original Data and Research**: Publish original surveys, benchmarks, case studies, or datasets. Perplexity heavily favors primary sources.\n10. **Perplexity Pages**: Check if Perplexity has created a \"Page\" about your topic/brand. These are curated summaries that influence future citations.\n\n### Scoring Rubric (0-100)\n\n| Criterion | Points | How to Score |\n|---|---|---|\n| Active Reddit presence in relevant subreddits | 20 | 20 if active contributor, 10 if mentioned, 0 if absent |\n| Forum/community mentions (HN, SO, Quora) | 10 | 10 if multiple platforms, 5 if one, 0 if none |\n| Content freshness (updated within 6 months) | 10 | 10 if recent, 5 if within year, 0 if older |\n| Original research/data published | 15 | 15 if original research, 10 if case studies, 5 if some data, 0 if none |\n| YouTube content with transcripts | 10 | 10 if active channel, 5 if some videos, 0 if none |\n| Quotable, standalone paragraphs | 10 | 2 points per well-structured quotable paragraph, max 10 |\n| Multi-source claim validation | 10 | 10 if claims well-sourced, 5 if some sourcing, 0 if none |\n| Discussion-generating content | 10 | 10 if content gets shared/discussed, 5 if some engagement, 0 if none |\n| Wikipedia/Wikidata presence | 5 | 5 if present, 0 if absent |\n\n---\n\n## Platform 4: Google Gemini\n\n### How Gemini Selects Sources\n- Uses **Google's search index** plus strong weighting toward **Google-owned properties**\n- YouTube content is weighted significantly more heavily than in standard Google Search\n- Google Business Profile data is directly accessible to Gemini\n- Gemini uses Google's Knowledge Graph directly — entity presence in Knowledge Graph is a major advantage\n- Structured data (Schema.org) is consumed directly by Gemini for entity understanding\n- Gemini multi-modal: can reference images, videos, and text together\n\n### Optimization Checklist\n\n1. **Google Knowledge Panel**: Check if the brand has a Google Knowledge Panel. If not, claim it through Google Business Profile or structured data. Ensure all information is accurate.\n2. **Google Business Profile**: Complete and optimize GBP with all fields: hours, services, photos, posts, Q&A. Gemini pulls directly from GBP for local queries.\n3. **YouTube Strategy**: Create YouTube content for every key topic. Optimize titles, descriptions, timestamps, and closed captions. Gemini cites YouTube more than any other AI platform.\n4. **YouTube Chapters and Timestamps**: Use chapters (timestamps in description) so Gemini can reference specific segments of videos.\n5. **Google Merchant Center**: For e-commerce, ensure products are in Google Merchant Center. Gemini references product data directly.\n6. **Structured Data (Schema.org)**: Implement comprehensive Schema.org markup. Gemini uses this for entity understanding more aggressively than other platforms.\n7. **Google Sites Ecosystem**: Ensure presence across Google ecosystem: Google Scholar (for research), Google News (for publishers), Google Maps (for local).\n8. **Image Optimization**: Gemini is multi-modal. Use descriptive alt text, structured image filenames, and high-quality images. Include relevant images with every piece of content.\n9. **Google E-E-A-T Signals**: All standard Google E-E-A-T signals apply with extra weight. Author pages, about pages, editorial policies, and expertise demonstrations.\n10. **Chrome Web Store / Google Workspace Marketplace**: For software companies, presence on Google platforms adds entity signals.\n\n### Scoring Rubric (0-100)\n\n| Criterion | Points | How to Score |\n|---|---|---|\n| Google Knowledge Panel exists | 15 | 15 if complete, 10 if partial, 0 if none |\n| Google Business Profile complete | 10 | 10 if fully optimized, 5 if basic, 0 if none |\n| YouTube channel with topic-relevant content | 20 | 20 if active with chapters, 10 if present, 0 if none |\n| Schema.org structured data implemented | 15 | 15 if comprehensive, 10 if basic, 5 if minimal, 0 if none |\n| Google ecosystem presence (Scholar, News, Maps) | 10 | 10 if 3+, 5 if 1-2, 0 if none |\n| Image optimization (alt text, filenames) | 10 | 10 if all images optimized, 5 if partial, 0 if none |\n| E-E-A-T signals (author pages, about, editorial) | 10 | 10 if strong, 5 if partial, 0 if weak |\n| Google Merchant Center (if e-commerce) | 5 | 5 if applicable and active, N/A otherwise |\n| Multi-modal content (text + images + video) | 5 | 5 if rich multi-modal, 3 if some, 0 if text-only |\n\n---\n\n## Platform 5: Bing Copilot\n\n### How Copilot Selects Sources\n- Uses **Bing's search index** (shared infrastructure with ChatGPT but different ranking/selection)\n- Supports **IndexNow protocol** for near-instant indexing of new and updated content\n- Copilot tends to cite **fewer sources per answer** (typically 3-5) but gives more prominent attribution\n- Microsoft ecosystem integration: LinkedIn, GitHub, Microsoft Learn content is weighted\n- Copilot prefers pages with clear, structured markup and fast load times\n\n### Optimization Checklist\n\n1. **Bing Webmaster Tools**: Register and verify site. Submit XML sitemap. Review and fix any crawl issues.\n2. **IndexNow Implementation**: Implement the IndexNow protocol to notify Bing of content changes in real-time. Submit a key file at `/.well-known/indexnow-key.txt` and ping the IndexNow API on content publish/update.\n3. **LinkedIn Company Page**: Ensure the company LinkedIn page is complete with accurate description, employee connections, and regular posts. Copilot indexes LinkedIn content.\n4. **GitHub Presence**: For tech companies, maintain an active GitHub presence. Copilot references GitHub repos, documentation, and README files.\n5. **Microsoft Learn / Documentation**: If relevant, contribute to Microsoft Learn or ensure documentation is compatible with Microsoft's documentation standards.\n6. **Bing Places for Business**: Equivalent to Google Business Profile. Complete all fields for local search visibility in Copilot.\n7. **Clear Meta Descriptions**: Bing/Copilot weights meta descriptions more heavily than Google does. Write compelling, keyword-rich meta descriptions for every page.\n8. **Social Signals**: Bing has historically weighted social signals (shares, likes, engagement) more than Google. Maintain active social media presence.\n9. **Exact-Match Keywords**: Bing's algorithm is more literal about keyword matching than Google. Include exact target phrases in titles, headings, and body content.\n10. **Fast Page Load**: Copilot deprioritizes slow pages. Target sub-2-second load time. Optimize images, enable compression, minimize render-blocking resources.\n\n### Scoring Rubric (0-100)\n\n| Criterion | Points | How to Score |\n|---|---|---|\n| Bing Webmaster Tools verified + sitemap | 15 | 15 if verified, 5 if partial, 0 if not |\n| IndexNow protocol implemented | 15 | 15 if active, 0 if not |\n| Bing index coverage of key pages | 10 | 10 if full, 5 if partial, 0 if poor |\n| LinkedIn company page (complete) | 10 | 10 if complete, 5 if basic, 0 if none |\n| GitHub presence (if applicable) | 5 | 5 if active, N/A if not applicable |\n| Meta descriptions optimized | 10 | 10 if all key pages, 5 if partial, 0 if missing |\n| Social media engagement signals | 10 | 10 if active engagement, 5 if present, 0 if none |\n| Exact-match keywords in titles/headings | 10 | 10 if well-optimized, 5 if partial, 0 if not |\n| Page load speed < 2 seconds | 10 | 10 if < 2s, 5 if < 4s, 0 if > 4s |\n| Bing Places configured (if local) | 5 | 5 if complete, N/A if not local |\n\n---\n\n## Cross-Platform Summary\n\n### Universal Optimization Actions (help ALL platforms)\n1. Wikipedia/Wikidata entity presence\n2. YouTube channel with relevant content\n3. Comprehensive, well-structured content with clear headings\n4. Schema.org structured data (especially Organization + sameAs)\n5. Fast page load and clean HTML\n6. Author pages with credentials and sameAs links\n7. Regular content updates with visible dates\n\n### Platform-Specific Priorities\n| Priority | Google AIO | ChatGPT | Perplexity | Gemini | Copilot |\n|---|---|---|---|---|---|\n| #1 | Top-10 ranking | Wikipedia | Reddit presence | YouTube | IndexNow |\n| #2 | Q&A structure | Entity graph | Original research | Knowledge Panel | Bing WMT |\n| #3 | Tables/lists | Bing SEO | Freshness | Schema.org | LinkedIn |\n| #4 | Featured snippets | Reddit | Community forums | GBP | Meta descriptions |\n\n---\n\n## Output Format\n\nGenerate **GEO-PLATFORM-OPTIMIZATION.md** with the following structure:\n\n```markdown\n# GEO Platform Optimization Report — [Domain]\nDate: [Date]\n\n## Overall Platform Readiness\n- Combined GEO Score: XX/100 (average of all platform scores)\n\n## Platform Scores\n| Platform | Score | Status |\n|---|---|---|\n| Google AI Overviews | XX/100 | [Strong/Moderate/Weak] |\n| ChatGPT Web Search | XX/100 | [Strong/Moderate/Weak] |\n| Perplexity AI | XX/100 | [Strong/Moderate/Weak] |\n| Google Gemini | XX/100 | [Strong/Moderate/Weak] |\n| Bing Copilot | XX/100 | [Strong/Moderate/Weak] |\n\nStatus thresholds: Strong = 70+, Moderate = 40-69, Weak = 0-39\n\n## Platform Details\n[Per-platform breakdown with score, gaps found, specific actions]\n\n## Prioritized Action Plan\n### Quick Wins (this week)\n[Actions that improve multiple platform scores with minimal effort]\n\n### Medium-Term (this month)\n[Actions requiring content creation or technical changes]\n\n### Strategic (this quarter)\n[Actions requiring entity building, community development, or platform presence]\n```\n","skills/geo-proposal/SKILL.md":"---\nname: geo-proposal\ndescription: >\n  Auto-generate a professional, client-ready GEO service proposal from audit data.\n  Creates a full proposal in markdown and PDF including executive summary, findings,\n  recommended service packages (Basic/Standard/Premium), pricing, timeline, and terms.\n  Use when user says \"proposal\", \"proposta\", \"offerta\", \"preventivo\", \"generate proposal\",\n  or after completing a GEO audit for a prospect.\nversion: 1.0.0\ntags: [geo, business, proposal, sales, pricing, client]\nallowed-tools: Read, Write, Bash, Glob, WebFetch\n---\n\n# GEO Proposal Generator\n\n## Purpose\n\nGenerate a fully customized, client-ready GEO service proposal that:\n1. Pulls findings directly from the prospect's GEO audit\n2. Translates technical gaps into business pain points\n3. Presents 3 service tiers with clear pricing\n4. Includes a realistic ROI projection\n5. Outputs a professional markdown document ready to send\n\n---\n\n## Command\n\n```\n/geo proposal <domain-or-audit-file> [--tier basic|standard|premium] [--client-name \"Name\"] [--monthly EUR]\n```\n\n**Examples:**\n```\n/geo proposal electron-srl.com\n/geo proposal electron-srl.com --tier standard --client-name \"Electron Srl\"\n/geo proposal ~/.geo-prospects/audits/electron-srl.com-2026-03-12.md\n```\n\n---\n\n## Workflow\n\n### Step 1: Load Audit Data\n\n1. Check if `~/.geo-prospects/audits/<domain>*.md` exists\n2. If not, suggest running `/geo quick <domain>` first\n3. Extract from audit:\n   - GEO Score (overall and per-category)\n   - Top 3 critical findings\n   - Quick wins list\n   - Business type\n   - Estimated organic traffic impact\n\n### Step 2: Customize the Proposal\n\nAuto-fill proposal template with:\n- Company name (from domain or prospect record)\n- GEO score and tier label\n- 3 most critical pain points (translated to business language)\n- Estimated revenue at risk from AI search shift\n- Recommended service tier based on score:\n  - Score 0-40 → Recommend Premium (critical issues need full attention)\n  - Score 41-60 → Recommend Standard (significant gaps, needs monthly work)\n  - Score 61-75 → Recommend Basic (solid base, needs monitoring)\n\n### Step 3: Generate Proposal File\n\nOutput to `~/.geo-prospects/proposals/<domain>-proposal-<date>.md`\nAlso update prospect record if it exists in `~/.geo-prospects/prospects.json`\n\n---\n\n## Proposal Template\n\nGenerate the following document, filling all `[PLACEHOLDERS]` with real audit data:\n\n---\n\n```markdown\n# GEO Optimization Proposal\n## [COMPANY NAME] — AI Search Visibility\n\n**Prepared by:** [YOUR AGENCY NAME]\n**Prepared for:** [CONTACT NAME], [COMPANY NAME]\n**Date:** [DATE]\n**Valid until:** [DATE + 30 DAYS]\n**Reference:** GEO-PROP-[YYMMDD]-[DOMAIN]\n\n---\n\n## Executive Summary\n\n[COMPANY NAME] operates in [INDUSTRY] and serves customers across [GEOGRAPHY].\nOur GEO audit of [DOMAIN], conducted on [DATE], reveals a GEO Readiness Score\nof **[SCORE]/100 ([TIER LABEL])**.\n\nThis means your website currently has [TIER DESCRIPTION — use score interpretation table].\nAs AI-powered search (ChatGPT, Google AI Overviews, Perplexity) now influences\n**[X]% of online discovery** and is growing at 527% year-over-year, this gap\nrepresents a measurable risk to your pipeline.\n\nThe three most urgent issues are:\n1. **[CRITICAL FINDING 1]** — [Business impact in one sentence]\n2. **[CRITICAL FINDING 2]** — [Business impact in one sentence]\n3. **[CRITICAL FINDING 3]** — [Business impact in one sentence]\n\nWe recommend the **[TIER NAME] package** at **€[PRICE]/month**, which addresses\nall critical issues within 90 days and positions [COMPANY] as an AI-visible\nauthority in [INDUSTRY].\n\n---\n\n## The Opportunity: Why GEO Matters for [COMPANY NAME]\n\n### The AI Search Shift Is Already Happening\n\n| Metric | Value |\n|--------|-------|\n| AI-referred traffic growth (2025) | +527% YoY |\n| AI traffic conversion vs. organic | 4.4x higher |\n| ChatGPT weekly active users | 900M+ |\n| Google AI Overviews monthly reach | 1.5B users, 200+ countries |\n| Gartner: traditional search traffic drop by 2028 | -50% |\n| Marketers investing in GEO today | Only 23% |\n\n**First-mover advantage is real.** Companies that invest in GEO now will\ncapture the AI search channel before competitors do.\n\n### Your Current Position\n\n| Metric | [COMPANY] | Industry Average | Top Performers |\n|--------|-----------|------------------|----------------|\n| GEO Score | [SCORE]/100 | 45/100 | 75+/100 |\n| AI Crawlers Allowed | [X]/14 | 8/14 | 14/14 |\n| Brand Mentions (AI platforms) | [STATUS] | Moderate | High |\n| Schema Coverage | [STATUS] | Partial | Complete |\n| llms.txt | [Yes/No] | 12% have it | 78% have it |\n\n---\n\n## Audit Findings Summary\n\n### GEO Score Breakdown\n\n| Category | Your Score | Weight | Weighted | Priority |\n|----------|-----------|--------|---------|----------|\n| AI Citability & Visibility | [SCORE]/100 | 25% | [WEIGHTED] | [HIGH/MED/LOW] |\n| Brand Authority Signals | [SCORE]/100 | 20% | [WEIGHTED] | [HIGH/MED/LOW] |\n| Content Quality & E-E-A-T | [SCORE]/100 | 20% | [WEIGHTED] | [HIGH/MED/LOW] |\n| Technical Foundations | [SCORE]/100 | 15% | [WEIGHTED] | [HIGH/MED/LOW] |\n| Structured Data | [SCORE]/100 | 10% | [WEIGHTED] | [HIGH/MED/LOW] |\n| Platform Optimization | [SCORE]/100 | 10% | [WEIGHTED] | [HIGH/MED/LOW] |\n| **TOTAL GEO SCORE** | | | **[SCORE]/100** | **[TIER]** |\n\n### Critical Issues Found\n\n[For each critical issue from audit:]\n\n#### 🔴 [ISSUE TITLE]\n**What we found:** [Technical finding in plain language]\n**Business impact:** [What this means for their revenue/visibility]\n**Our fix:** [What we will do to resolve it]\n**Timeline:** [When they will see improvement]\n\n---\n\n## Our Solution: Service Packages\n\nWe offer three engagement models based on the scope of optimization needed.\n\n---\n\n### BASIC — €2,500/month\n*Best for: Sites with score 61-75 needing targeted improvements*\n\n**What's included:**\n- Quarterly full GEO audit (4x/year)\n- Quarterly client report with score tracking\n- Schema.org implementation (Organization + key page schemas)\n- AI crawler access optimization (robots.txt)\n- llms.txt creation and maintenance\n- Email support (48-hour response)\n\n**Estimated GEO score improvement:** +10-20 points in 6 months\n**Contract:** Minimum 6 months\n\n---\n\n### STANDARD — €5,000/month ⭐ Recommended for [COMPANY]\n*Best for: Sites with score 40-60 needing structured monthly work*\n\n**Everything in Basic, plus:**\n- Monthly full GEO audit + delta report\n- Monthly strategy call (60 minutes)\n- Content citability optimization (up to 10 pages/month)\n- Brand authority building (Wikipedia, Wikidata, LinkedIn optimization)\n- Platform-specific optimization (Google AIO, ChatGPT, Perplexity)\n- E-E-A-T improvements (author pages, credentials, freshness signals)\n- Slack channel for fast communication (24-hour response)\n\n**Estimated GEO score improvement:** +25-40 points in 6 months\n**Contract:** Minimum 6 months\n\n---\n\n### PREMIUM — €9,500/month\n*Best for: Sites with score 0-40 with critical issues, or competitive industries*\n\n**Everything in Standard, plus:**\n- Bi-weekly strategy calls\n- Technical SEO implementation support (Core Web Vitals, SSR, speed)\n- Full content strategy + production (4 optimized articles/month)\n- Active brand building (Reddit, YouTube, industry citations)\n- Competitor monitoring and response\n- Dedicated account manager\n- Priority support (4-hour response)\n\n**Estimated GEO score improvement:** +40-60 points in 6 months\n**Contract:** Minimum 12 months\n\n---\n\n## ROI Projection for [COMPANY NAME]\n\nBased on your current GEO score of [SCORE]/100 and industry benchmarks:\n\n| Scenario | 6-Month Score | AI Traffic Increase | Est. Additional Value/Month |\n|----------|--------------|--------------------|-----------------------------|\n| No action | [SCORE + 2]/100 | +5% (organic growth) | €[LOW] |\n| Basic package | [SCORE + 15]/100 | +30-40% | €[MED] |\n| Standard package | [SCORE + 32]/100 | +60-90% | €[HIGH] |\n| Premium package | [SCORE + 50]/100 | +100-150% | €[VERY HIGH] |\n\n**Assumptions:**\n- Based on estimated [X] monthly organic visitors to [DOMAIN]\n- AI search is projected to drive 25-40% of organic discovery by end of 2026\n- AI-referred traffic converts at 4.4x the rate of regular organic traffic\n- Calculations use conservative estimates — actual results may vary\n\n**Payback period (Standard package):** [X] months based on current traffic\n\n---\n\n## Engagement Timeline\n\n### Month 1 — Foundation\n- Kick-off call and onboarding (Week 1)\n- Full technical audit + baseline metrics capture\n- Quick wins implementation: robots.txt, schema, llms.txt, meta descriptions\n- Expected score improvement: +5-10 points\n\n### Month 2-3 — Optimization\n- Content citability rewrites (top 10 pages)\n- E-E-A-T improvements: author pages, credentials, dates\n- Platform-specific optimization (Google AIO, ChatGPT, Perplexity)\n- Brand presence: LinkedIn, Wikipedia/Wikidata groundwork\n- Expected score improvement: +15-25 points cumulative\n\n### Month 4-6 — Authority Building\n- Brand mention campaigns (Reddit, industry sites, YouTube)\n- Topical authority content strategy\n- Monthly reports showing score improvements\n- Expected score improvement: +30-45 points cumulative\n\n### Month 6 — Review\n- Full re-audit with before/after comparison\n- ROI report\n- Renewal discussion\n\n---\n\n## Why Us\n\n- **GEO specialists**: We focus exclusively on AI search optimization, not traditional SEO agencies adapting to GEO\n- **Transparent reporting**: Monthly reports show exactly what changed and why\n- **No lock-in beyond minimum**: Month-to-month after initial commitment\n- **Proven methodology**: 11-dimension GEO audit covering all major AI platforms\n- **Fast results**: Quick wins visible within 30 days\n\n---\n\n## Investment Summary\n\n| Package | Monthly | 6-Month | 12-Month |\n|---------|---------|---------|----------|\n| Basic | €2,500 | €15,000 | €30,000 |\n| Standard | €5,000 | €30,000 | €60,000 |\n| Premium | €9,500 | €57,000 | €114,000 |\n\n*All prices exclude VAT. Payment terms: monthly, due within 15 days of invoice.*\n\n---\n\n## Next Steps\n\nTo move forward:\n\n1. **Review this proposal** and share any questions\n2. **Schedule a 30-minute call** to walk through findings together: [CALENDAR LINK]\n3. **Sign the service agreement** (sent separately upon acceptance)\n4. **Kick-off call** scheduled for your chosen start date\n\nThis proposal is valid for **30 days** from the date above.\n\n---\n\n## Terms & Conditions\n\n- **Minimum commitment:** As stated per package above\n- **Cancellation:** 30-day written notice after minimum term\n- **Confidentiality:** All audit findings and client data are strictly confidential\n- **Results:** We guarantee effort and methodology, not specific ranking outcomes\n- **Reporting:** Monthly reports delivered by the 5th of each month\n- **Access needed:** Read access to Google Analytics / Search Console (if available)\n\n---\n\n*This proposal was prepared using GEO-SEO analysis tools and reflects findings\nfrom the audit of [DOMAIN] conducted on [DATE]. All scores and recommendations\nare based on current industry best practices for Generative Engine Optimization.*\n```\n\n---\n\n## Output\n\n1. Save proposal to `~/.geo-prospects/proposals/<domain>-proposal-<date>.md`\n2. Update prospect record: set `status` to `proposal`, save `proposal_file` path\n3. Print confirmation:\n   ```\n   ✓ Proposal generated: ~/.geo-prospects/proposals/electron-srl.com-proposal-2026-03-12.md\n   ✓ Prospect status updated: Qualified → Proposal\n   ✓ Recommended package: STANDARD (€5,000/month) — Score 32/100\n\n   Next: Share the proposal file or run `/geo report-pdf` for a visual version.\n   ```\n\n## Pricing Recommendation Logic\n\nBase recommendation on GEO score:\n- Score 0-40 → Recommend **Premium** (critical issues require intensive work)\n- Score 41-60 → Recommend **Standard** (structured monthly optimization)\n- Score 61-75 → Recommend **Basic** (maintenance + targeted improvements)\n- Score 76+ → Offer **Basic** or quarterly retainer check-in\n","skills/geo-prospect/SKILL.md":"---\nname: geo-prospect\ndescription: >\n  CRM-lite for managing GEO agency prospects and clients. Track leads through\n  the full sales pipeline: Lead → Qualified → Proposal Sent → Won → Lost.\n  Store audit history, notes, deal values, and generate pipeline summaries.\n  Use when user says \"prospect\", \"lead\", \"client\", \"pipeline\", \"crm\", \"nuovo prospect\",\n  \"aggiungi cliente\", or when managing the business side of GEO services.\nversion: 1.0.0\ntags: [geo, business, crm, prospect, pipeline, sales]\nallowed-tools: Read, Write, Bash, Glob\n---\n\n# GEO Prospect Manager\n\n## Purpose\n\nManage GEO agency prospects and clients through the full sales lifecycle.\nAll data is stored in `~/.geo-prospects/prospects.json` (persistent across sessions).\n\n---\n\n## Commands\n\n| Command | What It Does |\n|---------|-------------|\n| `/geo prospect new <domain>` | Create new prospect (interactive prompts) |\n| `/geo prospect list` | Show all prospects with pipeline status |\n| `/geo prospect list <status>` | Filter: lead, qualified, proposal, won, lost |\n| `/geo prospect show <id-or-domain>` | Full prospect detail with history |\n| `/geo prospect audit <id-or-domain>` | Run quick GEO audit and save to prospect record |\n| `/geo prospect note <id-or-domain> \"<text>\"` | Add interaction note with timestamp |\n| `/geo prospect status <id-or-domain> <new-status>` | Move through pipeline |\n| `/geo prospect won <id-or-domain> <monthly-value>` | Mark as won, set contract value |\n| `/geo prospect lost <id-or-domain> \"<reason>\"` | Mark as lost with reason |\n| `/geo prospect pipeline` | Visual pipeline summary with revenue forecast |\n\n---\n\n## Data Structure\n\nEach prospect is stored as a JSON record:\n\n```json\n{\n  \"id\": \"PRO-001\",\n  \"company\": \"Electron Srl\",\n  \"domain\": \"electron-srl.com\",\n  \"contact_email\": \"info@electron-srl.com\",\n  \"contact_name\": \"\",\n  \"industry\": \"Educational Equipment Manufacturing\",\n  \"country\": \"Italy\",\n  \"status\": \"qualified\",\n  \"geo_score\": 32,\n  \"audit_date\": \"2026-03-12\",\n  \"audit_file\": \"~/.geo-prospects/audits/electron-srl.com-2026-03-12.md\",\n  \"proposal_file\": \"~/.geo-prospects/proposals/electron-srl.com-proposal.md\",\n  \"monthly_value\": 0,\n  \"contract_start\": null,\n  \"contract_months\": 0,\n  \"notes\": [\n    {\n      \"date\": \"2026-03-12\",\n      \"text\": \"Initial GEO quick scan. Score 32/100 - Critical tier. Strong candidate for GEO services.\"\n    }\n  ],\n  \"created_at\": \"2026-03-12\",\n  \"updated_at\": \"2026-03-12\"\n}\n```\n\n---\n\n## Orchestration Instructions\n\n### `/geo prospect new <domain>`\n\n1. Check if `~/.geo-prospects/prospects.json` exists, create if not (empty array)\n2. Auto-detect company name from domain (e.g., `electron-srl.com` → `Electron Srl`)\n3. Assign next sequential ID: `PRO-001`, `PRO-002`, etc.\n4. Ask user for:\n   - Contact name (optional)\n   - Contact email\n   - Monthly contract value estimate (optional)\n5. Set status to `lead`\n6. Save to JSON file\n7. Suggest next step: \"Run `/geo prospect audit electron-srl.com` to score this prospect\"\n\n### `/geo prospect list`\n\nRead `~/.geo-prospects/prospects.json` and render a summary table:\n\n```\nGEO Prospect Pipeline — March 2026\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\nID       Domain                  Company           Status      Score  Value\n───────  ──────────────────────  ────────────────  ──────────  ─────  ──────\nPRO-001  electron-srl.com        Electron Srl      Qualified   32/100  €4.5K\nPRO-002  acme.com                ACME Corp         Lead        —       —\nPRO-003  bigshop.it              BigShop           Won         41/100  €6.0K\n\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\nPipeline: 1 lead | 1 qualified | 0 proposals | 1 won | 0 lost\nCommitted MRR: €6,000 | Pipeline Value: €4,500\n```\n\n### `/geo prospect audit <id-or-domain>`\n\n1. Run `/geo quick <domain>` to get GEO snapshot score\n2. Save score to prospect record: `geo_score`, `audit_date`\n3. Save audit output to `~/.geo-prospects/audits/<domain>-<date>.md`\n4. Update `audit_file` path in prospect record\n5. Add auto-note: \"Quick audit run. GEO Score: XX/100.\"\n6. If score < 55: suggest \"Score indicates strong sales opportunity. Run `/geo proposal <domain>` to generate proposal.\"\n\n### `/geo prospect note <id-or-domain> \"<text>\"`\n\n1. Find prospect by ID or domain\n2. Append note with current ISO date\n3. Save back to JSON\n4. Confirm: \"Note added to Electron Srl (PRO-001)\"\n\n### `/geo prospect status <id-or-domain> <status>`\n\nValid statuses: `lead`, `qualified`, `proposal`, `won`, `lost`\n\n1. Update status field\n2. Add auto-note: \"Status changed to <status>\"\n3. Save and confirm\n\n### `/geo prospect pipeline`\n\nVisual revenue-focused pipeline summary:\n\n```\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\nGEO AGENCY PIPELINE SUMMARY — March 2026\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\nSTAGE          COUNT   POTENTIAL VALUE   NOTES\n─────────────  ─────   ───────────────   ─────────────────────\nLead             2      €8,000/mo        New discoveries\nQualified        1      €4,500/mo        Ready for proposal\nProposal Sent    1      €6,000/mo        Awaiting signature\nWon              3      €18,500/mo       Active clients (MRR)\nLost             1      —                Budget freeze\n\nCOMMITTED MRR:        €18,500\nPIPELINE (qualified+): €10,500\nTOTAL POTENTIAL:      €29,000/mo → €348,000/yr\n\nNext actions:\n→ PRO-003 (acme.com): Send proposal — score 38/100 (strong case)\n→ PRO-007 (shop.it): Follow up — proposal sent 8 days ago\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n```\n\n---\n\n## Storage Location\n\nAll data stored in `~/.geo-prospects/`:\n```\n~/.geo-prospects/\n├── prospects.json          # Main CRM database\n├── audits/                 # Quick audit snapshots\n│   └── electron-srl.com-2026-03-12.md\n└── proposals/              # Generated proposals\n    └── electron-srl.com-proposal.md\n```\n\nCreate directory if it does not exist: `mkdir -p ~/.geo-prospects/audits ~/.geo-prospects/proposals`\n\n---\n\n## Pipeline Stage Definitions\n\n| Status | Meaning | Typical Next Action |\n|--------|---------|---------------------|\n| `lead` | Discovered, not yet contacted | Run quick audit, assess opportunity |\n| `qualified` | Audit done, confirmed pain points | Generate proposal |\n| `proposal` | Proposal sent, awaiting decision | Follow up, answer questions |\n| `won` | Contract signed, active client | Run full audit, start onboarding |\n| `lost` | Deal closed lost | Log reason for future reference |\n\n---\n\n## Output\n\n- All commands print confirmation + current prospect status to terminal\n- No external files unless explicitly saving audits/proposals\n- JSON database is the single source of truth\n","skills/geo-report-pdf/SKILL.md":"---\nname: geo-report-pdf\ndescription: Generate a professional PDF report from a GEO audit using pandoc + Chrome headless. Converts GEO-AUDIT-REPORT.md into a styled, client-ready PDF with a cover page, color-coded score tables, severity-tagged findings, and a 90-day roadmap.\nversion: 2.0.0\nauthor: geo-seo-claude\ntags: [geo, pdf, report, client-deliverable, professional]\nallowed-tools: Read, Grep, Glob, Bash, Write\n---\n\n# GEO PDF Report Generator (pandoc pipeline)\n\n## Prerequisites\n\n- **pandoc** — `brew install pandoc`\n- **Google Chrome** — must be installed at `/Applications/Google Chrome.app/`\n\nNo Python dependencies. No ReportLab. No JSON data wrangling.\n\n## How It Works\n\n1. Read `GEO-AUDIT-REPORT.md` in the current directory (created by `/geo audit`)\n2. Extract cover metadata from the report (brand name, domain, GEO score, date, locations)\n3. Run `pandoc` with the bundled CSS + HTML template to produce a self-contained `GEO-REPORT.html`\n4. Run Chrome headless to print the HTML to `GEO-REPORT.pdf`\n\nThe pandoc template (`~/.claude/skills/geo/templates/geo-report-template.html`) injects:\n- A full-bleed dark navy cover section with the GEO score badge\n- Per-section cover metadata (date, business type, locations, platform)\n- JavaScript that runs inside Chrome before printing to color-code score cells and severity-tag finding sections\n\n## Workflow\n\n### Step 1: Check for audit report\n\nLook for `GEO-AUDIT-REPORT.md` in the current directory. If absent, tell the user to run `/geo audit <url>` first.\n\n### Step 2: Extract cover metadata from the report\n\nRead the top of `GEO-AUDIT-REPORT.md` and extract:\n\n| Field | Where to find it |\n|---|---|\n| `brand_name` | First H1 title (after \"GEO Audit Report:\") |\n| `domain` | Second bold line (e.g. `**Domain:** alexamediasolutions.com`) |\n| `geo_score` | Line matching `## Overall GEO Score: XX / 100` |\n| `score_label` | Word after the score on that same line (e.g. \"Poor\", \"Fair\", \"Good\") |\n| `date` | `**Audit Date:**` line |\n| `business_type` | `**Business Type:**` line |\n| `locations` | `**Locations:**` line |\n| `platform` | `**CMS:**` line |\n\n### Step 3: Run pandoc\n\n```bash\npandoc GEO-AUDIT-REPORT.md \\\n  --to html5 \\\n  --standalone \\\n  --embed-resources \\\n  --template ~/.claude/skills/geo/templates/geo-report-template.html \\\n  --css ~/.claude/skills/geo/templates/geo-report-style.css \\\n  --metadata title=\"GEO Audit Report — <brand_name>\" \\\n  --metadata brand_name=\"<brand_name>\" \\\n  --metadata domain=\"<domain>\" \\\n  --metadata geo_score=\"<geo_score>\" \\\n  --metadata score_label=\"<score_label>\" \\\n  --metadata date=\"<date>\" \\\n  --metadata business_type=\"<business_type>\" \\\n  --metadata locations=\"<locations>\" \\\n  --metadata platform=\"<platform>\" \\\n  -o GEO-REPORT.html\n```\n\nReplace `<field>` placeholders with values extracted in Step 2. If a field is not found in the report, omit that `--metadata` flag — the template has sensible defaults.\n\n### Step 4: Run Chrome headless\n\n```bash\n\"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome\" \\\n  --headless=new \\\n  --disable-gpu \\\n  --no-sandbox \\\n  --print-to-pdf=\"$(pwd)/GEO-REPORT.pdf\" \\\n  --print-to-pdf-no-header \\\n  --no-pdf-header-footer \\\n  --virtual-time-budget=5000 \\\n  \"file://$(pwd)/GEO-REPORT.html\"\n```\n\n### Step 5: Report completion\n\nTell the user:\n- `GEO-REPORT.pdf` was generated in the current directory\n- File size\n- Optionally: `open GEO-REPORT.pdf` to preview it\n\n## What the PDF Contains\n\n- **Cover page** — Dark navy gradient, brand name, domain, GEO score badge (colored by score), audit date, business type, locations, CMS platform\n- **Score tables** — Cells containing `XX/100` are color-coded: ≥80 green, ≥65 blue, ≥50 amber, ≥35 orange, <35 red\n- **Finding sections** — `h3` headings containing \"Critical / High / Medium / Low\" get severity-colored left-border callout blocks (red / orange / yellow / green)\n- **Section page breaks** — Major sections (High Priority, 90-Day Roadmap, Component Score Summary, Generated Schema) break to new pages automatically\n- **Code blocks** — JSON schema templates render with dark theme monospace styling\n- **Page footer** — Brand name · GEO Audit · date + page numbers (via CSS `@page`)\n\n## Customizing the Report\n\n- **Colors / typography** — Edit `~/.claude/skills/geo/templates/geo-report-style.css`\n- **Cover layout** — Edit `~/.claude/skills/geo/templates/geo-report-template.html`\n- **Score thresholds for color-coding** — Edit the `scoreColor()` function in the template's `<script>` block\n- **Which sections get page breaks** — Edit the `breakBefore` array in the template's `<script>` block\n\n## Troubleshooting\n\n| Problem | Fix |\n|---|---|\n| `pandoc: command not found` | `brew install pandoc` |\n| Chrome not found | Check path: `/Applications/Google Chrome.app/Contents/MacOS/Google Chrome` |\n| PDF is blank / empty | Increase `--virtual-time-budget` to 8000 |\n| Cover metadata missing | Check GEO-AUDIT-REPORT.md has the standard header format |\n| Fonts not loading | PDF is rendered offline; system fonts are used as fallback — this is expected |\n","skills/geo-report/SKILL.md":"---\nname: geo-report\ndescription: Generate a professional, client-facing GEO report combining all audit results into a single deliverable with scores, findings, and prioritized actions\nversion: 1.0.0\nauthor: geo-seo-claude\ntags: [geo, report, client-deliverable, executive-summary, action-plan]\nallowed-tools: Read, Grep, Glob, Bash, WebFetch, Write\n---\n\n# GEO Client Report Generator\n\n## Purpose\n\nThis skill aggregates outputs from all GEO audit skills into a single, professional report that can be delivered directly to a client or stakeholder. The report is written for **business owners and marketing leaders**, not developers — technical findings are translated into business impact and clear action items with priority levels.\n\n## How to Use This Skill\n\n1. Run the following audits first (or use existing report data):\n   - `geo-platform-optimizer` -> GEO-PLATFORM-OPTIMIZATION.md\n   - `geo-schema` -> GEO-SCHEMA-REPORT.md\n   - `geo-technical` -> GEO-TECHNICAL-AUDIT.md\n   - `geo-content` -> GEO-CONTENT-ANALYSIS.md\n   - (Optional) `geo-llmstxt` -> llms.txt assessment\n   - (Optional) `geo-brand-mentions` -> brand authority data\n2. Collect all scores and findings\n3. Calculate the composite GEO Readiness Score\n4. Generate the client report using the template below\n5. Output: GEO-CLIENT-REPORT.md\n\n---\n\n## GEO Readiness Score Calculation\n\n### Component Weights\n\n| Component | Weight | Source Skill |\n|---|---|---|\n| AI Platform Readiness | 25% | geo-platform-optimizer |\n| Content Quality & E-E-A-T | 25% | geo-content |\n| Technical Foundation | 20% | geo-technical |\n| Schema & Structured Data | 15% | geo-schema |\n| Brand Authority & Entity Presence | 15% | geo-platform-optimizer (entity signals) |\n\n### Score Formula\n```\nGEO Score = (Platform Score * 0.25) + (Content Score * 0.25) + (Technical Score * 0.20) + (Schema Score * 0.15) + (Brand Score * 0.15)\n```\n\nRound to the nearest integer. Cap at 100.\n\n### Score Interpretation for Clients\n\n| Score Range | Label | Client-Facing Description |\n|---|---|---|\n| 85-100 | Excellent | Your site is well-positioned for AI search. Focus on maintaining and expanding your advantage. |\n| 70-84 | Good | Solid foundation with clear opportunities to improve AI visibility. Targeted optimizations will yield significant results. |\n| 55-69 | Moderate | Your site has gaps in AI readiness that competitors may be exploiting. A structured optimization plan will close these gaps. |\n| 40-54 | Below Average | Significant barriers to AI search visibility exist. Without action, your brand risks being invisible in AI-generated answers. |\n| 0-39 | Needs Attention | Critical AI readiness issues require immediate action. Your competitors are likely capturing the AI search traffic your brand should own. |\n\n---\n\n## Report Template\n\nThe complete report follows this exact structure. Each section includes instructions on what to write and how.\n\n---\n\n### Section 1: Executive Summary\n\nWrite exactly ONE paragraph (4-6 sentences) covering:\n- What was analyzed (domain, number of pages, date of analysis)\n- The overall GEO Readiness Score with context (\"XX/100, which places [brand] in the [label] tier\")\n- The single most impactful finding (positive or negative)\n- Top 3 priority recommendations in one sentence\n- One sentence on the business impact (\"Addressing these recommendations could increase AI-driven traffic by an estimated XX%, representing approximately $X,XXX/month based on current traffic patterns\")\n\n**Tone**: Confident, direct, professional. No jargon. No hedging. Write as a consultant delivering findings, not as a tool generating a report.\n\n### Section 2: GEO Readiness Score\n\nPresent the overall score prominently:\n\n```\n## GEO Readiness Score: XX/100 — [Label]\n```\n\nThen break down by component in a table:\n\n```markdown\n| Component | Score | Weight | Weighted Score |\n|---|---|---|---|\n| AI Platform Readiness | XX/100 | 25% | XX |\n| Content Quality & E-E-A-T | XX/100 | 25% | XX |\n| Technical Foundation | XX/100 | 20% | XX |\n| Schema & Structured Data | XX/100 | 15% | XX |\n| Brand Authority | XX/100 | 15% | XX |\n| **Overall** | | | **XX/100** |\n```\n\n### Section 3: AI Visibility Dashboard\n\nPresent per-platform readiness scores:\n\n```markdown\n## AI Visibility Dashboard\n\n| AI Platform | Readiness Score | Key Gap | Priority Action |\n|---|---|---|---|\n| Google AI Overviews | XX/100 | [One-line gap] | [One-line action] |\n| ChatGPT Web Search | XX/100 | [One-line gap] | [One-line action] |\n| Perplexity AI | XX/100 | [One-line gap] | [One-line action] |\n| Google Gemini | XX/100 | [One-line gap] | [One-line action] |\n| Bing Copilot | XX/100 | [One-line gap] | [One-line action] |\n```\n\nAdd a brief paragraph explaining what these scores mean: \"These scores reflect how likely your content is to be cited by each AI search platform. A score below 50 indicates significant barriers to citation on that platform.\"\n\n### Section 4: AI Crawler Access Status\n\nPresent as a clear table:\n\n```markdown\n## AI Crawler Access\n\n| AI Crawler | Platform | Status | Impact | Recommendation |\n|---|---|---|---|---|\n| Googlebot | Google Search + AIO | Allowed/Blocked | Critical | [Action] |\n| GPTBot | ChatGPT / OpenAI | Allowed/Blocked | High | [Action] |\n| Bingbot | Bing + Copilot + ChatGPT | Allowed/Blocked | High | [Action] |\n| PerplexityBot | Perplexity AI | Allowed/Blocked | Medium | [Action] |\n| Google-Extended | Gemini Training | Allowed/Blocked | Medium | [Action] |\n| ClaudeBot | Anthropic Claude | Allowed/Blocked | Medium | [Action] |\n| Applebot-Extended | Apple Intelligence | Allowed/Blocked | Medium | [Action] |\n```\n\n**Translate for the client**: \"Blocking AI crawlers is like closing your store during business hours. If a crawler cannot access your site, the AI platform it powers cannot cite your content. We recommend allowing all major AI crawlers unless you have a specific data licensing concern.\"\n\n### Section 5: Brand Authority Analysis\n\nPresent entity presence across platforms:\n\n```markdown\n## Brand Authority\n\n| Platform | Presence | Status | Impact on AI Visibility |\n|---|---|---|---|\n| Wikipedia | Yes/No | [Detail] | Very High — 47.9% of ChatGPT citations are Wikipedia |\n| Wikidata | Yes/No | [Detail] | High — machine-readable entity data |\n| LinkedIn | Yes/No | [Detail] | High — Bing Copilot and ChatGPT signal |\n| YouTube | Yes/No | [Detail] | High — Gemini and Perplexity signal |\n| Reddit | Yes/No | [Detail] | Very High — 46.7% of Perplexity citations are Reddit |\n| Google Knowledge Panel | Yes/No | [Detail] | High — Gemini entity recognition |\n| Crunchbase | Yes/No | [Detail] | Medium — entity validation |\n| GitHub | Yes/No | [Detail] | Medium — tech brand signal |\n```\n\n**Translate for the client**: \"AI platforms build trust by cross-referencing your brand across multiple authoritative sources. Each platform where your brand has an accurate, consistent presence increases the likelihood of being cited in AI answers.\"\n\n### Section 6: Citability Analysis\n\n#### Top 5 Most Citable Pages\nFor each page:\n- URL\n- Why it is citable (structure, depth, E-E-A-T signals)\n- One specific improvement that would make it even more citable\n\n#### Top 5 Least Citable Pages\nFor each page:\n- URL\n- Why it is unlikely to be cited (thin content, poor structure, missing signals)\n- Specific rewrite or restructure recommendation\n\n**Business impact framing**: \"Your most citable pages are your best candidates for appearing in AI-generated answers. Improving the 5 least citable pages represents the highest-ROI content investment you can make for AI visibility.\"\n\n### Section 7: Technical Health Summary\n\nPresent the key technical findings in business-friendly language:\n\n```markdown\n## Technical Health\n\n| Area | Status | Business Impact |\n|---|---|---|\n| Core Web Vitals | Good/Needs Work/Poor | [Impact on user experience and rankings] |\n| Server-Side Rendering | Yes/Partial/No | [Impact on AI crawler visibility] |\n| Mobile Optimization | Good/Needs Work/Poor | [Impact on Google's mobile-first indexing] |\n| Security (HTTPS + Headers) | Good/Needs Work/Poor | [Impact on trust signals] |\n| Page Speed | Fast/Average/Slow | [Impact on user experience and crawl budget] |\n| IndexNow Protocol | Implemented/Not | [Impact on Bing/ChatGPT indexing speed] |\n```\n\n**Critical finding callout**: If SSR is missing or partial, highlight this prominently: \"Your site uses client-side rendering, which means AI crawlers see an empty page when they visit. This is the single most impactful technical issue for AI search visibility. Until this is resolved, most AI platforms cannot cite your content.\"\n\n### Section 8: Schema & Structured Data\n\n```markdown\n## Schema & Structured Data\n\n### Current Implementation\n| Schema Type | Present | Status | AI Impact |\n|---|---|---|---|\n| Organization | Yes/No | [Valid/Issues] | Critical — entity recognition |\n| Article + Author | Yes/No | [Valid/Issues] | High — E-E-A-T signal |\n| sameAs (entity links) | Yes/No | [Count] links | Critical — cross-platform entity graph |\n| [Business-specific] | Yes/No | [Valid/Issues] | [Impact] |\n| WebSite + SearchAction | Yes/No | [Valid/Issues] | Medium — sitelinks |\n| BreadcrumbList | Yes/No | [Valid/Issues] | Low-Medium — navigation context |\n```\n\nIf schemas are missing, note: \"Ready-to-use structured data code has been prepared and is included in the technical appendix. Your development team can add this to your site with minimal effort.\"\n\n### Section 9: llms.txt Status\n\n```markdown\n## llms.txt — AI Content Guide\n\n| File | Status | Recommendation |\n|---|---|---|\n| /llms.txt | Present/Missing | [Action] |\n| /llms-full.txt | Present/Missing | [Action] |\n```\n\n**Translate for the client**: \"llms.txt is an emerging standard (similar to robots.txt) that tells AI systems what your site is about and which pages are most important. While not universally adopted yet, implementing it positions your brand ahead of competitors and provides direct guidance to AI platforms.\"\n\n### Section 10: Prioritized Action Plan\n\nThis is the most important section of the report. Organize actions by timeline and impact.\n\n```markdown\n## Prioritized Action Plan\n\n### Quick Wins (This Week)\n*High impact, low effort — can be implemented immediately*\n\n| # | Action | Impact | Effort | Platforms Affected |\n|---|---|---|---|---|\n| 1 | [Specific action] | [High/Med] | [Hours estimate] | [Which AI platforms] |\n| 2 | [Specific action] | [High/Med] | [Hours estimate] | [Which AI platforms] |\n```\n\n**Quick Win criteria**: Can be done in < 4 hours by one person. Examples:\n- Unblock AI crawlers in robots.txt\n- Add publication dates to existing content\n- Add author bylines with credentials\n- Fix broken meta descriptions\n- Add sameAs properties to existing Organization schema\n- Create/claim llms.txt file\n\n```markdown\n### Medium-Term Improvements (This Month)\n*Significant impact, moderate effort — requires content or technical changes*\n\n| # | Action | Impact | Effort | Platforms Affected |\n|---|---|---|---|---|\n| 1 | [Specific action] | [High/Med] | [Days estimate] | [Which AI platforms] |\n```\n\n**Medium-Term criteria**: 1-5 days of work. Examples:\n- Restructure top 10 pages with question-based headings and direct answers\n- Implement comprehensive Schema.org markup\n- Create author pages with credentials and sameAs links\n- Optimize Core Web Vitals (image compression, code splitting)\n- Register and configure Bing Webmaster Tools\n- Implement IndexNow protocol\n\n```markdown\n### Strategic Initiatives (This Quarter)\n*Long-term competitive advantage, requires ongoing investment*\n\n| # | Action | Impact | Effort | Platforms Affected |\n|---|---|---|---|---|\n| 1 | [Specific action] | [High/Med] | [Weeks estimate] | [Which AI platforms] |\n```\n\n**Strategic criteria**: Ongoing effort over weeks/months. Examples:\n- Build Wikipedia/Wikidata entity presence\n- Develop active Reddit community engagement strategy\n- Create YouTube content strategy aligned with search queries\n- Implement server-side rendering (if currently client-rendered)\n- Build topical authority through comprehensive content strategy\n- Establish original research/data publication program\n\n### Estimated Impact\nAfter the action plan, include an impact estimate:\n\n\"Based on industry benchmarks and the specific gaps identified in this audit:\n- **Quick Wins alone** could improve your GEO score by approximately [X-Y] points\n- **Full implementation** of this action plan could improve your GEO score to approximately [XX]/100\n- At current traffic levels and conversion rates, improved AI visibility represents an estimated **$X,XXX - $XX,XXX per month** in additional organic value\"\n\nUse conservative estimates. Base the dollar figure on:\n- Current estimated organic traffic value (from analytics if available, or estimate from industry benchmarks)\n- AI search is projected to drive 25-40% of organic discovery by end of 2026\n- A 10-point GEO score improvement typically correlates with a 15-25% increase in AI citation frequency\n\n### Section 11: Competitor Comparison (if competitor URLs provided)\n\nIf competitor URLs were analyzed alongside the primary domain:\n\n```markdown\n## Competitor Comparison\n\n| Metric | [Your Brand] | [Competitor 1] | [Competitor 2] |\n|---|---|---|---|\n| Overall GEO Score | XX/100 | XX/100 | XX/100 |\n| Google AIO Readiness | XX/100 | XX/100 | XX/100 |\n| ChatGPT Readiness | XX/100 | XX/100 | XX/100 |\n| Perplexity Readiness | XX/100 | XX/100 | XX/100 |\n| Schema Coverage | [Detail] | [Detail] | [Detail] |\n| Wikipedia Presence | Yes/No | Yes/No | Yes/No |\n| Reddit Authority | [Detail] | [Detail] | [Detail] |\n| SSR Status | Yes/No | Yes/No | Yes/No |\n\n### Where You Lead\n[Specific areas where the brand outperforms competitors]\n\n### Where You Trail\n[Specific areas where competitors have an advantage, with actions to close the gap]\n```\n\n### Section 12: Appendix\n\n```markdown\n## Appendix\n\n### Methodology\nThis GEO audit was conducted using the following methodology:\n- **Pages analyzed**: [List of specific URLs audited]\n- **Platforms assessed**: Google AI Overviews, ChatGPT, Perplexity AI, Google Gemini, Bing Copilot\n- **Technical checks**: HTTP headers, robots.txt, HTML source analysis, structured data validation\n- **Content assessment**: E-E-A-T framework (Experience, Expertise, Authoritativeness, Trustworthiness) per Google's December 2025 Quality Rater Guidelines\n- **Schema validation**: JSON-LD parsing and Schema.org specification compliance\n- **Date of analysis**: [Date]\n\n### Data Sources\n- Google Search Quality Rater Guidelines (December 2025 update)\n- Schema.org full type hierarchy\n- Industry citation studies (Zyppy, Authoritas, Semrush AI search research, 2025-2026)\n- Core Web Vitals thresholds (web.dev, 2026 standards)\n- AI crawler user-agent documentation (per-platform official docs)\n\n### Glossary\n\n| Term | Definition |\n|---|---|\n| GEO | Generative Engine Optimization — optimizing content to be cited by AI search platforms |\n| AIO | AI Overviews — Google's AI-generated answer boxes at the top of search results |\n| E-E-A-T | Experience, Expertise, Authoritativeness, Trustworthiness — Google's content quality framework |\n| SSR | Server-Side Rendering — generating HTML on the server so crawlers can read content without JavaScript |\n| CWV | Core Web Vitals — Google's page experience metrics (LCP, INP, CLS) |\n| LCP | Largest Contentful Paint — time to render the largest visible element |\n| INP | Interaction to Next Paint — responsiveness metric (replaced FID in March 2024) |\n| CLS | Cumulative Layout Shift — visual stability metric |\n| JSON-LD | JavaScript Object Notation for Linked Data — preferred structured data format |\n| sameAs | Schema.org property linking an entity to its profiles on other platforms |\n| IndexNow | Protocol for instantly notifying search engines of content changes |\n| llms.txt | Proposed standard file for guiding AI systems about a site's content |\n| YMYL | Your Money or Your Life — topics requiring highest E-E-A-T standards |\n| SERP | Search Engine Results Page |\n| Topical Authority | The depth and breadth of a site's coverage of its core topic area |\n```\n\n---\n\n## Formatting and Tone Guidelines\n\n### Formatting\n- Use clean markdown throughout: tables, headers (H2/H3), bullet points, bold for emphasis\n- Tables for data, bullets for recommendations, bold for key terms\n- One blank line between sections for readability\n- Use horizontal rules (---) to separate major sections\n- All URLs should be absolute (not relative)\n\n### Tone\n- **Professional but accessible** — written for a business owner, not a developer\n- **Confident and direct** — state findings as conclusions, not possibilities\n- **Action-oriented** — every finding should connect to a specific action\n- **Business-impact focused** — translate technical issues into business outcomes\n- Avoid: jargon without explanation, hedging language, passive voice, excessive caveats\n- Use: \"Your site [does/does not]...\", \"We recommend...\", \"This impacts...\"\n\n### Dollar-Value Framing\nWhere possible, connect recommendations to business value:\n- \"Improving your Google AIO readiness from 35 to 70 could increase your presence in AI Overviews by an estimated 50%, which at current search volumes represents approximately 2,000 additional monthly visitors\"\n- \"Server-side rendering would make your content accessible to ChatGPT, Perplexity, and other AI platforms — collectively representing an audience your competitors are already reaching\"\n- \"The investment in Schema.org markup (estimated 8-16 hours of developer time) could increase your entity recognition score from 20 to 75, significantly improving citation probability\"\n\nBe conservative with estimates. State assumptions clearly. Never guarantee specific results.\n\n---\n\n## Output\n\nGenerate **GEO-CLIENT-REPORT.md** using the complete template above, filled with actual audit data. The report should be:\n- 40-80 pages equivalent in detail (3,000-6,000 words)\n- Ready to send to a client without editing\n- Self-contained (no references to other report files — all relevant data is included)\n- Printable and presentable (clean markdown formatting)\n","skills/geo-schema/SKILL.md":"---\nname: geo-schema\ndescription: Schema.org structured data audit and generation optimized for AI discoverability — detect, validate, and generate JSON-LD markup\nversion: 1.0.0\nauthor: geo-seo-claude\ntags: [geo, schema, structured-data, json-ld, entity-recognition, ai-discoverability]\nallowed-tools: Read, Grep, Glob, Bash, WebFetch, Write\n---\n\n# GEO Schema & Structured Data\n\n## Purpose\n\nStructured data is the primary machine-readable signal that tells AI systems what an entity IS, what it does, and how it connects to other entities. While schema markup has traditionally been about earning Google rich results, its role in GEO is fundamentally different: **structured data is how AI models understand and trust your entity**. A complete entity graph in structured data dramatically increases citation probability across all AI search platforms.\n\n## How to Use This Skill\n\n1. Fetch the target page HTML using `fetch_page.py` (see note below)\n2. Detect all existing structured data (JSON-LD, Microdata, RDFa)\n3. Validate detected schemas against Schema.org specifications\n4. Identify missing recommended schemas based on business type\n5. Generate ready-to-use JSON-LD code blocks\n6. Output GEO-SCHEMA-REPORT.md\n\n---\n\n## Step 1: Detection\n\n**IMPORTANT:** WebFetch converts HTML to markdown and strips `<head>` content, which removes JSON-LD blocks. Use `fetch_page.py` instead:\n```bash\npython3 ~/.claude/skills/geo/scripts/fetch_page.py <url> page\n```\nThe output includes a `structured_data` array with all parsed JSON-LD blocks from the page.\n\n### Scan for JSON-LD\nLook for `<script type=\"application/ld+json\">` blocks in the HTML. Parse each block as JSON. A page may contain multiple JSON-LD blocks — collect all of them.\n\n### Scan for Microdata\nLook for elements with `itemscope`, `itemtype`, and `itemprop` attributes. Map the hierarchy of nested items. Note: Microdata is harder for AI crawlers to parse than JSON-LD. Flag a recommendation to migrate to JSON-LD if Microdata is the only format found.\n\n### Scan for RDFa\nLook for elements with `typeof`, `property`, and `vocab` attributes. Similar to Microdata — recommend migration to JSON-LD.\n\n### Priority Order\nJSON-LD is the **strongly recommended format** for GEO. Google, Bing, and AI platforms all process JSON-LD most reliably. If the site uses Microdata or RDFa exclusively, flag this as a high-priority migration.\n\n---\n\n## Step 2: Validation\n\nFor each detected schema block, validate:\n\n1. **Valid JSON**: Is the JSON-LD syntactically valid? Check for trailing commas, unquoted keys, malformed strings.\n2. **Valid @type**: Does the `@type` match a recognized Schema.org type? Check against https://schema.org/docs/full.html.\n3. **Required Properties**: Does the schema include all required properties for its type? (See per-type requirements below.)\n4. **Recommended Properties**: Does the schema include recommended properties that increase AI discoverability?\n5. **sameAs Links**: Does the schema include `sameAs` properties linking to other platform presences?\n6. **URL Validity**: Do all URLs in the schema resolve (not 404)?\n7. **Nesting**: Is the schema properly nested (e.g., author inside Article, address inside Organization)?\n8. **Rendering Method**: Is the JSON-LD in the server-rendered HTML or injected via JavaScript? Per Google's December 2025 guidance, **JavaScript-injected structured data may face delayed processing**. Flag any schema that requires JS execution.\n\n---\n\n## Step 3: Schema Types for GEO\n\n### Organization (CRITICAL — every business site)\nEssential for entity recognition across all AI platforms. This is how AI models identify WHAT the business is.\n\n**Required properties:**\n- `@type`: \"Organization\" (or subtype: Corporation, LocalBusiness, etc.)\n- `name`: Official business name\n- `url`: Official website URL\n- `logo`: URL to logo image (ImageObject preferred)\n\n**Recommended properties for GEO:**\n- `sameAs`: Array of ALL platform URLs (see sameAs strategy below)\n- `description`: 1-2 sentence description of the organization\n- `foundingDate`: ISO 8601 date\n- `founder`: Person schema\n- `address`: PostalAddress schema\n- `contactPoint`: ContactPoint with telephone, email, contactType\n- `areaServed`: Geographic area\n- `numberOfEmployees`: QuantitativeValue\n- `industry`: Text or DefinedTerm\n- `award`: Array of awards received\n- `knowsAbout`: Array of topics the organization is expert in (strong GEO signal)\n\n### LocalBusiness (for businesses with physical locations)\nExtends Organization. Critical for local AI search results and Google Gemini.\n\n**Additional required properties:**\n- `address`: Full PostalAddress\n- `telephone`: Phone number\n- `openingHoursSpecification`: Operating hours\n\n**Recommended for GEO:**\n- `geo`: GeoCoordinates (latitude, longitude)\n- `priceRange`: Price indicator\n- `aggregateRating`: AggregateRating schema\n- `review`: Array of Review schemas\n- `hasMap`: URL to Google Maps\n\n### Article + Author (CRITICAL for publishers)\nThe Author schema is one of the strongest E-E-A-T signals for AI platforms.\n\n**Article required:**\n- `@type`: \"Article\" (or NewsArticle, BlogPosting, TechArticle)\n- `headline`: Article title\n- `datePublished`: ISO 8601\n- `dateModified`: ISO 8601 (critical for freshness signals)\n- `author`: Person or Organization schema\n- `publisher`: Organization schema with logo\n- `image`: Representative image\n\n**Author (Person) required for GEO:**\n- `name`: Full name\n- `url`: Author page URL on the site\n- `sameAs`: LinkedIn, Twitter, personal site, Google Scholar, ORCID\n- `jobTitle`: Professional title\n- `worksFor`: Organization schema\n- `knowsAbout`: Array of expertise areas\n- `alumniOf`: Educational institutions\n- `award`: Professional awards\n\n### Product (for e-commerce)\n**Required:**\n- `name`, `description`, `image`\n- `offers`: Offer with price, priceCurrency, availability\n- `brand`: Brand schema\n- `sku` or `gtin`/`mpn`\n\n**Recommended for GEO:**\n- `aggregateRating`: AggregateRating\n- `review`: Array of individual reviews\n- `category`: Product category\n- `material`, `weight`, `width`, `height` (where applicable)\n\n### FAQPage\n**Status as of 2024**: Google restricts FAQ rich results to government and health sites. However, the FAQPage schema still serves GEO purposes — AI platforms parse FAQ structured data for question-answer extraction. Implement it for AI readability even though rich results may not appear.\n\n**Structure:**\n- `@type`: \"FAQPage\"\n- `mainEntity`: Array of Question schemas, each with `acceptedAnswer` containing an Answer schema\n\n### SoftwareApplication (for SaaS)\n**Required:**\n- `name`, `description`\n- `applicationCategory`: e.g., \"BusinessApplication\"\n- `operatingSystem`: Supported platforms\n- `offers`: Pricing\n\n**Recommended for GEO:**\n- `aggregateRating`: User ratings\n- `featureList`: Array of features (strong citation signal)\n- `screenshot`: Screenshots\n- `softwareVersion`: Current version\n- `releaseNotes`: Link to changelog\n\n### WebSite + SearchAction (for sitelinks search box)\n**Structure:**\n```json\n{\n  \"@type\": \"WebSite\",\n  \"name\": \"Site Name\",\n  \"url\": \"https://example.com\",\n  \"potentialAction\": {\n    \"@type\": \"SearchAction\",\n    \"target\": {\n      \"@type\": \"EntryPoint\",\n      \"urlTemplate\": \"https://example.com/search?q={search_term_string}\"\n    },\n    \"query-input\": \"required name=search_term_string\"\n  }\n}\n```\n\n### Person (standalone — for personal brands, authors, thought leaders)\nUse as a standalone schema on About/Bio pages. This builds the entity graph for individual expertise.\n\n**Required:** `name`, `url`\n**Recommended for GEO:** `sameAs`, `jobTitle`, `worksFor`, `knowsAbout`, `alumniOf`, `award`, `description`, `image`\n\n### speakable Property (for voice/AI assistants)\nThe `speakable` property marks specific sections of content as particularly suitable for voice and AI assistant consumption. Add to Article or WebPage schemas.\n\n```json\n{\n  \"@type\": \"Article\",\n  \"speakable\": {\n    \"@type\": \"SpeakableSpecification\",\n    \"cssSelector\": [\".article-summary\", \".key-takeaway\"]\n  }\n}\n```\nThis signals to AI assistants which passages are the best candidates for citation or reading aloud.\n\n---\n\n## Step 4: Deprecated/Changed Schemas to Flag\n\n| Schema | Status | Note |\n|---|---|---|\n| HowTo | Rich results deprecated Aug 2023 | Still useful for AI parsing, but do not promise rich results |\n| FAQPage | Restricted to govt/health Aug 2023 | Still useful for AI parsing (see above) |\n| SpecialAnnouncement | Deprecated 2023 | Was for COVID; remove if still present |\n| CourseInfo | Replaced by Course updates 2024 | Use updated Course schema properties |\n| VideoObject `contentUrl` | Changed behavior 2024 | Must point to actual video file, not page URL |\n| Review snippet | Stricter enforcement 2024 | Self-serving reviews on product pages may not display |\n\nFlag any deprecated schemas found and recommend replacements.\n\n---\n\n## Step 5: sameAs Strategy (CRITICAL for Entity Recognition)\n\nThe `sameAs` property is the single most important structured data property for GEO. It tells AI systems: \"This entity on my website is the SAME entity as these profiles elsewhere.\" This creates the entity graph that AI platforms use to verify, trust, and cite sources.\n\n### Recommended sameAs Links (in priority order)\n\n1. **Wikipedia article** — highest authority entity link\n2. **Wikidata item** — machine-readable entity identifier (e.g., `https://www.wikidata.org/wiki/Q12345`)\n3. **LinkedIn** — company page or personal profile\n4. **YouTube** — channel URL\n5. **Twitter/X** — profile URL\n6. **Facebook** — page URL\n7. **Crunchbase** — company profile (for startups/tech)\n8. **GitHub** — organization or personal profile (for tech)\n9. **Google Scholar** — author profile (for researchers/academics)\n10. **ORCID** — researcher identifier (for academics)\n11. **Instagram** — profile URL\n12. **Apple App Store / Google Play** — app listings (for software)\n13. **BBB** — Better Business Bureau listing (for US businesses)\n14. **Industry directories** — relevant vertical directories\n\n### sameAs Audit Process\n1. Collect all known web presences for the entity\n2. Check that each URL resolves (not 404 or redirected)\n3. Verify the Organization/Person schema includes ALL of them\n4. Check that the information on each platform is consistent (name, description, founding date, etc.)\n5. Flag any platforms where the entity should have a presence but does not\n\n---\n\n## Step 6: JSON-LD Generation\n\nBased on the detected business type, generate ready-to-paste JSON-LD blocks. Always generate:\n\n1. **Organization or Person** (depending on entity type) — always\n2. **WebSite with SearchAction** — always for the homepage\n3. **Business-type-specific** — Article for publishers, Product for e-commerce, LocalBusiness for local, SoftwareApplication for SaaS\n4. **BreadcrumbList** — for any page deeper than homepage\n\n### Generation Rules\n- Use the `@graph` pattern to include multiple schemas in one JSON-LD block\n- All URLs must be absolute (not relative)\n- Include `@id` properties for cross-referencing between schemas\n- Use ISO 8601 for all dates\n- Include `speakable` on Article schemas with CSS selectors pointing to key content sections\n- Place JSON-LD in `<head>` section — NOT injected via JavaScript\n\n### Template: Organization with Full GEO Signals\n```json\n{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"Organization\",\n  \"@id\": \"https://example.com/#organization\",\n  \"name\": \"Company Name\",\n  \"url\": \"https://example.com\",\n  \"logo\": {\n    \"@type\": \"ImageObject\",\n    \"url\": \"https://example.com/logo.png\",\n    \"width\": 600,\n    \"height\": 60\n  },\n  \"description\": \"Concise description of what the company does.\",\n  \"foundingDate\": \"2020-01-15\",\n  \"founder\": {\n    \"@type\": \"Person\",\n    \"name\": \"Founder Name\",\n    \"sameAs\": \"https://www.linkedin.com/in/founder\"\n  },\n  \"address\": {\n    \"@type\": \"PostalAddress\",\n    \"streetAddress\": \"123 Main St\",\n    \"addressLocality\": \"City\",\n    \"addressRegion\": \"State\",\n    \"postalCode\": \"12345\",\n    \"addressCountry\": \"US\"\n  },\n  \"contactPoint\": {\n    \"@type\": \"ContactPoint\",\n    \"telephone\": \"+1-555-555-5555\",\n    \"contactType\": \"customer service\",\n    \"email\": \"support@example.com\"\n  },\n  \"sameAs\": [\n    \"https://en.wikipedia.org/wiki/Company_Name\",\n    \"https://www.wikidata.org/wiki/Q12345\",\n    \"https://www.linkedin.com/company/company-name\",\n    \"https://www.youtube.com/@companyname\",\n    \"https://twitter.com/companyname\",\n    \"https://github.com/companyname\",\n    \"https://www.crunchbase.com/organization/company-name\"\n  ],\n  \"knowsAbout\": [\n    \"Topic 1\",\n    \"Topic 2\",\n    \"Topic 3\"\n  ]\n}\n```\n\n---\n\n## Scoring Rubric (0-100)\n\n| Criterion | Points | How to Score |\n|---|---|---|\n| Organization/Person schema present and complete | 15 | 15 if full, 10 if basic, 0 if none |\n| sameAs links (5+ platforms) | 15 | 3 per valid sameAs link, max 15 |\n| Article schema with author details | 10 | 10 if full author schema, 5 if name only, 0 if none |\n| Business-type-specific schema present | 10 | 10 if complete, 5 if partial, 0 if missing |\n| WebSite + SearchAction | 5 | 5 if present, 0 if not |\n| BreadcrumbList on inner pages | 5 | 5 if present, 0 if not |\n| JSON-LD format (not Microdata/RDFa) | 5 | 5 if JSON-LD, 3 if mixed, 0 if only Microdata/RDFa |\n| Server-rendered (not JS-injected) | 10 | 10 if in HTML source, 5 if JS but in head, 0 if dynamic JS |\n| speakable property on articles | 5 | 5 if present, 0 if not |\n| Valid JSON + valid Schema.org types | 10 | 10 if no errors, 5 if minor issues, 0 if major errors |\n| knowsAbout property on Organization/Person | 5 | 5 if present with 3+ topics, 0 if missing |\n| No deprecated schemas present | 5 | 5 if clean, 0 if deprecated schemas found |\n\n---\n\n## Output Format\n\nGenerate **GEO-SCHEMA-REPORT.md** with:\n\n```markdown\n# GEO Schema & Structured Data Report — [Domain]\nDate: [Date]\n\n## Schema Score: XX/100\n\n## Detected Schemas\n| Page | Schema Type | Format | Status | Issues |\n|---|---|---|---|---|\n| / | Organization | JSON-LD | Valid | Missing sameAs |\n| /blog/post-1 | Article | JSON-LD | Valid | No author schema |\n\n## Validation Results\n[List each schema with pass/fail per property]\n\n## Missing Recommended Schemas\n[List schemas that should be present based on business type but are not]\n\n## sameAs Audit\n| Platform | URL | Status |\n|---|---|---|\n| Wikipedia | [URL or \"Not found\"] | Present/Missing |\n| LinkedIn | [URL or \"Not found\"] | Present/Missing |\n[Continue for all recommended platforms]\n\n## Generated JSON-LD Code\n[Ready-to-paste JSON-LD blocks for each missing or incomplete schema]\n\n## Implementation Notes\n- Where to place each JSON-LD block\n- Server-rendering requirements\n- Testing with Google Rich Results Test and Schema.org Validator\n```\n","skills/geo-technical/SKILL.md":"---\nname: geo-technical\ndescription: Technical SEO audit with GEO-specific checks — crawlability, indexability, security, performance, SSR, and AI crawler access\nversion: 1.0.0\nauthor: geo-seo-claude\ntags: [geo, technical-seo, core-web-vitals, ssr, crawlability, security, performance]\nallowed-tools: Read, Grep, Glob, Bash, WebFetch, Write\n---\n\n# GEO Technical SEO Audit\n\n## Purpose\n\nTechnical SEO forms the foundation of both traditional search visibility and AI search citation. A technically broken site cannot be crawled, indexed, or cited by any platform. This skill audits 8 categories of technical health with specific attention to GEO requirements — most critically, **server-side rendering** (AI crawlers do not execute JavaScript) and **AI crawler access** (many sites inadvertently block AI crawlers in robots.txt).\n\n## How to Use This Skill\n\n1. Collect the target URL (homepage + 2-3 key inner pages)\n2. Fetch each page using curl/WebFetch to get raw HTML and HTTP headers\n3. Run through each of the 8 audit categories below\n4. Score each category using the rubric\n5. Generate GEO-TECHNICAL-AUDIT.md with results\n\n---\n\n## Category 1: Crawlability (15 points)\n\n### 1.1 robots.txt Validity\n- Fetch `https://[domain]/robots.txt`\n- Check for syntactic validity: proper `User-agent`, `Allow`, `Disallow` directives\n- Check for common errors: missing User-agent, wildcards blocking important paths, Disallow: / blocking entire site\n- Verify XML sitemap is referenced: `Sitemap: https://[domain]/sitemap.xml`\n\n### 1.2 AI Crawler Access (CRITICAL for GEO)\nCheck robots.txt for directives targeting these AI crawlers:\n\n| Crawler | User-Agent | Platform |\n|---|---|---|\n| GPTBot | GPTBot | ChatGPT / OpenAI |\n| Google-Extended | Google-Extended | Gemini / Google AI training |\n| Googlebot | Googlebot | Google Search + AI Overviews |\n| Bingbot | bingbot | Bing Copilot + ChatGPT (via Bing) |\n| PerplexityBot | PerplexityBot | Perplexity AI |\n| ClaudeBot | ClaudeBot | Anthropic Claude |\n| Amazonbot | Amazonbot | Alexa / Amazon AI |\n| CCBot | CCBot | Common Crawl (used by many AI models) |\n| FacebookBot | FacebookExternalHit | Meta AI |\n| Bytespider | Bytespider | TikTok / ByteDance AI |\n| Applebot-Extended | Applebot-Extended | Apple Intelligence |\n\n**Scoring for AI crawler access:**\n- All major AI crawlers allowed: 5 points\n- Some blocked but Googlebot + Bingbot allowed: 3 points\n- GPTBot or PerplexityBot blocked: 1 point (significant GEO impact)\n- Googlebot blocked: 0 points (fatal)\n\n**Important nuance**: Blocking Google-Extended does NOT block Googlebot. Google-Extended only controls AI training data usage, not search indexing. However, blocking Google-Extended may reduce presence in AI Overviews. Recommend allowing Google-Extended unless there is a specific data licensing concern.\n\n### 1.3 XML Sitemaps\n- Fetch sitemap (check robots.txt for location, or try `/sitemap.xml`, `/sitemap_index.xml`)\n- Validate XML syntax\n- Check for `<lastmod>` dates (should be present and accurate)\n- Count URLs — compare to expected number of indexable pages\n- Check for sitemap index if large site (50,000+ URLs per sitemap max)\n- Verify all sitemap URLs return 200 status codes (sample check)\n\n### 1.4 Crawl Depth\n- Homepage = depth 0. Check that all important pages are reachable within **3 clicks** (depth 3)\n- Pages at depth 4+ receive significantly less crawl budget and are less likely to be cited by AI\n- Check internal linking: are key content pages linked from the homepage or main navigation?\n\n### 1.5 Noindex Management\n- Check for `<meta name=\"robots\" content=\"noindex\">` on pages that SHOULD be indexed\n- Check for `X-Robots-Tag: noindex` HTTP headers\n- Common mistakes: noindex on paginated pages, category pages, or key landing pages\n\n**Category Scoring:**\n| Check | Points |\n|---|---|\n| robots.txt valid and complete | 3 |\n| AI crawlers allowed | 5 |\n| XML sitemap present and valid | 3 |\n| Crawl depth within 3 clicks | 2 |\n| No erroneous noindex directives | 2 |\n\n---\n\n## Category 2: Indexability (12 points)\n\n### 2.1 Canonical Tags\n- Every indexable page must have a `<link rel=\"canonical\" href=\"...\">` tag\n- Canonical must point to itself (self-referencing) for the authoritative version\n- Check for conflicting canonicals (canonical in HTML vs. HTTP header)\n- Check for canonical chains (A canonicals to B, B canonicals to C — should be A to C)\n\n### 2.2 Duplicate Content\n- Check for www vs. non-www (both should resolve, one should redirect)\n- Check for HTTP vs. HTTPS (HTTP should redirect to HTTPS)\n- Check for trailing slash consistency (pick one pattern and redirect the other)\n- Check for parameter-based duplicates (`?sort=price` creating duplicate pages)\n\n### 2.3 Pagination\n- If paginated content exists, check for `rel=\"next\"` / `rel=\"prev\"` (note: Google ignores these as of 2019, but Bing still uses them)\n- Preferred: use `rel=\"canonical\"` on paginated pages pointing to a view-all page or the first page\n- Ensure paginated pages are not noindexed if they contain unique content\n\n### 2.4 Hreflang (international sites)\n- Check for `<link rel=\"alternate\" hreflang=\"xx\">` tags\n- Validate: reciprocal hreflang (if page A points to page B, B must point back to A)\n- Validate: x-default fallback exists\n- Check for language/region code validity (ISO 639-1 / ISO 3166-1)\n\n### 2.5 Index Bloat\n- Estimate number of indexed pages (check sitemap count, use `site:domain.com` estimate)\n- Compare indexed pages to actual valuable content pages\n- Flag if indexed pages significantly exceed content pages (index bloat from thin/duplicate/parameter pages)\n\n**Category Scoring:**\n| Check | Points |\n|---|---|\n| Canonical tags correct on all pages | 3 |\n| No duplicate content issues | 3 |\n| Pagination handled correctly | 2 |\n| Hreflang correct (if applicable) | 2 |\n| No index bloat | 2 |\n\n---\n\n## Category 3: Security (10 points)\n\n### 3.1 HTTPS Enforcement\n- Site must load over HTTPS\n- HTTP must redirect to HTTPS (301 redirect)\n- No mixed content warnings (HTTP resources on HTTPS pages)\n- SSL/TLS certificate must be valid and not expired\n\n### 3.2 Security Headers\nCheck HTTP response headers for:\n\n| Header | Required Value | Purpose |\n|---|---|---|\n| `Strict-Transport-Security` | `max-age=31536000; includeSubDomains` | Forces HTTPS |\n| `Content-Security-Policy` | Appropriate policy | Prevents XSS |\n| `X-Content-Type-Options` | `nosniff` | Prevents MIME sniffing |\n| `X-Frame-Options` | `DENY` or `SAMEORIGIN` | Prevents clickjacking |\n| `Referrer-Policy` | `strict-origin-when-cross-origin` or stricter | Controls referrer data |\n| `Permissions-Policy` | Appropriate restrictions | Controls browser features |\n\n**Category Scoring:**\n| Check | Points |\n|---|---|\n| HTTPS enforced with valid cert | 4 |\n| HSTS header present | 2 |\n| X-Content-Type-Options | 1 |\n| X-Frame-Options | 1 |\n| Referrer-Policy | 1 |\n| Content-Security-Policy | 1 |\n\n---\n\n## Category 4: URL Structure (8 points)\n\n### 4.1 Clean URLs\n- URLs should be human-readable: `/blog/seo-guide` not `/blog?id=12345`\n- No session IDs in URLs\n- Lowercase only (no mixed case)\n- Hyphens for word separation (not underscores)\n- No special characters or encoded spaces\n\n### 4.2 Logical Hierarchy\n- URL path should reflect site architecture: `/category/subcategory/page`\n- Flat where appropriate — avoid unnecessarily deep nesting\n- Consistent pattern across the site\n\n### 4.3 Redirect Chains\n- Check for redirect chains (A redirects to B redirects to C)\n- Maximum 1 hop recommended (A redirects to C directly)\n- Check for redirect loops\n- All redirects should be 301 (permanent), not 302 (temporary), unless intentionally temporary\n\n### 4.4 Parameter Handling\n- URL parameters should not create duplicate indexable pages\n- Use canonical tags or `robots.txt` Disallow for parameter variations\n- Configure parameter handling in Google Search Console and Bing Webmaster Tools\n\n**Category Scoring:**\n| Check | Points |\n|---|---|\n| Clean, readable URLs | 2 |\n| Logical hierarchy | 2 |\n| No redirect chains (max 1 hop) | 2 |\n| Parameter handling configured | 2 |\n\n---\n\n## Category 5: Mobile Optimization (10 points)\n\n### Critical Context\nAs of **July 2024**, Google crawls ALL sites exclusively with mobile Googlebot. There is no desktop crawling. If your site does not work on mobile, it does not work for Google. Period.\n\n### 5.1 Responsive Design\n- Check for `<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">`\n- Content must not require horizontal scrolling on mobile\n- No fixed-width layouts wider than viewport\n\n### 5.2 Tap Targets\n- Interactive elements (buttons, links) must be at least 48x48 CSS pixels\n- Minimum 8px spacing between tap targets\n- Check that navigation is usable on mobile\n\n### 5.3 Font Sizes\n- Base font size should be at least 16px\n- No text requiring zoom to read\n- Sufficient contrast ratio (WCAG AA: 4.5:1 for normal text, 3:1 for large text)\n\n### 5.4 Mobile Content Parity\n- All content visible on desktop must also be visible on mobile\n- No hidden content behind \"read more\" toggles that Googlebot cannot expand (though Google has improved at expanding these as of 2025)\n- Images and media must load on mobile\n\n**Category Scoring:**\n| Check | Points |\n|---|---|\n| Viewport meta tag correct | 3 |\n| Responsive layout (no horizontal scroll) | 3 |\n| Tap targets appropriately sized | 2 |\n| Font sizes legible | 2 |\n\n---\n\n## Category 6: Core Web Vitals (15 points)\n\n### 2026 Metrics and Thresholds\nCore Web Vitals use the **75th percentile** of real user data (field data) as the benchmark. Lab data is useful for debugging but field data determines the ranking signal.\n\n| Metric | Good | Needs Improvement | Poor | Notes |\n|---|---|---|---|---|\n| **LCP** (Largest Contentful Paint) | < 2.5s | 2.5s - 4.0s | > 4.0s | Measures loading — time until largest visible element renders |\n| **INP** (Interaction to Next Paint) | < 200ms | 200ms - 500ms | > 500ms | Replaced FID in March 2024. Measures ALL interactions, not just first |\n| **CLS** (Cumulative Layout Shift) | < 0.1 | 0.1 - 0.25 | > 0.25 | Measures visual stability — unexpected layout movements |\n\n### How to Assess Without CrUX Data\nWhen real user data is unavailable, estimate from page characteristics:\n- **LCP**: Check largest above-fold element. Is it an image (check size/format)? Is it text (check web font loading)? Server response time (TTFB)?\n- **INP**: Check for heavy JavaScript on page. Long tasks (>50ms) block interactivity. Check for third-party scripts.\n- **CLS**: Check for images without explicit width/height. Check for dynamically inserted content above the fold. Check for web fonts causing layout shift (FOUT/FOIT).\n\n### Common LCP Fixes\n1. Optimize hero images: WebP/AVIF format, correct sizing, preload with `<link rel=\"preload\">`\n2. Reduce server response time (TTFB < 800ms)\n3. Eliminate render-blocking CSS/JS\n4. Preconnect to critical third-party origins\n\n### Common INP Fixes\n1. Break up long tasks (>50ms) into smaller chunks using `requestIdleCallback` or `scheduler.yield()`\n2. Reduce third-party JavaScript\n3. Use `content-visibility: auto` for off-screen content\n4. Debounce/throttle event handlers\n\n### Common CLS Fixes\n1. Always include `width` and `height` attributes on images and videos\n2. Reserve space for ads and embeds with CSS `aspect-ratio` or explicit dimensions\n3. Use `font-display: swap` with size-adjusted fallback fonts\n4. Avoid inserting content above existing content after page load\n\n**Category Scoring:**\n| Check | Points |\n|---|---|\n| LCP < 2.5s | 5 |\n| INP < 200ms | 5 |\n| CLS < 0.1 | 5 |\n\n---\n\n## Category 7: Server-Side Rendering (15 points) — CRITICAL FOR GEO\n\n### Why SSR Is Mandatory for AI Visibility\nAI crawlers (GPTBot, PerplexityBot, ClaudeBot, etc.) do **NOT execute JavaScript**. They fetch the raw HTML and parse it. If your content is rendered client-side by React, Vue, Angular, or any other JavaScript framework, AI crawlers see an empty page.\n\nEven Googlebot, which does execute JavaScript, deprioritizes JS-rendered content due to the additional crawl budget required. Google processes JS rendering in a separate \"rendering queue\" that can delay indexing by days or weeks.\n\n### Detection Method\n1. Fetch the page with curl (no JavaScript execution): `curl -s [URL]`\n2. Compare the raw HTML to the rendered DOM (via browser)\n3. If key content (headings, paragraphs, product info, article text) is MISSING from the curl output, the site relies on client-side rendering\n\n### What to Check\n- **Main content text**: Is the article body / product description / page content in the raw HTML?\n- **Headings**: Are H1, H2, H3 tags present in raw HTML?\n- **Navigation**: Is the main navigation server-rendered?\n- **Structured data**: Is JSON-LD in the raw HTML or injected by JavaScript?\n- **Meta tags**: Are title, description, canonical, OG tags in the raw HTML?\n- **Internal links**: Are navigation and content links in the raw HTML? (Critical for crawlability)\n\n### SSR Solutions to Recommend\n| Framework | SSR Solution |\n|---|---|\n| React | Next.js (SSR/SSG), Remix, Gatsby (SSG) |\n| Vue | Nuxt.js (SSR/SSG) |\n| Angular | Angular Universal |\n| Svelte | SvelteKit |\n| Generic | Prerender.io (prerendering service), Rendertron |\n\n### Scoring Detail\n- All key content server-rendered: 15 points\n- Main content server-rendered but some elements JS-only: 10 points\n- Critical content requires JS (product info, article text): 5 points\n- Entire page is client-rendered (empty body in raw HTML): 0 points\n\n**Category Scoring:**\n| Check | Points |\n|---|---|\n| Main content in raw HTML | 8 |\n| Meta tags + structured data in raw HTML | 4 |\n| Internal links in raw HTML | 3 |\n\n---\n\n## Category 8: Page Speed & Server Performance (15 points)\n\n### 8.1 Time to First Byte (TTFB)\n- Target: **< 800ms** (ideally < 200ms)\n- Measure with curl: `curl -o /dev/null -s -w 'TTFB: %{time_starttransfer}s\\n' [URL]`\n- If TTFB > 800ms: check server location, caching, database queries, CDN usage\n\n### 8.2 Resource Optimization\n- Total page weight target: **< 2MB** (critical pages < 1MB)\n- Check for uncompressed resources (gzip/brotli compression should be enabled)\n- Check for unminified CSS and JavaScript\n- Check for unused CSS/JS (can represent 50%+ of downloaded bytes on many sites)\n\n### 8.3 Image Optimization\n- Check image formats: WebP or AVIF preferred over JPEG/PNG\n- Check for oversized images (images larger than display size)\n- Check for lazy loading: images below fold should have `loading=\"lazy\"`\n- Check for explicit dimensions (width/height attributes prevent CLS)\n- Above-fold images should NOT be lazy loaded (harms LCP)\n\n### 8.4 Code Splitting and Lazy Loading\n- JavaScript should be code-split so each page only loads what it needs\n- Check for large JavaScript bundles (> 200KB compressed is a warning, > 500KB is critical)\n- Third-party scripts should load asynchronously (`async` or `defer`)\n- Check for render-blocking resources in `<head>`\n\n### 8.5 Caching\n- Check `Cache-Control` headers on static resources (images, CSS, JS)\n- Static assets should have long cache times: `max-age=31536000` (1 year) with content-hashed filenames\n- HTML pages should have shorter cache or `no-cache` with validation (`ETag` or `Last-Modified`)\n\n### 8.6 CDN Usage\n- Check if static resources are served from a CDN (different domain or CDN-specific headers)\n- For global audience, CDN is critical for consistent performance\n- Check for CDN-specific headers: `CF-Ray` (Cloudflare), `X-Cache` (AWS CloudFront), `X-Served-By` (Fastly)\n\n**Category Scoring:**\n| Check | Points |\n|---|---|\n| TTFB < 800ms | 3 |\n| Page weight < 2MB | 2 |\n| Images optimized (format, size, lazy) | 3 |\n| JS bundles reasonable (< 200KB compressed) | 2 |\n| Compression enabled (gzip/brotli) | 2 |\n| Cache headers on static resources | 2 |\n| CDN in use | 1 |\n\n---\n\n## Category 9: Agent-Readiness Signals (non-scoring)\n\nThese checks surface emerging AI agent compatibility signals. None contribute to the numeric score — they produce a pass or a recommendation. The underlying standards are either IETF drafts or early-adoption features; penalizing absence would be unfair.\n\n### 9.1 RFC 8288 Link Headers (Service Discovery)\n\nRFC 8288 (Web Linking) defines the HTTP `Link:` response header. Servers can use it to advertise related resources — API catalog, service docs, MCP server card — in a machine-readable way, without HTML parsing.\n\n**How to check:** Capture all `Link:` response headers from the standard homepage fetch (no extra request).\n\n**What to look for:**\n- Parse `<url>; rel=\"relation-type\"` pairs.\n- High-value rel types: `api-catalog` (RFC 9609), `describedby`, `service-doc`, `mcp-server-card`.\n\n**When to surface a recommendation:** Only for API-first sites (API docs linked in nav, `/api/` or `/developers/` paths, swagger/OpenAPI in sitemap). Omit this section entirely for standard business sites — absence is expected and not noteworthy.\n\n| State | Treatment |\n|---|---|\n| `Link:` headers present, known rel types | Informational — document what was found |\n| `Link:` headers present, unknown rel types | Informational — note and explain |\n| Absent, API-first site | Recommendation — explain and suggest implementation |\n| Absent, standard business site | Omit — do not surface |\n\n### 9.2 Markdown Content Negotiation\n\nChecks if the server responds to `Accept: text/markdown` with `Content-Type: text/markdown`. Cloudflare's \"Markdown for Agents\" feature enables this — AI agents receive clean Markdown instead of HTML, eliminating boilerplate stripping and improving content extraction accuracy.\n\n**How to check:** Send a GET to the homepage with `Accept: text/markdown`. This is one additional HTTP request per audit.\n\n**Evaluation:**\n- If response `Content-Type` is `text/markdown` (or `text/markdown; charset=utf-8`): pass — note as a leading-edge capability.\n- Otherwise: forward-looking recommendation, not a failure.\n- If the request errors or returns non-200: skip and note the error. Do not penalize.\n\n| State | Treatment |\n|---|---|\n| `text/markdown` returned | Bonus — note as a leading-edge capability |\n| Standard HTML returned | Forward-looking recommendation |\n| Request errors / non-200 | Skip, note the error, do not penalize |\n\n---\n\n## IndexNow Protocol\n\n### What It Is\nIndexNow is an open protocol that allows websites to notify search engines instantly when content is created, updated, or deleted. Supported by Bing, Yandex, Seznam, and Naver. Google does NOT support IndexNow but monitors the protocol.\n\n### Why It Matters for GEO\nChatGPT uses Bing's index. Bing Copilot uses Bing's index. Faster Bing indexing means faster AI visibility on two major platforms.\n\n### Implementation Check\n1. Check for IndexNow key file: `https://[domain]/.well-known/indexnow-key.txt` or similar\n2. Check if CMS has IndexNow plugin (WordPress: IndexNow plugin; many modern CMS platforms support it natively)\n3. If not implemented, recommend adding it with instructions\n\n---\n\n## Overall Scoring\n\n| Category | Max Points | Weight |\n|---|---|---|\n| Crawlability | 15 | Core foundation |\n| Indexability | 12 | Core foundation |\n| Security | 10 | Trust signal |\n| URL Structure | 8 | Crawl efficiency |\n| Mobile Optimization | 10 | Google requirement |\n| Core Web Vitals | 15 | Ranking signal |\n| Server-Side Rendering | 15 | GEO critical |\n| Page Speed & Server | 15 | Performance |\n| **Total** | **100** | |\n\nNon-scoring checks (Category 9) appear in the output under \"Agent-Readiness Signals\" and do not affect this total.\n\n### Score Interpretation\n- **90-100**: Excellent — technically sound for both traditional SEO and GEO\n- **70-89**: Good — minor issues to address but fundamentally solid\n- **50-69**: Needs Work — significant technical debt impacting visibility\n- **30-49**: Poor — major issues blocking crawling, indexing, or AI visibility\n- **0-29**: Critical — fundamental technical failures requiring immediate attention\n\n---\n\n## Output Format\n\nGenerate **GEO-TECHNICAL-AUDIT.md** with:\n\n```markdown\n# GEO Technical SEO Audit — [Domain]\nDate: [Date]\n\n## Technical Score: XX/100\n\n## Score Breakdown\n| Category | Score | Status |\n|---|---|---|\n| Crawlability | XX/15 | Pass/Warn/Fail |\n| Indexability | XX/12 | Pass/Warn/Fail |\n| Security | XX/10 | Pass/Warn/Fail |\n| URL Structure | XX/8 | Pass/Warn/Fail |\n| Mobile Optimization | XX/10 | Pass/Warn/Fail |\n| Core Web Vitals | XX/15 | Pass/Warn/Fail |\n| Server-Side Rendering | XX/15 | Pass/Warn/Fail |\n| Page Speed & Server | XX/15 | Pass/Warn/Fail |\n\nStatus: Pass = 80%+ of category points, Warn = 50-79%, Fail = <50%\n\n## AI Crawler Access\n| Crawler | User-Agent | Status | Recommendation |\n|---|---|---|---|\n| GPTBot | GPTBot | Allowed/Blocked | [Action] |\n| Googlebot | Googlebot | Allowed/Blocked | [Action] |\n[Continue for all AI crawlers]\n\n## Critical Issues (fix immediately)\n[List with specific page URLs and what is wrong]\n\n## Warnings (fix this month)\n[List with details]\n\n## Recommendations (optimize this quarter)\n[List with details]\n\n## Agent-Readiness Signals (non-scoring)\n\n### RFC 8288 Link Headers (Service Discovery)\n\n**Status:** Present / Absent / Not Applicable\n\n<!-- If present: -->\n| Relation Type | URL | Meaning |\n|---|---|---|\n| api-catalog | /.well-known/api-catalog | Machine-readable index of available APIs |\n| mcp-server-card | /.well-known/mcp.json | MCP server capability declaration |\n\nAI agents and API clients can discover your services without parsing HTML.\n\n<!-- If absent, API-first site only: -->\n**Informational Recommendation:** This site has API/developer-oriented content but no `Link:` headers advertising discoverable services.\n\nExample: `Link: </.well-known/api-catalog>; rel=\"api-catalog\"`\n\nRelevant for: sites with public APIs, OpenAPI docs, or MCP server integrations.\nReference: RFC 8288, RFC 9609.\n\n<!-- If absent, standard business site: omit this section entirely -->\n\n### Markdown Content Negotiation\n\n**Status:** Supported / Not Supported\n**Test:** GET [url] with `Accept: text/markdown`\n**Response Content-Type:** [value]\n\n<!-- If supported: -->\nThis site serves clean Markdown to AI agents on request. AI crawlers that support content negotiation receive formatted text without HTML boilerplate.\n\n<!-- If not supported: -->\n**Forward-Looking Recommendation:** Cloudflare Workers/Pages sites can enable Markdown content negotiation with a one-line configuration change. When an AI agent sends `Accept: text/markdown`, the server responds with clean Markdown instead of HTML.\n\n- Currently Cloudflare-specific\n- Relevant for: sites already on Cloudflare infrastructure\n- Other CDNs and frameworks expected to adopt this pattern as AI agent traffic grows\n\n## Detailed Findings\n[Per-category breakdown with evidence]\n```\n","skills/geo-update/SKILL.md":"---\nname: geo-update\ndescription: Pull the latest GEO-SEO skill updates from the upstream repository. Compares installed files against the latest release, shows what changed, and updates all skills, agents, scripts, and schema templates in place.\nallowed-tools:\n  - Bash\n  - Read\n  - Write\n---\n\n# GEO-SEO Update Skill\n\n## Purpose\n\nUpdates the locally installed GEO-SEO skills, agents, scripts, and schema templates to the latest version from the upstream repository. Shows a summary of what changed before and after the update.\n\n---\n\n## Update Workflow\n\n### Step 1: Determine Installed Location\n\nThe GEO-SEO toolkit installs to these locations under `~/.claude/`:\n\n| Component | Install Path |\n|-----------|-------------|\n| Main skill | `~/.claude/skills/geo/` |\n| Sub-skills | `~/.claude/skills/geo-*/` |\n| Agents | `~/.claude/agents/geo-*.md` |\n| Scripts | `~/.claude/skills/geo/scripts/` |\n| Schema templates | `~/.claude/skills/geo/schema/` |\n| Hooks | `~/.claude/skills/geo/hooks/` |\n\nVerify the installation exists by checking for `~/.claude/skills/geo/SKILL.md`. If it does not exist, inform the user that GEO-SEO is not installed and suggest running the installer instead.\n\n### Step 2: Clone Latest from Upstream\n\n```bash\nTEMP_DIR=$(mktemp -d)\ngit clone --depth 1 https://github.com/zubair-trabzada/geo-seo-claude.git \"$TEMP_DIR/repo\"\n```\n\nIf the clone fails, report the error and stop. Do not modify any installed files.\n\n### Step 3: Compare Installed vs Latest\n\nBefore copying files, generate a diff summary so the user knows what will change:\n\n1. For each component directory, compare the installed files against the cloned files using `diff --recursive --brief`.\n2. Categorise changes as:\n   - **New files** — exist in upstream but not locally\n   - **Modified files** — exist in both but differ\n   - **Removed files** — exist locally but not in upstream (these are NOT deleted automatically)\n3. Present the summary to the user.\n\n### Step 4: Apply Updates\n\nCopy files from the cloned repo over the installed locations:\n\n```bash\nCLAUDE_DIR=\"${HOME}/.claude\"\nSOURCE_DIR=\"$TEMP_DIR/repo\"\n\n# Main skill\ncp -r \"$SOURCE_DIR/geo/\"* \"$CLAUDE_DIR/skills/geo/\"\n\n# Sub-skills\nfor skill_dir in \"$SOURCE_DIR/skills\"/*/; do\n    skill_name=$(basename \"$skill_dir\")\n    mkdir -p \"$CLAUDE_DIR/skills/${skill_name}\"\n    cp -r \"$skill_dir\"* \"$CLAUDE_DIR/skills/${skill_name}/\"\ndone\n\n# Agents\nfor agent_file in \"$SOURCE_DIR/agents/\"*.md; do\n    cp \"$agent_file\" \"$CLAUDE_DIR/agents/\"\ndone\n\n# Scripts\nif [ -d \"$SOURCE_DIR/scripts\" ]; then\n    cp -r \"$SOURCE_DIR/scripts/\"* \"$CLAUDE_DIR/skills/geo/scripts/\"\n    chmod +x \"$CLAUDE_DIR/skills/geo/scripts/\"*.py 2>/dev/null || true\nfi\n\n# Schema templates\nif [ -d \"$SOURCE_DIR/schema\" ]; then\n    cp -r \"$SOURCE_DIR/schema/\"* \"$CLAUDE_DIR/skills/geo/schema/\"\nfi\n\n# Hooks\nif [ -d \"$SOURCE_DIR/hooks\" ] && [ \"$(ls -A \"$SOURCE_DIR/hooks\" 2>/dev/null)\" ]; then\n    mkdir -p \"$CLAUDE_DIR/skills/geo/hooks\"\n    cp -r \"$SOURCE_DIR/hooks/\"* \"$CLAUDE_DIR/skills/geo/hooks/\"\n    chmod +x \"$CLAUDE_DIR/skills/geo/hooks/\"* 2>/dev/null || true\nfi\n```\n\n### Step 5: Update Python Dependencies\n\nIf `requirements.txt` exists in the upstream repo and differs from the installed version:\n\n```bash\npython3 -m pip install -r \"$SOURCE_DIR/requirements.txt\" --quiet\n```\n\nReport any failures but do not treat them as fatal.\n\n### Step 6: Clean Up\n\n```bash\nrm -rf \"$TEMP_DIR\"\n```\n\n### Step 7: Report Results\n\nPresent a summary:\n\n```\nGEO-SEO Update Complete\n=======================\nNew files:      [count]\nModified files: [count]\nUnchanged:      [count]\nRemoved upstream (kept locally): [count]\n\nDependencies: [updated / unchanged / failed]\n```\n\nIf there were removed files upstream, list them and suggest the user review whether to delete them manually.\n\n---\n\n## Important Notes\n\n- **Never delete locally installed files** that no longer exist upstream. The user may have customised them. List them and let the user decide.\n- **Never modify `~/.claude/settings.json` or `~/.claude/settings.local.json`** — these are user configuration files, not part of the GEO-SEO toolkit.\n- **If already up to date** (no diff), report that and skip the copy step.\n- **Restart notice:** Remind the user that skill changes take effect in new Claude Code sessions. They should restart their session to use the updated skills.\n"},"files":{"CLAUDE.md":"# CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.\n\n## What this is\n\nA **GEO-SEO analysis toolkit** distributed as a suite of Claude Code skills + subagents + Python\nscripts. \"GEO\" = Generative Engine Optimization — optimizing websites for AI search engines\n(ChatGPT, Claude, Perplexity, Gemini, Google AI Overviews) rather than only traditional search.\nPhilosophy: **GEO-first, SEO-supported.**\n\nThis repo is the **source**. Users install it into `~/.claude/` (see [install](#install--uninstall)),\nthen invoke `/geo <command> <url>` inside Claude Code. Audits are run from the user's own working\ndirectory and deliverables land there — never in this repo.\n\nDeep documentation already lives in [`docs/`](docs/) — read it before large changes and keep it in\nsync (per `CONTRIBUTING.md`):\n\n| Topic | File |\n|-------|------|\n| Component architecture & data flow | `docs/architecture.md` |\n| Composite GEO Score weights & formulas | `docs/scoring-methodology.md` |\n| Skills / agents / scripts / schemas map | `docs/skills-and-agents.md` |\n| Every `/geo` subcommand | `docs/commands-reference.md` |\n\n## Repository layout\n\n| Path | Contents |\n|------|----------|\n| `geo/SKILL.md` | Orchestrator — routes `/geo` subcommands, detects business type, fans out and synthesizes the audit |\n| `skills/geo-*/` | 15 sub-skills (one `SKILL.md` each) — the reusable units and single-purpose subcommands |\n| `agents/geo-*.md` | 5 parallel subagents launched during a full audit |\n| `scripts/*.py` | Python analysis scripts (`fetch_page`, `citability_scorer`, `brand_scanner`, `llmstxt_generator`, `crm_dashboard`) |\n| `scripts/webapp/` | Flask + HTMX CRM web UI (`app.py`) |\n| `schema/*.json` | JSON-LD schema templates by business type |\n| `templates/` | `geo-report-style.css` + `geo-report-template.html` for the PDF report |\n| `docs/` | Long-form documentation (keep in sync with code) |\n| `examples/` | Sample audit outputs, proposals, demo CRM data |\n| `tests/` | Test suite (see [Testing](#testing)) |\n| `white-label/` | Agency rebranding config (`brand_config.py`, `brand.example.json`) |\n| `install.sh` / `install-win.sh` / `uninstall.sh` | Installers and uninstaller |\n\n## Architecture (in brief)\n\nThree layers — see `docs/architecture.md` for the full picture:\n\n1. **Orchestrator** (`geo/SKILL.md`) routes subcommands, detects business type\n   (SaaS / Local / E-commerce / Publisher / Agency / Other, which tailors recommendations), and\n   for a full `/geo audit` fans out to subagents then synthesizes a composite **GEO Score (0-100)**.\n2. **5 parallel subagents** (`agents/geo-*.md`) run simultaneously during an audit; each owns a\n   slice (AI visibility, platform analysis, technical, content, schema) and writes a report section.\n3. **15 sub-skills** (`skills/geo-*/`) are the reusable units the subagents invoke and the targets\n   of single-purpose subcommands (`citability`, `crawlers`, `llmstxt`, …), plus the agency layer\n   (`geo-prospect` CRM, `geo-proposal`, `geo-compare`, `geo-report-pdf`, `geo-update`).\n\n**Two kinds of state:** audit deliverables are written to the user's current working directory;\nagency/CRM data persists under `~/.geo-prospects/` (`prospects.json`, `audits/`, `proposals/`,\n`reports/`), which the Python scripts and the Flask webapp read/write directly.\n\n## Install / uninstall\n\n`install.sh` copies `geo/`, `skills/`, `agents/`, `scripts/`, `schema/`, and `templates/` into\n`~/.claude/`, creates a Python venv at `~/.claude/skills/geo/.venv` (using `uv` if available, else\nstdlib `venv` + `pip`), installs `requirements.txt`, and **rewrites the script shebangs to point at\nthat venv**. That is why installed scripts run under `~/.claude/skills/geo/.venv/bin/python3`\n(`.venv/Scripts/python.exe` when `install.sh` is run from Git Bash on Windows) while\nthe scripts in this repo carry a portable `#!/usr/bin/env python3`. `uninstall.sh` reverses it.\n\n## Running the scripts (from the repo)\n\nScripts print **JSON to stdout** so skills/agents can parse them — preserve that contract. Run them\nwith any Python that has `requirements.txt` installed (beautifulsoup4, requests, lxml, playwright,\nPillow, flask, rich, validators):\n\n```bash\npython3 -m venv .venv && . .venv/bin/activate && pip install -r requirements.txt\npython3 -m playwright install chromium   # fetch_page.py uses Playwright for SSR/JS checks\n\npython3 scripts/fetch_page.py <url>\npython3 scripts/citability_scorer.py <url>\npython3 scripts/brand_scanner.py \"<brand name>\"\npython3 scripts/llmstxt_generator.py <url>\npython3 scripts/crm_dashboard.py          # rich CLI over ~/.geo-prospects\npython3 scripts/webapp/app.py             # CRM web UI at http://localhost:5050\n```\n\n## Testing\n\nTests are pytest-style classes (`tests/test_fetch_page_ssr.py`, using `unittest.mock`, no network).\n`unittest discover` does not collect them, so run them with pytest (`pip install pytest`):\n\n```bash\npython3 -m pytest tests/                                        # all tests\npython3 -m pytest tests/test_fetch_page_ssr.py -k ssr_content   # a single test\n```\n\n## Conventions\n\n- **Docs stay in sync:** when changing code or behavior, update the matching file in `docs/`\n  (a `CONTRIBUTING.md` requirement). Match existing structure and tone.\n- **Commit messages:** imperative present tense, first line ≤ 72 chars, reference issues after.\n- **Scripts → JSON stdout.** Keep the machine-readable output contract.\n- Some code and docstrings are in Italian (e.g. `scripts/crm_dashboard.py`) — match the language of\n  the file you edit.\n- Crawl quality gates (from `geo/SKILL.md`): max 50 pages/audit, 30s fetch timeout, 1s delay between\n  requests, max 5 concurrent, always respect robots.txt.\n- Market-context stats and dates in `geo/SKILL.md` / `README.md` are editorial point-in-time content,\n  not code.\n- White-labeling for agencies is driven by `white-label/` — don't hardcode brand strings that belong\n  in `brand.example.json`.\n","docs/architecture.md":"# Architecture & Design\n\nThe repository is structured to seamlessly provide GEO+SEO support by using Claude's tool capabilities alongside agents and python utility scripts.\n\n```\ngeo-seo-claude/\n├── geo/                          # Main skill orchestrator\n│   └── SKILL.md                  # Primary skill file with commands & routing\n├── skills/                       # 13 specialized sub-skills\n│   ├── geo-audit/                # Full audit orchestration & scoring\n│   ├── geo-citability/           # AI citation readiness scoring\n│   ├── geo-crawlers/             # AI crawler access analysis\n│   ├── geo-llmstxt/              # llms.txt standard analysis & generation\n│   ├── geo-brand-mentions/       # Brand presence on AI-cited platforms\n│   ├── geo-platform-optimizer/   # Platform-specific AI search optimization\n│   ├── geo-schema/               # Structured data for AI discoverability\n│   ├── geo-technical/            # Technical SEO foundations\n│   ├── geo-content/              # Content quality & E-E-A-T\n│   ├── geo-report/               # Client-ready markdown report generation\n│   ├── geo-report-pdf/           # Professional PDF report with charts\n│   ├── geo-prospect/             # CRM-lite prospect pipeline management\n│   ├── geo-proposal/             # Auto-generate client proposals\n│   └── geo-compare/              # Monthly delta tracking & progress reports\n├── agents/                       # 5 parallel subagents\n│   ├── geo-ai-visibility.md      # GEO audit, citability, crawlers, brands\n│   ├── geo-platform-analysis.md  # Platform-specific optimization\n│   ├── geo-technical.md          # Technical SEO analysis\n│   ├── geo-content.md            # Content & E-E-A-T analysis\n│   └── geo-schema.md             # Schema markup analysis\n├── scripts/                      # Python utilities\n│   ├── fetch_page.py             # Page fetching & parsing\n│   ├── citability_scorer.py      # AI citability scoring engine\n│   ├── brand_scanner.py          # Brand mention detection\n│   ├── llmstxt_generator.py      # llms.txt validation & generation\n│   └── generate_pdf_report.py    # PDF report generator (ReportLab)\n├── schema/                       # JSON-LD templates\n│   ├── organization.json         # Organization schema (with sameAs)\n│   ├── local-business.json       # LocalBusiness schema\n│   ├── article-author.json       # Article + Person schema (E-E-A-T)\n│   ├── software-saas.json        # SoftwareApplication schema\n│   ├── product-ecommerce.json    # Product schema with offers\n│   └── website-searchaction.json # WebSite + SearchAction schema\n├── install.sh                    # One-command installer\n├── uninstall.sh                  # Uninstaller\n├── requirements.txt              # Python dependencies\n└── README.md                     # Main project view\n```\n\n### Full Audit Flow\n\nWhen you run `/geo audit https://example.com`:\n\n1. **Discovery** — Fetches homepage, detects business type, crawls sitemap\n2. **Parallel Analysis** — Launches 5 subagents simultaneously:\n   - AI Visibility (citability, crawlers, llms.txt, brand mentions)\n   - Platform Analysis (ChatGPT, Perplexity, Google AIO readiness)\n   - Technical SEO (Core Web Vitals, SSR, security, mobile)\n   - Content Quality (E-E-A-T, readability, freshness)\n   - Schema Markup (detection, validation, generation)\n3. **Synthesis** — Aggregates scores, generates composite GEO Score (0-100)\n4. **Report** — Outputs prioritized action plan with quick wins\n\n### Data Storage\n\nThe CRM and reporting skills (`/geo prospect`, `/geo proposal`, `/geo compare`) store runtime data outside the Claude Code directory:\n\n```\n~/.geo-prospects/\n├── prospects.json              # Client/prospect pipeline data\n├── proposals/                  # Generated proposal documents\n│   └── <domain>-proposal-<date>.md\n└── reports/                    # Monthly delta reports\n    └── <domain>-monthly-<YYYY-MM>.md\n```\n\nThis directory is **not removed** by the uninstaller — delete it manually if you no longer need your prospect data.\n","geo/SKILL.md":"---\nname: geo\ndescription: >\n  GEO-first SEO analysis tool. Optimizes websites for AI-powered search engines\n  (ChatGPT, Claude, Perplexity, Gemini, Google AI Overviews) while maintaining\n  traditional SEO foundations. Performs full GEO audits, citability scoring,\n  AI crawler analysis, llms.txt generation, brand mention scanning, platform-specific\n  optimization, schema markup, technical SEO, content quality (E-E-A-T), and\n  client-ready GEO report generation. Use when user says \"geo\", \"seo\", \"audit\",\n  \"AI search\", \"AI visibility\", \"optimize\", \"citability\", \"llms.txt\", \"schema\",\n  \"brand mentions\", \"GEO report\", or any URL for analysis.\nallowed-tools: Read, Grep, Glob, Bash, WebFetch, Write\n---\n\n# GEO-SEO Analysis Tool — Claude Code Skill (February 2026)\n\n> **Philosophy:** GEO-first, SEO-supported. AI search is eating traditional search.\n> This tool optimizes for where traffic is going, not where it was.\n\n---\n\n## Quick Reference\n\n| Command | What It Does |\n|---------|-------------|\n| `/geo audit <url>` | Full GEO + SEO audit with parallel subagents |\n| `/geo page <url>` | Deep single-page GEO analysis |\n| `/geo citability <url>` | Score content for AI citation readiness |\n| `/geo crawlers <url>` | Check AI crawler access (robots.txt analysis) |\n| `/geo llmstxt <url>` | Analyze or generate llms.txt file |\n| `/geo brands <url>` | Scan brand mentions across AI-cited platforms |\n| `/geo platforms <url>` | Platform-specific optimization (ChatGPT, Perplexity, Google AIO) |\n| `/geo schema <url>` | Detect, validate, and generate structured data |\n| `/geo technical <url>` | Traditional technical SEO audit |\n| `/geo content <url>` | Content quality and E-E-A-T assessment |\n| `/geo report <url>` | Generate client-ready GEO deliverable |\n| `/geo report-pdf <url>` | Generate professional PDF report with charts and scores |\n| `/geo quick <url>` | 60-second GEO visibility snapshot |\n| `/geo prospect <cmd>` | CRM-lite: manage prospects through the sales pipeline |\n| `/geo proposal <domain>` | Auto-generate client proposal from audit data |\n| `/geo compare <domain>` | Monthly delta report: show score improvements to client |\n| `/geo update` | Pull latest GEO skill updates from upstream |\n\n---\n\n## Market Context (Why GEO Matters)\n\n| Metric | Value | Source |\n|--------|-------|--------|\n| GEO services market (2025) | $850M-$886M | Yahoo Finance / Superlines |\n| Projected GEO market (2031) | $7.3B (34% CAGR) | Industry analysts |\n| AI-referred sessions growth | +527% (Jan-May 2025) | SparkToro |\n| AI traffic conversion vs organic | 4.4x higher | Industry data |\n| Google AI Overviews reach | 1.5B users/month, 200+ countries | Google |\n| ChatGPT weekly active users | 900M+ | OpenAI |\n| Perplexity monthly queries | 500M+ | Perplexity |\n| Gartner: search traffic drop by 2028 | -50% | Gartner |\n| Marketers investing in GEO | Only 23% | Industry surveys |\n| Brand mentions vs backlinks for AI | 3x stronger correlation | Ahrefs (Dec 2025) |\n\n---\n\n## Orchestration Logic\n\n### Full Audit (`/geo audit <url>`)\n\n**Phase 1: Discovery (Sequential)**\n1. Fetch homepage HTML (curl or WebFetch)\n2. Detect business type (SaaS, Local, E-commerce, Publisher, Agency, Other)\n3. Extract key pages from sitemap.xml or internal links (up to 50 pages)\n\n**Phase 2: Parallel Analysis (Delegate to Subagents)**\nLaunch these 5 subagents simultaneously:\n\n| Subagent | File | Responsibility |\n|----------|------|---------------|\n| geo-ai-visibility | `agents/geo-ai-visibility.md` | GEO audit, citability, AI crawlers, llms.txt, brand mentions |\n| geo-platform-analysis | `agents/geo-platform-analysis.md` | Platform-specific optimization (ChatGPT, Perplexity, Google AIO) |\n| geo-technical | `agents/geo-technical.md` | Technical SEO, Core Web Vitals, crawlability, indexability |\n| geo-content | `agents/geo-content.md` | Content quality, E-E-A-T, readability, AI content detection |\n| geo-schema | `agents/geo-schema.md` | Schema markup detection, validation, generation |\n\n**Phase 3: Synthesis (Sequential)**\n1. Collect all subagent reports\n2. Calculate composite GEO Score (0-100)\n3. Generate prioritized action plan\n4. Output client-ready report\n\n### Scoring Methodology\n\n| Category | Weight | Measured By |\n|----------|--------|-------------|\n| AI Citability & Visibility | 25% | Passage scoring, answer block quality, AI crawler access |\n| Brand Authority Signals | 20% | Mentions on Reddit, YouTube, Wikipedia, LinkedIn; entity presence |\n| Content Quality & E-E-A-T | 20% | Expertise signals, original data, author credentials |\n| Technical Foundations | 15% | SSR, Core Web Vitals, crawlability, mobile, security |\n| Structured Data | 10% | Schema completeness, JSON-LD validation, rich result eligibility |\n| Platform Optimization | 10% | Platform-specific readiness (Google AIO, ChatGPT, Perplexity) |\n\n---\n\n## Business Type Detection\n\nAnalyze homepage for patterns:\n\n| Type | Signals |\n|------|---------|\n| **SaaS** | Pricing page, \"Sign up\", \"Free trial\", \"/app\", \"/dashboard\", API docs |\n| **Local Service** | Phone number, address, \"Near me\", Google Maps embed, service area |\n| **E-commerce** | Product pages, cart, \"Add to cart\", price elements, product schema |\n| **Publisher** | Blog, articles, bylines, publication dates, article schema |\n| **Agency** | Portfolio, case studies, \"Our services\", client logos, testimonials |\n| **Other** | Default — apply general GEO best practices |\n\nAdjust recommendations based on detected type. Local businesses need LocalBusiness schema and Google Business Profile optimization. SaaS needs SoftwareApplication schema and comparison page strategy. E-commerce needs Product schema and review aggregation.\n\n---\n\n## Sub-Skills (14 Specialized Components)\n\n| # | Skill | Directory | Purpose |\n|---|-------|-----------|---------|\n| 1 | geo-audit | `skills/geo-audit/` | Full audit orchestration and scoring |\n| 2 | geo-citability | `skills/geo-citability/` | Passage-level AI citation readiness |\n| 3 | geo-crawlers | `skills/geo-crawlers/` | AI crawler access and robots.txt |\n| 4 | geo-llmstxt | `skills/geo-llmstxt/` | llms.txt standard analysis and generation |\n| 5 | geo-brand-mentions | `skills/geo-brand-mentions/` | Brand presence on AI-cited platforms |\n| 6 | geo-platform-optimizer | `skills/geo-platform-optimizer/` | Platform-specific AI search optimization |\n| 7 | geo-schema | `skills/geo-schema/` | Structured data for AI discoverability |\n| 8 | geo-technical | `skills/geo-technical/` | Technical SEO foundations |\n| 9 | geo-content | `skills/geo-content/` | Content quality and E-E-A-T |\n| 10 | geo-report | `skills/geo-report/` | Client-ready deliverable generation |\n| 11 | geo-prospect | `skills/geo-prospect/` | CRM-lite prospect and client pipeline management |\n| 12 | geo-proposal | `skills/geo-proposal/` | Auto-generate client proposals from audit data |\n| 13 | geo-compare | `skills/geo-compare/` | Monthly delta tracking and progress reports |\n| 14 | geo-update | `skills/geo-update/` | Pull latest updates from upstream repository |\n\n---\n\n## Subagents (5 Parallel Workers)\n\n| Agent | File | Skills Used |\n|-------|------|-------------|\n| geo-ai-visibility | `agents/geo-ai-visibility.md` | geo-citability, geo-crawlers, geo-llmstxt, geo-brand-mentions |\n| geo-platform-analysis | `agents/geo-platform-analysis.md` | geo-platform-optimizer |\n| geo-technical | `agents/geo-technical.md` | geo-technical |\n| geo-content | `agents/geo-content.md` | geo-content |\n| geo-schema | `agents/geo-schema.md` | geo-schema |\n\n---\n\n## Output Files\n\nAll commands generate structured output:\n\n| Command | Output File |\n|---------|------------|\n| `/geo audit` | `GEO-AUDIT-REPORT.md` |\n| `/geo page` | `GEO-PAGE-ANALYSIS.md` |\n| `/geo citability` | `GEO-CITABILITY-SCORE.md` |\n| `/geo crawlers` | `GEO-CRAWLER-ACCESS.md` |\n| `/geo llmstxt` | `llms.txt` (ready to deploy) |\n| `/geo brands` | `GEO-BRAND-MENTIONS.md` |\n| `/geo platforms` | `GEO-PLATFORM-OPTIMIZATION.md` |\n| `/geo schema` | `GEO-SCHEMA-REPORT.md` + generated JSON-LD |\n| `/geo technical` | `GEO-TECHNICAL-AUDIT.md` |\n| `/geo content` | `GEO-CONTENT-ANALYSIS.md` |\n| `/geo report` | `GEO-CLIENT-REPORT.md` (presentation-ready) |\n| `/geo report-pdf` | `GEO-REPORT.pdf` (professional PDF with charts) |\n| `/geo quick` | Inline summary (no file) |\n| `/geo prospect` | Updates `~/.geo-prospects/prospects.json` |\n| `/geo proposal` | `~/.geo-prospects/proposals/<domain>-proposal-<date>.md` |\n| `/geo compare` | `~/.geo-prospects/reports/<domain>-monthly-<YYYY-MM>.md` |\n\n---\n\n## PDF Report Generation\n\nThe `/geo report-pdf <url>` command converts `GEO-AUDIT-REPORT.md` into a styled, client-ready PDF.\n\n### Requirements\n- **pandoc** — `brew install pandoc`\n- **Google Chrome** — `/Applications/Google Chrome.app/` (standard Mac install)\n\nNo Python dependencies required for PDF generation.\n\n### What the PDF Includes\n- **Cover page** — dark navy gradient, GEO score badge, brand/domain/date/location metadata\n- **Color-coded score tables** — cells with `XX/100` values are automatically colored green/blue/amber/orange/red\n- **Severity-tagged findings** — Critical/High/Medium/Low sections get colored left-border callout blocks\n- **Section page breaks** — major sections break to new pages automatically\n- **Styled code blocks** — JSON schema templates render with dark monospace theme\n\n### Templates\nBundled at `~/.claude/skills/geo/templates/`:\n- `geo-report-style.css` — stylesheet (edit colors, fonts, layout here)\n- `geo-report-template.html` — pandoc HTML template (edit cover fields here)\n\n### Workflow\n1. Run `/geo audit <url>` to produce `GEO-AUDIT-REPORT.md`\n2. Run `/geo report-pdf` — extracts metadata from the report and runs:\n   ```bash\n   pandoc GEO-AUDIT-REPORT.md \\\n     --to html5 --standalone --embed-resources \\\n     --template ~/.claude/skills/geo/templates/geo-report-template.html \\\n     --css ~/.claude/skills/geo/templates/geo-report-style.css \\\n     --metadata brand_name=\"...\" --metadata geo_score=\"...\" \\\n     -o GEO-REPORT.html\n\n   \"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome\" \\\n     --headless=new --disable-gpu --no-sandbox \\\n     --print-to-pdf=\"$(pwd)/GEO-REPORT.pdf\" \\\n     --print-to-pdf-no-header --no-pdf-header-footer \\\n     --virtual-time-budget=5000 \\\n     \"file://$(pwd)/GEO-REPORT.html\"\n   ```\n3. Output: `GEO-REPORT.pdf` in the current directory\n\n---\n\n## Quality Gates\n\n- **Crawl limit:** Max 50 pages per audit (focus on quality over quantity)\n- **Timeout:** 30 seconds per page fetch\n- **Rate limiting:** 1-second delay between requests, max 5 concurrent\n- **Robots.txt:** Always respect, always check\n- **Duplicate detection:** Skip pages with >80% content similarity\n\n---\n\n## Quick Start Examples\n\n```\n# Full GEO audit of a website\n/geo audit https://example.com\n\n# Check if AI bots can see your site\n/geo crawlers https://example.com\n\n# Score a specific page for AI citability\n/geo citability https://example.com/blog/best-article\n\n# Generate an llms.txt file for your site\n/geo llmstxt https://example.com\n\n# Get a 60-second visibility snapshot\n/geo quick https://example.com\n\n# Generate a client-ready report\n/geo report https://example.com\n```\n","skills/geo-audit/SKILL.md":"---\nname: geo-audit\ndescription: Full website GEO+SEO audit with parallel subagent delegation. Orchestrates a comprehensive Generative Engine Optimization audit across AI citability, platform analysis, technical infrastructure, content quality, and schema markup. Produces a composite GEO Score (0-100) with prioritized action plan.\nallowed-tools:\n  - Read\n  - Grep\n  - Glob\n  - Bash\n  - WebFetch\n  - Write\n---\n\n# GEO Audit Orchestration Skill\n\n## Purpose\n\nThis skill performs a comprehensive Generative Engine Optimization (GEO) audit of any website. GEO is the practice of optimizing web content so that AI systems (ChatGPT, Claude, Perplexity, Gemini, etc.) can discover, understand, cite, and recommend it. This audit measures how well a site performs across all GEO dimensions and produces an actionable improvement plan.\n\n## Key Insight\n\nTraditional SEO optimizes for search engine rankings. GEO optimizes for AI citation and recommendation. Sites that score high on GEO metrics see 30-115% more visibility in AI-generated responses (Georgia Tech / Princeton / IIT Delhi 2024 study). The two disciplines overlap but have distinct requirements.\n\n---\n\n## Audit Workflow\n\n### Phase 1: Discovery and Reconnaissance\n\n**Step 1: Fetch Homepage and Detect Business Type**\n\n1. Use WebFetch to retrieve the homepage at the provided URL.\n2. Extract the following signals:\n   - Page title, meta description, H1 heading\n   - Navigation menu items (reveals site structure)\n   - Footer content (reveals business info, location, legal pages)\n   - Schema.org markup on homepage (Organization, LocalBusiness, etc.)\n   - Pricing page link (SaaS indicator)\n   - Product listing patterns (E-commerce indicator)\n   - Blog/resource section (Publisher indicator)\n   - Service pages (Agency indicator)\n   - Address/phone/Google Maps embed (Local business indicator)\n\n3. Classify the business type using these patterns:\n\n| Business Type | Detection Signals |\n|---|---|\n| **SaaS** | Pricing page, \"Sign up\" / \"Free trial\" CTAs, app.domain.com subdomain, feature comparison tables, integration pages |\n| **Local Business** | Physical address on homepage, Google Maps embed, \"Near me\" content, LocalBusiness schema, service area pages |\n| **E-commerce** | Product listings, shopping cart, product schema, category pages, price displays, \"Add to cart\" buttons |\n| **Publisher** | Blog-heavy navigation, article schema, author pages, date-based archives, RSS feeds, high content volume |\n| **Agency/Services** | Case studies, portfolio, \"Our Work\" section, team page, client logos, service descriptions |\n| **Hybrid** | Combination of above signals -- classify by dominant pattern |\n\n**Step 2: Crawl Sitemap and Internal Links**\n\n1. Attempt to fetch `/sitemap.xml` and `/sitemap_index.xml`.\n2. If sitemap exists, extract up to 50 unique page URLs prioritized by:\n   - Homepage (always include)\n   - Top-level navigation pages\n   - High-value pages (pricing, about, contact, key service/product pages)\n   - Blog posts (sample 5-10 most recent)\n   - Category/landing pages\n3. If no sitemap exists, crawl internal links from the homepage:\n   - Extract all `<a href>` links pointing to the same domain\n   - Follow up to 2 levels deep\n   - Prioritize pages linked from main navigation\n4. Respect `robots.txt` directives -- do not fetch disallowed paths.\n5. Enforce a maximum of 50 pages and a 30-second timeout per fetch.\n\n**Step 3: Collect Page-Level Data**\n\nFor each page in the crawl set, record:\n- URL, title, meta description, canonical URL\n- H1-H6 heading structure\n- Word count of main content\n- Schema.org types present\n- Internal/external link counts\n- Images with/without alt text\n- Open Graph and Twitter Card meta tags\n- Response status code\n- Whether the page has structured data\n\n---\n\n### Phase 2: Parallel Subagent Delegation\n\nDelegate analysis to 5 specialized subagents. Each subagent operates on the collected page data and produces a category score (0-100) plus findings.\n\n**Subagent 1: AI Visibility Analysis (geo-ai-visibility)**\n- Analyze content blocks for quotability by AI systems (citability scoring)\n- Check AI crawler access via robots.txt and llms.txt presence\n- Scan brand presence across YouTube, Reddit, Wikipedia, LinkedIn\n- Score brand authority signals that AI models use for entity recognition\n\n**Subagent 2: Platform Optimization (geo-platform-analysis)**\n- Assess readiness for Google AI Overviews, ChatGPT, Perplexity, Gemini, Bing Copilot\n- Check platform-specific ranking factors and optimization opportunities\n\n**Subagent 3: Technical GEO Infrastructure (geo-technical)**\n- Analyze robots.txt for AI crawler access\n- Verify meta tags, headers, and technical accessibility for AI systems\n- Check page speed, server-side rendering, and Core Web Vitals\n- Assess security headers and mobile optimization\n\n**Subagent 4: Content E-E-A-T Quality (geo-content)**\n- Evaluate Experience, Expertise, Authoritativeness, Trustworthiness signals\n- Check author bios, credentials, source citations\n- Assess content freshness, depth, and originality\n- Verify \"About\" page quality and team credentials\n\n**Subagent 5: Schema & Structured Data (geo-schema)**\n- Validate all schema.org markup\n- Check for GEO-critical schema types (FAQ, HowTo, Organization, Product, Article)\n- Assess schema completeness and accuracy\n- Identify missing schema opportunities\n\n---\n\n### Phase 3: Score Aggregation and Report Generation\n\n#### Composite GEO Score Calculation\n\nThe overall GEO Score (0-100) is a weighted average of six category scores:\n\n| Category | Weight | What It Measures |\n|---|---|---|\n| **AI Citability** | 25% | How quotable/extractable content is for AI systems |\n| **Brand Authority** | 20% | Third-party mentions, entity recognition signals |\n| **Content E-E-A-T** | 20% | Experience, Expertise, Authoritativeness, Trustworthiness |\n| **Technical GEO** | 15% | AI crawler access, llms.txt, rendering, speed |\n| **Schema & Structured Data** | 10% | Schema.org markup quality and completeness |\n| **Platform Optimization** | 10% | Presence on platforms AI models train on and cite |\n\n**Formula:**\n```\nGEO_Score = (Citability * 0.25) + (Brand * 0.20) + (EEAT * 0.20) + (Technical * 0.15) + (Schema * 0.10) + (Platform * 0.10)\n```\n\n#### Score Interpretation\n\n| Score Range | Rating | Interpretation |\n|---|---|---|\n| 90-100 | Excellent | Top-tier GEO optimization; site is highly likely to be cited by AI |\n| 75-89 | Good | Strong GEO foundation with room for improvement |\n| 60-74 | Fair | Moderate GEO presence; significant optimization opportunities exist |\n| 40-59 | Poor | Weak GEO signals; AI systems may struggle to cite or recommend |\n| 0-39 | Critical | Minimal GEO optimization; site is largely invisible to AI systems |\n\n---\n\n## Issue Severity Classification\n\nEvery issue found during the audit is classified by severity:\n\n### Critical (Fix Immediately)\n- All AI crawlers blocked in robots.txt\n- No indexable content (JavaScript-rendered only with no SSR)\n- Domain-level noindex directive\n- Site returns 5xx errors on key pages\n- Complete absence of any structured data\n- Brand not recognized as an entity by any AI system\n\n### High (Fix Within 1 Week)\n- Key AI crawlers (GPTBot, ClaudeBot, PerplexityBot) blocked\n- No llms.txt file present\n- Zero question-answering content blocks on key pages\n- Missing Organization or LocalBusiness schema\n- No author attribution on content pages\n- All content behind login/paywall with no preview\n\n### Medium (Fix Within 1 Month)\n- Partial AI crawler blocking (some allowed, some blocked)\n- llms.txt exists but is incomplete or malformed\n- Content blocks average under 50 citability score\n- Missing FAQ schema on pages with FAQ content\n- Thin author bios without credentials\n- No Wikipedia or Reddit brand presence\n\n### Low (Optimize When Possible)\n- Minor schema validation errors\n- Some images missing alt text\n- Content freshness issues on non-critical pages\n- Missing Open Graph tags\n- Suboptimal heading hierarchy on some pages\n- LinkedIn company page exists but is incomplete\n\n---\n\n## Output Format\n\nGenerate a file called `GEO-AUDIT-REPORT.md` with the following structure:\n\n```markdown\n# GEO Audit Report: [Site Name]\n\n**Audit Date:** [Date]\n**URL:** [URL]\n**Business Type:** [Detected Type]\n**Pages Analyzed:** [Count]\n\n---\n\n## Executive Summary\n\n**Overall GEO Score: [X]/100 ([Rating])**\n\n[2-3 sentence summary of the site's GEO health, biggest strengths, and most critical gaps.]\n\n### Score Breakdown\n\n| Category | Score | Weight | Weighted Score |\n|---|---|---|---|\n| AI Citability | [X]/100 | 25% | [X] |\n| Brand Authority | [X]/100 | 20% | [X] |\n| Content E-E-A-T | [X]/100 | 20% | [X] |\n| Technical GEO | [X]/100 | 15% | [X] |\n| Schema & Structured Data | [X]/100 | 10% | [X] |\n| Platform Optimization | [X]/100 | 10% | [X] |\n| **Overall GEO Score** | | | **[X]/100** |\n\n---\n\n## Critical Issues (Fix Immediately)\n\n[List each critical issue with specific page URLs and recommended fix]\n\n## High Priority Issues\n\n[List each high-priority issue with details]\n\n## Medium Priority Issues\n\n[List each medium-priority issue]\n\n## Low Priority Issues\n\n[List each low-priority issue]\n\n---\n\n## Category Deep Dives\n\n### AI Citability ([X]/100)\n[Detailed findings, examples of good/bad passages, rewrite suggestions]\n\n### Brand Authority ([X]/100)\n[Platform presence map, mention volume, sentiment]\n\n### Content E-E-A-T ([X]/100)\n[Author quality, source citations, freshness, depth]\n\n### Technical GEO ([X]/100)\n[Crawler access, llms.txt, rendering, headers]\n\n### Schema & Structured Data ([X]/100)\n[Schema types found, validation results, missing opportunities]\n\n### Platform Optimization ([X]/100)\n[Presence on YouTube, Reddit, Wikipedia, etc.]\n\n---\n\n## Quick Wins (Implement This Week)\n\n1. [Specific, actionable quick win with expected impact]\n2. [Another quick win]\n3. [Another quick win]\n4. [Another quick win]\n5. [Another quick win]\n\n## 30-Day Action Plan\n\n### Week 1: [Theme]\n- [ ] Action item 1\n- [ ] Action item 2\n\n### Week 2: [Theme]\n- [ ] Action item 1\n- [ ] Action item 2\n\n### Week 3: [Theme]\n- [ ] Action item 1\n- [ ] Action item 2\n\n### Week 4: [Theme]\n- [ ] Action item 1\n- [ ] Action item 2\n\n---\n\n## Appendix: Pages Analyzed\n\n| URL | Title | GEO Issues |\n|---|---|---|\n| [url] | [title] | [issue count] |\n```\n\n---\n\n## Quality Gates\n\n- **Page Limit:** Never crawl more than 50 pages per audit. Prioritize high-value pages.\n- **Timeout:** 30-second maximum per page fetch. Skip pages that exceed this.\n- **Robots.txt:** Always check and respect robots.txt before crawling. Note any AI-specific directives.\n- **Rate Limiting:** Wait at least 1 second between page fetches to avoid overloading the server.\n- **Error Handling:** Log failed fetches but continue the audit. Report fetch failures in the appendix.\n- **Content Type:** Only analyze HTML pages. Skip PDFs, images, and other binary content.\n- **Deduplication:** Canonicalize URLs before crawling. Skip duplicate content (e.g., HTTP vs HTTPS, www vs non-www, trailing slashes).\n\n---\n\n## Business-Type-Specific Audit Adjustments\n\n### SaaS Sites\n- Extra weight on: Feature comparison tables (high citability), integration pages, documentation quality\n- Check for: API documentation structure, changelog pages, knowledge base organization\n- Key schema: SoftwareApplication, FAQPage, HowTo\n\n### Local Businesses\n- Extra weight on: NAP consistency, Google Business Profile signals, local schema\n- Check for: Service area pages, location-specific content, review markup\n- Key schema: LocalBusiness, GeoCoordinates, OpeningHoursSpecification\n\n### E-commerce Sites\n- Extra weight on: Product descriptions (citability), comparison content, buying guides\n- Check for: Product schema completeness, review aggregation, FAQ sections on product pages\n- Key schema: Product, AggregateRating, Offer, BreadcrumbList\n\n### Publishers\n- Extra weight on: Article quality, author credentials, source citation practices\n- Check for: Article schema, author pages, publication date freshness, original research\n- Key schema: Article, NewsArticle, Person (author), ClaimReview\n\n### Agency/Services\n- Extra weight on: Case studies (citability), expertise demonstration, thought leadership\n- Check for: Portfolio schema, team credentials, industry-specific expertise signals\n- Key schema: Organization, Service, Person (team), Review\n","skills/geo-brand-mentions/SKILL.md":"---\nname: geo-brand-mentions\ndescription: Brand mention and authority scanner for AI visibility. Analyzes brand presence across platforms that AI models rely on for entity recognition and citation decisions. Produces a Brand Authority Score (0-100) with platform-specific recommendations.\nallowed-tools:\n  - Read\n  - Grep\n  - Glob\n  - Bash\n  - WebFetch\n  - Write\n---\n\n# Brand Mention Scanner Skill\n\n## Core Insight\n\nBrand mentions correlate approximately 3x more strongly with AI visibility than traditional backlinks. An Ahrefs study published in December 2025, analyzing 75,000 brands across AI search platforms, found that **unlinked brand mentions** -- references to a brand name without a hyperlink -- are a stronger predictor of whether AI systems cite and recommend a brand than Domain Rating or backlink count.\n\nThe critical finding: **the platform where the mention appears matters enormously.** Not all mentions are equal. A mention on YouTube or Reddit carries far more weight for AI citation than a mention on a low-authority blog, because AI training data and retrieval systems disproportionately index high-engagement platforms.\n\nThis inverts a core assumption of traditional SEO. In traditional SEO, a backlink from a high-DR site is the gold standard. In GEO, an unlinked mention on Reddit or a YouTube video description may be more valuable than a dofollow backlink from a DR 70 blog.\n\n---\n\n## Platform Importance Ranking for AI Citations\n\nBased on the Ahrefs December 2025 study and corroborating research from Profound (2025) and Terakeet (2025):\n\n### 1. YouTube Mentions -- Correlation ~0.737 (STRONGEST)\n\n**Why YouTube matters most:**\n- YouTube is the second-largest search engine and the largest video platform globally (2.5B+ monthly users).\n- AI training datasets heavily incorporate YouTube transcripts, descriptions, and metadata.\n- Google's Gemini and AI Overviews directly reference YouTube content.\n- Perplexity and ChatGPT both index and cite YouTube video content.\n- YouTube transcripts are particularly valuable because they contain natural language mentions in conversational context, which aligns with how AI models process and generate text.\n\n**What to check:**\n- **Brand YouTube channel:** Does the brand have an active YouTube channel? How many subscribers? Video count? Upload frequency?\n- **Third-party video mentions:** Are other YouTubers or channels mentioning the brand? In what context (reviews, tutorials, comparisons)?\n- **Video descriptions:** Does the brand name appear in video descriptions of industry-relevant content?\n- **Video transcripts:** Is the brand mentioned in spoken content of relevant videos? (AI models index transcripts)\n- **YouTube search presence:** When searching \"[brand name]\" on YouTube, do results appear? Are they positive?\n- **Comment mentions:** Is the brand mentioned in comments on relevant industry videos?\n\n**Scoring for YouTube (0-100):**\n\n| Score | Criteria |\n|---|---|\n| 90-100 | Active channel with 10K+ subscribers, regular uploads, brand mentioned in 20+ third-party videos, appears in YouTube search results for industry terms |\n| 70-89 | Active channel with 1K+ subscribers, brand mentioned in 10-19 third-party videos, some YouTube search presence |\n| 50-69 | Channel exists with some content, brand mentioned in 5-9 third-party videos, limited YouTube search presence |\n| 30-49 | Channel exists but inactive, brand mentioned in 1-4 third-party videos |\n| 10-29 | No channel or empty channel, brand mentioned in 1-2 videos only |\n| 0-9 | No YouTube presence whatsoever |\n\n---\n\n### 2. Reddit Mentions -- High Correlation\n\n**Why Reddit matters:**\n- Reddit is one of the most heavily indexed platforms in AI training data (confirmed in Google's $60M/year Reddit licensing deal, 2024).\n- AI systems heavily weight Reddit for product recommendations, comparisons, and user sentiment.\n- \"Reddit\" is now appended to an estimated 10-15% of Google searches by users seeking authentic opinions.\n- Perplexity frequently cites Reddit threads as sources.\n- ChatGPT and Claude both reference Reddit discussions when answering product/service questions.\n\n**What to check:**\n- **Subreddit presence:** Is the brand discussed in relevant subreddits? Which ones?\n- **Mention volume:** How many Reddit threads mention the brand? What is the trend (increasing/decreasing)?\n- **Sentiment:** Are mentions mostly positive, negative, or neutral? What are common praise points and complaints?\n- **Official presence:** Does the brand have an official Reddit account? Do they participate in discussions? Have they done AMAs?\n- **Recommendation threads:** Does the brand appear in \"What do you recommend for X?\" threads? Is it the top recommendation or an also-ran?\n- **Subreddit community:** Does the brand have its own subreddit? How active is it?\n\n**Scoring for Reddit (0-100):**\n\n| Score | Criteria |\n|---|---|\n| 90-100 | Frequently recommended in relevant subreddits, predominantly positive sentiment, active official presence, own subreddit with 5K+ members, appears in top recommendations for industry queries |\n| 70-89 | Regularly mentioned in relevant subreddits, mostly positive sentiment, some official presence, appears in multiple recommendation threads |\n| 50-69 | Mentioned in several relevant threads, mixed sentiment, brand name is recognized by community members |\n| 30-49 | Occasional mentions, limited to 1-2 subreddits, no official presence |\n| 10-29 | Rare mentions, brand largely unknown on Reddit |\n| 0-9 | No Reddit presence |\n\n---\n\n### 3. Wikipedia Presence -- High Correlation\n\n**Why Wikipedia matters:**\n- Wikipedia is one of the highest-authority sources in AI training data. All major AI models have been trained on Wikipedia dumps.\n- AI systems use Wikipedia as a primary source for entity recognition -- determining whether a brand is a \"real\" entity worth knowing about.\n- Wikidata (Wikipedia's structured data sibling) provides machine-readable facts that AI models use for knowledge graph construction.\n- Having a Wikipedia page is a strong signal of notability, which correlates with AI systems treating the brand as an authoritative entity.\n\n**What to check:**\n- **Wikipedia page:** Does the brand or company have its own Wikipedia article? Is it marked for deletion or quality issues?\n- **Founder page:** Does the founder/CEO have a Wikipedia page? (Strong authority signal)\n- **Wikipedia citations:** Is the brand's website cited as a reference in any Wikipedia articles?\n- **Wikidata entry:** Does the brand have a Wikidata item (Q-number)? How complete is it?\n- **Wikipedia mentions:** Is the brand mentioned in other Wikipedia articles (industry articles, competitor pages, category pages)?\n- **Article quality:** If a Wikipedia page exists, is it a stub, start-class, or higher quality?\n\n**Scoring for Wikipedia (0-100):**\n\n| Score | Criteria |\n|---|---|\n| 90-100 | Detailed Wikipedia article (B-class or higher), Wikidata entry with complete properties, brand cited as reference in multiple articles, founder has Wikipedia page |\n| 70-89 | Wikipedia article exists (start-class or higher), Wikidata entry exists, brand mentioned in 2+ other Wikipedia articles |\n| 50-69 | Wikipedia article exists (stub or start), basic Wikidata entry, limited mentions in other articles |\n| 30-49 | No Wikipedia article but brand is mentioned in other articles or cited as reference; Wikidata entry may exist |\n| 10-29 | Brand mentioned in 1-2 Wikipedia articles as a passing reference only |\n| 0-9 | No Wikipedia or Wikidata presence of any kind |\n\n---\n\n### 4. LinkedIn Presence -- Moderate Correlation\n\n**Why LinkedIn matters:**\n- LinkedIn content is increasingly indexed by AI systems for professional and B2B context.\n- Company LinkedIn pages and employee thought leadership posts build brand entity signals.\n- AI models reference LinkedIn for company information, team credentials, and professional authority.\n- LinkedIn articles and posts are indexed by search engines and AI crawlers.\n\n**What to check:**\n- **Company page:** Does the brand have a LinkedIn company page? Follower count? Post frequency?\n- **Employee thought leadership:** Are employees (especially leadership) posting thought leadership content that mentions the brand?\n- **Company mentions:** Is the brand mentioned in LinkedIn posts by non-employees? Industry analysts? Customers?\n- **LinkedIn articles:** Are there long-form LinkedIn articles about or mentioning the brand?\n- **Employee profiles:** Do employees list the company with detailed descriptions? Do they have strong professional profiles?\n- **Engagement metrics:** What is the typical engagement (likes, comments, shares) on company posts?\n\n**Scoring for LinkedIn (0-100):**\n\n| Score | Criteria |\n|---|---|\n| 90-100 | Active company page with 10K+ followers, leadership regularly posts thought leadership, brand frequently mentioned by industry professionals, strong employee profiles |\n| 70-89 | Active company page with 5K+ followers, some employee thought leadership, occasional third-party mentions |\n| 50-69 | Company page exists with 1K+ followers, irregular posting, limited third-party mentions |\n| 30-49 | Company page exists but is sparse or inactive, few followers, no third-party mentions |\n| 10-29 | Basic company page with minimal information |\n| 0-9 | No LinkedIn company page |\n\n---\n\n### 5. Other Platform Presence -- Supplementary\n\nThese platforms have lower but still meaningful correlation with AI visibility:\n\n#### Quora\n- **Relevance:** Quora answers are frequently included in AI training data and cited by Perplexity.\n- **What to check:** Is the brand mentioned in Quora answers to industry-relevant questions? Does the brand have an official Quora presence?\n- **Signal strength:** Moderate for B2C, lower for B2B.\n\n#### Stack Overflow / Stack Exchange\n- **Relevance:** Critical for developer-facing brands (SaaS, dev tools, APIs).\n- **What to check:** Is the brand's product discussed in Stack Overflow questions/answers? Does the brand have a tag? Do they have an official account answering questions?\n- **Signal strength:** High for technical products, irrelevant for most B2C.\n\n#### GitHub\n- **Relevance:** Critical for open-source and developer-focused brands.\n- **What to check:** Does the brand have a GitHub organization? Stars on repositories? Mentions in other repos' documentation or discussions?\n- **Signal strength:** High for dev tools and open-source, low for non-technical brands.\n\n#### Industry Forums and Communities\n- **Relevance:** Niche authority signals that AI models pick up from domain-specific training data.\n- **What to check:** Is the brand discussed in industry-specific forums (e.g., Hacker News for tech, ProductHunt for startups, industry-specific Slack communities)?\n- **Signal strength:** Moderate, but valuable for establishing niche authority.\n\n#### News and Press\n- **Relevance:** News mentions build entity authority and recency signals.\n- **What to check:** Has the brand been covered by major news outlets or industry publications? How recently? What was the context?\n- **Signal strength:** Moderate. Recency matters -- a mention in the last 6 months is far more valuable than one from 3 years ago.\n\n#### Podcasts\n- **Relevance:** Growing AI training data source. Transcripts are increasingly indexed.\n- **What to check:** Has the brand or its leadership appeared on podcasts? Are podcast transcripts mentioning the brand indexed by search engines?\n- **Signal strength:** Moderate and growing.\n\n---\n\n## Composite Brand Authority Score\n\n### Scoring Formula\n\n| Platform | Weight | Rationale |\n|---|---|---|\n| YouTube Presence | 25% | Strongest correlation with AI citation (0.737) |\n| Reddit Presence | 25% | Second strongest correlation; critical for product recommendations |\n| Wikipedia / Wikidata | 20% | Entity recognition foundation; AI training data cornerstone |\n| LinkedIn Authority | 15% | Professional authority signals; B2B relevance |\n| Other Platforms | 15% | Supplementary signals from Quora, GitHub, news, forums, podcasts |\n\n**Formula:**\n```\nBrand_Authority_Score = (YouTube * 0.25) + (Reddit * 0.25) + (Wikipedia * 0.20) + (LinkedIn * 0.15) + (Other * 0.15)\n```\n\n### Score Interpretation\n\n| Score Range | Rating | Interpretation |\n|---|---|---|\n| 85-100 | Dominant | Brand is a well-recognized entity across AI platforms. Highly likely to be cited and recommended by AI systems. |\n| 70-84 | Strong | Brand has solid cross-platform presence. AI systems likely recognize and cite it for relevant queries. |\n| 50-69 | Moderate | Brand has presence on some platforms but gaps exist. AI citation is inconsistent. |\n| 30-49 | Weak | Brand has limited platform presence. AI systems may not recognize it as a distinct entity. |\n| 0-29 | Minimal | Brand has negligible platform presence. AI systems are unlikely to cite or recommend it. |\n\n---\n\n## Analysis Procedure\n\n### Step 1: Identify Brand Information\n\nGather the following from the user or from the website:\n- **Brand name** (exact spelling, including any official variants)\n- **Founder/CEO name(s)**\n- **Domain URL**\n- **Industry/category**\n- **Key products or services** (top 3)\n- **Key competitors** (for comparison context)\n\n### Step 2: Platform Scanning\n\nFor each platform, use WebFetch to search and assess presence:\n\n**YouTube Check:**\n1. Search: `[brand name] site:youtube.com`\n2. Check: `youtube.com/@[brand-name]` or `youtube.com/c/[brand-name]` for official channel\n3. Search: `\"[brand name]\" site:youtube.com` (exact match for mentions in descriptions)\n4. Note: Channel subscriber count, video count, latest upload date, third-party mention count\n\n**Reddit Check:**\n1. Search: `[brand name] site:reddit.com`\n2. Search: `\"[brand name]\" site:reddit.com` (exact match)\n3. Check: `reddit.com/r/[brand-name]` for official subreddit\n4. Check: `reddit.com/user/[brand-name]` for official account\n5. Note: Thread count, dominant subreddits, sentiment (positive/negative/neutral), recommendation frequency\n\n**Wikipedia Check (IMPORTANT — use BOTH methods to avoid false negatives):**\n\n**Method 1 — Python API check (MOST RELIABLE, do this FIRST):**\n```bash\npython3 -c \"\nimport requests, json\nfrom urllib.parse import quote_plus\nbrand = '[Brand_Name]'\n# Check Wikipedia API directly\napi_url = f'https://en.wikipedia.org/w/api.php?action=query&list=search&srsearch={quote_plus(brand)}&format=json'\nr = requests.get(api_url, headers={'User-Agent': 'GEO-Audit/1.0'}, timeout=15)\ndata = r.json()\nresults = data.get('query', {}).get('search', [])\nif results and brand.lower() in results[0].get('title', '').lower():\n    print(f'WIKIPEDIA PAGE EXISTS: {results[0][\\\"title\\\"]}')\n    print(f'URL: https://en.wikipedia.org/wiki/{results[0][\\\"title\\\"].replace(\\\" \\\", \\\"_\\\")}')\nelse:\n    print('No direct Wikipedia page found')\n# Check Wikidata\nwd_url = f'https://www.wikidata.org/w/api.php?action=wbsearchentities&search={quote_plus(brand)}&language=en&format=json'\nr2 = requests.get(wd_url, headers={'User-Agent': 'GEO-Audit/1.0'}, timeout=15)\nwd = r2.json()\nentities = wd.get('search', [])\nif entities:\n    print(f'WIKIDATA ENTRY: {entities[0].get(\\\"id\\\", \\\"\\\")} — {entities[0].get(\\\"description\\\", \\\"\\\")}')\n\"\n```\n\n**Method 2 — Direct URL check (backup verification):**\n1. WebFetch: `https://en.wikipedia.org/wiki/[Brand_Name]` — check if the page loads (not a redirect to search)\n2. WebFetch: `https://en.wikipedia.org/wiki/[Founder_Name]` for founder article\n\n**Method 3 — Search (least reliable, use only for supplemental info):**\n1. Search: `[brand name] site:wikipedia.org`\n2. Search: `[brand name] site:wikidata.org`\n\n**CRITICAL:** Web search alone is NOT reliable for determining Wikipedia presence. ALWAYS run the Python API check first. If the API says a page exists, it exists — do not override this with a search result that fails to find it.\n\n5. Note: Article existence, quality, edit history, Wikidata completeness\n\n**LinkedIn Check:**\n1. Search: `[brand name] site:linkedin.com`\n2. Check: `linkedin.com/company/[brand-name]` for company page\n3. Note: Follower count, post frequency, employee count listed, engagement levels\n\n**Other Platforms:**\n1. Search: `[brand name] site:quora.com`\n2. Search: `[brand name] site:stackoverflow.com` (if technical brand)\n3. Search: `[brand name] site:github.com` (if technical brand)\n4. Search: `[brand name] site:news.ycombinator.com` (Hacker News)\n5. Search: `\"[brand name]\"` broadly for news mentions (filter to last 6 months)\n6. Note: Presence/absence and quality of mentions on each platform\n\n### Step 3: Sentiment Assessment\n\nFor Reddit and other discussion platforms, assess sentiment by analyzing the most recent and most prominent mentions:\n\n| Sentiment | Indicators |\n|---|---|\n| **Positive** | Recommendations (\"I love [brand],\" \"We switched to [brand] and...\", \"Highly recommend\"), upvoted mentions, positive comparison against competitors |\n| **Neutral** | Factual mentions (\"We use [brand] for...\", \"[Brand] offers...\"), questions about the brand, balanced comparisons |\n| **Negative** | Complaints (\"Avoid [brand]\", \"[Brand] has terrible support\"), downvoted recommendations, negative comparisons |\n| **Mixed** | Combination of positive and negative. Note the ratio and primary themes. |\n\n### Step 4: Competitive Comparison (Optional)\n\nIf competitors are identified, do a quick scan of their platform presence for context. This helps calibrate the score -- a brand with \"moderate\" Reddit presence in an industry where competitors have zero Reddit presence is relatively strong.\n\n### Step 5: Score Calculation\n\n1. Score each platform (0-100) using the rubrics above.\n2. Apply weights to calculate the composite Brand Authority Score.\n3. Identify the strongest and weakest platforms.\n4. Generate specific, actionable recommendations for the weakest platforms.\n\n---\n\n## Output Format\n\nGenerate a file called `GEO-BRAND-MENTIONS.md`:\n\n```markdown\n# Brand Authority Report: [Brand Name]\n\n**Analysis Date:** [Date]\n**Brand:** [Brand Name]\n**Domain:** [URL]\n**Industry:** [Industry]\n\n---\n\n## Brand Authority Score: [X]/100 ([Rating])\n\n### Platform Breakdown\n\n| Platform | Score | Weight | Weighted | Status |\n|---|---|---|---|---|\n| YouTube | [X]/100 | 25% | [X] | [Active Channel / Mentioned / Absent] |\n| Reddit | [X]/100 | 25% | [X] | [Active / Discussed / Absent] |\n| Wikipedia | [X]/100 | 20% | [X] | [Article / Mentioned / Absent] |\n| LinkedIn | [X]/100 | 15% | [X] | [Active / Basic / Absent] |\n| Other Platforms | [X]/100 | 15% | [X] | [Summary] |\n| **Total** | | | **[X]/100** | |\n\n---\n\n## Platform Detail\n\n### YouTube ([X]/100)\n\n**Official Channel:** [Yes/No] | [URL if exists]\n**Subscribers:** [Count or N/A]\n**Videos:** [Count or N/A]\n**Last Upload:** [Date or N/A]\n**Third-Party Mentions:** [Estimated count]\n**Key Findings:**\n- [Finding 1]\n- [Finding 2]\n\n### Reddit ([X]/100)\n\n**Official Account:** [Yes/No] | [URL if exists]\n**Own Subreddit:** [Yes/No] | [URL and member count if exists]\n**Mention Volume:** [Estimated thread count]\n**Primary Subreddits:** [List of subreddits where brand is discussed]\n**Sentiment:** [Positive/Negative/Neutral/Mixed]\n**Key Findings:**\n- [Finding 1]\n- [Finding 2]\n\n### Wikipedia ([X]/100)\n\n**Company Article:** [Yes/No] | [URL if exists]\n**Founder Article:** [Yes/No] | [URL if exists]\n**Wikidata Entry:** [Yes/No] | [Q-number if exists]\n**Cited in Other Articles:** [Yes/No] | [Which articles]\n**Key Findings:**\n- [Finding 1]\n- [Finding 2]\n\n### LinkedIn ([X]/100)\n\n**Company Page:** [Yes/No] | [URL if exists]\n**Followers:** [Count or N/A]\n**Post Frequency:** [Weekly/Monthly/Rare/Never]\n**Key Findings:**\n- [Finding 1]\n- [Finding 2]\n\n### Other Platforms ([X]/100)\n\n| Platform | Presence | Notes |\n|---|---|---|\n| Quora | [Yes/No] | [Brief note] |\n| Stack Overflow | [Yes/No] | [Brief note] |\n| GitHub | [Yes/No] | [Brief note] |\n| Hacker News | [Yes/No] | [Brief note] |\n| News/Press | [Yes/No] | [Brief note] |\n| Podcasts | [Yes/No] | [Brief note] |\n\n---\n\n## Recommendations\n\n### Immediate Actions (Week 1-2)\n\n1. **[Platform]:** [Specific action to take with expected impact]\n2. **[Platform]:** [Specific action]\n\n### Short-Term Strategy (Month 1-3)\n\n1. **[Platform]:** [Strategy with tactics]\n2. **[Platform]:** [Strategy with tactics]\n\n### Long-Term Authority Building (Month 3-12)\n\n1. **[Platform]:** [Long-term strategy]\n2. **[Platform]:** [Long-term strategy]\n\n---\n\n## Competitive Context\n\n[If competitors were analyzed, show a brief comparison table]\n\n| Brand | YouTube | Reddit | Wikipedia | LinkedIn | Other | Total |\n|---|---|---|---|---|---|---|\n| [Subject Brand] | [X] | [X] | [X] | [X] | [X] | **[X]** |\n| [Competitor 1] | [X] | [X] | [X] | [X] | [X] | **[X]** |\n| [Competitor 2] | [X] | [X] | [X] | [X] | [X] | **[X]** |\n\n## Key Takeaway\n\n[1-2 sentence summary of the brand's AI visibility standing and the single most impactful action to take]\n```\n\n---\n\n## Reference Data\n\n### Correlation Strengths (Ahrefs Dec 2025, 75K Brands)\n\n| Signal | Correlation with AI Citation | Traditional SEO Value |\n|---|---|---|\n| YouTube mentions | ~0.737 | Low (not a ranking factor) |\n| Reddit mentions | High (exact coefficient not published) | Low |\n| Wikipedia presence | High | Moderate (trust signal) |\n| LinkedIn presence | Moderate | Low |\n| Domain Rating | ~0.266 | Very High |\n| Backlink count | ~0.266 | Very High |\n| Organic traffic | Moderate | Very High |\n\n**Key insight:** The signals that matter most for AI visibility (YouTube, Reddit) are almost irrelevant in traditional SEO, and the signals that matter most for traditional SEO (backlinks, DR) are weak predictors of AI visibility. This requires a fundamentally different optimization strategy.\n\n### Platform-Specific Tips for Building Presence\n\n**YouTube Quick Wins:**\n- Create a channel and upload 3-5 explainer videos about your core topics.\n- Ensure your brand name appears in video titles, descriptions, and spoken content.\n- Pursue guest appearances on relevant industry YouTube channels.\n- Create comparison or \"alternatives\" videos (these get cited by AI for comparison queries).\n\n**Reddit Quick Wins:**\n- Identify 3-5 subreddits where your target audience is active.\n- Participate authentically (do not shill -- Reddit communities detect and punish this).\n- Do an AMA if appropriate for your brand.\n- Monitor and respond to mentions of your brand.\n- Create genuinely helpful posts that naturally mention your brand's expertise.\n\n**Wikipedia Strategy:**\n- Hire a Wikipedia-knowledgeable consultant -- do NOT edit your own article (conflict of interest).\n- Build notability through press coverage, academic citations, and industry recognition first.\n- Ensure your Wikidata entry is complete even if you do not have a Wikipedia article.\n- Contribute to industry-relevant articles where your brand can be naturally cited as a source.\n\n**LinkedIn Quick Wins:**\n- Optimize your company page with complete information and regular posting.\n- Encourage leadership to post thought leadership content weekly.\n- Publish LinkedIn articles on topics where your brand has unique expertise.\n- Engage with industry discussions to increase brand visibility in professional contexts.\n","skills/geo-citability/SKILL.md":"---\nname: geo-citability\ndescription: AI citability scoring and optimization. Analyzes web page content to determine how likely AI systems (ChatGPT, Claude, Perplexity, Gemini) are to cite or quote passages from the page. Provides a citability score (0-100) with specific rewrite suggestions.\nallowed-tools:\n  - Read\n  - Grep\n  - Glob\n  - Bash\n  - WebFetch\n  - Write\n---\n\n# AI Citability Scoring Skill\n\n## Core Insight\n\nAI language models cite passages that meet specific structural criteria. Research from Princeton, Georgia Tech, and IIT Delhi (2024) found that GEO-optimized content achieves 30-115% higher visibility in AI-generated responses. The key finding: AI systems preferentially extract and cite passages that are **134-167 words long**, **self-contained** (understandable without surrounding context), **fact-rich** (containing specific statistics, dates, or named entities), and **directly answer a question** in the first 1-2 sentences.\n\nThis is fundamentally different from traditional SEO copywriting, which optimizes for keyword density and user engagement metrics. GEO citability optimizes for **extractability** -- the ease with which an AI system can pull a passage from your content and present it as a direct answer.\n\n---\n\n## Citability Scoring Rubric (0-100)\n\n### Category 1: Answer Block Quality (30% of total score)\n\nThis measures whether content contains clear, quotable answer passages that AI systems can extract verbatim.\n\n**Scoring Criteria:**\n\n| Score | Criteria |\n|---|---|\n| **90-100** | Every major section opens with a 1-2 sentence direct answer. Uses \"X is...\" or \"X refers to...\" patterns. First 40-60 words of each section can stand alone as a complete answer. |\n| **70-89** | Most sections have clear answer openings. Some definition patterns present. Answers are identifiable but may need minor context. |\n| **50-69** | Some sections have answer-like openings but many bury the answer in the middle or end of paragraphs. Few explicit definition patterns. |\n| **30-49** | Answers are generally buried in long paragraphs. No consistent definition patterns. Content is narrative-driven rather than answer-driven. |\n| **0-29** | No identifiable answer blocks. Content is entirely narrative, conversational, or fragmented. AI would struggle to extract any quotable passage. |\n\n**What to look for:**\n\n- **Definition patterns:** \"X is [definition].\" / \"X refers to [explanation].\" / \"X means [meaning].\"\n- **Answer-first structure:** The answer appears in the first sentence, followed by supporting detail.\n- **Quantified answers:** \"The average cost of X is $Y\" rather than \"Many factors affect the cost of X.\"\n- **Comparison answers:** \"X differs from Y in three ways: [list]\" rather than \"X and Y are often confused.\"\n\n**High-citability example:**\n```\nContent delivery networks (CDNs) are distributed server systems that cache and serve\nweb content from locations geographically close to end users. A CDN reduces latency\nby 50-70% on average by serving assets from edge servers rather than a single origin\nserver. The three largest CDN providers as of 2025 are Cloudflare (serving approximately\n20% of all websites), Amazon CloudFront, and Akamai Technologies.\n```\nWord count: 58. Self-contained: Yes. Facts: 3 specific data points. Definition pattern: Yes.\n\n**Low-citability example:**\n```\nIf you've ever wondered why some websites load faster than others, the answer might\nsurprise you. There's this amazing technology that has been around for a while now.\nIt's changed the way we think about web performance. Let me explain how it works and\nwhy you should care about it for your business.\n```\nWord count: 52. Self-contained: No (no topic identified). Facts: 0. Definition pattern: No.\n\n---\n\n### Category 2: Passage Self-Containment (25% of total score)\n\nThis measures whether individual passages can be extracted and understood without needing the surrounding content.\n\n**Scoring Criteria:**\n\n| Score | Criteria |\n|---|---|\n| **90-100** | 80%+ of content blocks are fully self-contained. Each passage names its subject explicitly. No reliance on pronouns referencing earlier content. Contains specific facts within the passage. |\n| **70-89** | 60-79% of content blocks are self-contained. Most passages name their subject. Occasional pronoun references that require context. |\n| **50-69** | 40-59% of content blocks are self-contained. Mixed use of explicit subjects and pronouns. Some passages require reading prior sections. |\n| **30-49** | 20-39% of content blocks are self-contained. Heavy reliance on pronouns and contextual references. Most passages need surrounding text. |\n| **0-29** | Under 20% self-contained. Content reads as a continuous narrative where extracting any paragraph loses meaning. |\n\n**Self-containment checklist for each passage:**\n\n1. Does the passage explicitly name the subject (not \"it,\" \"this,\" \"they\")?\n2. Can someone understand the main point reading ONLY this passage?\n3. Does the passage contain at least one specific fact, statistic, or named entity?\n4. Is the passage between 50-200 words (the optimal extraction length)?\n5. Does the passage avoid starting with conjunctions (\"But,\" \"However,\" \"And\") that imply prior context?\n\n---\n\n### Category 3: Structural Readability (20% of total score)\n\nThis measures the structural formatting that helps AI systems parse and segment content.\n\n**Scoring Criteria:**\n\n| Score | Criteria |\n|---|---|\n| **90-100** | Clean H1 > H2 > H3 hierarchy. Question-based headings for informational content. Short paragraphs (2-4 sentences). Tables for comparisons. Ordered lists for processes. Unordered lists for features/options. |\n| **70-89** | Good heading hierarchy with minor skips. Some question-based headings. Mostly short paragraphs. Some use of tables and lists. |\n| **50-69** | Heading hierarchy present but inconsistent. Few question-based headings. Mix of short and long paragraphs. Limited tables/lists. |\n| **30-49** | Minimal heading structure. No question-based headings. Long paragraphs dominate. Rare use of tables/lists. |\n| **0-29** | No heading structure or severely broken hierarchy. Wall-of-text paragraphs. No tables or lists. |\n\n**Structural best practices for AI citability:**\n\n- **Heading hierarchy:** H1 (page title) > H2 (major sections) > H3 (subsections). Never skip levels.\n- **Question-based headings:** \"What is [topic]?\" and \"How does [topic] work?\" are directly matchable to AI queries.\n- **Paragraph length:** 2-4 sentences per paragraph. AI systems parse short paragraphs more reliably.\n- **Tables:** Use for any comparison of 3+ items. AI systems extract table data with high accuracy.\n- **Lists:** Use ordered lists for sequential processes, unordered lists for non-sequential items.\n- **Bold key terms:** Bold the first use of important terms. This aids AI entity recognition.\n\n---\n\n### Category 4: Statistical Density (15% of total score)\n\nThis measures the presence of specific, verifiable data points that AI systems prioritize when selecting citation sources.\n\n**Scoring Criteria:**\n\n| Score | Criteria |\n|---|---|\n| **90-100** | 5+ specific statistics per 500 words. All claims backed by named sources or dates. Uses exact numbers (not \"many\" or \"several\"). Includes percentages, dollar amounts, timeframes, and named studies. |\n| **70-89** | 3-4 statistics per 500 words. Most claims have sources. Mostly specific numbers with occasional vague quantifiers. |\n| **50-69** | 1-2 statistics per 500 words. Some claims sourced. Mix of specific and vague numbers. |\n| **30-49** | Less than 1 statistic per 500 words. Few sourced claims. Predominantly vague quantifiers. |\n| **0-29** | No statistics. No sourced claims. All quantifiers are vague (\"many,\" \"most,\" \"a lot\"). |\n\n**What counts as a statistic:**\n- Specific percentages: \"73% of marketers report...\"\n- Dollar amounts: \"The average cost is $4,500 per month\"\n- Timeframes: \"Implementation takes 6-8 weeks on average\"\n- Named studies: \"According to the 2025 HubSpot State of Marketing Report...\"\n- Specific counts: \"The platform integrates with 340+ tools\"\n- Comparison data: \"40% faster than the industry average\"\n\n**What does NOT count:**\n- \"Many companies use...\" (vague)\n- \"A significant percentage...\" (vague)\n- \"Studies show that...\" (no named source)\n- \"Experts agree...\" (no named experts)\n\n---\n\n### Category 5: Uniqueness & Original Data (10% of total score)\n\nThis measures whether the content provides information that AI systems cannot find elsewhere, making it a necessary citation source.\n\n**Scoring Criteria:**\n\n| Score | Criteria |\n|---|---|\n| **90-100** | Contains first-party research, proprietary data, original surveys, or unique datasets. Presents analysis or insights not found on any other page. Clear methodological descriptions. |\n| **70-89** | Contains some original insights or unique analysis of existing data. Offers a distinct perspective with original examples. |\n| **50-69** | Mostly synthesizes existing information but adds some unique commentary or examples. |\n| **30-49** | Largely derivative content that restates common knowledge with minimal original contribution. |\n| **0-29** | Entirely derivative. All information is available (often verbatim) on higher-authority sources. |\n\n**Signals of unique content:**\n- \"Our analysis of [X] data found...\"\n- \"We surveyed [N] [professionals] and found...\"\n- \"Based on our experience with [N] clients...\"\n- Custom charts, graphs, or data visualizations\n- Case studies with specific named outcomes\n- Original frameworks, methodologies, or taxonomies\n\n---\n\n## Analysis Procedure\n\n### Step 1: Fetch and Parse Page Content\n\n1. Use WebFetch to retrieve the target URL.\n2. Extract the main content area (exclude navigation, footer, sidebar, ads).\n3. Preserve heading structure (H1-H6 tags).\n4. Preserve paragraph boundaries, lists, and tables.\n5. Calculate total word count of main content.\n\n### Step 2: Segment Content into Blocks\n\n1. Split content at each heading (H2 or H3) to create content blocks.\n2. For each block, record:\n   - The heading text\n   - The full text content under that heading\n   - Word count of the block\n   - Number of paragraphs\n   - Number of lists and tables\n   - Number of statistics/data points\n   - Whether the block contains a definition pattern\n   - Whether the first 60 words form a standalone answer\n\n### Step 3: Score Each Block\n\nFor each content block, calculate:\n- Answer Block Quality sub-score (0-100)\n- Self-Containment sub-score (0-100)\n- Structural Readability sub-score (0-100)\n- Statistical Density sub-score (0-100)\n- Uniqueness sub-score (0-100)\n\n**Block Citability Score** = (Answer * 0.30) + (SelfContain * 0.25) + (Structure * 0.20) + (Stats * 0.15) + (Unique * 0.10)\n\n### Step 4: Calculate Page-Level Score\n\n1. Calculate the average of all block scores for the page-level citability score.\n2. Identify the top 3 highest-scoring blocks (highlight as strengths).\n3. Identify the bottom 3 lowest-scoring blocks (flag for rewriting).\n4. Calculate the percentage of blocks scoring above 70 (the \"citability coverage\" metric).\n\n### Step 5: Generate Rewrite Suggestions\n\nFor each block scoring below 60, generate a specific rewrite suggestion:\n1. Identify the primary weakness (buried answer, lack of facts, poor structure, etc.).\n2. Propose a rewritten opening sentence using a definition or answer-first pattern.\n3. Suggest specific statistics or facts that could be added.\n4. Recommend structural improvements (add list, add table, split paragraph).\n\n---\n\n## Output Format\n\nGenerate a file called `GEO-CITABILITY-SCORE.md`:\n\n```markdown\n# AI Citability Analysis: [Page Title]\n\n**URL:** [URL]\n**Analysis Date:** [Date]\n**Overall Citability Score: [X]/100**\n**Citability Coverage:** [X]% of content blocks score above 70\n\n---\n\n## Score Summary\n\n| Category | Score | Weight | Weighted |\n|---|---|---|---|\n| Answer Block Quality | [X]/100 | 30% | [X] |\n| Passage Self-Containment | [X]/100 | 25% | [X] |\n| Structural Readability | [X]/100 | 20% | [X] |\n| Statistical Density | [X]/100 | 15% | [X] |\n| Uniqueness & Original Data | [X]/100 | 10% | [X] |\n| **Overall** | | | **[X]/100** |\n\n---\n\n## Strongest Content Blocks\n\n### 1. \"[Heading]\" -- Score: [X]/100\n> [First 2 sentences of the block]\n\n**Why it works:** [Explanation]\n\n### 2. \"[Heading]\" -- Score: [X]/100\n> [First 2 sentences of the block]\n\n**Why it works:** [Explanation]\n\n---\n\n## Weakest Content Blocks (Rewrite Priority)\n\n### 1. \"[Heading]\" -- Score: [X]/100\n\n**Current opening:**\n> [First 2 sentences as they exist]\n\n**Problem:** [Specific issue -- buried answer, no facts, etc.]\n\n**Suggested rewrite:**\n> [Rewritten opening 2-3 sentences with answer-first pattern and facts]\n\n**Additional improvements:**\n- [Add table comparing X, Y, Z]\n- [Include statistic about ...]\n- [Split long paragraph into 2-3 shorter ones]\n\n---\n\n## Quick Win Reformatting Recommendations\n\n1. **[Specific recommendation]** -- Expected citability lift: +[X] points\n2. **[Specific recommendation]** -- Expected citability lift: +[X] points\n3. **[Specific recommendation]** -- Expected citability lift: +[X] points\n4. **[Specific recommendation]** -- Expected citability lift: +[X] points\n5. **[Specific recommendation]** -- Expected citability lift: +[X] points\n\n---\n\n## Per-Section Scores\n\n| Section Heading | Words | Answer Quality | Self-Contained | Structure | Stats | Unique | Overall |\n|---|---|---|---|---|---|---|---|\n| [H2 heading] | [N] | [X] | [X] | [X] | [X] | [X] | [X] |\n```\n\n---\n\n## Reference Data\n\n### Optimal Passage Characteristics (from GEO Research)\n\n- **Optimal length for AI citation:** 134-167 words (Bortolato 2025 analysis of AI Overview passages)\n- **Definition patterns increase citation rate by:** 2.1x (Georgia Tech 2024)\n- **Adding statistics to passages increases citation by:** 40% (Princeton GEO study 2024)\n- **Adding quotations from authorities increases citation by:** 115% in certain categories (IIT Delhi 2024)\n- **Fluency optimization increases visibility by:** 30% on average across all query types\n- **Content with source citations is cited:** 20-25% more often by Perplexity and ChatGPT search\n\n### AI System Citation Preferences\n\n| AI System | Citation Preference |\n|---|---|\n| **ChatGPT (Search)** | Prefers passages with explicit definitions, named sources, and recent dates. Tends to cite 2-4 sources per response. |\n| **Perplexity** | Heavily favors fact-dense passages with statistics. Cites 4-8 sources per response. Values recency highly. |\n| **Claude** | Prefers well-structured, comprehensive passages. Values nuance and accuracy over brevity. |\n| **Gemini (AI Overviews)** | Prefers concise answer blocks (40-60 words). Values content already ranking in top 10 organic results. |\n| **Copilot (Bing)** | Similar to Gemini. Prefers passages from high-authority domains with clear factual claims. |\n","skills/geo-compare/SKILL.md":"---\nname: geo-compare\ndescription: >\n  Monthly delta tracking and progress reporting for GEO clients. Compares two\n  GEO audits (baseline vs. current), calculates score improvements across all\n  categories, tracks action item completion, and generates a \"here's your progress\"\n  client report. Use when user says \"compare\", \"delta\", \"monthly report\", \"progress\",\n  \"confronta\", \"progressi\", \"report mensile\", or when running a monthly client check-in.\nversion: 1.0.0\ntags: [geo, business, delta, monthly, reporting, client, progress]\nallowed-tools: Read, Write, Bash, Glob\n---\n\n# GEO Monthly Delta Report Generator\n\n## Purpose\n\nThe single most powerful retention tool for a GEO agency: show clients **exactly**\nwhat improved since they started working with you. Every point gained on the GEO\nscore is proof of value. This skill generates the \"here's your progress\" report.\n\n---\n\n## Commands\n\n```\n/geo compare <domain>\n/geo compare <baseline-file> <current-file>\n/geo compare electron-srl.com --month march-2026\n```\n\n**Examples:**\n```\n/geo compare electron-srl.com\n/geo compare ~/.geo-prospects/audits/electron-srl.com-2026-01-15.md ~/.geo-prospects/audits/electron-srl.com-2026-03-12.md\n```\n\n---\n\n## Workflow\n\n### Step 1: Find Audit Files\n\nIf only domain is provided:\n1. Look in `~/.geo-prospects/audits/` for files matching `<domain>-*.md`\n2. Sort by date\n3. Use oldest as baseline, newest as current\n4. If only one file exists: use it as baseline, run a fresh quick audit as current\n5. If no files exist: suggest running `/geo prospect audit <domain>` first\n\n### Step 2: Parse Both Audits\n\nExtract from each audit file:\n- Overall GEO Score\n- Per-category scores (6 categories)\n- Per-platform scores (5 platforms)\n- AI crawler status (14 crawlers)\n- Critical issues list\n- Action items list with status\n\n### Step 3: Calculate Deltas\n\nFor each metric:\n- Delta = Current - Baseline\n- Trend = ▲ (improved), ▼ (declined), ── (unchanged)\n- Color coding in report: green (+), red (-), gray (=)\n\n### Step 4: Generate Monthly Report\n\nOutput to `~/.geo-prospects/reports/<domain>-monthly-<date>.md`\n\n---\n\n## Report Template\n\nGenerate the following document:\n\n```markdown\n# GEO Monthly Progress Report\n## [COMPANY NAME] — [MONTH YEAR]\n\n**Reporting period:** [BASELINE DATE] → [CURRENT DATE]\n**Prepared by:** [AGENCY NAME]\n**Report reference:** GEO-MONTHLY-[DOMAIN]-[YYMMDD]\n\n---\n\n## Executive Summary\n\n[2-3 sentences: What improved, what's the trend, what to focus on next month.]\n\nExample: \"Electron Srl's GEO Score improved from 32 to 44 this month (+12 points),\nplacing the site firmly in the 'Below Average' tier and on track to reach 'Moderate'\nby May. The biggest wins were AI crawler access (+3 crawlers now allowed) and schema\nimplementation (+Organization and LocalBusiness schemas live). Next month's focus is\ncontent citability — the highest-weighted remaining gap.\"\n\n---\n\n## GEO Score Progress\n\n```\nOVERALL GEO SCORE\n\n  Baseline   [▓▓▓▓░░░░░░░░░░░░░░░░]  32/100  (Critical)\n  Current    [▓▓▓▓▓▓▓▓░░░░░░░░░░░░]  44/100  (Below Average)\n  Change     ▲ +12 points (+37.5%)\n\n  Target:    65/100 by Month 6 (on track ✓)\n```\n\n---\n\n## Score Breakdown: Before vs. After\n\n| Category | Baseline | Current | Change | Trend |\n|----------|---------|---------|--------|-------|\n| AI Citability & Visibility | [X]/100 | [X]/100 | [+/-X] | [▲/▼/──] |\n| Brand Authority Signals | [X]/100 | [X]/100 | [+/-X] | [▲/▼/──] |\n| Content Quality & E-E-A-T | [X]/100 | [X]/100 | [+/-X] | [▲/▼/──] |\n| Technical Foundations | [X]/100 | [X]/100 | [+/-X] | [▲/▼/──] |\n| Structured Data | [X]/100 | [X]/100 | [+/-X] | [▲/▼/──] |\n| Platform Optimization | [X]/100 | [X]/100 | [+/-X] | [▲/▼/──] |\n| **TOTAL** | **[X]/100** | **[X]/100** | **[+/-X]** | **[▲/▼]** |\n\n---\n\n## Platform Readiness: Before vs. After\n\n| AI Platform | Baseline | Current | Change |\n|-------------|---------|---------|--------|\n| Google AI Overviews | [X]/100 | [X]/100 | [+/-X] |\n| ChatGPT Web Search | [X]/100 | [X]/100 | [+/-X] |\n| Perplexity AI | [X]/100 | [X]/100 | [+/-X] |\n| Google Gemini | [X]/100 | [X]/100 | [+/-X] |\n| Bing Copilot | [X]/100 | [X]/100 | [+/-X] |\n\n---\n\n## AI Crawler Access Changes\n\n| Crawler | Baseline | Current | Change |\n|---------|---------|---------|--------|\n| GPTBot (ChatGPT) | Blocked/Allowed | Blocked/Allowed | ✓ Fixed / No change |\n| ClaudeBot (Anthropic) | Blocked/Allowed | Blocked/Allowed | ✓ Fixed / No change |\n| PerplexityBot | Blocked/Allowed | Blocked/Allowed | ✓ Fixed / No change |\n| Google-Extended (Gemini) | Blocked/Allowed | Blocked/Allowed | ✓ Fixed / No change |\n| Bingbot | Blocked/Allowed | Blocked/Allowed | ✓ Fixed / No change |\n\n[Show only crawlers that changed, or all if few crawlers.]\n\n---\n\n## Action Plan Progress\n\n### Quick Wins — Status Update\n\n| # | Action | Assigned | Status | Impact |\n|---|--------|---------|--------|--------|\n| 1 | Allow all AI crawlers in robots.txt | Client dev | ✅ Done | +3 crawlers |\n| 2 | Add Organization schema to homepage | Client dev | ✅ Done | Schema score +15 |\n| 3 | Create llms.txt | Agency | ✅ Done | AI visibility +8 |\n| 4 | Add author bylines to all articles | Client content | 🔄 In Progress | — |\n| 5 | Fix meta descriptions (47 pages missing) | Client dev | ❌ Not started | — |\n\n**Quick wins completed: [X]/[Y] ([%])**\n\n### Medium-Term — Status Update\n\n| # | Action | Target Month | Status |\n|---|--------|-------------|--------|\n| 1 | Rewrite top 10 pages with Q&A structure | Month 2 | 🔄 3/10 done |\n| 2 | E-E-A-T: Create author pages | Month 2 | ❌ Not started |\n| 3 | Register Bing Webmaster Tools | Month 1 | ✅ Done |\n| 4 | Implement IndexNow | Month 2 | 🔄 In Progress |\n\n### Strategic — Status Update\n\n| # | Action | Target | Status |\n|---|--------|--------|--------|\n| 1 | Wikipedia entity creation | Month 4 | 📋 Planned |\n| 2 | YouTube channel launch | Month 3 | 📋 Planned |\n| 3 | Reddit presence (industry subs) | Month 3 | 📋 Planned |\n\n---\n\n## This Month's Wins\n\n> Use this section to celebrate — clients need to see the value clearly.\n\n✅ **[WIN 1]:** [Specific, tangible result — e.g., \"GPTBot and ClaudeBot are now allowed. ChatGPT can now crawl and cite your content.\"]\n✅ **[WIN 2]:** [e.g., \"Organization schema implemented on homepage. Your brand entity is now machine-readable.\"]\n✅ **[WIN 3]:** [e.g., \"llms.txt created and deployed at electron-srl.com/llms.txt — one of only ~12% of sites in your industry to have this.\"]\n\n---\n\n## New Issues Discovered\n\n> Issues found in current audit that weren't in baseline.\n\n⚠️ **[ISSUE 1]:** [What it is, what it means, how we'll fix it]\n⚠️ **[ISSUE 2]:** [What it is, what it means, how we'll fix it]\n\n---\n\n## Next Month Focus\n\n### Priority Actions for [NEXT MONTH]:\n\n| Priority | Action | Owner | Expected Impact |\n|----------|--------|-------|----------------|\n| 1 | [Highest ROI action] | [Agency/Client] | +[X] GEO points |\n| 2 | [Second priority] | [Agency/Client] | +[X] GEO points |\n| 3 | [Third priority] | [Agency/Client] | +[X] GEO points |\n\n**Target GEO Score next month:** [CURRENT + estimated gain]/100\n\n---\n\n## 6-Month Trajectory\n\n| Month | Date | Score | Delta | Key Achievement |\n|-------|------|-------|-------|----------------|\n| Baseline | [Date] | [Score] | — | Initial audit |\n| Month 1 | [Date] | [Score] | [+X] | Quick wins implemented |\n| Month 2 | [Date] | [Score] | [+X] | *Current month* |\n| Month 3 | [Date] | — | — | Content citability |\n| Month 4 | — | — | — | Brand authority |\n| Month 5 | — | — | — | Strategic initiatives |\n| Month 6 | — | **Target: [X]** | — | Full review |\n\n[Only fill rows that have happened. Show projected rows as \"—\"]\n\n---\n\n## Estimated Business Impact\n\nBased on the [X]-point improvement this month:\n\n- **AI citation likelihood:** Increased by approximately [X]%\n- **Crawlers with access:** [X]/14 → [Y]/14 (better coverage on [platforms])\n- **Estimated monthly AI-referred traffic improvement:** +[X]% (conservative)\n- **Traffic value at current conversion rates:** +€[X]/month in organic value\n\n*Note: Full traffic impact from GEO changes typically takes 4-8 weeks to materialize\nas AI platforms re-index and update their knowledge bases.*\n\n---\n\n*GEO Monthly Report — [COMPANY NAME] — [DATE]*\n*Questions or comments? [CONTACT EMAIL]*\n```\n\n---\n\n## Delta Calculation Logic\n\nWhen parsing two audit files, look for these patterns:\n\n```\nScore markers to extract:\n- \"GEO Score: XX/100\"\n- \"Overall Score: XX\"\n- \"AI Citability: XX/100\"\n- \"Brand Authority: XX/100\"\n- \"Technical: XX/100\"\n- \"Schema: XX/100\"\n- \"Platform: XX/100\"\n- \"Content: XX/100\"\n- \"GPTBot: Allowed/Blocked\"\n- \"ClaudeBot: Allowed/Blocked\"\n```\n\nIf exact scores are not found in audit files, use contextual analysis of the\nwritten findings to estimate approximate scores based on issues described.\n\n---\n\n## Trend Interpretation\n\n| Delta | Trend Symbol | Meaning |\n|-------|-------------|---------|\n| +5 or more | ▲▲ | Strong improvement |\n| +1 to +4 | ▲ | Improvement |\n| 0 | ── | No change |\n| -1 to -4 | ▼ | Slight decline |\n| -5 or more | ▼▼ | Significant decline — needs discussion |\n\nA decline is not necessarily bad — it can mean new issues were discovered in the\nfresh audit that weren't visible before. Frame declines as \"newly discovered opportunities.\"\n\n---\n\n## Output\n\n1. Save report to `~/.geo-prospects/reports/<domain>-monthly-<YYYY-MM>.md`\n2. Print confirmation with key stats:\n   ```\n   ✓ Monthly report generated: ~/.geo-prospects/reports/electron-srl.com-monthly-2026-03.md\n\n   SUMMARY:\n   GEO Score: 32 → 44 (+12 points) ▲\n   Quick wins completed: 3/5 (60%)\n   New issues found: 2 (minor)\n   On track for Month 6 target: YES (65/100)\n   ```\n3. Suggest next action: \"Share with client or run `/geo report-pdf` for a visual version\"\n","skills/geo-content/SKILL.md":"---\nname: geo-content\ndescription: Content quality and E-E-A-T assessment for AI citability — evaluate experience, expertise, authoritativeness, trustworthiness, and content structure\nversion: 1.0.0\nauthor: geo-seo-claude\ntags: [geo, content-quality, eeat, citability, ai-content, topical-authority]\nallowed-tools: Read, Grep, Glob, Bash, WebFetch, Write\n---\n\n# GEO Content Quality & E-E-A-T Assessment\n\n## Purpose\n\nAI search platforms do not just find content — they evaluate whether content deserves to be cited. The primary framework for this evaluation is **E-E-A-T** (Experience, Expertise, Authoritativeness, Trustworthiness), which per Google's December 2025 Quality Rater Guidelines update now applies to **ALL competitive queries**, not just YMYL (Your Money Your Life) topics. Content that scores high on E-E-A-T is dramatically more likely to be cited by AI platforms.\n\nThis skill evaluates content through two lenses:\n1. **E-E-A-T signals** — does the content demonstrate real expertise and trust?\n2. **AI citability** — is the content structured so AI platforms can extract and cite specific claims?\n\n## How to Use This Skill\n\n1. Fetch the target page(s) — homepage, key blog posts, service/product pages\n2. Evaluate E-E-A-T across the 4 dimensions (25% each)\n3. Assess content quality metrics (structure, readability, depth)\n4. Check for AI content quality signals\n5. Evaluate topical authority across the site\n6. Score and generate GEO-CONTENT-ANALYSIS.md\n\n---\n\n## E-E-A-T Framework (100 points total)\n\n### Experience — 25 points\nFirst-hand knowledge and direct involvement with the topic. AI platforms increasingly distinguish between content that reports on a topic and content from someone who has DONE it.\n\n**Signals to evaluate:**\n\n| Signal | Points | How to Score |\n|---|---|---|\n| First-person accounts (\"I tested...\", \"We implemented...\") | 5 | 5 if present and specific, 3 if generic, 0 if absent |\n| Original research or data not available elsewhere | 5 | 5 if original data, 3 if references original work, 0 if none |\n| Case studies with specific results | 4 | 4 if detailed with numbers, 2 if general, 0 if none |\n| Screenshots, photos, or evidence of direct use | 3 | 3 if authentic evidence, 1 if stock/generic, 0 if none |\n| Specific examples from personal experience | 4 | 4 if specific and unique, 2 if somewhat specific, 0 if generic |\n| Demonstrations of process (not just outcome) | 4 | 4 if step-by-step from experience, 2 if partial, 0 if none |\n\n**What to flag as weak Experience:**\n- Content that only summarizes what other sources say without adding new perspective\n- Generic advice that could apply to any situation (\"It depends on your needs\")\n- No mention of actual usage, testing, or direct involvement\n- Hedging language that suggests lack of direct knowledge (\"reportedly\", \"supposedly\", \"some say\")\n\n### Expertise — 25 points\nDemonstrated knowledge depth and professional competence in the subject matter.\n\n**Signals to evaluate:**\n\n| Signal | Points | How to Score |\n|---|---|---|\n| Author credentials visible (bio, degrees, certifications) | 5 | 5 if full credentials, 3 if basic bio, 0 if no author |\n| Technical depth appropriate to topic | 5 | 5 if thorough technical treatment, 3 if adequate, 0 if superficial |\n| Methodology explanation (how conclusions were reached) | 4 | 4 if clear methodology, 2 if some explanation, 0 if none |\n| Data-backed claims (statistics, research citations) | 4 | 4 if well-sourced, 2 if some data, 0 if unsupported claims |\n| Industry-specific terminology used correctly | 3 | 3 if accurate specialized language, 1 if basic, 0 if errors |\n| Author page with detailed professional background | 4 | 4 if dedicated author page, 2 if brief bio, 0 if none |\n\n**What to flag as weak Expertise:**\n- Claims without supporting evidence or sources\n- Surface-level coverage of complex topics\n- Misuse of technical terminology\n- No visible author or author without relevant credentials\n- Content that is broad and generic rather than deep and specific\n\n### Authoritativeness — 25 points\nRecognition by others as a credible source on the topic.\n\n**Signals to evaluate:**\n\n| Signal | Points | How to Score |\n|---|---|---|\n| Inbound citations from authoritative sources | 5 | 5 if cited by major sources, 3 if some citations, 0 if none |\n| Author quoted or cited in press/media | 4 | 4 if media mentions, 2 if industry mentions, 0 if none |\n| Industry awards or recognition mentioned | 3 | 3 if relevant awards, 1 if tangential, 0 if none |\n| Speaker credentials (conferences, events) | 3 | 3 if listed, 0 if none |\n| Published in peer-reviewed or respected outlets | 4 | 4 if tier-1 publications, 2 if industry outlets, 0 if none |\n| Comprehensive topic coverage (topical authority) | 3 | 3 if site covers topic thoroughly, 1 if some coverage, 0 if isolated |\n| Brand mentioned on Wikipedia or authoritative references | 3 | 3 if Wikipedia, 2 if other encyclopedic refs, 0 if none |\n\n**What to flag as weak Authoritativeness:**\n- Single-topic site with no depth of coverage\n- No external validation of expertise claims\n- No backlinks from authoritative sources\n- Claims of authority without evidence (self-proclaimed \"expert\")\n\n### Trustworthiness — 25 points\nSignals that the content and its publisher are reliable and transparent.\n\n**Signals to evaluate:**\n\n| Signal | Points | How to Score |\n|---|---|---|\n| Contact information visible (address, phone, email) | 4 | 4 if full contact info, 2 if email only, 0 if none |\n| Privacy policy present and linked | 2 | 2 if present, 0 if absent |\n| Terms of service present | 1 | 1 if present, 0 if absent |\n| HTTPS with valid certificate | 2 | 2 if valid HTTPS, 0 if not |\n| Editorial standards or corrections policy | 3 | 3 if documented, 1 if implicit, 0 if none |\n| Transparent about business model and conflicts | 3 | 3 if clear disclosures, 1 if some, 0 if none |\n| Reviews and testimonials from real customers | 3 | 3 if verified reviews, 1 if testimonials, 0 if none |\n| Accurate claims (no misinformation detected) | 4 | 4 if all claims accurate, 2 if mostly accurate, 0 if errors found |\n| Clear affiliate/sponsorship disclosures | 3 | 3 if properly disclosed, 0 if undisclosed or absent |\n\n**What to flag as weak Trustworthiness:**\n- No contact information or physical address\n- Missing privacy policy or terms\n- Undisclosed affiliate links or sponsored content\n- Claims that are verifiably false or misleading\n- No way to contact the publisher for corrections\n\n---\n\n## Content Quality Metrics\n\n### Word Count Benchmarks\nThese are **floors, not targets**. More words does not mean better content. The benchmark is the minimum length to adequately cover a topic for AI citability.\n\n| Page Type | Minimum Words | Ideal Range | Notes |\n|---|---|---|---|\n| Homepage | 500 | 500-1,500 | Clear value proposition, not a wall of text |\n| Blog post | 1,500 | 1,500-3,000 | Thorough but focused |\n| Pillar content / Ultimate guide | 2,000 | 2,500-5,000 | Comprehensive topic coverage |\n| Product page | 300 | 500-1,500 | Descriptions, specs, use cases |\n| Service page | 500 | 800-2,000 | What, how, why, for whom |\n| About page | 300 | 500-1,000 | Company/person story and credentials |\n| FAQ page | 500 | 1,000-2,500 | Thorough answers, not one-liners |\n\n### Readability Assessment\n- **Target Flesch Reading Ease**: 60-70 (8th-9th grade level)\n- This is NOT a direct ranking factor but affects citability — AI platforms prefer content that is clear and unambiguous\n- Overly academic writing (score < 30) reduces citability for general queries\n- Overly simple writing (score > 80) may lack the depth needed for expertise signals\n\n**How to estimate without a tool:**\n- Average sentence length: 15-20 words is ideal\n- Average paragraph length: 2-4 sentences\n- Presence of jargon: should be defined when first used\n- Passive voice: < 15% of sentences\n\n### Paragraph Structure for AI Parsing\nAI platforms extract content at the paragraph level. Each paragraph should be a self-contained unit of meaning.\n\n**Optimal paragraph structure:**\n- **2-4 sentences** per paragraph (1-sentence paragraphs are weak; 5+ sentences are hard to extract)\n- **One idea per paragraph** — do not mix topics within a paragraph\n- **Lead with the key claim** — first sentence should contain the main point\n- **Support with evidence** — remaining sentences provide data, examples, or context\n- **Quotable standalone** — each paragraph should make sense if extracted in isolation\n\n### Heading Structure\n- **One H1 per page** — the primary topic/title\n- **H2 for major sections** — should represent distinct subtopics\n- **H3 for subsections** — nested under relevant H2\n- **No skipped levels** — do not go from H1 to H3 without an H2\n- **Descriptive headings** — \"How to Optimize for AI Search\" not \"Section 2\"\n- **Question-based headings** where appropriate — these map directly to AI queries\n\n### Internal Linking\n- Every content page should link to 3-5 related pages on the same site\n- Links should use descriptive anchor text (not \"click here\")\n- Create a topic cluster structure: pillar page linked to/from all related subtopic pages\n- Orphan pages (no internal links pointing to them) are rarely cited by AI\n\n---\n\n## AI Content Assessment\n\n### AI-Generated Content Policy\nAI-generated content is **acceptable** per Google's guidance (March 2024 clarification) as long as it demonstrates genuine E-E-A-T signals and has human oversight. The concern is not HOW content is created but WHETHER it provides value.\n\n### Signs of Low-Quality AI Content (flag these)\n\n| Signal | Description |\n|---|---|\n| Generic phrasing | \"In today's fast-paced world...\", \"It's important to note that...\", \"At the end of the day...\" |\n| No original insight | Content that only rephrases widely available information |\n| Lack of first-hand experience | No personal anecdotes, case studies, or specific examples |\n| Perfect but empty structure | Well-formatted headings with shallow content beneath them |\n| No specific examples | Uses abstract explanations without concrete instances |\n| Repetitive conclusions | Each section ends with a variation of the same point |\n| Hedging overload | \"Generally speaking\", \"In most cases\", \"It depends on various factors\" without specifying which factors |\n| Missing human voice | No opinions, preferences, or professional judgment expressed |\n| Filler content | Paragraphs that could be deleted without losing information |\n| No data or sources | Claims presented as facts without attribution or evidence |\n\n### High-Quality Content Signals (regardless of production method)\n\n| Signal | Description |\n|---|---|\n| Original data | Surveys, experiments, benchmarks, proprietary analysis |\n| Specific examples | Named products, companies, dates, numbers |\n| Contrarian or nuanced views | Disagreement with conventional wisdom, backed by reasoning |\n| First-person experience | \"When I tested this...\" or \"Our team found...\" |\n| Updated information | References to recent events, current data |\n| Expert opinion | Clear professional judgment, not just facts |\n| Practical recommendations | Specific, actionable advice, not vague guidance |\n| Trade-offs acknowledged | \"This approach works well for X but not for Y because...\" |\n\n---\n\n## Content Freshness Assessment\n\n### Publication Dates\n- Check for visible `datePublished` and `dateModified` in both the content and structured data\n- Content without dates is treated as less trustworthy by AI platforms\n- Dates should be specific (January 15, 2026) not vague (\"recently\")\n\n### Freshness Scoring\n\n| Criterion | Score |\n|---|---|\n| Updated within 3 months | Excellent — current and relevant |\n| Updated within 6 months | Good — still reasonably current |\n| Updated within 12 months | Acceptable — may need refresh |\n| Updated 12-24 months ago | Warning — review for accuracy |\n| No date or 24+ months old | Critical — AI platforms may deprioritize |\n\n### Evergreen Indicators\nSome content remains relevant regardless of age. Flag content as evergreen if:\n- It covers fundamental concepts that do not change (physics, basic math, legal definitions)\n- It is clearly labeled as a reference/guide for lasting concepts\n- It does not contain time-dependent claims (\"the latest\", \"currently\", \"in 2024\")\n\n---\n\n## Topical Authority Assessment\n\n### What It Is\nTopical authority measures whether a site comprehensively covers a topic rather than touching on it superficially. AI platforms prefer citing sites that are recognized authorities on their topics.\n\n### How to Assess\n1. **Content breadth**: Does the site have multiple pages covering different aspects of its core topic?\n2. **Content depth**: Do individual pages go deep into subtopics?\n3. **Topic clustering**: Are pages organized into logical groups with internal linking?\n4. **Content gaps**: Are there obvious subtopics that the site should cover but does not?\n5. **Competitor comparison**: Do competitors cover subtopics that this site misses?\n\n### Scoring\n\n| Level | Description | Score Impact |\n|---|---|---|\n| Authority | 20+ pages covering topic comprehensively, strong clustering | +10 bonus |\n| Developing | 10-20 pages with some clustering | +5 bonus |\n| Emerging | 5-10 pages on topic, limited clustering | +0 |\n| Thin | < 5 pages, no clustering | -5 penalty |\n\n---\n\n## Overall Scoring (0-100)\n\n### Score Composition\n| Component | Weight | Max Points |\n|---|---|---|\n| Experience | 25% | 25 |\n| Expertise | 25% | 25 |\n| Authoritativeness | 25% | 25 |\n| Trustworthiness | 25% | 25 |\n| **Subtotal** | | **100** |\n| Topical Authority Modifier | | +10 to -5 |\n| **Final Score** | | **Capped at 100** |\n\n### Score Interpretation\n- **85-100**: Exceptional — strong AI citation candidate across platforms\n- **70-84**: Good — solid foundation, specific improvements will increase citability\n- **55-69**: Average — multiple E-E-A-T gaps reducing AI visibility\n- **40-54**: Below Average — significant content quality and trust issues\n- **0-39**: Poor — fundamental content strategy overhaul needed\n\n---\n\n## Output Format\n\nGenerate **GEO-CONTENT-ANALYSIS.md** with:\n\n```markdown\n# GEO Content Quality & E-E-A-T Analysis — [Domain]\nDate: [Date]\n\n## Content Score: XX/100\n\n## E-E-A-T Breakdown\n| Dimension | Score | Key Finding |\n|---|---|---|\n| Experience | XX/25 | [One-line summary] |\n| Expertise | XX/25 | [One-line summary] |\n| Authoritativeness | XX/25 | [One-line summary] |\n| Trustworthiness | XX/25 | [One-line summary] |\n\n## Topical Authority Modifier: [+10 to -5]\n\n## Pages Analyzed\n| Page | Word Count | Readability | Heading Structure | Citability Rating |\n|---|---|---|---|---|\n| [URL] | [Count] | [Score] | [Pass/Warn/Fail] | [High/Medium/Low] |\n\n## E-E-A-T Detailed Findings\n\n### Experience\n[Specific passages and pages with strong/weak experience signals]\n\n### Expertise\n[Author credentials found, technical depth assessment, specific gaps]\n\n### Authoritativeness\n[External validation found, topical authority assessment, gaps]\n\n### Trustworthiness\n[Trust signals present/missing, accuracy concerns if any]\n\n## Content Quality Issues\n[Specific passages flagged with reasons and rewrite suggestions]\n\n## AI Content Concerns\n[Any low-quality AI content patterns detected, with specific examples]\n\n## Freshness Assessment\n| Page | Published | Last Updated | Status |\n|---|---|---|---|\n| [URL] | [Date] | [Date] | [Current/Stale/No Date] |\n\n## Citability Assessment\n### Most Citable Passages\n[Top 5 passages that AI platforms are most likely to cite, with reasons]\n\n### Least Citable Pages\n[Pages with lowest citability, with specific improvement recommendations]\n\n## Improvement Recommendations\n### Quick Wins\n[Specific content changes that can be made immediately]\n\n### Content Gaps\n[Topics the site should cover to strengthen topical authority]\n\n### Author/E-E-A-T Improvements\n[Specific steps to strengthen E-E-A-T signals]\n```\n","skills/geo-crawlers/SKILL.md":"---\nname: geo-crawlers\ndescription: AI crawler access analysis. Checks robots.txt, meta tags, and HTTP headers to determine which AI crawlers can access the site. Provides a complete access map and recommendations for maximizing AI visibility while maintaining appropriate control.\nallowed-tools:\n  - Read\n  - Grep\n  - Glob\n  - Bash\n  - WebFetch\n  - Write\n---\n\n# AI Crawler Access Analysis Skill\n\n## Purpose\n\nThis skill analyzes a website's accessibility to AI crawlers -- the bots that AI companies use to discover, index, and train on web content. If AI crawlers are blocked, the site's content cannot appear in AI-generated responses regardless of its quality. Crawler access is the foundational technical requirement for GEO.\n\n## Key Insight\n\nAs of early 2026, many websites inadvertently block AI crawlers through overly aggressive robots.txt rules, inherited from legacy SEO configurations. An Originality.ai 2025 study found that over 35% of the top 1,000 websites block at least one major AI crawler, and 5-10% block all AI crawlers. Blocking AI crawlers is the single fastest way to become invisible in AI-generated search results.\n\n---\n\n## Complete AI Crawler Reference\n\n### Tier 1: Critical for AI Search Visibility (RECOMMEND: ALLOW)\n\nThese crawlers power the AI search products where users actively look for answers. Blocking them directly reduces your visibility in AI-generated responses.\n\n#### GPTBot\n- **Operator:** OpenAI\n- **User-Agent:** `GPTBot`\n- **Full User-Agent String:** `Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; GPTBot/1.2; +https://openai.com/gptbot)`\n- **Purpose:** Fetches content for ChatGPT's web browsing, plugins, and search features. Content accessed by GPTBot may be used to improve OpenAI models.\n- **Impact of Blocking:** Content will NOT appear in ChatGPT Search results or be accessible when users ask ChatGPT to browse the web. This is the highest-impact AI crawler to allow.\n- **Recommendation:** **ALLOW** -- ChatGPT has 300M+ weekly active users as of 2025. Blocking GPTBot removes your content from one of the largest AI search surfaces.\n\n#### OAI-SearchBot\n- **Operator:** OpenAI\n- **User-Agent:** `OAI-SearchBot`\n- **Full User-Agent String:** `Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; OAI-SearchBot/1.0; +https://docs.openai.com/bots/overview)`\n- **Purpose:** Specifically powers ChatGPT's search feature. Unlike GPTBot, content accessed by OAI-SearchBot is NOT used for model training -- only for live search results.\n- **Impact of Blocking:** Content will not appear in ChatGPT's search results even if GPTBot is allowed.\n- **Recommendation:** **ALLOW** -- This is a search-only crawler with no training implications. There is no strategic reason to block it.\n\n#### ChatGPT-User\n- **Operator:** OpenAI\n- **User-Agent:** `ChatGPT-User`\n- **Full User-Agent String:** `Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ChatGPT-User/1.0; +https://openai.com/bot)`\n- **Purpose:** Used when a ChatGPT user explicitly asks the model to visit a specific URL. Acts like a browser agent on behalf of the user.\n- **Impact of Blocking:** ChatGPT cannot visit your pages when users ask it to read or summarize them. This prevents direct user-initiated traffic.\n- **Recommendation:** **ALLOW** -- Blocking this bot prevents users who are actively trying to engage with your content from accessing it through ChatGPT.\n\n#### ClaudeBot\n- **Operator:** Anthropic\n- **User-Agent:** `ClaudeBot`\n- **Full User-Agent String:** `ClaudeBot/1.0; +https://www.anthropic.com/claude-bot`\n- **Purpose:** Fetches web content for Claude's features including web search, citations, and analysis tools.\n- **Impact of Blocking:** Content will not be accessible to Claude for web search or when users ask Claude to analyze specific URLs.\n- **Recommendation:** **ALLOW** -- Claude is a major AI assistant with growing market share. Blocking ClaudeBot reduces your AI search footprint.\n\n#### PerplexityBot\n- **Operator:** Perplexity AI\n- **User-Agent:** `PerplexityBot`\n- **Full User-Agent String:** `Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; PerplexityBot/1.0; +https://perplexity.ai/perplexitybot)`\n- **Purpose:** Powers Perplexity's AI search engine, which provides sourced answers with direct citations and links back to source pages.\n- **Impact of Blocking:** Content will not appear in Perplexity search results. Perplexity is one of the best referral traffic sources among AI search products because it always displays source links.\n- **Recommendation:** **ALLOW** -- Perplexity drives actual referral traffic and always attributes sources. High-value AI crawler for publishers and businesses.\n\n---\n\n### Tier 2: Important for Broader AI Ecosystem (RECOMMEND: ALLOW)\n\nThese crawlers serve large AI platforms or search ecosystems. Allowing them increases your content's reach.\n\n#### Google-Extended\n- **Operator:** Google\n- **User-Agent:** `Google-Extended`\n- **Purpose:** Controls whether Google uses your content for Gemini model training and AI Overviews improvement. **CRITICAL NOTE:** Blocking Google-Extended does NOT affect your Google Search rankings or your appearance in Google Search results. That is controlled by the standard Googlebot.\n- **Impact of Blocking:** Content may not be used for Gemini training or to improve AI Overviews. However, your content can still appear in AI Overviews based on standard search indexing.\n- **Recommendation:** **ALLOW** -- Blocking provides minimal content protection upside while reducing your presence in Google's AI features. Since it does not affect standard search ranking, the only reason to block is philosophical objection to training data usage.\n\n#### GoogleOther\n- **Operator:** Google\n- **User-Agent:** `GoogleOther`\n- **Purpose:** Used by Google for various non-search-ranking purposes including research, one-off crawls, and AI-related data collection.\n- **Impact of Blocking:** Minimal impact on search rankings. May reduce presence in Google's AI research and experimental features.\n- **Recommendation:** **ALLOW** -- Low risk, moderate potential benefit for AI feature inclusion.\n\n#### Applebot-Extended\n- **Operator:** Apple\n- **User-Agent:** `Applebot-Extended`\n- **Purpose:** Used by Apple to train and improve Apple Intelligence features, Siri, and Apple's AI products. Separate from standard Applebot (which powers Siri search and Spotlight Suggestions).\n- **Impact of Blocking:** Content may not be used in Apple Intelligence features. Standard Siri and Spotlight functionality is unaffected (controlled by Applebot).\n- **Recommendation:** **ALLOW** -- Apple Intelligence is integrated into all Apple devices (2B+ active devices). Presence in Apple's AI features has growing strategic value.\n\n#### Amazonbot\n- **Operator:** Amazon\n- **User-Agent:** `Amazonbot`\n- **Full User-Agent String:** `Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/600.2.5 (KHTML, like Gecko) Version/8.0.2 Safari/600.2.5 (compatible; Amazonbot/0.1; +https://developer.amazon.com/support/amazonbot)`\n- **Purpose:** Indexes content for Alexa answers and Amazon's AI features.\n- **Impact of Blocking:** Content will not appear in Alexa voice responses or Amazon's AI-powered search features.\n- **Recommendation:** **ALLOW** -- Relevant for voice search optimization. Lower priority than Tier 1 crawlers but no downside to allowing.\n\n#### FacebookBot\n- **Operator:** Meta\n- **User-Agent:** `FacebookBot`\n- **Purpose:** Used by Meta for AI features across Facebook, Instagram, WhatsApp, and Meta AI assistant.\n- **Impact of Blocking:** Content may not be accessible to Meta AI. Link previews on Facebook/Instagram are handled by a different crawler and are unaffected.\n- **Recommendation:** **ALLOW** -- Meta AI is embedded in apps with 3B+ combined users. Growing importance for AI visibility.\n\n---\n\n### Tier 3: Training-Only Crawlers (ALLOW or BLOCK Based on Strategy)\n\nThese crawlers are primarily used for AI model training rather than live search features. Blocking them does not affect AI search visibility.\n\n#### CCBot\n- **Operator:** Common Crawl (nonprofit)\n- **User-Agent:** `CCBot`\n- **Full User-Agent String:** `CCBot/2.0 (https://commoncrawl.org/faq/)`\n- **Purpose:** Builds the Common Crawl dataset, which is used as training data by many AI companies (Google, Meta, Stability AI, and others).\n- **Impact of Blocking:** Content will not appear in future Common Crawl datasets. Does NOT affect any live AI search product.\n- **Recommendation:** **CONTEXT-DEPENDENT** -- Allow if you want maximum long-term AI training presence. Block if you want to control training data usage. No impact on search visibility.\n\n#### anthropic-ai\n- **Operator:** Anthropic\n- **User-Agent:** `anthropic-ai`\n- **Purpose:** Used by Anthropic for AI safety research and Claude model training. Separate from ClaudeBot (which powers live features).\n- **Impact of Blocking:** Content will not be used for Claude training. Does NOT affect Claude's live search or web browsing features (controlled by ClaudeBot).\n- **Recommendation:** **CONTEXT-DEPENDENT** -- Similar to CCBot. Allow for training presence, block for training data control. No impact on live AI search.\n\n#### Bytespider\n- **Operator:** ByteDance\n- **User-Agent:** `Bytespider`\n- **Purpose:** Used by ByteDance for various AI products including TikTok's AI features and Doubao (their ChatGPT competitor in China).\n- **Impact of Blocking:** Content will not be used for ByteDance AI products. Minimal impact for Western-market businesses.\n- **Recommendation:** **BLOCK** for most Western businesses (aggressive crawling behavior reported, minimal search visibility benefit). **ALLOW** if targeting Chinese/Asian markets.\n\n#### cohere-ai\n- **Operator:** Cohere\n- **User-Agent:** `cohere-ai`\n- **Purpose:** Used by Cohere for model training. Cohere powers enterprise AI solutions and the Coral chat product.\n- **Impact of Blocking:** Content will not be used for Cohere model training. Minimal direct consumer-facing impact.\n- **Recommendation:** **CONTEXT-DEPENDENT** -- Low priority. Allow or block based on general training data stance.\n\n---\n\n## Recommendation Matrix Summary\n\n| Crawler | Tier | Recommendation | Reason |\n|---|---|---|---|\n| GPTBot | 1 | **ALLOW** | Powers ChatGPT Search (300M+ users) |\n| OAI-SearchBot | 1 | **ALLOW** | Search-only, no training use |\n| ChatGPT-User | 1 | **ALLOW** | User-initiated browsing |\n| ClaudeBot | 1 | **ALLOW** | Claude web search and analysis |\n| PerplexityBot | 1 | **ALLOW** | Best referral traffic AI search |\n| Google-Extended | 2 | **ALLOW** | Gemini features; no search rank impact |\n| GoogleOther | 2 | **ALLOW** | Google AI research |\n| Applebot-Extended | 2 | **ALLOW** | Apple Intelligence (2B+ devices) |\n| Amazonbot | 2 | **ALLOW** | Alexa and Amazon AI |\n| FacebookBot | 2 | **ALLOW** | Meta AI (3B+ app users) |\n| CCBot | 3 | Context | Training data only |\n| anthropic-ai | 3 | Context | Training data only |\n| Bytespider | 3 | **BLOCK** | Aggressive crawler, low benefit |\n| cohere-ai | 3 | Context | Training data only |\n\n### Maximum AI Visibility Configuration (robots.txt)\n\nFor sites wanting maximum AI search visibility:\n\n```\n# AI Crawlers - ALLOWED for AI search visibility\nUser-agent: GPTBot\nAllow: /\n\nUser-agent: OAI-SearchBot\nAllow: /\n\nUser-agent: ChatGPT-User\nAllow: /\n\nUser-agent: ClaudeBot\nAllow: /\n\nUser-agent: anthropic-ai\nAllow: /\n\nUser-agent: PerplexityBot\nAllow: /\n\nUser-agent: Google-Extended\nAllow: /\n\nUser-agent: GoogleOther\nAllow: /\n\nUser-agent: Applebot-Extended\nAllow: /\n\nUser-agent: Amazonbot\nAllow: /\n\nUser-agent: FacebookBot\nAllow: /\n\n# AI Crawlers - BLOCKED (aggressive/low value)\nUser-agent: Bytespider\nDisallow: /\n\nUser-agent: CCBot\nDisallow: /\n```\n\n---\n\n## Analysis Procedure\n\n### Step 1: Fetch and Parse robots.txt\n\n1. Use WebFetch to retrieve `[domain]/robots.txt`.\n2. Parse all User-agent directives and their associated Allow/Disallow rules.\n3. For each AI crawler in the reference list above:\n   - Check if there is a specific User-agent block for that crawler\n   - Check if there is a wildcard (`User-agent: *`) block that would apply\n   - Determine effective access: **Allowed**, **Blocked**, or **Not Mentioned** (inherits wildcard rules)\n4. Note any `Crawl-delay` directives that may slow AI crawler access.\n5. Check for `Sitemap` directives (AI crawlers use these for discovery).\n\n### Step 2: Check Meta Robots Tags\n\n1. For a sample of 5-10 key pages, fetch the HTML and check for:\n   - `<meta name=\"robots\" content=\"noindex\">` -- blocks all bots\n   - `<meta name=\"robots\" content=\"nofollow\">` -- prevents link following\n   - `<meta name=\"robots\" content=\"noai\">` -- emerging tag to block AI use\n   - `<meta name=\"robots\" content=\"noimageai\">` -- blocks AI image training\n   - Bot-specific meta tags: `<meta name=\"GPTBot\" content=\"noindex\">`\n2. Record any page-level overrides of the robots.txt directives.\n\n### Step 3: Check HTTP Headers\n\n1. For the same sample pages, check response headers for:\n   - `X-Robots-Tag: noindex` -- HTTP header equivalent of meta noindex\n   - `X-Robots-Tag: noai` -- HTTP header to block AI use\n   - `X-Robots-Tag: noimageai` -- blocks AI image training\n   - Bot-specific headers: `X-Robots-Tag: GPTBot: noindex`\n2. Note that HTTP headers override meta tags and apply to non-HTML resources too.\n\n### Step 4: Check for AI-Specific Files\n\n1. Check for `/llms.txt` (emerging standard for AI crawler guidance).\n2. Check for `/.well-known/ai-plugin.json` (OpenAI plugin manifest).\n3. Check for `/ai.txt` (proposed standard, similar to ads.txt for AI).\n4. Record presence/absence and quality of each file.\n\n### Step 5: Assess JavaScript Rendering Requirements\n\n1. Check if the site is a Single Page Application (SPA) or heavily JavaScript-rendered.\n2. AI crawlers vary in their JavaScript rendering capabilities:\n   - GPTBot: Limited JS rendering\n   - ClaudeBot: Limited JS rendering\n   - PerplexityBot: Limited JS rendering\n   - Googlebot: Full JS rendering (but Google-Extended inherits this)\n3. If critical content requires JS rendering, flag this as a potential issue.\n4. Check for Server-Side Rendering (SSR) or Static Site Generation (SSG) as mitigations.\n\n### Step 6: Parse Content Signals\n\nUsing the already-fetched robots.txt from Step 1, scan for `Content-Signal:` directives (IETF draft `draft-romm-aipref-contentsignals`).\n\n1. Scan every line for a line starting with `Content-Signal:` (case-insensitive).\n2. If found:\n   - Parse all key=value pairs (split on `,` then on `=`).\n   - Validate keys against the known set: `ai-train`, `search`, `ai-personalization`, `ai-retrieval`.\n   - Validate values: only `yes` and `no` are valid.\n   - Flag any unknown keys or invalid values as a warning — the spec is still an IETF draft.\n   - Record the result as **Pass** and surface parsed values with plain-English meaning.\n3. If absent: record as **Recommendation** — the site has not declared AI usage preferences.\n\nNo additional HTTP request is needed. robots.txt is already fetched in Step 1.\n\n### Step 7: Detect Cloudflare Managed robots.txt\n\nUsing the already-fetched robots.txt from Step 1, check for a block starting with `# BEGIN Cloudflare Managed content` (case-insensitive).\n\n1. If found, Cloudflare is prepending its managed robots.txt to the site's own file. That block disallows GPTBot, ClaudeBot, Google-Extended, Applebot-Extended, Amazonbot, Bytespider, CCBot and meta-externalagent.\n2. Record it as a **Critical Issue** if the site owner's own rules allow AI crawlers. The owner usually doesn't know it's on, because the block never appears in the robots.txt file on their server, only in the live response.\n3. Recommend: in the Cloudflare dashboard, go to Security Settings, filter by \"Bot traffic\", and turn off \"block training in robots.txt\" if the site wants to be used by AI. If blocking training is intentional, note it as a deliberate choice, not an issue.\n\nNo additional HTTP request is needed. `fetch_page.py robots` returns this as `cloudflare_managed: true`.\n\n---\n\n## Output Format\n\nGenerate a file called `GEO-CRAWLER-ACCESS.md`:\n\n```markdown\n# AI Crawler Access Report: [Domain]\n\n**Analysis Date:** [Date]\n**Domain:** [Domain]\n**robots.txt Status:** [Found/Not Found/Error]\n\n---\n\n## Crawler Access Summary\n\n| Crawler | Operator | Tier | Status | Impact |\n|---|---|---|---|---|\n| GPTBot | OpenAI | 1 | [Allowed/Blocked/Not Mentioned] | [Impact description] |\n| OAI-SearchBot | OpenAI | 1 | [Status] | [Impact] |\n| ChatGPT-User | OpenAI | 1 | [Status] | [Impact] |\n| ClaudeBot | Anthropic | 1 | [Status] | [Impact] |\n| PerplexityBot | Perplexity | 1 | [Status] | [Impact] |\n| Google-Extended | Google | 2 | [Status] | [Impact] |\n| GoogleOther | Google | 2 | [Status] | [Impact] |\n| Applebot-Extended | Apple | 2 | [Status] | [Impact] |\n| Amazonbot | Amazon | 2 | [Status] | [Impact] |\n| FacebookBot | Meta | 2 | [Status] | [Impact] |\n| CCBot | Common Crawl | 3 | [Status] | [Impact] |\n| anthropic-ai | Anthropic | 3 | [Status] | [Impact] |\n| Bytespider | ByteDance | 3 | [Status] | [Impact] |\n| cohere-ai | Cohere | 3 | [Status] | [Impact] |\n\n## AI Visibility Score: [X]/100\n\n**Tier 1 Access:** [X/5 crawlers allowed]\n**Tier 2 Access:** [X/5 crawlers allowed]\n**Tier 3 Access:** [X/4 crawlers allowed]\n\n---\n\n## Critical Issues\n\n[List any Tier 1 crawlers that are blocked]\n\n## Recommendations\n\n### Immediate Actions\n[Specific robots.txt changes needed]\n\n### robots.txt Recommendation\n```\n[Complete recommended robots.txt content for AI crawlers]\n```\n\n### Additional Technical Findings\n- **Meta Robots Tags:** [Findings]\n- **X-Robots-Tag Headers:** [Findings]\n- **JavaScript Rendering:** [Assessment]\n- **llms.txt:** [Present/Absent]\n- **Sitemap Accessibility:** [Assessment]\n\n### Content Signals (IETF Draft)\n\n**Status:** Present / Absent\n\n<!-- If present: -->\n| Signal Key | Value | Meaning |\n|---|---|---|\n| ai-train | no | Opted out of AI model training |\n| search | yes | Permits use in AI-powered search results |\n\n<!-- If absent: -->\n**Recommendation:** Add a `Content-Signal:` directive to robots.txt to declare AI usage preferences explicitly. Example:\n\n`Content-Signal: ai-train=no, search=yes, ai-retrieval=yes`\n\nSee https://contentsignals.org/ for the full specification.\n```\n\n---\n\n## Scoring for Crawler Access\n\nThe AI Crawler Access Score is calculated as:\n\n| Component | Weight | Scoring |\n|---|---|---|\n| Tier 1 Crawlers Allowed | 50% | 20 points per Tier 1 crawler allowed (5 crawlers = 100 points max, scaled to 50) |\n| Tier 2 Crawlers Allowed | 25% | 20 points per Tier 2 crawler allowed (5 crawlers = 100 points max, scaled to 25) |\n| No Blanket AI Blocks | 15% | Full points if no `User-agent: *` Disallow: / and no noai meta tags |\n| AI-Specific Files Present | 10% | 5 points for llms.txt, 5 points for sitemap accessible to AI crawlers |\n\nFinal score = sum of all weighted components, capped at 100.\n","skills/geo-llmstxt/SKILL.md":"---\nname: geo-llmstxt\ndescription: Analyzes and generates llms.txt files -- the emerging standard for helping AI systems understand website structure and content. Can validate existing llms.txt files or generate new ones from scratch by crawling the site.\nallowed-tools:\n  - Read\n  - Grep\n  - Glob\n  - Bash\n  - WebFetch\n  - Write\n---\n\n# llms.txt Standard Analysis and Generation Skill\n\n## Purpose\n\nThis skill handles everything related to the `llms.txt` standard -- an emerging convention (proposed by Jeremy Howard in September 2024, gaining adoption through 2025-2026) that allows websites to provide structured guidance to AI systems about their content, structure, and key information. It is analogous to `robots.txt` (which tells crawlers what NOT to access) but instead tells AI systems what IS most useful to understand about the site.\n\n## Why llms.txt Matters\n\nAI language models face a fundamental challenge when processing websites: they must determine which pages are most important, what the site is about, and how content is organized -- typically by crawling many pages and inferring structure. `llms.txt` solves this by providing an explicit, machine-readable (and human-readable) summary.\n\n**Benefits of having a well-crafted llms.txt:**\n\n1. **Faster AI comprehension:** AI systems can understand your site's purpose and structure from a single file rather than crawling dozens of pages.\n2. **Controlled narrative:** You choose which pages and facts AI systems see first, shaping how they represent your brand.\n3. **Higher citation accuracy:** AI systems that consult llms.txt can cite the correct, authoritative page for each topic.\n4. **Reduced misrepresentation:** Key facts (pricing, features, locations) are stated explicitly, reducing AI hallucination about your business.\n5. **Early adopter advantage:** As of early 2026, fewer than 5% of websites have an llms.txt file, making it a differentiator.\n\n---\n\n## The llms.txt Specification\n\n### File Location\n\nThe file MUST be located at the root of the domain:\n```\nhttps://example.com/llms.txt\n```\n\n### Format Specification\n\nThe file uses Markdown formatting with specific conventions:\n\n```markdown\n# [Site Name]\n\n> [One-sentence description of what the site/business does. Keep under 200 characters.]\n\n## Docs\n\n- [Page Title](https://example.com/page-url): Concise description of what this page covers and why it matters.\n- [Another Page](https://example.com/another-page): Description of content.\n\n## Optional\n\n- [Less Critical Page](https://example.com/optional-page): Description.\n```\n\n### Detailed Format Rules\n\n**1. Title (Required)**\n```markdown\n# Site Name\n```\n- Must be the first line of the file.\n- Should be the official business/site name.\n- Use the H1 heading format (single `#`).\n\n**2. Description (Required)**\n```markdown\n> Brief description of the site/business\n```\n- Must appear immediately after the title.\n- Use Markdown blockquote format (`>`).\n- Keep under 200 characters.\n- Should clearly state what the business does and who it serves.\n- Avoid marketing fluff -- be factual and specific.\n\n**3. Main Sections (Required -- at least one)**\n\nUse H2 headings (`##`) to organize pages by category. Common section names:\n\n| Section Name | Purpose | Example Content |\n|---|---|---|\n| `## Docs` | Primary documentation or key pages | Product pages, service descriptions, core content |\n| `## Optional` | Secondary pages worth knowing about | Blog posts, supplementary resources |\n| `## API` | API documentation | API reference, authentication guides |\n| `## Blog` | Blog or news content | Recent/popular articles |\n| `## Products` | Product catalog | Product pages, pricing |\n| `## Services` | Service offerings | Service descriptions, process pages |\n| `## About` | Company information | About page, team, mission |\n| `## Resources` | Educational/reference content | Guides, tutorials, whitepapers |\n| `## Legal` | Legal documents | Terms of service, privacy policy |\n| `## Contact` | Contact information | Contact page, support channels |\n\n**4. Page Entries (Required)**\n\nEach entry follows the format:\n```markdown\n- [Page Title](URL): Description of page content\n```\n\nRules for page entries:\n- **Title:** Use the actual page title or a clear descriptive title.\n- **URL:** Must be a full, absolute URL (not relative paths).\n- **Description:** 10-30 words describing what the page covers. Be specific about the information available.\n- **Order:** List pages in order of importance within each section.\n- **Limit:** Include 10-30 page entries total. Prioritize your most authoritative and useful pages.\n\n**5. Key Facts Section (Recommended)**\n\n```markdown\n## Key Facts\n- Founded in [year] by [founder(s)]\n- Headquarters: [City, Country]\n- [X] customers/users in [Y] countries\n- Key products: [Product A], [Product B], [Product C]\n- Industry: [Industry classification]\n```\n\nThis section provides quick reference data that AI systems frequently need to answer user queries about your business.\n\n**6. Contact Section (Recommended)**\n\n```markdown\n## Contact\n- Website: https://example.com\n- Email: hello@example.com\n- Support: support@example.com\n- Phone: +1-555-123-4567\n- Address: 123 Main St, City, State, ZIP, Country\n```\n\n---\n\n## llms-full.txt (Extended Version)\n\nIn addition to `llms.txt`, sites can provide `/llms-full.txt` -- an extended version with more detail.\n\n**Differences from llms.txt:**\n\n| Feature | llms.txt | llms-full.txt |\n|---|---|---|\n| **Length** | Concise (50-150 lines) | Comprehensive (150-500+ lines) |\n| **Page entries** | 10-30 key pages | 30-100+ pages |\n| **Descriptions** | 10-30 words per entry | 30-100 words per entry, may include key facts from each page |\n| **Audience** | Quick AI comprehension | Deep AI analysis |\n| **Sections** | 3-6 sections | 8-15 sections |\n| **Key facts** | Business-level facts | Page-level facts and data points |\n\nBoth files can coexist. AI systems check for `llms.txt` first, then may optionally load `llms-full.txt` for deeper understanding.\n\n---\n\n## Analysis Mode\n\nWhen checking an existing llms.txt file:\n\n### Step 1: Fetch the File\n\n1. Use WebFetch to retrieve `[domain]/llms.txt`.\n2. Also check for `[domain]/llms-full.txt`.\n3. Record HTTP status code:\n   - **200:** File exists -- proceed to validation.\n   - **404:** File does not exist -- recommend generation.\n   - **403:** File exists but is blocked -- flag as misconfiguration.\n   - **301/302:** Redirect -- follow and note the redirect.\n\n### Step 2: Validate Format\n\nCheck each structural element:\n\n| Element | Check | Severity if Missing |\n|---|---|---|\n| H1 Title | Present, matches business name | Critical |\n| Blockquote description | Present, under 200 chars, factual | High |\n| At least one H2 section | Present | Critical |\n| Page entries with URLs | At least 5 entries present | High |\n| URLs are absolute | All URLs use full https:// paths | High |\n| URLs are valid | All URLs return 200 status | Medium |\n| Descriptions present | Every entry has a description after the colon | Medium |\n| Key Facts section | Present with business information | Medium |\n| Contact section | Present with at least email | Low |\n| Reasonable length | 30-200 lines | Low |\n| No broken Markdown | Proper formatting throughout | Medium |\n\n### Step 3: Assess Content Quality\n\nRate the llms.txt on these dimensions:\n\n**Completeness (0-100):**\n- Does it cover all major site sections visible in the navigation?\n- Are the most important/highest-traffic pages included?\n- Is the Key Facts section present with accurate business data?\n- Does it include recent/updated content?\n\n**Accuracy (0-100):**\n- Do descriptions accurately reflect page content?\n- Are URLs valid and pointing to the correct pages?\n- Are Key Facts verifiable and current?\n- Is the business description accurate?\n\n**Usefulness (0-100):**\n- Would an AI system understand the site's purpose from this file alone?\n- Are descriptions specific enough to differentiate pages?\n- Are the most citation-worthy pages highlighted?\n- Is the organization logical and intuitive?\n\n**Overall llms.txt Score** = (Completeness * 0.40) + (Accuracy * 0.35) + (Usefulness * 0.25)\n\n### Step 4: Compare Against Site Content\n\n1. Crawl the site's main navigation and sitemap.\n2. Identify important pages NOT listed in llms.txt.\n3. Check if any listed URLs are broken or redirected.\n4. Verify that the business description matches current homepage messaging.\n5. Flag stale entries (pages that have been significantly updated since the llms.txt was written).\n\n---\n\n## Generation Mode\n\nWhen creating a new llms.txt file from scratch:\n\n### Step 1: Site Discovery\n\n1. Fetch the homepage and extract:\n   - Site name (from `<title>`, `<meta property=\"og:site_name\">`, or H1)\n   - Business description (from meta description or hero section)\n   - Main navigation links\n   - Footer links\n2. Fetch `/sitemap.xml` to discover all public pages.\n3. Identify the site's primary business type (SaaS, E-commerce, Local, Publisher, Agency).\n\n### Step 2: Page Prioritization\n\nCategorize all discovered pages and select the most important ones:\n\n**Always Include:**\n- Homepage\n- About / Company page\n- Pricing page (if exists)\n- Primary product/service pages (top 3-5)\n- Contact page\n- Documentation landing page (if exists)\n\n**Include if High Quality:**\n- Top blog posts (by apparent importance, recency, or comprehensiveness)\n- Case studies or customer stories\n- Key resource/guide pages\n- FAQ page\n- Careers page (for large companies)\n\n**Skip:**\n- Thin category/tag pages\n- Pagination pages\n- Login/signup pages\n- Legal boilerplate (unless specifically relevant)\n- Duplicate or near-duplicate content\n- Pages with minimal unique content\n\n### Step 3: Write Descriptions\n\nFor each selected page:\n\n1. Fetch the page content using WebFetch.\n2. Read the H1, meta description, and first 2-3 paragraphs.\n3. Write a description that:\n   - Is 10-30 words long\n   - States what information is on the page\n   - Mentions specific topics, data, or features covered\n   - Avoids marketing language (\"best,\" \"leading,\" \"revolutionary\")\n   - Uses factual, informative language\n\n**Good description examples:**\n- `Explains the three pricing tiers (Free, Pro, Enterprise) with feature comparison and annual/monthly costs.`\n- `Details the company's founding in 2018, team of 45 employees, and office locations in Austin and London.`\n- `Covers integration setup for Slack, Salesforce, and HubSpot with step-by-step guides and API endpoints.`\n\n**Bad description examples:**\n- `Our amazing pricing page!` (marketing language, no specifics)\n- `Learn more about our company.` (too vague)\n- `Click here for details.` (not descriptive)\n\n### Step 4: Compile Key Facts\n\nGather key business facts from the site:\n\n- Year founded\n- Founder name(s)\n- Headquarters location\n- Number of employees (if public)\n- Number of customers/users (if public)\n- Key products or services (list top 3-5)\n- Industry classification\n- Notable clients or partnerships (if public)\n- Key differentiators (what makes this business unique)\n- Recent milestones or achievements (last 12 months)\n\n### Step 5: Assemble the File\n\nConstruct the llms.txt following this template:\n\n```markdown\n# [Site Name]\n\n> [One clear sentence: what the business does, who it serves, and its primary value proposition. Under 200 characters.]\n\n## Docs\n\n- [Most Important Page](https://example.com/page): Description covering the key content on this page.\n- [Second Page](https://example.com/page-2): Description of this page's content and value.\n- [Third Page](https://example.com/page-3): What users and AI systems will find here.\n\n## Products\n\n- [Product A](https://example.com/product-a): Core features, target users, and pricing model for Product A.\n- [Product B](https://example.com/product-b): What Product B does and how it differs from Product A.\n\n## Resources\n\n- [Guide Title](https://example.com/guide): Comprehensive guide covering [topic] with [X] sections and practical examples.\n- [Blog Post](https://example.com/blog/post): Analysis of [topic] with original data from [source].\n\n## Key Facts\n\n- Founded in [year] by [name(s)]\n- Headquartered in [City, Country]\n- [Specific metric: e.g., \"Serves 10,000+ businesses in 40 countries\"]\n- [Key differentiator: e.g., \"Only platform offering real-time X and Y integration\"]\n- Industry: [Classification]\n\n## Contact\n\n- Website: https://example.com\n- Email: [primary contact email]\n- Support: [support URL or email]\n```\n\n### Step 6: Validate the Generated File\n\nBefore outputting:\n1. Verify all URLs are reachable (200 status).\n2. Confirm total entry count is between 10-30.\n3. Check that no description exceeds 50 words.\n4. Verify the overall file length is 50-150 lines.\n5. Ensure Markdown formatting is clean and consistent.\n\n---\n\n## Output Format\n\n### For Analysis Mode\n\nGenerate `GEO-LLMSTXT-ANALYSIS.md`:\n\n```markdown\n# llms.txt Analysis: [Domain]\n\n**Analysis Date:** [Date]\n**llms.txt Status:** [Found at URL / Not Found / Error]\n**llms-full.txt Status:** [Found / Not Found]\n\n---\n\n## Overall llms.txt Score: [X]/100\n\n| Dimension | Score |\n|---|---|\n| Completeness | [X]/100 |\n| Accuracy | [X]/100 |\n| Usefulness | [X]/100 |\n\n---\n\n## Format Validation\n\n| Element | Status | Notes |\n|---|---|---|\n| H1 Title | [Pass/Fail] | [Notes] |\n| Description blockquote | [Pass/Fail] | [Notes] |\n| H2 Sections | [Pass/Fail] | [X sections found] |\n| Page entries | [Pass/Fail] | [X entries found] |\n| URL validity | [Pass/Fail] | [X broken URLs] |\n| Entry descriptions | [Pass/Fail] | [X missing descriptions] |\n| Key Facts | [Pass/Fail] | [Notes] |\n| Contact section | [Pass/Fail] | [Notes] |\n\n---\n\n## Missing Pages\n\nThese important pages were found on the site but not in llms.txt:\n\n1. [Page Title](URL) -- [Why it should be included]\n2. [Page Title](URL) -- [Why it should be included]\n\n## Improvement Recommendations\n\n1. [Specific recommendation]\n2. [Specific recommendation]\n3. [Specific recommendation]\n\n## Suggested Updated llms.txt\n\n[Complete rewritten llms.txt file if significant improvements are needed]\n```\n\n### For Generation Mode\n\nOutput the complete `llms.txt` file content, ready to be saved to the site's root directory. Also output a brief `GEO-LLMSTXT-GENERATION.md` report explaining:\n- How many pages were discovered and how many were selected\n- The prioritization rationale\n- Any pages that were borderline (might add later)\n- Recommended update frequency (e.g., monthly for active blogs, quarterly for stable sites)\n\n---\n\n## Best Practices Reference\n\n1. **Update regularly.** If your site publishes weekly blog posts, update llms.txt monthly. If your product changes quarterly, update after each release.\n2. **Lead with your strongest content.** The first entries in each section should be your most authoritative, comprehensive pages.\n3. **Be specific in descriptions.** \"Comprehensive 3,000-word guide to React Server Components with code examples\" is far more useful than \"React guide.\"\n4. **Include your differentiators.** If your site has unique data, original research, or exclusive features, highlight these in descriptions and Key Facts.\n5. **Keep it concise.** The llms.txt should be scannable in under 60 seconds. Save detail for llms-full.txt.\n6. **Use absolute URLs.** Always include the full `https://` URL, never relative paths.\n7. **Test after deployment.** After uploading, verify the file is accessible at `https://yourdomain.com/llms.txt` with no redirects.\n8. **Coordinate with robots.txt.** Ensure pages listed in llms.txt are not blocked in robots.txt for AI crawlers.\n9. **Mirror your site structure.** Section names in llms.txt should roughly correspond to your main navigation categories.\n10. **Avoid sensitive pages.** Do not include internal tools, admin panels, or pages with sensitive information.\n","skills/geo-platform-optimizer/SKILL.md":"---\nname: geo-platform-optimizer\ndescription: Platform-specific AI search optimization — audit and optimize for Google AI Overviews, ChatGPT, Perplexity, Gemini, and Bing Copilot individually\nversion: 1.0.0\nauthor: geo-seo-claude\ntags: [geo, ai-search, platform-optimization, chatgpt, perplexity, gemini, aio]\nallowed-tools: Read, Grep, Glob, Bash, WebFetch, Write\n---\n\n# GEO Platform Optimizer\n\n## Core Insight\n\nOnly **11% of domains** are cited by BOTH ChatGPT and Google AI Overviews for the same query. Each AI search platform uses different indexes, ranking logic, and source preferences. A page optimized for Google AI Overviews may be invisible to ChatGPT, and vice versa. Platform-specific optimization is not optional — it is the foundation of any serious GEO strategy.\n\n## How to Use This Skill\n\n1. Collect the target URL and the site's primary topic/industry\n2. Run each platform checklist below against the site\n3. Score each platform on the 0-100 rubric\n4. Generate GEO-PLATFORM-OPTIMIZATION.md with per-platform scores, gaps, and action items\n\n---\n\n## Platform 1: Google AI Overviews (AIO)\n\n### How AIO Selects Sources\n- 92% of AIO citations come from pages already ranking in the **top 10 organic results** — traditional SEO is the gateway\n- However, 47% of citations come from pages ranking **below position 5** — AIO has its own selection logic favoring clarity and directness over raw rank\n- AIO strongly favors pages with **clean structure, direct answers, and scannable formatting**\n- Featured snippet optimization has ~70% overlap with AIO optimization\n- AIO prefers **concise, factual, unambiguous answers** — hedging and filler reduce citation probability\n\n### Optimization Checklist\n\n1. **Question-Based Headings**: Use H2/H3 headings phrased as questions matching real user queries. Check Google's \"People Also Ask\" for the target topic and mirror those exact phrasings.\n2. **Direct Answer in First Paragraph**: After each question heading, provide a clear 1-2 sentence answer immediately. Then expand with supporting detail. The first sentence should be a standalone citation candidate.\n3. **Tables and Structured Comparisons**: AIO heavily cites tables. Convert any comparison, pricing, specification, or feature data into HTML tables. Use clear column headers.\n4. **Ordered and Unordered Lists**: Step-by-step processes should use ordered lists. Feature lists should use unordered lists. AIO extracts these directly.\n5. **FAQ Sections**: Add a dedicated FAQ section with 5-10 real questions. Use proper H3 headings for each question. While FAQPage schema rich results are restricted to govt/health sites since Aug 2023, the content pattern still helps AIO extraction.\n6. **Definitions and Glossary Boxes**: For any industry-specific term, provide a clear definition. Format: \"**[Term]** is [concise definition].\" AIO frequently cites definitions.\n7. **Statistics with Sources**: Include specific numbers with attribution. \"According to [Source], [statistic].\" AIO prefers citeable, specific claims over vague assertions.\n8. **Publication Date**: Include a visible publication date and last-updated date. AIO deprioritizes undated content for time-sensitive queries.\n9. **Author Byline**: Display author name with credentials. Link to an author page with bio, credentials, and sameAs links.\n10. **Page Depth**: Keep target pages within 3 clicks of homepage. AIO rarely cites deep, orphaned content.\n\n### Scoring Rubric (0-100)\n\n| Criterion | Points | How to Score |\n|---|---|---|\n| Ranks in top 10 for target queries | 20 | 20 if yes, 10 if top 20, 0 if beyond |\n| Question-based headings present | 10 | 2 points per question heading, max 10 |\n| Direct answers after headings | 15 | 3 points per direct answer, max 15 |\n| Tables present for comparison data | 10 | 10 if tables used appropriately, 5 if partial, 0 if absent |\n| Lists for processes/features | 10 | 10 if present, 5 if partial |\n| FAQ section with 5+ questions | 10 | 10 if 5+, 5 if 1-4, 0 if none |\n| Statistics with citations | 10 | 2 points per cited stat, max 10 |\n| Publication/updated date visible | 5 | 5 if both dates, 3 if one, 0 if none |\n| Author byline with credentials | 5 | 5 if full byline, 3 if name only, 0 if none |\n| Clean URL + heading hierarchy | 5 | 5 if H1>H2>H3 clean, 3 if minor issues, 0 if broken |\n\n---\n\n## Platform 2: ChatGPT Web Search\n\n### How ChatGPT Selects Sources\n- Uses **Bing's search index** as its foundation (not Google)\n- Top citation sources by domain share: **Wikipedia (47.9%)**, Reddit (11.3%), YouTube, major news outlets\n- ChatGPT heavily weights **entity recognition** — if your brand exists as a structured entity (Wikipedia, Wikidata, Crunchbase), it is far more likely to be cited\n- Prefers **authoritative, well-established sources** over new or niche sites\n- Longer, more comprehensive articles get cited more often than short pieces\n- ChatGPT tends to cite **the most canonical source** for a claim rather than the original\n\n### Optimization Checklist\n\n1. **Wikipedia Presence**: Check if the brand/person/product has a Wikipedia article. If not, assess notability criteria. If notable, create a draft. If an article exists, ensure it is accurate and current.\n2. **Wikidata Entity**: Verify the entity exists on Wikidata (wikidata.org). If not, create a Wikidata item with key properties: instance of, official website, social media links, founding date, headquarters location.\n3. **Bing Webmaster Tools**: Verify the site is registered in Bing Webmaster Tools. Submit sitemap. Check for crawl errors.\n4. **Bing Index Coverage**: Use `site:domain.com` on Bing to verify key pages are indexed. Bing may have different indexed pages than Google.\n5. **Reddit Authority**: Check for brand mentions on Reddit. Identify relevant subreddits. Assess whether the brand participates authentically in discussions.\n6. **YouTube Presence**: Verify YouTube channel exists with relevant content. Video descriptions should contain full URLs and entity information.\n7. **Authoritative Backlinks**: ChatGPT/Bing weight .edu, .gov, and major publication backlinks heavily. Audit backlink profile for these sources.\n8. **Entity Consistency**: Brand name, founding date, leadership, and key facts must be consistent across Wikipedia, Crunchbase, LinkedIn, and the official website.\n9. **Comprehensive Content**: Pages targeting ChatGPT citation should be **2000+ words** with thorough topic coverage. ChatGPT prefers single authoritative sources over combining multiple thin pages.\n10. **Clear Attribution**: Include \"About\" sections, company descriptions, and founding stories. ChatGPT uses these for entity grounding.\n\n### Scoring Rubric (0-100)\n\n| Criterion | Points | How to Score |\n|---|---|---|\n| Wikipedia article exists and is accurate | 20 | 20 if exists, 10 if stub, 0 if none |\n| Wikidata entity with 5+ properties | 10 | 10 if complete, 5 if basic, 0 if none |\n| Bing index coverage of key pages | 10 | 10 if full, 5 if partial, 0 if poor |\n| Reddit brand mentions (positive) | 10 | 10 if active discussions, 5 if mentions, 0 if none |\n| YouTube channel with relevant content | 10 | 10 if active, 5 if present but sparse, 0 if none |\n| Authoritative backlinks (.edu, .gov, press) | 15 | 3 points per authoritative backlink category, max 15 |\n| Entity consistency across platforms | 10 | 10 if consistent, 5 if minor discrepancies, 0 if major |\n| Content comprehensiveness (2000+ words) | 10 | 10 if thorough, 5 if adequate, 0 if thin |\n| Bing Webmaster Tools configured | 5 | 5 if verified, 0 if not |\n\n---\n\n## Platform 3: Perplexity AI\n\n### How Perplexity Selects Sources\n- Top citation sources: **Reddit (46.7%)**, Wikipedia, YouTube, major publications\n- Perplexity places the **heaviest emphasis on community validation** of all AI search platforms\n- Strongly favors **discussion threads** where claims are debated, validated, or expanded by multiple participants\n- Prefers recent content — publication date is a strong ranking signal\n- Cites **multiple sources per answer** (typically 5-15), so there is more opportunity for mid-authority sites to appear\n- Uses its own crawling infrastructure in addition to search APIs\n\n### Optimization Checklist\n\n1. **Active Reddit Presence**: The brand or its representatives should participate authentically in relevant subreddit discussions. Not promotional — helpful, specific, and community-oriented.\n2. **Reddit AMAs and Threads**: Encourage or participate in AMAs, detailed discussion threads, and community Q&As. Perplexity treats these as high-signal content.\n3. **Forum and Community Presence**: Beyond Reddit, check Hacker News, Stack Overflow, Quora, and niche industry forums. Perplexity indexes these heavily.\n4. **Discussion-Friendly Content**: Publish content that invites discussion — opinion pieces, research findings, contrarian takes, original data. Content that gets shared and debated in communities ranks higher.\n5. **Freshness Signals**: Publish content with clear dates. Update content regularly. Perplexity deprioritizes stale content more aggressively than other platforms.\n6. **Multiple Source Validation**: Claims in your content should be supported by other sources. Perplexity cross-references and prefers claims it can verify from multiple origins.\n7. **YouTube Video Content**: Create video content that Perplexity can reference. Ensure video titles, descriptions, and transcripts contain target information.\n8. **Direct, Quotable Passages**: Write paragraphs that can stand alone as citations. Each paragraph should make one clear point with supporting evidence.\n9. **Original Data and Research**: Publish original surveys, benchmarks, case studies, or datasets. Perplexity heavily favors primary sources.\n10. **Perplexity Pages**: Check if Perplexity has created a \"Page\" about your topic/brand. These are curated summaries that influence future citations.\n\n### Scoring Rubric (0-100)\n\n| Criterion | Points | How to Score |\n|---|---|---|\n| Active Reddit presence in relevant subreddits | 20 | 20 if active contributor, 10 if mentioned, 0 if absent |\n| Forum/community mentions (HN, SO, Quora) | 10 | 10 if multiple platforms, 5 if one, 0 if none |\n| Content freshness (updated within 6 months) | 10 | 10 if recent, 5 if within year, 0 if older |\n| Original research/data published | 15 | 15 if original research, 10 if case studies, 5 if some data, 0 if none |\n| YouTube content with transcripts | 10 | 10 if active channel, 5 if some videos, 0 if none |\n| Quotable, standalone paragraphs | 10 | 2 points per well-structured quotable paragraph, max 10 |\n| Multi-source claim validation | 10 | 10 if claims well-sourced, 5 if some sourcing, 0 if none |\n| Discussion-generating content | 10 | 10 if content gets shared/discussed, 5 if some engagement, 0 if none |\n| Wikipedia/Wikidata presence | 5 | 5 if present, 0 if absent |\n\n---\n\n## Platform 4: Google Gemini\n\n### How Gemini Selects Sources\n- Uses **Google's search index** plus strong weighting toward **Google-owned properties**\n- YouTube content is weighted significantly more heavily than in standard Google Search\n- Google Business Profile data is directly accessible to Gemini\n- Gemini uses Google's Knowledge Graph directly — entity presence in Knowledge Graph is a major advantage\n- Structured data (Schema.org) is consumed directly by Gemini for entity understanding\n- Gemini multi-modal: can reference images, videos, and text together\n\n### Optimization Checklist\n\n1. **Google Knowledge Panel**: Check if the brand has a Google Knowledge Panel. If not, claim it through Google Business Profile or structured data. Ensure all information is accurate.\n2. **Google Business Profile**: Complete and optimize GBP with all fields: hours, services, photos, posts, Q&A. Gemini pulls directly from GBP for local queries.\n3. **YouTube Strategy**: Create YouTube content for every key topic. Optimize titles, descriptions, timestamps, and closed captions. Gemini cites YouTube more than any other AI platform.\n4. **YouTube Chapters and Timestamps**: Use chapters (timestamps in description) so Gemini can reference specific segments of videos.\n5. **Google Merchant Center**: For e-commerce, ensure products are in Google Merchant Center. Gemini references product data directly.\n6. **Structured Data (Schema.org)**: Implement comprehensive Schema.org markup. Gemini uses this for entity understanding more aggressively than other platforms.\n7. **Google Sites Ecosystem**: Ensure presence across Google ecosystem: Google Scholar (for research), Google News (for publishers), Google Maps (for local).\n8. **Image Optimization**: Gemini is multi-modal. Use descriptive alt text, structured image filenames, and high-quality images. Include relevant images with every piece of content.\n9. **Google E-E-A-T Signals**: All standard Google E-E-A-T signals apply with extra weight. Author pages, about pages, editorial policies, and expertise demonstrations.\n10. **Chrome Web Store / Google Workspace Marketplace**: For software companies, presence on Google platforms adds entity signals.\n\n### Scoring Rubric (0-100)\n\n| Criterion | Points | How to Score |\n|---|---|---|\n| Google Knowledge Panel exists | 15 | 15 if complete, 10 if partial, 0 if none |\n| Google Business Profile complete | 10 | 10 if fully optimized, 5 if basic, 0 if none |\n| YouTube channel with topic-relevant content | 20 | 20 if active with chapters, 10 if present, 0 if none |\n| Schema.org structured data implemented | 15 | 15 if comprehensive, 10 if basic, 5 if minimal, 0 if none |\n| Google ecosystem presence (Scholar, News, Maps) | 10 | 10 if 3+, 5 if 1-2, 0 if none |\n| Image optimization (alt text, filenames) | 10 | 10 if all images optimized, 5 if partial, 0 if none |\n| E-E-A-T signals (author pages, about, editorial) | 10 | 10 if strong, 5 if partial, 0 if weak |\n| Google Merchant Center (if e-commerce) | 5 | 5 if applicable and active, N/A otherwise |\n| Multi-modal content (text + images + video) | 5 | 5 if rich multi-modal, 3 if some, 0 if text-only |\n\n---\n\n## Platform 5: Bing Copilot\n\n### How Copilot Selects Sources\n- Uses **Bing's search index** (shared infrastructure with ChatGPT but different ranking/selection)\n- Supports **IndexNow protocol** for near-instant indexing of new and updated content\n- Copilot tends to cite **fewer sources per answer** (typically 3-5) but gives more prominent attribution\n- Microsoft ecosystem integration: LinkedIn, GitHub, Microsoft Learn content is weighted\n- Copilot prefers pages with clear, structured markup and fast load times\n\n### Optimization Checklist\n\n1. **Bing Webmaster Tools**: Register and verify site. Submit XML sitemap. Review and fix any crawl issues.\n2. **IndexNow Implementation**: Implement the IndexNow protocol to notify Bing of content changes in real-time. Submit a key file at `/.well-known/indexnow-key.txt` and ping the IndexNow API on content publish/update.\n3. **LinkedIn Company Page**: Ensure the company LinkedIn page is complete with accurate description, employee connections, and regular posts. Copilot indexes LinkedIn content.\n4. **GitHub Presence**: For tech companies, maintain an active GitHub presence. Copilot references GitHub repos, documentation, and README files.\n5. **Microsoft Learn / Documentation**: If relevant, contribute to Microsoft Learn or ensure documentation is compatible with Microsoft's documentation standards.\n6. **Bing Places for Business**: Equivalent to Google Business Profile. Complete all fields for local search visibility in Copilot.\n7. **Clear Meta Descriptions**: Bing/Copilot weights meta descriptions more heavily than Google does. Write compelling, keyword-rich meta descriptions for every page.\n8. **Social Signals**: Bing has historically weighted social signals (shares, likes, engagement) more than Google. Maintain active social media presence.\n9. **Exact-Match Keywords**: Bing's algorithm is more literal about keyword matching than Google. Include exact target phrases in titles, headings, and body content.\n10. **Fast Page Load**: Copilot deprioritizes slow pages. Target sub-2-second load time. Optimize images, enable compression, minimize render-blocking resources.\n\n### Scoring Rubric (0-100)\n\n| Criterion | Points | How to Score |\n|---|---|---|\n| Bing Webmaster Tools verified + sitemap | 15 | 15 if verified, 5 if partial, 0 if not |\n| IndexNow protocol implemented | 15 | 15 if active, 0 if not |\n| Bing index coverage of key pages | 10 | 10 if full, 5 if partial, 0 if poor |\n| LinkedIn company page (complete) | 10 | 10 if complete, 5 if basic, 0 if none |\n| GitHub presence (if applicable) | 5 | 5 if active, N/A if not applicable |\n| Meta descriptions optimized | 10 | 10 if all key pages, 5 if partial, 0 if missing |\n| Social media engagement signals | 10 | 10 if active engagement, 5 if present, 0 if none |\n| Exact-match keywords in titles/headings | 10 | 10 if well-optimized, 5 if partial, 0 if not |\n| Page load speed < 2 seconds | 10 | 10 if < 2s, 5 if < 4s, 0 if > 4s |\n| Bing Places configured (if local) | 5 | 5 if complete, N/A if not local |\n\n---\n\n## Cross-Platform Summary\n\n### Universal Optimization Actions (help ALL platforms)\n1. Wikipedia/Wikidata entity presence\n2. YouTube channel with relevant content\n3. Comprehensive, well-structured content with clear headings\n4. Schema.org structured data (especially Organization + sameAs)\n5. Fast page load and clean HTML\n6. Author pages with credentials and sameAs links\n7. Regular content updates with visible dates\n\n### Platform-Specific Priorities\n| Priority | Google AIO | ChatGPT | Perplexity | Gemini | Copilot |\n|---|---|---|---|---|---|\n| #1 | Top-10 ranking | Wikipedia | Reddit presence | YouTube | IndexNow |\n| #2 | Q&A structure | Entity graph | Original research | Knowledge Panel | Bing WMT |\n| #3 | Tables/lists | Bing SEO | Freshness | Schema.org | LinkedIn |\n| #4 | Featured snippets | Reddit | Community forums | GBP | Meta descriptions |\n\n---\n\n## Output Format\n\nGenerate **GEO-PLATFORM-OPTIMIZATION.md** with the following structure:\n\n```markdown\n# GEO Platform Optimization Report — [Domain]\nDate: [Date]\n\n## Overall Platform Readiness\n- Combined GEO Score: XX/100 (average of all platform scores)\n\n## Platform Scores\n| Platform | Score | Status |\n|---|---|---|\n| Google AI Overviews | XX/100 | [Strong/Moderate/Weak] |\n| ChatGPT Web Search | XX/100 | [Strong/Moderate/Weak] |\n| Perplexity AI | XX/100 | [Strong/Moderate/Weak] |\n| Google Gemini | XX/100 | [Strong/Moderate/Weak] |\n| Bing Copilot | XX/100 | [Strong/Moderate/Weak] |\n\nStatus thresholds: Strong = 70+, Moderate = 40-69, Weak = 0-39\n\n## Platform Details\n[Per-platform breakdown with score, gaps found, specific actions]\n\n## Prioritized Action Plan\n### Quick Wins (this week)\n[Actions that improve multiple platform scores with minimal effort]\n\n### Medium-Term (this month)\n[Actions requiring content creation or technical changes]\n\n### Strategic (this quarter)\n[Actions requiring entity building, community development, or platform presence]\n```\n","skills/geo-proposal/SKILL.md":"---\nname: geo-proposal\ndescription: >\n  Auto-generate a professional, client-ready GEO service proposal from audit data.\n  Creates a full proposal in markdown and PDF including executive summary, findings,\n  recommended service packages (Basic/Standard/Premium), pricing, timeline, and terms.\n  Use when user says \"proposal\", \"proposta\", \"offerta\", \"preventivo\", \"generate proposal\",\n  or after completing a GEO audit for a prospect.\nversion: 1.0.0\ntags: [geo, business, proposal, sales, pricing, client]\nallowed-tools: Read, Write, Bash, Glob, WebFetch\n---\n\n# GEO Proposal Generator\n\n## Purpose\n\nGenerate a fully customized, client-ready GEO service proposal that:\n1. Pulls findings directly from the prospect's GEO audit\n2. Translates technical gaps into business pain points\n3. Presents 3 service tiers with clear pricing\n4. Includes a realistic ROI projection\n5. Outputs a professional markdown document ready to send\n\n---\n\n## Command\n\n```\n/geo proposal <domain-or-audit-file> [--tier basic|standard|premium] [--client-name \"Name\"] [--monthly EUR]\n```\n\n**Examples:**\n```\n/geo proposal electron-srl.com\n/geo proposal electron-srl.com --tier standard --client-name \"Electron Srl\"\n/geo proposal ~/.geo-prospects/audits/electron-srl.com-2026-03-12.md\n```\n\n---\n\n## Workflow\n\n### Step 1: Load Audit Data\n\n1. Check if `~/.geo-prospects/audits/<domain>*.md` exists\n2. If not, suggest running `/geo quick <domain>` first\n3. Extract from audit:\n   - GEO Score (overall and per-category)\n   - Top 3 critical findings\n   - Quick wins list\n   - Business type\n   - Estimated organic traffic impact\n\n### Step 2: Customize the Proposal\n\nAuto-fill proposal template with:\n- Company name (from domain or prospect record)\n- GEO score and tier label\n- 3 most critical pain points (translated to business language)\n- Estimated revenue at risk from AI search shift\n- Recommended service tier based on score:\n  - Score 0-40 → Recommend Premium (critical issues need full attention)\n  - Score 41-60 → Recommend Standard (significant gaps, needs monthly work)\n  - Score 61-75 → Recommend Basic (solid base, needs monitoring)\n\n### Step 3: Generate Proposal File\n\nOutput to `~/.geo-prospects/proposals/<domain>-proposal-<date>.md`\nAlso update prospect record if it exists in `~/.geo-prospects/prospects.json`\n\n---\n\n## Proposal Template\n\nGenerate the following document, filling all `[PLACEHOLDERS]` with real audit data:\n\n---\n\n```markdown\n# GEO Optimization Proposal\n## [COMPANY NAME] — AI Search Visibility\n\n**Prepared by:** [YOUR AGENCY NAME]\n**Prepared for:** [CONTACT NAME], [COMPANY NAME]\n**Date:** [DATE]\n**Valid until:** [DATE + 30 DAYS]\n**Reference:** GEO-PROP-[YYMMDD]-[DOMAIN]\n\n---\n\n## Executive Summary\n\n[COMPANY NAME] operates in [INDUSTRY] and serves customers across [GEOGRAPHY].\nOur GEO audit of [DOMAIN], conducted on [DATE], reveals a GEO Readiness Score\nof **[SCORE]/100 ([TIER LABEL])**.\n\nThis means your website currently has [TIER DESCRIPTION — use score interpretation table].\nAs AI-powered search (ChatGPT, Google AI Overviews, Perplexity) now influences\n**[X]% of online discovery** and is growing at 527% year-over-year, this gap\nrepresents a measurable risk to your pipeline.\n\nThe three most urgent issues are:\n1. **[CRITICAL FINDING 1]** — [Business impact in one sentence]\n2. **[CRITICAL FINDING 2]** — [Business impact in one sentence]\n3. **[CRITICAL FINDING 3]** — [Business impact in one sentence]\n\nWe recommend the **[TIER NAME] package** at **€[PRICE]/month**, which addresses\nall critical issues within 90 days and positions [COMPANY] as an AI-visible\nauthority in [INDUSTRY].\n\n---\n\n## The Opportunity: Why GEO Matters for [COMPANY NAME]\n\n### The AI Search Shift Is Already Happening\n\n| Metric | Value |\n|--------|-------|\n| AI-referred traffic growth (2025) | +527% YoY |\n| AI traffic conversion vs. organic | 4.4x higher |\n| ChatGPT weekly active users | 900M+ |\n| Google AI Overviews monthly reach | 1.5B users, 200+ countries |\n| Gartner: traditional search traffic drop by 2028 | -50% |\n| Marketers investing in GEO today | Only 23% |\n\n**First-mover advantage is real.** Companies that invest in GEO now will\ncapture the AI search channel before competitors do.\n\n### Your Current Position\n\n| Metric | [COMPANY] | Industry Average | Top Performers |\n|--------|-----------|------------------|----------------|\n| GEO Score | [SCORE]/100 | 45/100 | 75+/100 |\n| AI Crawlers Allowed | [X]/14 | 8/14 | 14/14 |\n| Brand Mentions (AI platforms) | [STATUS] | Moderate | High |\n| Schema Coverage | [STATUS] | Partial | Complete |\n| llms.txt | [Yes/No] | 12% have it | 78% have it |\n\n---\n\n## Audit Findings Summary\n\n### GEO Score Breakdown\n\n| Category | Your Score | Weight | Weighted | Priority |\n|----------|-----------|--------|---------|----------|\n| AI Citability & Visibility | [SCORE]/100 | 25% | [WEIGHTED] | [HIGH/MED/LOW] |\n| Brand Authority Signals | [SCORE]/100 | 20% | [WEIGHTED] | [HIGH/MED/LOW] |\n| Content Quality & E-E-A-T | [SCORE]/100 | 20% | [WEIGHTED] | [HIGH/MED/LOW] |\n| Technical Foundations | [SCORE]/100 | 15% | [WEIGHTED] | [HIGH/MED/LOW] |\n| Structured Data | [SCORE]/100 | 10% | [WEIGHTED] | [HIGH/MED/LOW] |\n| Platform Optimization | [SCORE]/100 | 10% | [WEIGHTED] | [HIGH/MED/LOW] |\n| **TOTAL GEO SCORE** | | | **[SCORE]/100** | **[TIER]** |\n\n### Critical Issues Found\n\n[For each critical issue from audit:]\n\n#### 🔴 [ISSUE TITLE]\n**What we found:** [Technical finding in plain language]\n**Business impact:** [What this means for their revenue/visibility]\n**Our fix:** [What we will do to resolve it]\n**Timeline:** [When they will see improvement]\n\n---\n\n## Our Solution: Service Packages\n\nWe offer three engagement models based on the scope of optimization needed.\n\n---\n\n### BASIC — €2,500/month\n*Best for: Sites with score 61-75 needing targeted improvements*\n\n**What's included:**\n- Quarterly full GEO audit (4x/year)\n- Quarterly client report with score tracking\n- Schema.org implementation (Organization + key page schemas)\n- AI crawler access optimization (robots.txt)\n- llms.txt creation and maintenance\n- Email support (48-hour response)\n\n**Estimated GEO score improvement:** +10-20 points in 6 months\n**Contract:** Minimum 6 months\n\n---\n\n### STANDARD — €5,000/month ⭐ Recommended for [COMPANY]\n*Best for: Sites with score 40-60 needing structured monthly work*\n\n**Everything in Basic, plus:**\n- Monthly full GEO audit + delta report\n- Monthly strategy call (60 minutes)\n- Content citability optimization (up to 10 pages/month)\n- Brand authority building (Wikipedia, Wikidata, LinkedIn optimization)\n- Platform-specific optimization (Google AIO, ChatGPT, Perplexity)\n- E-E-A-T improvements (author pages, credentials, freshness signals)\n- Slack channel for fast communication (24-hour response)\n\n**Estimated GEO score improvement:** +25-40 points in 6 months\n**Contract:** Minimum 6 months\n\n---\n\n### PREMIUM — €9,500/month\n*Best for: Sites with score 0-40 with critical issues, or competitive industries*\n\n**Everything in Standard, plus:**\n- Bi-weekly strategy calls\n- Technical SEO implementation support (Core Web Vitals, SSR, speed)\n- Full content strategy + production (4 optimized articles/month)\n- Active brand building (Reddit, YouTube, industry citations)\n- Competitor monitoring and response\n- Dedicated account manager\n- Priority support (4-hour response)\n\n**Estimated GEO score improvement:** +40-60 points in 6 months\n**Contract:** Minimum 12 months\n\n---\n\n## ROI Projection for [COMPANY NAME]\n\nBased on your current GEO score of [SCORE]/100 and industry benchmarks:\n\n| Scenario | 6-Month Score | AI Traffic Increase | Est. Additional Value/Month |\n|----------|--------------|--------------------|-----------------------------|\n| No action | [SCORE + 2]/100 | +5% (organic growth) | €[LOW] |\n| Basic package | [SCORE + 15]/100 | +30-40% | €[MED] |\n| Standard package | [SCORE + 32]/100 | +60-90% | €[HIGH] |\n| Premium package | [SCORE + 50]/100 | +100-150% | €[VERY HIGH] |\n\n**Assumptions:**\n- Based on estimated [X] monthly organic visitors to [DOMAIN]\n- AI search is projected to drive 25-40% of organic discovery by end of 2026\n- AI-referred traffic converts at 4.4x the rate of regular organic traffic\n- Calculations use conservative estimates — actual results may vary\n\n**Payback period (Standard package):** [X] months based on current traffic\n\n---\n\n## Engagement Timeline\n\n### Month 1 — Foundation\n- Kick-off call and onboarding (Week 1)\n- Full technical audit + baseline metrics capture\n- Quick wins implementation: robots.txt, schema, llms.txt, meta descriptions\n- Expected score improvement: +5-10 points\n\n### Month 2-3 — Optimization\n- Content citability rewrites (top 10 pages)\n- E-E-A-T improvements: author pages, credentials, dates\n- Platform-specific optimization (Google AIO, ChatGPT, Perplexity)\n- Brand presence: LinkedIn, Wikipedia/Wikidata groundwork\n- Expected score improvement: +15-25 points cumulative\n\n### Month 4-6 — Authority Building\n- Brand mention campaigns (Reddit, industry sites, YouTube)\n- Topical authority content strategy\n- Monthly reports showing score improvements\n- Expected score improvement: +30-45 points cumulative\n\n### Month 6 — Review\n- Full re-audit with before/after comparison\n- ROI report\n- Renewal discussion\n\n---\n\n## Why Us\n\n- **GEO specialists**: We focus exclusively on AI search optimization, not traditional SEO agencies adapting to GEO\n- **Transparent reporting**: Monthly reports show exactly what changed and why\n- **No lock-in beyond minimum**: Month-to-month after initial commitment\n- **Proven methodology**: 11-dimension GEO audit covering all major AI platforms\n- **Fast results**: Quick wins visible within 30 days\n\n---\n\n## Investment Summary\n\n| Package | Monthly | 6-Month | 12-Month |\n|---------|---------|---------|----------|\n| Basic | €2,500 | €15,000 | €30,000 |\n| Standard | €5,000 | €30,000 | €60,000 |\n| Premium | €9,500 | €57,000 | €114,000 |\n\n*All prices exclude VAT. Payment terms: monthly, due within 15 days of invoice.*\n\n---\n\n## Next Steps\n\nTo move forward:\n\n1. **Review this proposal** and share any questions\n2. **Schedule a 30-minute call** to walk through findings together: [CALENDAR LINK]\n3. **Sign the service agreement** (sent separately upon acceptance)\n4. **Kick-off call** scheduled for your chosen start date\n\nThis proposal is valid for **30 days** from the date above.\n\n---\n\n## Terms & Conditions\n\n- **Minimum commitment:** As stated per package above\n- **Cancellation:** 30-day written notice after minimum term\n- **Confidentiality:** All audit findings and client data are strictly confidential\n- **Results:** We guarantee effort and methodology, not specific ranking outcomes\n- **Reporting:** Monthly reports delivered by the 5th of each month\n- **Access needed:** Read access to Google Analytics / Search Console (if available)\n\n---\n\n*This proposal was prepared using GEO-SEO analysis tools and reflects findings\nfrom the audit of [DOMAIN] conducted on [DATE]. All scores and recommendations\nare based on current industry best practices for Generative Engine Optimization.*\n```\n\n---\n\n## Output\n\n1. Save proposal to `~/.geo-prospects/proposals/<domain>-proposal-<date>.md`\n2. Update prospect record: set `status` to `proposal`, save `proposal_file` path\n3. Print confirmation:\n   ```\n   ✓ Proposal generated: ~/.geo-prospects/proposals/electron-srl.com-proposal-2026-03-12.md\n   ✓ Prospect status updated: Qualified → Proposal\n   ✓ Recommended package: STANDARD (€5,000/month) — Score 32/100\n\n   Next: Share the proposal file or run `/geo report-pdf` for a visual version.\n   ```\n\n## Pricing Recommendation Logic\n\nBase recommendation on GEO score:\n- Score 0-40 → Recommend **Premium** (critical issues require intensive work)\n- Score 41-60 → Recommend **Standard** (structured monthly optimization)\n- Score 61-75 → Recommend **Basic** (maintenance + targeted improvements)\n- Score 76+ → Offer **Basic** or quarterly retainer check-in\n","skills/geo-prospect/SKILL.md":"---\nname: geo-prospect\ndescription: >\n  CRM-lite for managing GEO agency prospects and clients. Track leads through\n  the full sales pipeline: Lead → Qualified → Proposal Sent → Won → Lost.\n  Store audit history, notes, deal values, and generate pipeline summaries.\n  Use when user says \"prospect\", \"lead\", \"client\", \"pipeline\", \"crm\", \"nuovo prospect\",\n  \"aggiungi cliente\", or when managing the business side of GEO services.\nversion: 1.0.0\ntags: [geo, business, crm, prospect, pipeline, sales]\nallowed-tools: Read, Write, Bash, Glob\n---\n\n# GEO Prospect Manager\n\n## Purpose\n\nManage GEO agency prospects and clients through the full sales lifecycle.\nAll data is stored in `~/.geo-prospects/prospects.json` (persistent across sessions).\n\n---\n\n## Commands\n\n| Command | What It Does |\n|---------|-------------|\n| `/geo prospect new <domain>` | Create new prospect (interactive prompts) |\n| `/geo prospect list` | Show all prospects with pipeline status |\n| `/geo prospect list <status>` | Filter: lead, qualified, proposal, won, lost |\n| `/geo prospect show <id-or-domain>` | Full prospect detail with history |\n| `/geo prospect audit <id-or-domain>` | Run quick GEO audit and save to prospect record |\n| `/geo prospect note <id-or-domain> \"<text>\"` | Add interaction note with timestamp |\n| `/geo prospect status <id-or-domain> <new-status>` | Move through pipeline |\n| `/geo prospect won <id-or-domain> <monthly-value>` | Mark as won, set contract value |\n| `/geo prospect lost <id-or-domain> \"<reason>\"` | Mark as lost with reason |\n| `/geo prospect pipeline` | Visual pipeline summary with revenue forecast |\n\n---\n\n## Data Structure\n\nEach prospect is stored as a JSON record:\n\n```json\n{\n  \"id\": \"PRO-001\",\n  \"company\": \"Electron Srl\",\n  \"domain\": \"electron-srl.com\",\n  \"contact_email\": \"info@electron-srl.com\",\n  \"contact_name\": \"\",\n  \"industry\": \"Educational Equipment Manufacturing\",\n  \"country\": \"Italy\",\n  \"status\": \"qualified\",\n  \"geo_score\": 32,\n  \"audit_date\": \"2026-03-12\",\n  \"audit_file\": \"~/.geo-prospects/audits/electron-srl.com-2026-03-12.md\",\n  \"proposal_file\": \"~/.geo-prospects/proposals/electron-srl.com-proposal.md\",\n  \"monthly_value\": 0,\n  \"contract_start\": null,\n  \"contract_months\": 0,\n  \"notes\": [\n    {\n      \"date\": \"2026-03-12\",\n      \"text\": \"Initial GEO quick scan. Score 32/100 - Critical tier. Strong candidate for GEO services.\"\n    }\n  ],\n  \"created_at\": \"2026-03-12\",\n  \"updated_at\": \"2026-03-12\"\n}\n```\n\n---\n\n## Orchestration Instructions\n\n### `/geo prospect new <domain>`\n\n1. Check if `~/.geo-prospects/prospects.json` exists, create if not (empty array)\n2. Auto-detect company name from domain (e.g., `electron-srl.com` → `Electron Srl`)\n3. Assign next sequential ID: `PRO-001`, `PRO-002`, etc.\n4. Ask user for:\n   - Contact name (optional)\n   - Contact email\n   - Monthly contract value estimate (optional)\n5. Set status to `lead`\n6. Save to JSON file\n7. Suggest next step: \"Run `/geo prospect audit electron-srl.com` to score this prospect\"\n\n### `/geo prospect list`\n\nRead `~/.geo-prospects/prospects.json` and render a summary table:\n\n```\nGEO Prospect Pipeline — March 2026\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\nID       Domain                  Company           Status      Score  Value\n───────  ──────────────────────  ────────────────  ──────────  ─────  ──────\nPRO-001  electron-srl.com        Electron Srl      Qualified   32/100  €4.5K\nPRO-002  acme.com                ACME Corp         Lead        —       —\nPRO-003  bigshop.it              BigShop           Won         41/100  €6.0K\n\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\nPipeline: 1 lead | 1 qualified | 0 proposals | 1 won | 0 lost\nCommitted MRR: €6,000 | Pipeline Value: €4,500\n```\n\n### `/geo prospect audit <id-or-domain>`\n\n1. Run `/geo quick <domain>` to get GEO snapshot score\n2. Save score to prospect record: `geo_score`, `audit_date`\n3. Save audit output to `~/.geo-prospects/audits/<domain>-<date>.md`\n4. Update `audit_file` path in prospect record\n5. Add auto-note: \"Quick audit run. GEO Score: XX/100.\"\n6. If score < 55: suggest \"Score indicates strong sales opportunity. Run `/geo proposal <domain>` to generate proposal.\"\n\n### `/geo prospect note <id-or-domain> \"<text>\"`\n\n1. Find prospect by ID or domain\n2. Append note with current ISO date\n3. Save back to JSON\n4. Confirm: \"Note added to Electron Srl (PRO-001)\"\n\n### `/geo prospect status <id-or-domain> <status>`\n\nValid statuses: `lead`, `qualified`, `proposal`, `won`, `lost`\n\n1. Update status field\n2. Add auto-note: \"Status changed to <status>\"\n3. Save and confirm\n\n### `/geo prospect pipeline`\n\nVisual revenue-focused pipeline summary:\n\n```\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\nGEO AGENCY PIPELINE SUMMARY — March 2026\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\nSTAGE          COUNT   POTENTIAL VALUE   NOTES\n─────────────  ─────   ───────────────   ─────────────────────\nLead             2      €8,000/mo        New discoveries\nQualified        1      €4,500/mo        Ready for proposal\nProposal Sent    1      €6,000/mo        Awaiting signature\nWon              3      €18,500/mo       Active clients (MRR)\nLost             1      —                Budget freeze\n\nCOMMITTED MRR:        €18,500\nPIPELINE (qualified+): €10,500\nTOTAL POTENTIAL:      €29,000/mo → €348,000/yr\n\nNext actions:\n→ PRO-003 (acme.com): Send proposal — score 38/100 (strong case)\n→ PRO-007 (shop.it): Follow up — proposal sent 8 days ago\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n```\n\n---\n\n## Storage Location\n\nAll data stored in `~/.geo-prospects/`:\n```\n~/.geo-prospects/\n├── prospects.json          # Main CRM database\n├── audits/                 # Quick audit snapshots\n│   └── electron-srl.com-2026-03-12.md\n└── proposals/              # Generated proposals\n    └── electron-srl.com-proposal.md\n```\n\nCreate directory if it does not exist: `mkdir -p ~/.geo-prospects/audits ~/.geo-prospects/proposals`\n\n---\n\n## Pipeline Stage Definitions\n\n| Status | Meaning | Typical Next Action |\n|--------|---------|---------------------|\n| `lead` | Discovered, not yet contacted | Run quick audit, assess opportunity |\n| `qualified` | Audit done, confirmed pain points | Generate proposal |\n| `proposal` | Proposal sent, awaiting decision | Follow up, answer questions |\n| `won` | Contract signed, active client | Run full audit, start onboarding |\n| `lost` | Deal closed lost | Log reason for future reference |\n\n---\n\n## Output\n\n- All commands print confirmation + current prospect status to terminal\n- No external files unless explicitly saving audits/proposals\n- JSON database is the single source of truth\n","skills/geo-report-pdf/SKILL.md":"---\nname: geo-report-pdf\ndescription: Generate a professional PDF report from a GEO audit using pandoc + Chrome headless. Converts GEO-AUDIT-REPORT.md into a styled, client-ready PDF with a cover page, color-coded score tables, severity-tagged findings, and a 90-day roadmap.\nversion: 2.0.0\nauthor: geo-seo-claude\ntags: [geo, pdf, report, client-deliverable, professional]\nallowed-tools: Read, Grep, Glob, Bash, Write\n---\n\n# GEO PDF Report Generator (pandoc pipeline)\n\n## Prerequisites\n\n- **pandoc** — `brew install pandoc`\n- **Google Chrome** — must be installed at `/Applications/Google Chrome.app/`\n\nNo Python dependencies. No ReportLab. No JSON data wrangling.\n\n## How It Works\n\n1. Read `GEO-AUDIT-REPORT.md` in the current directory (created by `/geo audit`)\n2. Extract cover metadata from the report (brand name, domain, GEO score, date, locations)\n3. Run `pandoc` with the bundled CSS + HTML template to produce a self-contained `GEO-REPORT.html`\n4. Run Chrome headless to print the HTML to `GEO-REPORT.pdf`\n\nThe pandoc template (`~/.claude/skills/geo/templates/geo-report-template.html`) injects:\n- A full-bleed dark navy cover section with the GEO score badge\n- Per-section cover metadata (date, business type, locations, platform)\n- JavaScript that runs inside Chrome before printing to color-code score cells and severity-tag finding sections\n\n## Workflow\n\n### Step 1: Check for audit report\n\nLook for `GEO-AUDIT-REPORT.md` in the current directory. If absent, tell the user to run `/geo audit <url>` first.\n\n### Step 2: Extract cover metadata from the report\n\nRead the top of `GEO-AUDIT-REPORT.md` and extract:\n\n| Field | Where to find it |\n|---|---|\n| `brand_name` | First H1 title (after \"GEO Audit Report:\") |\n| `domain` | Second bold line (e.g. `**Domain:** alexamediasolutions.com`) |\n| `geo_score` | Line matching `## Overall GEO Score: XX / 100` |\n| `score_label` | Word after the score on that same line (e.g. \"Poor\", \"Fair\", \"Good\") |\n| `date` | `**Audit Date:**` line |\n| `business_type` | `**Business Type:**` line |\n| `locations` | `**Locations:**` line |\n| `platform` | `**CMS:**` line |\n\n### Step 3: Run pandoc\n\n```bash\npandoc GEO-AUDIT-REPORT.md \\\n  --to html5 \\\n  --standalone \\\n  --embed-resources \\\n  --template ~/.claude/skills/geo/templates/geo-report-template.html \\\n  --css ~/.claude/skills/geo/templates/geo-report-style.css \\\n  --metadata title=\"GEO Audit Report — <brand_name>\" \\\n  --metadata brand_name=\"<brand_name>\" \\\n  --metadata domain=\"<domain>\" \\\n  --metadata geo_score=\"<geo_score>\" \\\n  --metadata score_label=\"<score_label>\" \\\n  --metadata date=\"<date>\" \\\n  --metadata business_type=\"<business_type>\" \\\n  --metadata locations=\"<locations>\" \\\n  --metadata platform=\"<platform>\" \\\n  -o GEO-REPORT.html\n```\n\nReplace `<field>` placeholders with values extracted in Step 2. If a field is not found in the report, omit that `--metadata` flag — the template has sensible defaults.\n\n### Step 4: Run Chrome headless\n\n```bash\n\"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome\" \\\n  --headless=new \\\n  --disable-gpu \\\n  --no-sandbox \\\n  --print-to-pdf=\"$(pwd)/GEO-REPORT.pdf\" \\\n  --print-to-pdf-no-header \\\n  --no-pdf-header-footer \\\n  --virtual-time-budget=5000 \\\n  \"file://$(pwd)/GEO-REPORT.html\"\n```\n\n### Step 5: Report completion\n\nTell the user:\n- `GEO-REPORT.pdf` was generated in the current directory\n- File size\n- Optionally: `open GEO-REPORT.pdf` to preview it\n\n## What the PDF Contains\n\n- **Cover page** — Dark navy gradient, brand name, domain, GEO score badge (colored by score), audit date, business type, locations, CMS platform\n- **Score tables** — Cells containing `XX/100` are color-coded: ≥80 green, ≥65 blue, ≥50 amber, ≥35 orange, <35 red\n- **Finding sections** — `h3` headings containing \"Critical / High / Medium / Low\" get severity-colored left-border callout blocks (red / orange / yellow / green)\n- **Section page breaks** — Major sections (High Priority, 90-Day Roadmap, Component Score Summary, Generated Schema) break to new pages automatically\n- **Code blocks** — JSON schema templates render with dark theme monospace styling\n- **Page footer** — Brand name · GEO Audit · date + page numbers (via CSS `@page`)\n\n## Customizing the Report\n\n- **Colors / typography** — Edit `~/.claude/skills/geo/templates/geo-report-style.css`\n- **Cover layout** — Edit `~/.claude/skills/geo/templates/geo-report-template.html`\n- **Score thresholds for color-coding** — Edit the `scoreColor()` function in the template's `<script>` block\n- **Which sections get page breaks** — Edit the `breakBefore` array in the template's `<script>` block\n\n## Troubleshooting\n\n| Problem | Fix |\n|---|---|\n| `pandoc: command not found` | `brew install pandoc` |\n| Chrome not found | Check path: `/Applications/Google Chrome.app/Contents/MacOS/Google Chrome` |\n| PDF is blank / empty | Increase `--virtual-time-budget` to 8000 |\n| Cover metadata missing | Check GEO-AUDIT-REPORT.md has the standard header format |\n| Fonts not loading | PDF is rendered offline; system fonts are used as fallback — this is expected |\n","skills/geo-report/SKILL.md":"---\nname: geo-report\ndescription: Generate a professional, client-facing GEO report combining all audit results into a single deliverable with scores, findings, and prioritized actions\nversion: 1.0.0\nauthor: geo-seo-claude\ntags: [geo, report, client-deliverable, executive-summary, action-plan]\nallowed-tools: Read, Grep, Glob, Bash, WebFetch, Write\n---\n\n# GEO Client Report Generator\n\n## Purpose\n\nThis skill aggregates outputs from all GEO audit skills into a single, professional report that can be delivered directly to a client or stakeholder. The report is written for **business owners and marketing leaders**, not developers — technical findings are translated into business impact and clear action items with priority levels.\n\n## How to Use This Skill\n\n1. Run the following audits first (or use existing report data):\n   - `geo-platform-optimizer` -> GEO-PLATFORM-OPTIMIZATION.md\n   - `geo-schema` -> GEO-SCHEMA-REPORT.md\n   - `geo-technical` -> GEO-TECHNICAL-AUDIT.md\n   - `geo-content` -> GEO-CONTENT-ANALYSIS.md\n   - (Optional) `geo-llmstxt` -> llms.txt assessment\n   - (Optional) `geo-brand-mentions` -> brand authority data\n2. Collect all scores and findings\n3. Calculate the composite GEO Readiness Score\n4. Generate the client report using the template below\n5. Output: GEO-CLIENT-REPORT.md\n\n---\n\n## GEO Readiness Score Calculation\n\n### Component Weights\n\n| Component | Weight | Source Skill |\n|---|---|---|\n| AI Platform Readiness | 25% | geo-platform-optimizer |\n| Content Quality & E-E-A-T | 25% | geo-content |\n| Technical Foundation | 20% | geo-technical |\n| Schema & Structured Data | 15% | geo-schema |\n| Brand Authority & Entity Presence | 15% | geo-platform-optimizer (entity signals) |\n\n### Score Formula\n```\nGEO Score = (Platform Score * 0.25) + (Content Score * 0.25) + (Technical Score * 0.20) + (Schema Score * 0.15) + (Brand Score * 0.15)\n```\n\nRound to the nearest integer. Cap at 100.\n\n### Score Interpretation for Clients\n\n| Score Range | Label | Client-Facing Description |\n|---|---|---|\n| 85-100 | Excellent | Your site is well-positioned for AI search. Focus on maintaining and expanding your advantage. |\n| 70-84 | Good | Solid foundation with clear opportunities to improve AI visibility. Targeted optimizations will yield significant results. |\n| 55-69 | Moderate | Your site has gaps in AI readiness that competitors may be exploiting. A structured optimization plan will close these gaps. |\n| 40-54 | Below Average | Significant barriers to AI search visibility exist. Without action, your brand risks being invisible in AI-generated answers. |\n| 0-39 | Needs Attention | Critical AI readiness issues require immediate action. Your competitors are likely capturing the AI search traffic your brand should own. |\n\n---\n\n## Report Template\n\nThe complete report follows this exact structure. Each section includes instructions on what to write and how.\n\n---\n\n### Section 1: Executive Summary\n\nWrite exactly ONE paragraph (4-6 sentences) covering:\n- What was analyzed (domain, number of pages, date of analysis)\n- The overall GEO Readiness Score with context (\"XX/100, which places [brand] in the [label] tier\")\n- The single most impactful finding (positive or negative)\n- Top 3 priority recommendations in one sentence\n- One sentence on the business impact (\"Addressing these recommendations could increase AI-driven traffic by an estimated XX%, representing approximately $X,XXX/month based on current traffic patterns\")\n\n**Tone**: Confident, direct, professional. No jargon. No hedging. Write as a consultant delivering findings, not as a tool generating a report.\n\n### Section 2: GEO Readiness Score\n\nPresent the overall score prominently:\n\n```\n## GEO Readiness Score: XX/100 — [Label]\n```\n\nThen break down by component in a table:\n\n```markdown\n| Component | Score | Weight | Weighted Score |\n|---|---|---|---|\n| AI Platform Readiness | XX/100 | 25% | XX |\n| Content Quality & E-E-A-T | XX/100 | 25% | XX |\n| Technical Foundation | XX/100 | 20% | XX |\n| Schema & Structured Data | XX/100 | 15% | XX |\n| Brand Authority | XX/100 | 15% | XX |\n| **Overall** | | | **XX/100** |\n```\n\n### Section 3: AI Visibility Dashboard\n\nPresent per-platform readiness scores:\n\n```markdown\n## AI Visibility Dashboard\n\n| AI Platform | Readiness Score | Key Gap | Priority Action |\n|---|---|---|---|\n| Google AI Overviews | XX/100 | [One-line gap] | [One-line action] |\n| ChatGPT Web Search | XX/100 | [One-line gap] | [One-line action] |\n| Perplexity AI | XX/100 | [One-line gap] | [One-line action] |\n| Google Gemini | XX/100 | [One-line gap] | [One-line action] |\n| Bing Copilot | XX/100 | [One-line gap] | [One-line action] |\n```\n\nAdd a brief paragraph explaining what these scores mean: \"These scores reflect how likely your content is to be cited by each AI search platform. A score below 50 indicates significant barriers to citation on that platform.\"\n\n### Section 4: AI Crawler Access Status\n\nPresent as a clear table:\n\n```markdown\n## AI Crawler Access\n\n| AI Crawler | Platform | Status | Impact | Recommendation |\n|---|---|---|---|---|\n| Googlebot | Google Search + AIO | Allowed/Blocked | Critical | [Action] |\n| GPTBot | ChatGPT / OpenAI | Allowed/Blocked | High | [Action] |\n| Bingbot | Bing + Copilot + ChatGPT | Allowed/Blocked | High | [Action] |\n| PerplexityBot | Perplexity AI | Allowed/Blocked | Medium | [Action] |\n| Google-Extended | Gemini Training | Allowed/Blocked | Medium | [Action] |\n| ClaudeBot | Anthropic Claude | Allowed/Blocked | Medium | [Action] |\n| Applebot-Extended | Apple Intelligence | Allowed/Blocked | Medium | [Action] |\n```\n\n**Translate for the client**: \"Blocking AI crawlers is like closing your store during business hours. If a crawler cannot access your site, the AI platform it powers cannot cite your content. We recommend allowing all major AI crawlers unless you have a specific data licensing concern.\"\n\n### Section 5: Brand Authority Analysis\n\nPresent entity presence across platforms:\n\n```markdown\n## Brand Authority\n\n| Platform | Presence | Status | Impact on AI Visibility |\n|---|---|---|---|\n| Wikipedia | Yes/No | [Detail] | Very High — 47.9% of ChatGPT citations are Wikipedia |\n| Wikidata | Yes/No | [Detail] | High — machine-readable entity data |\n| LinkedIn | Yes/No | [Detail] | High — Bing Copilot and ChatGPT signal |\n| YouTube | Yes/No | [Detail] | High — Gemini and Perplexity signal |\n| Reddit | Yes/No | [Detail] | Very High — 46.7% of Perplexity citations are Reddit |\n| Google Knowledge Panel | Yes/No | [Detail] | High — Gemini entity recognition |\n| Crunchbase | Yes/No | [Detail] | Medium — entity validation |\n| GitHub | Yes/No | [Detail] | Medium — tech brand signal |\n```\n\n**Translate for the client**: \"AI platforms build trust by cross-referencing your brand across multiple authoritative sources. Each platform where your brand has an accurate, consistent presence increases the likelihood of being cited in AI answers.\"\n\n### Section 6: Citability Analysis\n\n#### Top 5 Most Citable Pages\nFor each page:\n- URL\n- Why it is citable (structure, depth, E-E-A-T signals)\n- One specific improvement that would make it even more citable\n\n#### Top 5 Least Citable Pages\nFor each page:\n- URL\n- Why it is unlikely to be cited (thin content, poor structure, missing signals)\n- Specific rewrite or restructure recommendation\n\n**Business impact framing**: \"Your most citable pages are your best candidates for appearing in AI-generated answers. Improving the 5 least citable pages represents the highest-ROI content investment you can make for AI visibility.\"\n\n### Section 7: Technical Health Summary\n\nPresent the key technical findings in business-friendly language:\n\n```markdown\n## Technical Health\n\n| Area | Status | Business Impact |\n|---|---|---|\n| Core Web Vitals | Good/Needs Work/Poor | [Impact on user experience and rankings] |\n| Server-Side Rendering | Yes/Partial/No | [Impact on AI crawler visibility] |\n| Mobile Optimization | Good/Needs Work/Poor | [Impact on Google's mobile-first indexing] |\n| Security (HTTPS + Headers) | Good/Needs Work/Poor | [Impact on trust signals] |\n| Page Speed | Fast/Average/Slow | [Impact on user experience and crawl budget] |\n| IndexNow Protocol | Implemented/Not | [Impact on Bing/ChatGPT indexing speed] |\n```\n\n**Critical finding callout**: If SSR is missing or partial, highlight this prominently: \"Your site uses client-side rendering, which means AI crawlers see an empty page when they visit. This is the single most impactful technical issue for AI search visibility. Until this is resolved, most AI platforms cannot cite your content.\"\n\n### Section 8: Schema & Structured Data\n\n```markdown\n## Schema & Structured Data\n\n### Current Implementation\n| Schema Type | Present | Status | AI Impact |\n|---|---|---|---|\n| Organization | Yes/No | [Valid/Issues] | Critical — entity recognition |\n| Article + Author | Yes/No | [Valid/Issues] | High — E-E-A-T signal |\n| sameAs (entity links) | Yes/No | [Count] links | Critical — cross-platform entity graph |\n| [Business-specific] | Yes/No | [Valid/Issues] | [Impact] |\n| WebSite + SearchAction | Yes/No | [Valid/Issues] | Medium — sitelinks |\n| BreadcrumbList | Yes/No | [Valid/Issues] | Low-Medium — navigation context |\n```\n\nIf schemas are missing, note: \"Ready-to-use structured data code has been prepared and is included in the technical appendix. Your development team can add this to your site with minimal effort.\"\n\n### Section 9: llms.txt Status\n\n```markdown\n## llms.txt — AI Content Guide\n\n| File | Status | Recommendation |\n|---|---|---|\n| /llms.txt | Present/Missing | [Action] |\n| /llms-full.txt | Present/Missing | [Action] |\n```\n\n**Translate for the client**: \"llms.txt is an emerging standard (similar to robots.txt) that tells AI systems what your site is about and which pages are most important. While not universally adopted yet, implementing it positions your brand ahead of competitors and provides direct guidance to AI platforms.\"\n\n### Section 10: Prioritized Action Plan\n\nThis is the most important section of the report. Organize actions by timeline and impact.\n\n```markdown\n## Prioritized Action Plan\n\n### Quick Wins (This Week)\n*High impact, low effort — can be implemented immediately*\n\n| # | Action | Impact | Effort | Platforms Affected |\n|---|---|---|---|---|\n| 1 | [Specific action] | [High/Med] | [Hours estimate] | [Which AI platforms] |\n| 2 | [Specific action] | [High/Med] | [Hours estimate] | [Which AI platforms] |\n```\n\n**Quick Win criteria**: Can be done in < 4 hours by one person. Examples:\n- Unblock AI crawlers in robots.txt\n- Add publication dates to existing content\n- Add author bylines with credentials\n- Fix broken meta descriptions\n- Add sameAs properties to existing Organization schema\n- Create/claim llms.txt file\n\n```markdown\n### Medium-Term Improvements (This Month)\n*Significant impact, moderate effort — requires content or technical changes*\n\n| # | Action | Impact | Effort | Platforms Affected |\n|---|---|---|---|---|\n| 1 | [Specific action] | [High/Med] | [Days estimate] | [Which AI platforms] |\n```\n\n**Medium-Term criteria**: 1-5 days of work. Examples:\n- Restructure top 10 pages with question-based headings and direct answers\n- Implement comprehensive Schema.org markup\n- Create author pages with credentials and sameAs links\n- Optimize Core Web Vitals (image compression, code splitting)\n- Register and configure Bing Webmaster Tools\n- Implement IndexNow protocol\n\n```markdown\n### Strategic Initiatives (This Quarter)\n*Long-term competitive advantage, requires ongoing investment*\n\n| # | Action | Impact | Effort | Platforms Affected |\n|---|---|---|---|---|\n| 1 | [Specific action] | [High/Med] | [Weeks estimate] | [Which AI platforms] |\n```\n\n**Strategic criteria**: Ongoing effort over weeks/months. Examples:\n- Build Wikipedia/Wikidata entity presence\n- Develop active Reddit community engagement strategy\n- Create YouTube content strategy aligned with search queries\n- Implement server-side rendering (if currently client-rendered)\n- Build topical authority through comprehensive content strategy\n- Establish original research/data publication program\n\n### Estimated Impact\nAfter the action plan, include an impact estimate:\n\n\"Based on industry benchmarks and the specific gaps identified in this audit:\n- **Quick Wins alone** could improve your GEO score by approximately [X-Y] points\n- **Full implementation** of this action plan could improve your GEO score to approximately [XX]/100\n- At current traffic levels and conversion rates, improved AI visibility represents an estimated **$X,XXX - $XX,XXX per month** in additional organic value\"\n\nUse conservative estimates. Base the dollar figure on:\n- Current estimated organic traffic value (from analytics if available, or estimate from industry benchmarks)\n- AI search is projected to drive 25-40% of organic discovery by end of 2026\n- A 10-point GEO score improvement typically correlates with a 15-25% increase in AI citation frequency\n\n### Section 11: Competitor Comparison (if competitor URLs provided)\n\nIf competitor URLs were analyzed alongside the primary domain:\n\n```markdown\n## Competitor Comparison\n\n| Metric | [Your Brand] | [Competitor 1] | [Competitor 2] |\n|---|---|---|---|\n| Overall GEO Score | XX/100 | XX/100 | XX/100 |\n| Google AIO Readiness | XX/100 | XX/100 | XX/100 |\n| ChatGPT Readiness | XX/100 | XX/100 | XX/100 |\n| Perplexity Readiness | XX/100 | XX/100 | XX/100 |\n| Schema Coverage | [Detail] | [Detail] | [Detail] |\n| Wikipedia Presence | Yes/No | Yes/No | Yes/No |\n| Reddit Authority | [Detail] | [Detail] | [Detail] |\n| SSR Status | Yes/No | Yes/No | Yes/No |\n\n### Where You Lead\n[Specific areas where the brand outperforms competitors]\n\n### Where You Trail\n[Specific areas where competitors have an advantage, with actions to close the gap]\n```\n\n### Section 12: Appendix\n\n```markdown\n## Appendix\n\n### Methodology\nThis GEO audit was conducted using the following methodology:\n- **Pages analyzed**: [List of specific URLs audited]\n- **Platforms assessed**: Google AI Overviews, ChatGPT, Perplexity AI, Google Gemini, Bing Copilot\n- **Technical checks**: HTTP headers, robots.txt, HTML source analysis, structured data validation\n- **Content assessment**: E-E-A-T framework (Experience, Expertise, Authoritativeness, Trustworthiness) per Google's December 2025 Quality Rater Guidelines\n- **Schema validation**: JSON-LD parsing and Schema.org specification compliance\n- **Date of analysis**: [Date]\n\n### Data Sources\n- Google Search Quality Rater Guidelines (December 2025 update)\n- Schema.org full type hierarchy\n- Industry citation studies (Zyppy, Authoritas, Semrush AI search research, 2025-2026)\n- Core Web Vitals thresholds (web.dev, 2026 standards)\n- AI crawler user-agent documentation (per-platform official docs)\n\n### Glossary\n\n| Term | Definition |\n|---|---|\n| GEO | Generative Engine Optimization — optimizing content to be cited by AI search platforms |\n| AIO | AI Overviews — Google's AI-generated answer boxes at the top of search results |\n| E-E-A-T | Experience, Expertise, Authoritativeness, Trustworthiness — Google's content quality framework |\n| SSR | Server-Side Rendering — generating HTML on the server so crawlers can read content without JavaScript |\n| CWV | Core Web Vitals — Google's page experience metrics (LCP, INP, CLS) |\n| LCP | Largest Contentful Paint — time to render the largest visible element |\n| INP | Interaction to Next Paint — responsiveness metric (replaced FID in March 2024) |\n| CLS | Cumulative Layout Shift — visual stability metric |\n| JSON-LD | JavaScript Object Notation for Linked Data — preferred structured data format |\n| sameAs | Schema.org property linking an entity to its profiles on other platforms |\n| IndexNow | Protocol for instantly notifying search engines of content changes |\n| llms.txt | Proposed standard file for guiding AI systems about a site's content |\n| YMYL | Your Money or Your Life — topics requiring highest E-E-A-T standards |\n| SERP | Search Engine Results Page |\n| Topical Authority | The depth and breadth of a site's coverage of its core topic area |\n```\n\n---\n\n## Formatting and Tone Guidelines\n\n### Formatting\n- Use clean markdown throughout: tables, headers (H2/H3), bullet points, bold for emphasis\n- Tables for data, bullets for recommendations, bold for key terms\n- One blank line between sections for readability\n- Use horizontal rules (---) to separate major sections\n- All URLs should be absolute (not relative)\n\n### Tone\n- **Professional but accessible** — written for a business owner, not a developer\n- **Confident and direct** — state findings as conclusions, not possibilities\n- **Action-oriented** — every finding should connect to a specific action\n- **Business-impact focused** — translate technical issues into business outcomes\n- Avoid: jargon without explanation, hedging language, passive voice, excessive caveats\n- Use: \"Your site [does/does not]...\", \"We recommend...\", \"This impacts...\"\n\n### Dollar-Value Framing\nWhere possible, connect recommendations to business value:\n- \"Improving your Google AIO readiness from 35 to 70 could increase your presence in AI Overviews by an estimated 50%, which at current search volumes represents approximately 2,000 additional monthly visitors\"\n- \"Server-side rendering would make your content accessible to ChatGPT, Perplexity, and other AI platforms — collectively representing an audience your competitors are already reaching\"\n- \"The investment in Schema.org markup (estimated 8-16 hours of developer time) could increase your entity recognition score from 20 to 75, significantly improving citation probability\"\n\nBe conservative with estimates. State assumptions clearly. Never guarantee specific results.\n\n---\n\n## Output\n\nGenerate **GEO-CLIENT-REPORT.md** using the complete template above, filled with actual audit data. The report should be:\n- 40-80 pages equivalent in detail (3,000-6,000 words)\n- Ready to send to a client without editing\n- Self-contained (no references to other report files — all relevant data is included)\n- Printable and presentable (clean markdown formatting)\n","skills/geo-schema/SKILL.md":"---\nname: geo-schema\ndescription: Schema.org structured data audit and generation optimized for AI discoverability — detect, validate, and generate JSON-LD markup\nversion: 1.0.0\nauthor: geo-seo-claude\ntags: [geo, schema, structured-data, json-ld, entity-recognition, ai-discoverability]\nallowed-tools: Read, Grep, Glob, Bash, WebFetch, Write\n---\n\n# GEO Schema & Structured Data\n\n## Purpose\n\nStructured data is the primary machine-readable signal that tells AI systems what an entity IS, what it does, and how it connects to other entities. While schema markup has traditionally been about earning Google rich results, its role in GEO is fundamentally different: **structured data is how AI models understand and trust your entity**. A complete entity graph in structured data dramatically increases citation probability across all AI search platforms.\n\n## How to Use This Skill\n\n1. Fetch the target page HTML using `fetch_page.py` (see note below)\n2. Detect all existing structured data (JSON-LD, Microdata, RDFa)\n3. Validate detected schemas against Schema.org specifications\n4. Identify missing recommended schemas based on business type\n5. Generate ready-to-use JSON-LD code blocks\n6. Output GEO-SCHEMA-REPORT.md\n\n---\n\n## Step 1: Detection\n\n**IMPORTANT:** WebFetch converts HTML to markdown and strips `<head>` content, which removes JSON-LD blocks. Use `fetch_page.py` instead:\n```bash\npython3 ~/.claude/skills/geo/scripts/fetch_page.py <url> page\n```\nThe output includes a `structured_data` array with all parsed JSON-LD blocks from the page.\n\n### Scan for JSON-LD\nLook for `<script type=\"application/ld+json\">` blocks in the HTML. Parse each block as JSON. A page may contain multiple JSON-LD blocks — collect all of them.\n\n### Scan for Microdata\nLook for elements with `itemscope`, `itemtype`, and `itemprop` attributes. Map the hierarchy of nested items. Note: Microdata is harder for AI crawlers to parse than JSON-LD. Flag a recommendation to migrate to JSON-LD if Microdata is the only format found.\n\n### Scan for RDFa\nLook for elements with `typeof`, `property`, and `vocab` attributes. Similar to Microdata — recommend migration to JSON-LD.\n\n### Priority Order\nJSON-LD is the **strongly recommended format** for GEO. Google, Bing, and AI platforms all process JSON-LD most reliably. If the site uses Microdata or RDFa exclusively, flag this as a high-priority migration.\n\n---\n\n## Step 2: Validation\n\nFor each detected schema block, validate:\n\n1. **Valid JSON**: Is the JSON-LD syntactically valid? Check for trailing commas, unquoted keys, malformed strings.\n2. **Valid @type**: Does the `@type` match a recognized Schema.org type? Check against https://schema.org/docs/full.html.\n3. **Required Properties**: Does the schema include all required properties for its type? (See per-type requirements below.)\n4. **Recommended Properties**: Does the schema include recommended properties that increase AI discoverability?\n5. **sameAs Links**: Does the schema include `sameAs` properties linking to other platform presences?\n6. **URL Validity**: Do all URLs in the schema resolve (not 404)?\n7. **Nesting**: Is the schema properly nested (e.g., author inside Article, address inside Organization)?\n8. **Rendering Method**: Is the JSON-LD in the server-rendered HTML or injected via JavaScript? Per Google's December 2025 guidance, **JavaScript-injected structured data may face delayed processing**. Flag any schema that requires JS execution.\n\n---\n\n## Step 3: Schema Types for GEO\n\n### Organization (CRITICAL — every business site)\nEssential for entity recognition across all AI platforms. This is how AI models identify WHAT the business is.\n\n**Required properties:**\n- `@type`: \"Organization\" (or subtype: Corporation, LocalBusiness, etc.)\n- `name`: Official business name\n- `url`: Official website URL\n- `logo`: URL to logo image (ImageObject preferred)\n\n**Recommended properties for GEO:**\n- `sameAs`: Array of ALL platform URLs (see sameAs strategy below)\n- `description`: 1-2 sentence description of the organization\n- `foundingDate`: ISO 8601 date\n- `founder`: Person schema\n- `address`: PostalAddress schema\n- `contactPoint`: ContactPoint with telephone, email, contactType\n- `areaServed`: Geographic area\n- `numberOfEmployees`: QuantitativeValue\n- `industry`: Text or DefinedTerm\n- `award`: Array of awards received\n- `knowsAbout`: Array of topics the organization is expert in (strong GEO signal)\n\n### LocalBusiness (for businesses with physical locations)\nExtends Organization. Critical for local AI search results and Google Gemini.\n\n**Additional required properties:**\n- `address`: Full PostalAddress\n- `telephone`: Phone number\n- `openingHoursSpecification`: Operating hours\n\n**Recommended for GEO:**\n- `geo`: GeoCoordinates (latitude, longitude)\n- `priceRange`: Price indicator\n- `aggregateRating`: AggregateRating schema\n- `review`: Array of Review schemas\n- `hasMap`: URL to Google Maps\n\n### Article + Author (CRITICAL for publishers)\nThe Author schema is one of the strongest E-E-A-T signals for AI platforms.\n\n**Article required:**\n- `@type`: \"Article\" (or NewsArticle, BlogPosting, TechArticle)\n- `headline`: Article title\n- `datePublished`: ISO 8601\n- `dateModified`: ISO 8601 (critical for freshness signals)\n- `author`: Person or Organization schema\n- `publisher`: Organization schema with logo\n- `image`: Representative image\n\n**Author (Person) required for GEO:**\n- `name`: Full name\n- `url`: Author page URL on the site\n- `sameAs`: LinkedIn, Twitter, personal site, Google Scholar, ORCID\n- `jobTitle`: Professional title\n- `worksFor`: Organization schema\n- `knowsAbout`: Array of expertise areas\n- `alumniOf`: Educational institutions\n- `award`: Professional awards\n\n### Product (for e-commerce)\n**Required:**\n- `name`, `description`, `image`\n- `offers`: Offer with price, priceCurrency, availability\n- `brand`: Brand schema\n- `sku` or `gtin`/`mpn`\n\n**Recommended for GEO:**\n- `aggregateRating`: AggregateRating\n- `review`: Array of individual reviews\n- `category`: Product category\n- `material`, `weight`, `width`, `height` (where applicable)\n\n### FAQPage\n**Status as of 2024**: Google restricts FAQ rich results to government and health sites. However, the FAQPage schema still serves GEO purposes — AI platforms parse FAQ structured data for question-answer extraction. Implement it for AI readability even though rich results may not appear.\n\n**Structure:**\n- `@type`: \"FAQPage\"\n- `mainEntity`: Array of Question schemas, each with `acceptedAnswer` containing an Answer schema\n\n### SoftwareApplication (for SaaS)\n**Required:**\n- `name`, `description`\n- `applicationCategory`: e.g., \"BusinessApplication\"\n- `operatingSystem`: Supported platforms\n- `offers`: Pricing\n\n**Recommended for GEO:**\n- `aggregateRating`: User ratings\n- `featureList`: Array of features (strong citation signal)\n- `screenshot`: Screenshots\n- `softwareVersion`: Current version\n- `releaseNotes`: Link to changelog\n\n### WebSite + SearchAction (for sitelinks search box)\n**Structure:**\n```json\n{\n  \"@type\": \"WebSite\",\n  \"name\": \"Site Name\",\n  \"url\": \"https://example.com\",\n  \"potentialAction\": {\n    \"@type\": \"SearchAction\",\n    \"target\": {\n      \"@type\": \"EntryPoint\",\n      \"urlTemplate\": \"https://example.com/search?q={search_term_string}\"\n    },\n    \"query-input\": \"required name=search_term_string\"\n  }\n}\n```\n\n### Person (standalone — for personal brands, authors, thought leaders)\nUse as a standalone schema on About/Bio pages. This builds the entity graph for individual expertise.\n\n**Required:** `name`, `url`\n**Recommended for GEO:** `sameAs`, `jobTitle`, `worksFor`, `knowsAbout`, `alumniOf`, `award`, `description`, `image`\n\n### speakable Property (for voice/AI assistants)\nThe `speakable` property marks specific sections of content as particularly suitable for voice and AI assistant consumption. Add to Article or WebPage schemas.\n\n```json\n{\n  \"@type\": \"Article\",\n  \"speakable\": {\n    \"@type\": \"SpeakableSpecification\",\n    \"cssSelector\": [\".article-summary\", \".key-takeaway\"]\n  }\n}\n```\nThis signals to AI assistants which passages are the best candidates for citation or reading aloud.\n\n---\n\n## Step 4: Deprecated/Changed Schemas to Flag\n\n| Schema | Status | Note |\n|---|---|---|\n| HowTo | Rich results deprecated Aug 2023 | Still useful for AI parsing, but do not promise rich results |\n| FAQPage | Restricted to govt/health Aug 2023 | Still useful for AI parsing (see above) |\n| SpecialAnnouncement | Deprecated 2023 | Was for COVID; remove if still present |\n| CourseInfo | Replaced by Course updates 2024 | Use updated Course schema properties |\n| VideoObject `contentUrl` | Changed behavior 2024 | Must point to actual video file, not page URL |\n| Review snippet | Stricter enforcement 2024 | Self-serving reviews on product pages may not display |\n\nFlag any deprecated schemas found and recommend replacements.\n\n---\n\n## Step 5: sameAs Strategy (CRITICAL for Entity Recognition)\n\nThe `sameAs` property is the single most important structured data property for GEO. It tells AI systems: \"This entity on my website is the SAME entity as these profiles elsewhere.\" This creates the entity graph that AI platforms use to verify, trust, and cite sources.\n\n### Recommended sameAs Links (in priority order)\n\n1. **Wikipedia article** — highest authority entity link\n2. **Wikidata item** — machine-readable entity identifier (e.g., `https://www.wikidata.org/wiki/Q12345`)\n3. **LinkedIn** — company page or personal profile\n4. **YouTube** — channel URL\n5. **Twitter/X** — profile URL\n6. **Facebook** — page URL\n7. **Crunchbase** — company profile (for startups/tech)\n8. **GitHub** — organization or personal profile (for tech)\n9. **Google Scholar** — author profile (for researchers/academics)\n10. **ORCID** — researcher identifier (for academics)\n11. **Instagram** — profile URL\n12. **Apple App Store / Google Play** — app listings (for software)\n13. **BBB** — Better Business Bureau listing (for US businesses)\n14. **Industry directories** — relevant vertical directories\n\n### sameAs Audit Process\n1. Collect all known web presences for the entity\n2. Check that each URL resolves (not 404 or redirected)\n3. Verify the Organization/Person schema includes ALL of them\n4. Check that the information on each platform is consistent (name, description, founding date, etc.)\n5. Flag any platforms where the entity should have a presence but does not\n\n---\n\n## Step 6: JSON-LD Generation\n\nBased on the detected business type, generate ready-to-paste JSON-LD blocks. Always generate:\n\n1. **Organization or Person** (depending on entity type) — always\n2. **WebSite with SearchAction** — always for the homepage\n3. **Business-type-specific** — Article for publishers, Product for e-commerce, LocalBusiness for local, SoftwareApplication for SaaS\n4. **BreadcrumbList** — for any page deeper than homepage\n\n### Generation Rules\n- Use the `@graph` pattern to include multiple schemas in one JSON-LD block\n- All URLs must be absolute (not relative)\n- Include `@id` properties for cross-referencing between schemas\n- Use ISO 8601 for all dates\n- Include `speakable` on Article schemas with CSS selectors pointing to key content sections\n- Place JSON-LD in `<head>` section — NOT injected via JavaScript\n\n### Template: Organization with Full GEO Signals\n```json\n{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"Organization\",\n  \"@id\": \"https://example.com/#organization\",\n  \"name\": \"Company Name\",\n  \"url\": \"https://example.com\",\n  \"logo\": {\n    \"@type\": \"ImageObject\",\n    \"url\": \"https://example.com/logo.png\",\n    \"width\": 600,\n    \"height\": 60\n  },\n  \"description\": \"Concise description of what the company does.\",\n  \"foundingDate\": \"2020-01-15\",\n  \"founder\": {\n    \"@type\": \"Person\",\n    \"name\": \"Founder Name\",\n    \"sameAs\": \"https://www.linkedin.com/in/founder\"\n  },\n  \"address\": {\n    \"@type\": \"PostalAddress\",\n    \"streetAddress\": \"123 Main St\",\n    \"addressLocality\": \"City\",\n    \"addressRegion\": \"State\",\n    \"postalCode\": \"12345\",\n    \"addressCountry\": \"US\"\n  },\n  \"contactPoint\": {\n    \"@type\": \"ContactPoint\",\n    \"telephone\": \"+1-555-555-5555\",\n    \"contactType\": \"customer service\",\n    \"email\": \"support@example.com\"\n  },\n  \"sameAs\": [\n    \"https://en.wikipedia.org/wiki/Company_Name\",\n    \"https://www.wikidata.org/wiki/Q12345\",\n    \"https://www.linkedin.com/company/company-name\",\n    \"https://www.youtube.com/@companyname\",\n    \"https://twitter.com/companyname\",\n    \"https://github.com/companyname\",\n    \"https://www.crunchbase.com/organization/company-name\"\n  ],\n  \"knowsAbout\": [\n    \"Topic 1\",\n    \"Topic 2\",\n    \"Topic 3\"\n  ]\n}\n```\n\n---\n\n## Scoring Rubric (0-100)\n\n| Criterion | Points | How to Score |\n|---|---|---|\n| Organization/Person schema present and complete | 15 | 15 if full, 10 if basic, 0 if none |\n| sameAs links (5+ platforms) | 15 | 3 per valid sameAs link, max 15 |\n| Article schema with author details | 10 | 10 if full author schema, 5 if name only, 0 if none |\n| Business-type-specific schema present | 10 | 10 if complete, 5 if partial, 0 if missing |\n| WebSite + SearchAction | 5 | 5 if present, 0 if not |\n| BreadcrumbList on inner pages | 5 | 5 if present, 0 if not |\n| JSON-LD format (not Microdata/RDFa) | 5 | 5 if JSON-LD, 3 if mixed, 0 if only Microdata/RDFa |\n| Server-rendered (not JS-injected) | 10 | 10 if in HTML source, 5 if JS but in head, 0 if dynamic JS |\n| speakable property on articles | 5 | 5 if present, 0 if not |\n| Valid JSON + valid Schema.org types | 10 | 10 if no errors, 5 if minor issues, 0 if major errors |\n| knowsAbout property on Organization/Person | 5 | 5 if present with 3+ topics, 0 if missing |\n| No deprecated schemas present | 5 | 5 if clean, 0 if deprecated schemas found |\n\n---\n\n## Output Format\n\nGenerate **GEO-SCHEMA-REPORT.md** with:\n\n```markdown\n# GEO Schema & Structured Data Report — [Domain]\nDate: [Date]\n\n## Schema Score: XX/100\n\n## Detected Schemas\n| Page | Schema Type | Format | Status | Issues |\n|---|---|---|---|---|\n| / | Organization | JSON-LD | Valid | Missing sameAs |\n| /blog/post-1 | Article | JSON-LD | Valid | No author schema |\n\n## Validation Results\n[List each schema with pass/fail per property]\n\n## Missing Recommended Schemas\n[List schemas that should be present based on business type but are not]\n\n## sameAs Audit\n| Platform | URL | Status |\n|---|---|---|\n| Wikipedia | [URL or \"Not found\"] | Present/Missing |\n| LinkedIn | [URL or \"Not found\"] | Present/Missing |\n[Continue for all recommended platforms]\n\n## Generated JSON-LD Code\n[Ready-to-paste JSON-LD blocks for each missing or incomplete schema]\n\n## Implementation Notes\n- Where to place each JSON-LD block\n- Server-rendering requirements\n- Testing with Google Rich Results Test and Schema.org Validator\n```\n","skills/geo-technical/SKILL.md":"---\nname: geo-technical\ndescription: Technical SEO audit with GEO-specific checks — crawlability, indexability, security, performance, SSR, and AI crawler access\nversion: 1.0.0\nauthor: geo-seo-claude\ntags: [geo, technical-seo, core-web-vitals, ssr, crawlability, security, performance]\nallowed-tools: Read, Grep, Glob, Bash, WebFetch, Write\n---\n\n# GEO Technical SEO Audit\n\n## Purpose\n\nTechnical SEO forms the foundation of both traditional search visibility and AI search citation. A technically broken site cannot be crawled, indexed, or cited by any platform. This skill audits 8 categories of technical health with specific attention to GEO requirements — most critically, **server-side rendering** (AI crawlers do not execute JavaScript) and **AI crawler access** (many sites inadvertently block AI crawlers in robots.txt).\n\n## How to Use This Skill\n\n1. Collect the target URL (homepage + 2-3 key inner pages)\n2. Fetch each page using curl/WebFetch to get raw HTML and HTTP headers\n3. Run through each of the 8 audit categories below\n4. Score each category using the rubric\n5. Generate GEO-TECHNICAL-AUDIT.md with results\n\n---\n\n## Category 1: Crawlability (15 points)\n\n### 1.1 robots.txt Validity\n- Fetch `https://[domain]/robots.txt`\n- Check for syntactic validity: proper `User-agent`, `Allow`, `Disallow` directives\n- Check for common errors: missing User-agent, wildcards blocking important paths, Disallow: / blocking entire site\n- Verify XML sitemap is referenced: `Sitemap: https://[domain]/sitemap.xml`\n\n### 1.2 AI Crawler Access (CRITICAL for GEO)\nCheck robots.txt for directives targeting these AI crawlers:\n\n| Crawler | User-Agent | Platform |\n|---|---|---|\n| GPTBot | GPTBot | ChatGPT / OpenAI |\n| Google-Extended | Google-Extended | Gemini / Google AI training |\n| Googlebot | Googlebot | Google Search + AI Overviews |\n| Bingbot | bingbot | Bing Copilot + ChatGPT (via Bing) |\n| PerplexityBot | PerplexityBot | Perplexity AI |\n| ClaudeBot | ClaudeBot | Anthropic Claude |\n| Amazonbot | Amazonbot | Alexa / Amazon AI |\n| CCBot | CCBot | Common Crawl (used by many AI models) |\n| FacebookBot | FacebookExternalHit | Meta AI |\n| Bytespider | Bytespider | TikTok / ByteDance AI |\n| Applebot-Extended | Applebot-Extended | Apple Intelligence |\n\n**Scoring for AI crawler access:**\n- All major AI crawlers allowed: 5 points\n- Some blocked but Googlebot + Bingbot allowed: 3 points\n- GPTBot or PerplexityBot blocked: 1 point (significant GEO impact)\n- Googlebot blocked: 0 points (fatal)\n\n**Important nuance**: Blocking Google-Extended does NOT block Googlebot. Google-Extended only controls AI training data usage, not search indexing. However, blocking Google-Extended may reduce presence in AI Overviews. Recommend allowing Google-Extended unless there is a specific data licensing concern.\n\n### 1.3 XML Sitemaps\n- Fetch sitemap (check robots.txt for location, or try `/sitemap.xml`, `/sitemap_index.xml`)\n- Validate XML syntax\n- Check for `<lastmod>` dates (should be present and accurate)\n- Count URLs — compare to expected number of indexable pages\n- Check for sitemap index if large site (50,000+ URLs per sitemap max)\n- Verify all sitemap URLs return 200 status codes (sample check)\n\n### 1.4 Crawl Depth\n- Homepage = depth 0. Check that all important pages are reachable within **3 clicks** (depth 3)\n- Pages at depth 4+ receive significantly less crawl budget and are less likely to be cited by AI\n- Check internal linking: are key content pages linked from the homepage or main navigation?\n\n### 1.5 Noindex Management\n- Check for `<meta name=\"robots\" content=\"noindex\">` on pages that SHOULD be indexed\n- Check for `X-Robots-Tag: noindex` HTTP headers\n- Common mistakes: noindex on paginated pages, category pages, or key landing pages\n\n**Category Scoring:**\n| Check | Points |\n|---|---|\n| robots.txt valid and complete | 3 |\n| AI crawlers allowed | 5 |\n| XML sitemap present and valid | 3 |\n| Crawl depth within 3 clicks | 2 |\n| No erroneous noindex directives | 2 |\n\n---\n\n## Category 2: Indexability (12 points)\n\n### 2.1 Canonical Tags\n- Every indexable page must have a `<link rel=\"canonical\" href=\"...\">` tag\n- Canonical must point to itself (self-referencing) for the authoritative version\n- Check for conflicting canonicals (canonical in HTML vs. HTTP header)\n- Check for canonical chains (A canonicals to B, B canonicals to C — should be A to C)\n\n### 2.2 Duplicate Content\n- Check for www vs. non-www (both should resolve, one should redirect)\n- Check for HTTP vs. HTTPS (HTTP should redirect to HTTPS)\n- Check for trailing slash consistency (pick one pattern and redirect the other)\n- Check for parameter-based duplicates (`?sort=price` creating duplicate pages)\n\n### 2.3 Pagination\n- If paginated content exists, check for `rel=\"next\"` / `rel=\"prev\"` (note: Google ignores these as of 2019, but Bing still uses them)\n- Preferred: use `rel=\"canonical\"` on paginated pages pointing to a view-all page or the first page\n- Ensure paginated pages are not noindexed if they contain unique content\n\n### 2.4 Hreflang (international sites)\n- Check for `<link rel=\"alternate\" hreflang=\"xx\">` tags\n- Validate: reciprocal hreflang (if page A points to page B, B must point back to A)\n- Validate: x-default fallback exists\n- Check for language/region code validity (ISO 639-1 / ISO 3166-1)\n\n### 2.5 Index Bloat\n- Estimate number of indexed pages (check sitemap count, use `site:domain.com` estimate)\n- Compare indexed pages to actual valuable content pages\n- Flag if indexed pages significantly exceed content pages (index bloat from thin/duplicate/parameter pages)\n\n**Category Scoring:**\n| Check | Points |\n|---|---|\n| Canonical tags correct on all pages | 3 |\n| No duplicate content issues | 3 |\n| Pagination handled correctly | 2 |\n| Hreflang correct (if applicable) | 2 |\n| No index bloat | 2 |\n\n---\n\n## Category 3: Security (10 points)\n\n### 3.1 HTTPS Enforcement\n- Site must load over HTTPS\n- HTTP must redirect to HTTPS (301 redirect)\n- No mixed content warnings (HTTP resources on HTTPS pages)\n- SSL/TLS certificate must be valid and not expired\n\n### 3.2 Security Headers\nCheck HTTP response headers for:\n\n| Header | Required Value | Purpose |\n|---|---|---|\n| `Strict-Transport-Security` | `max-age=31536000; includeSubDomains` | Forces HTTPS |\n| `Content-Security-Policy` | Appropriate policy | Prevents XSS |\n| `X-Content-Type-Options` | `nosniff` | Prevents MIME sniffing |\n| `X-Frame-Options` | `DENY` or `SAMEORIGIN` | Prevents clickjacking |\n| `Referrer-Policy` | `strict-origin-when-cross-origin` or stricter | Controls referrer data |\n| `Permissions-Policy` | Appropriate restrictions | Controls browser features |\n\n**Category Scoring:**\n| Check | Points |\n|---|---|\n| HTTPS enforced with valid cert | 4 |\n| HSTS header present | 2 |\n| X-Content-Type-Options | 1 |\n| X-Frame-Options | 1 |\n| Referrer-Policy | 1 |\n| Content-Security-Policy | 1 |\n\n---\n\n## Category 4: URL Structure (8 points)\n\n### 4.1 Clean URLs\n- URLs should be human-readable: `/blog/seo-guide` not `/blog?id=12345`\n- No session IDs in URLs\n- Lowercase only (no mixed case)\n- Hyphens for word separation (not underscores)\n- No special characters or encoded spaces\n\n### 4.2 Logical Hierarchy\n- URL path should reflect site architecture: `/category/subcategory/page`\n- Flat where appropriate — avoid unnecessarily deep nesting\n- Consistent pattern across the site\n\n### 4.3 Redirect Chains\n- Check for redirect chains (A redirects to B redirects to C)\n- Maximum 1 hop recommended (A redirects to C directly)\n- Check for redirect loops\n- All redirects should be 301 (permanent), not 302 (temporary), unless intentionally temporary\n\n### 4.4 Parameter Handling\n- URL parameters should not create duplicate indexable pages\n- Use canonical tags or `robots.txt` Disallow for parameter variations\n- Configure parameter handling in Google Search Console and Bing Webmaster Tools\n\n**Category Scoring:**\n| Check | Points |\n|---|---|\n| Clean, readable URLs | 2 |\n| Logical hierarchy | 2 |\n| No redirect chains (max 1 hop) | 2 |\n| Parameter handling configured | 2 |\n\n---\n\n## Category 5: Mobile Optimization (10 points)\n\n### Critical Context\nAs of **July 2024**, Google crawls ALL sites exclusively with mobile Googlebot. There is no desktop crawling. If your site does not work on mobile, it does not work for Google. Period.\n\n### 5.1 Responsive Design\n- Check for `<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">`\n- Content must not require horizontal scrolling on mobile\n- No fixed-width layouts wider than viewport\n\n### 5.2 Tap Targets\n- Interactive elements (buttons, links) must be at least 48x48 CSS pixels\n- Minimum 8px spacing between tap targets\n- Check that navigation is usable on mobile\n\n### 5.3 Font Sizes\n- Base font size should be at least 16px\n- No text requiring zoom to read\n- Sufficient contrast ratio (WCAG AA: 4.5:1 for normal text, 3:1 for large text)\n\n### 5.4 Mobile Content Parity\n- All content visible on desktop must also be visible on mobile\n- No hidden content behind \"read more\" toggles that Googlebot cannot expand (though Google has improved at expanding these as of 2025)\n- Images and media must load on mobile\n\n**Category Scoring:**\n| Check | Points |\n|---|---|\n| Viewport meta tag correct | 3 |\n| Responsive layout (no horizontal scroll) | 3 |\n| Tap targets appropriately sized | 2 |\n| Font sizes legible | 2 |\n\n---\n\n## Category 6: Core Web Vitals (15 points)\n\n### 2026 Metrics and Thresholds\nCore Web Vitals use the **75th percentile** of real user data (field data) as the benchmark. Lab data is useful for debugging but field data determines the ranking signal.\n\n| Metric | Good | Needs Improvement | Poor | Notes |\n|---|---|---|---|---|\n| **LCP** (Largest Contentful Paint) | < 2.5s | 2.5s - 4.0s | > 4.0s | Measures loading — time until largest visible element renders |\n| **INP** (Interaction to Next Paint) | < 200ms | 200ms - 500ms | > 500ms | Replaced FID in March 2024. Measures ALL interactions, not just first |\n| **CLS** (Cumulative Layout Shift) | < 0.1 | 0.1 - 0.25 | > 0.25 | Measures visual stability — unexpected layout movements |\n\n### How to Assess Without CrUX Data\nWhen real user data is unavailable, estimate from page characteristics:\n- **LCP**: Check largest above-fold element. Is it an image (check size/format)? Is it text (check web font loading)? Server response time (TTFB)?\n- **INP**: Check for heavy JavaScript on page. Long tasks (>50ms) block interactivity. Check for third-party scripts.\n- **CLS**: Check for images without explicit width/height. Check for dynamically inserted content above the fold. Check for web fonts causing layout shift (FOUT/FOIT).\n\n### Common LCP Fixes\n1. Optimize hero images: WebP/AVIF format, correct sizing, preload with `<link rel=\"preload\">`\n2. Reduce server response time (TTFB < 800ms)\n3. Eliminate render-blocking CSS/JS\n4. Preconnect to critical third-party origins\n\n### Common INP Fixes\n1. Break up long tasks (>50ms) into smaller chunks using `requestIdleCallback` or `scheduler.yield()`\n2. Reduce third-party JavaScript\n3. Use `content-visibility: auto` for off-screen content\n4. Debounce/throttle event handlers\n\n### Common CLS Fixes\n1. Always include `width` and `height` attributes on images and videos\n2. Reserve space for ads and embeds with CSS `aspect-ratio` or explicit dimensions\n3. Use `font-display: swap` with size-adjusted fallback fonts\n4. Avoid inserting content above existing content after page load\n\n**Category Scoring:**\n| Check | Points |\n|---|---|\n| LCP < 2.5s | 5 |\n| INP < 200ms | 5 |\n| CLS < 0.1 | 5 |\n\n---\n\n## Category 7: Server-Side Rendering (15 points) — CRITICAL FOR GEO\n\n### Why SSR Is Mandatory for AI Visibility\nAI crawlers (GPTBot, PerplexityBot, ClaudeBot, etc.) do **NOT execute JavaScript**. They fetch the raw HTML and parse it. If your content is rendered client-side by React, Vue, Angular, or any other JavaScript framework, AI crawlers see an empty page.\n\nEven Googlebot, which does execute JavaScript, deprioritizes JS-rendered content due to the additional crawl budget required. Google processes JS rendering in a separate \"rendering queue\" that can delay indexing by days or weeks.\n\n### Detection Method\n1. Fetch the page with curl (no JavaScript execution): `curl -s [URL]`\n2. Compare the raw HTML to the rendered DOM (via browser)\n3. If key content (headings, paragraphs, product info, article text) is MISSING from the curl output, the site relies on client-side rendering\n\n### What to Check\n- **Main content text**: Is the article body / product description / page content in the raw HTML?\n- **Headings**: Are H1, H2, H3 tags present in raw HTML?\n- **Navigation**: Is the main navigation server-rendered?\n- **Structured data**: Is JSON-LD in the raw HTML or injected by JavaScript?\n- **Meta tags**: Are title, description, canonical, OG tags in the raw HTML?\n- **Internal links**: Are navigation and content links in the raw HTML? (Critical for crawlability)\n\n### SSR Solutions to Recommend\n| Framework | SSR Solution |\n|---|---|\n| React | Next.js (SSR/SSG), Remix, Gatsby (SSG) |\n| Vue | Nuxt.js (SSR/SSG) |\n| Angular | Angular Universal |\n| Svelte | SvelteKit |\n| Generic | Prerender.io (prerendering service), Rendertron |\n\n### Scoring Detail\n- All key content server-rendered: 15 points\n- Main content server-rendered but some elements JS-only: 10 points\n- Critical content requires JS (product info, article text): 5 points\n- Entire page is client-rendered (empty body in raw HTML): 0 points\n\n**Category Scoring:**\n| Check | Points |\n|---|---|\n| Main content in raw HTML | 8 |\n| Meta tags + structured data in raw HTML | 4 |\n| Internal links in raw HTML | 3 |\n\n---\n\n## Category 8: Page Speed & Server Performance (15 points)\n\n### 8.1 Time to First Byte (TTFB)\n- Target: **< 800ms** (ideally < 200ms)\n- Measure with curl: `curl -o /dev/null -s -w 'TTFB: %{time_starttransfer}s\\n' [URL]`\n- If TTFB > 800ms: check server location, caching, database queries, CDN usage\n\n### 8.2 Resource Optimization\n- Total page weight target: **< 2MB** (critical pages < 1MB)\n- Check for uncompressed resources (gzip/brotli compression should be enabled)\n- Check for unminified CSS and JavaScript\n- Check for unused CSS/JS (can represent 50%+ of downloaded bytes on many sites)\n\n### 8.3 Image Optimization\n- Check image formats: WebP or AVIF preferred over JPEG/PNG\n- Check for oversized images (images larger than display size)\n- Check for lazy loading: images below fold should have `loading=\"lazy\"`\n- Check for explicit dimensions (width/height attributes prevent CLS)\n- Above-fold images should NOT be lazy loaded (harms LCP)\n\n### 8.4 Code Splitting and Lazy Loading\n- JavaScript should be code-split so each page only loads what it needs\n- Check for large JavaScript bundles (> 200KB compressed is a warning, > 500KB is critical)\n- Third-party scripts should load asynchronously (`async` or `defer`)\n- Check for render-blocking resources in `<head>`\n\n### 8.5 Caching\n- Check `Cache-Control` headers on static resources (images, CSS, JS)\n- Static assets should have long cache times: `max-age=31536000` (1 year) with content-hashed filenames\n- HTML pages should have shorter cache or `no-cache` with validation (`ETag` or `Last-Modified`)\n\n### 8.6 CDN Usage\n- Check if static resources are served from a CDN (different domain or CDN-specific headers)\n- For global audience, CDN is critical for consistent performance\n- Check for CDN-specific headers: `CF-Ray` (Cloudflare), `X-Cache` (AWS CloudFront), `X-Served-By` (Fastly)\n\n**Category Scoring:**\n| Check | Points |\n|---|---|\n| TTFB < 800ms | 3 |\n| Page weight < 2MB | 2 |\n| Images optimized (format, size, lazy) | 3 |\n| JS bundles reasonable (< 200KB compressed) | 2 |\n| Compression enabled (gzip/brotli) | 2 |\n| Cache headers on static resources | 2 |\n| CDN in use | 1 |\n\n---\n\n## Category 9: Agent-Readiness Signals (non-scoring)\n\nThese checks surface emerging AI agent compatibility signals. None contribute to the numeric score — they produce a pass or a recommendation. The underlying standards are either IETF drafts or early-adoption features; penalizing absence would be unfair.\n\n### 9.1 RFC 8288 Link Headers (Service Discovery)\n\nRFC 8288 (Web Linking) defines the HTTP `Link:` response header. Servers can use it to advertise related resources — API catalog, service docs, MCP server card — in a machine-readable way, without HTML parsing.\n\n**How to check:** Capture all `Link:` response headers from the standard homepage fetch (no extra request).\n\n**What to look for:**\n- Parse `<url>; rel=\"relation-type\"` pairs.\n- High-value rel types: `api-catalog` (RFC 9609), `describedby`, `service-doc`, `mcp-server-card`.\n\n**When to surface a recommendation:** Only for API-first sites (API docs linked in nav, `/api/` or `/developers/` paths, swagger/OpenAPI in sitemap). Omit this section entirely for standard business sites — absence is expected and not noteworthy.\n\n| State | Treatment |\n|---|---|\n| `Link:` headers present, known rel types | Informational — document what was found |\n| `Link:` headers present, unknown rel types | Informational — note and explain |\n| Absent, API-first site | Recommendation — explain and suggest implementation |\n| Absent, standard business site | Omit — do not surface |\n\n### 9.2 Markdown Content Negotiation\n\nChecks if the server responds to `Accept: text/markdown` with `Content-Type: text/markdown`. Cloudflare's \"Markdown for Agents\" feature enables this — AI agents receive clean Markdown instead of HTML, eliminating boilerplate stripping and improving content extraction accuracy.\n\n**How to check:** Send a GET to the homepage with `Accept: text/markdown`. This is one additional HTTP request per audit.\n\n**Evaluation:**\n- If response `Content-Type` is `text/markdown` (or `text/markdown; charset=utf-8`): pass — note as a leading-edge capability.\n- Otherwise: forward-looking recommendation, not a failure.\n- If the request errors or returns non-200: skip and note the error. Do not penalize.\n\n| State | Treatment |\n|---|---|\n| `text/markdown` returned | Bonus — note as a leading-edge capability |\n| Standard HTML returned | Forward-looking recommendation |\n| Request errors / non-200 | Skip, note the error, do not penalize |\n\n---\n\n## IndexNow Protocol\n\n### What It Is\nIndexNow is an open protocol that allows websites to notify search engines instantly when content is created, updated, or deleted. Supported by Bing, Yandex, Seznam, and Naver. Google does NOT support IndexNow but monitors the protocol.\n\n### Why It Matters for GEO\nChatGPT uses Bing's index. Bing Copilot uses Bing's index. Faster Bing indexing means faster AI visibility on two major platforms.\n\n### Implementation Check\n1. Check for IndexNow key file: `https://[domain]/.well-known/indexnow-key.txt` or similar\n2. Check if CMS has IndexNow plugin (WordPress: IndexNow plugin; many modern CMS platforms support it natively)\n3. If not implemented, recommend adding it with instructions\n\n---\n\n## Overall Scoring\n\n| Category | Max Points | Weight |\n|---|---|---|\n| Crawlability | 15 | Core foundation |\n| Indexability | 12 | Core foundation |\n| Security | 10 | Trust signal |\n| URL Structure | 8 | Crawl efficiency |\n| Mobile Optimization | 10 | Google requirement |\n| Core Web Vitals | 15 | Ranking signal |\n| Server-Side Rendering | 15 | GEO critical |\n| Page Speed & Server | 15 | Performance |\n| **Total** | **100** | |\n\nNon-scoring checks (Category 9) appear in the output under \"Agent-Readiness Signals\" and do not affect this total.\n\n### Score Interpretation\n- **90-100**: Excellent — technically sound for both traditional SEO and GEO\n- **70-89**: Good — minor issues to address but fundamentally solid\n- **50-69**: Needs Work — significant technical debt impacting visibility\n- **30-49**: Poor — major issues blocking crawling, indexing, or AI visibility\n- **0-29**: Critical — fundamental technical failures requiring immediate attention\n\n---\n\n## Output Format\n\nGenerate **GEO-TECHNICAL-AUDIT.md** with:\n\n```markdown\n# GEO Technical SEO Audit — [Domain]\nDate: [Date]\n\n## Technical Score: XX/100\n\n## Score Breakdown\n| Category | Score | Status |\n|---|---|---|\n| Crawlability | XX/15 | Pass/Warn/Fail |\n| Indexability | XX/12 | Pass/Warn/Fail |\n| Security | XX/10 | Pass/Warn/Fail |\n| URL Structure | XX/8 | Pass/Warn/Fail |\n| Mobile Optimization | XX/10 | Pass/Warn/Fail |\n| Core Web Vitals | XX/15 | Pass/Warn/Fail |\n| Server-Side Rendering | XX/15 | Pass/Warn/Fail |\n| Page Speed & Server | XX/15 | Pass/Warn/Fail |\n\nStatus: Pass = 80%+ of category points, Warn = 50-79%, Fail = <50%\n\n## AI Crawler Access\n| Crawler | User-Agent | Status | Recommendation |\n|---|---|---|---|\n| GPTBot | GPTBot | Allowed/Blocked | [Action] |\n| Googlebot | Googlebot | Allowed/Blocked | [Action] |\n[Continue for all AI crawlers]\n\n## Critical Issues (fix immediately)\n[List with specific page URLs and what is wrong]\n\n## Warnings (fix this month)\n[List with details]\n\n## Recommendations (optimize this quarter)\n[List with details]\n\n## Agent-Readiness Signals (non-scoring)\n\n### RFC 8288 Link Headers (Service Discovery)\n\n**Status:** Present / Absent / Not Applicable\n\n<!-- If present: -->\n| Relation Type | URL | Meaning |\n|---|---|---|\n| api-catalog | /.well-known/api-catalog | Machine-readable index of available APIs |\n| mcp-server-card | /.well-known/mcp.json | MCP server capability declaration |\n\nAI agents and API clients can discover your services without parsing HTML.\n\n<!-- If absent, API-first site only: -->\n**Informational Recommendation:** This site has API/developer-oriented content but no `Link:` headers advertising discoverable services.\n\nExample: `Link: </.well-known/api-catalog>; rel=\"api-catalog\"`\n\nRelevant for: sites with public APIs, OpenAPI docs, or MCP server integrations.\nReference: RFC 8288, RFC 9609.\n\n<!-- If absent, standard business site: omit this section entirely -->\n\n### Markdown Content Negotiation\n\n**Status:** Supported / Not Supported\n**Test:** GET [url] with `Accept: text/markdown`\n**Response Content-Type:** [value]\n\n<!-- If supported: -->\nThis site serves clean Markdown to AI agents on request. AI crawlers that support content negotiation receive formatted text without HTML boilerplate.\n\n<!-- If not supported: -->\n**Forward-Looking Recommendation:** Cloudflare Workers/Pages sites can enable Markdown content negotiation with a one-line configuration change. When an AI agent sends `Accept: text/markdown`, the server responds with clean Markdown instead of HTML.\n\n- Currently Cloudflare-specific\n- Relevant for: sites already on Cloudflare infrastructure\n- Other CDNs and frameworks expected to adopt this pattern as AI agent traffic grows\n\n## Detailed Findings\n[Per-category breakdown with evidence]\n```\n","skills/geo-update/SKILL.md":"---\nname: geo-update\ndescription: Pull the latest GEO-SEO skill updates from the upstream repository. Compares installed files against the latest release, shows what changed, and updates all skills, agents, scripts, and schema templates in place.\nallowed-tools:\n  - Bash\n  - Read\n  - Write\n---\n\n# GEO-SEO Update Skill\n\n## Purpose\n\nUpdates the locally installed GEO-SEO skills, agents, scripts, and schema templates to the latest version from the upstream repository. Shows a summary of what changed before and after the update.\n\n---\n\n## Update Workflow\n\n### Step 1: Determine Installed Location\n\nThe GEO-SEO toolkit installs to these locations under `~/.claude/`:\n\n| Component | Install Path |\n|-----------|-------------|\n| Main skill | `~/.claude/skills/geo/` |\n| Sub-skills | `~/.claude/skills/geo-*/` |\n| Agents | `~/.claude/agents/geo-*.md` |\n| Scripts | `~/.claude/skills/geo/scripts/` |\n| Schema templates | `~/.claude/skills/geo/schema/` |\n| Hooks | `~/.claude/skills/geo/hooks/` |\n\nVerify the installation exists by checking for `~/.claude/skills/geo/SKILL.md`. If it does not exist, inform the user that GEO-SEO is not installed and suggest running the installer instead.\n\n### Step 2: Clone Latest from Upstream\n\n```bash\nTEMP_DIR=$(mktemp -d)\ngit clone --depth 1 https://github.com/zubair-trabzada/geo-seo-claude.git \"$TEMP_DIR/repo\"\n```\n\nIf the clone fails, report the error and stop. Do not modify any installed files.\n\n### Step 3: Compare Installed vs Latest\n\nBefore copying files, generate a diff summary so the user knows what will change:\n\n1. For each component directory, compare the installed files against the cloned files using `diff --recursive --brief`.\n2. Categorise changes as:\n   - **New files** — exist in upstream but not locally\n   - **Modified files** — exist in both but differ\n   - **Removed files** — exist locally but not in upstream (these are NOT deleted automatically)\n3. Present the summary to the user.\n\n### Step 4: Apply Updates\n\nCopy files from the cloned repo over the installed locations:\n\n```bash\nCLAUDE_DIR=\"${HOME}/.claude\"\nSOURCE_DIR=\"$TEMP_DIR/repo\"\n\n# Main skill\ncp -r \"$SOURCE_DIR/geo/\"* \"$CLAUDE_DIR/skills/geo/\"\n\n# Sub-skills\nfor skill_dir in \"$SOURCE_DIR/skills\"/*/; do\n    skill_name=$(basename \"$skill_dir\")\n    mkdir -p \"$CLAUDE_DIR/skills/${skill_name}\"\n    cp -r \"$skill_dir\"* \"$CLAUDE_DIR/skills/${skill_name}/\"\ndone\n\n# Agents\nfor agent_file in \"$SOURCE_DIR/agents/\"*.md; do\n    cp \"$agent_file\" \"$CLAUDE_DIR/agents/\"\ndone\n\n# Scripts\nif [ -d \"$SOURCE_DIR/scripts\" ]; then\n    cp -r \"$SOURCE_DIR/scripts/\"* \"$CLAUDE_DIR/skills/geo/scripts/\"\n    chmod +x \"$CLAUDE_DIR/skills/geo/scripts/\"*.py 2>/dev/null || true\nfi\n\n# Schema templates\nif [ -d \"$SOURCE_DIR/schema\" ]; then\n    cp -r \"$SOURCE_DIR/schema/\"* \"$CLAUDE_DIR/skills/geo/schema/\"\nfi\n\n# Hooks\nif [ -d \"$SOURCE_DIR/hooks\" ] && [ \"$(ls -A \"$SOURCE_DIR/hooks\" 2>/dev/null)\" ]; then\n    mkdir -p \"$CLAUDE_DIR/skills/geo/hooks\"\n    cp -r \"$SOURCE_DIR/hooks/\"* \"$CLAUDE_DIR/skills/geo/hooks/\"\n    chmod +x \"$CLAUDE_DIR/skills/geo/hooks/\"* 2>/dev/null || true\nfi\n```\n\n### Step 5: Update Python Dependencies\n\nIf `requirements.txt` exists in the upstream repo and differs from the installed version:\n\n```bash\npython3 -m pip install -r \"$SOURCE_DIR/requirements.txt\" --quiet\n```\n\nReport any failures but do not treat them as fatal.\n\n### Step 6: Clean Up\n\n```bash\nrm -rf \"$TEMP_DIR\"\n```\n\n### Step 7: Report Results\n\nPresent a summary:\n\n```\nGEO-SEO Update Complete\n=======================\nNew files:      [count]\nModified files: [count]\nUnchanged:      [count]\nRemoved upstream (kept locally): [count]\n\nDependencies: [updated / unchanged / failed]\n```\n\nIf there were removed files upstream, list them and suggest the user review whether to delete them manually.\n\n---\n\n## Important Notes\n\n- **Never delete locally installed files** that no longer exist upstream. The user may have customised them. List them and let the user decide.\n- **Never modify `~/.claude/settings.json` or `~/.claude/settings.local.json`** — these are user configuration files, not part of the GEO-SEO toolkit.\n- **If already up to date** (no diff), report that and skip the copy step.\n- **Restart notice:** Remind the user that skill changes take effect in new Claude Code sessions. They should restart their session to use the updated skills.\n"},"items":[{"name":"CLAUDE.md","path":"CLAUDE.md","rawUrl":"https://raw.githubusercontent.com/zubair-trabzada/geo-seo-claude/HEAD/CLAUDE.md","title":"Claude Agent Guidelines & System Prompt","category":"claude-rule","format":"markdown","content":"# CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.\n\n## What this is\n\nA **GEO-SEO analysis toolkit** distributed as a suite of Claude Code skills + subagents + Python\nscripts. \"GEO\" = Generative Engine Optimization — optimizing websites for AI search engines\n(ChatGPT, Claude, Perplexity, Gemini, Google AI Overviews) rather than only traditional search.\nPhilosophy: **GEO-first, SEO-supported.**\n\nThis repo is the **source**. Users install it into `~/.claude/` (see [install](#install--uninstall)),\nthen invoke `/geo <command> <url>` inside Claude Code. Audits are run from the user's own working\ndirectory and deliverables land there — never in this repo.\n\nDeep documentation already lives in [`docs/`](docs/) — read it before large changes and keep it in\nsync (per `CONTRIBUTING.md`):\n\n| Topic | File |\n|-------|------|\n| Component architecture & data flow | `docs/architecture.md` |\n| Composite GEO Score weights & formulas | `docs/scoring-methodology.md` |\n| Skills / agents / scripts / schemas map | `docs/skills-and-agents.md` |\n| Every `/geo` subcommand | `docs/commands-reference.md` |\n\n## Repository layout\n\n| Path | Contents |\n|------|----------|\n| `geo/SKILL.md` | Orchestrator — routes `/geo` subcommands, detects business type, fans out and synthesizes the audit |\n| `skills/geo-*/` | 15 sub-skills (one `SKILL.md` each) — the reusable units and single-purpose subcommands |\n| `agents/geo-*.md` | 5 parallel subagents launched during a full audit |\n| `scripts/*.py` | Python analysis scripts (`fetch_page`, `citability_scorer`, `brand_scanner`, `llmstxt_generator`, `crm_dashboard`) |\n| `scripts/webapp/` | Flask + HTMX CRM web UI (`app.py`) |\n| `schema/*.json` | JSON-LD schema templates by business type |\n| `templates/` | `geo-report-style.css` + `geo-report-template.html` for the PDF report |\n| `docs/` | Long-form documentation (keep in sync with code) |\n| `examples/` | Sample audit outputs, proposals, demo CRM data |\n| `tests/` | Test suite (see [Testing](#testing)) |\n| `white-label/` | Agency rebranding config (`brand_config.py`, `brand.example.json`) |\n| `install.sh` / `install-win.sh` / `uninstall.sh` | Installers and uninstaller |\n\n## Architecture (in brief)\n\nThree layers — see `docs/architecture.md` for the full picture:\n\n1. **Orchestrator** (`geo/SKILL.md`) routes subcommands, detects business type\n   (SaaS / Local / E-commerce / Publisher / Agency / Other, which tailors recommendations), and\n   for a full `/geo audit` fans out to subagents then synthesizes a composite **GEO Score (0-100)**.\n2. **5 parallel subagents** (`agents/geo-*.md`) run simultaneously during an audit; each owns a\n   slice (AI visibility, platform analysis, technical, content, schema) and writes a report section.\n3. **15 sub-skills** (`skills/geo-*/`) are the reusable units the subagents invoke and the targets\n   of single-purpose subcommands (`citability`, `crawlers`, `llmstxt`, …), plus the agency layer\n   (`geo-prospect` CRM, `geo-proposal`, `geo-compare`, `geo-report-pdf`, `geo-update`).\n\n**Two kinds of state:** audit deliverables are written to the user's current working directory;\nagency/CRM data persists under `~/.geo-prospects/` (`prospects.json`, `audits/`, `proposals/`,\n`reports/`), which the Python scripts and the Flask webapp read/write directly.\n\n## Install / uninstall\n\n`install.sh` copies `geo/`, `skills/`, `agents/`, `scripts/`, `schema/`, and `templates/` into\n`~/.claude/`, creates a Python venv at `~/.claude/skills/geo/.venv` (using `uv` if available, else\nstdlib `venv` + `pip`), installs `requirements.txt`, and **rewrites the script shebangs to point at\nthat venv**. That is why installed scripts run under `~/.claude/skills/geo/.venv/bin/python3`\n(`.venv/Scripts/python.exe` when `install.sh` is run from Git Bash on Windows) while\nthe scripts in this repo carry a portable `#!/usr/bin/env python3`. `uninstall.sh` reverses it.\n\n## Running the scripts (from the repo)\n\nScripts print **JSON to stdout** so skills/agents can parse them — preserve that contract. Run them\nwith any Python that has `requirements.txt` installed (beautifulsoup4, requests, lxml, playwright,\nPillow, flask, rich, validators):\n\n```bash\npython3 -m venv .venv && . .venv/bin/activate && pip install -r requirements.txt\npython3 -m playwright install chromium   # fetch_page.py uses Playwright for SSR/JS checks\n\npython3 scripts/fetch_page.py <url>\npython3 scripts/citability_scorer.py <url>\npython3 scripts/brand_scanner.py \"<brand name>\"\npython3 scripts/llmstxt_generator.py <url>\npython3 scripts/crm_dashboard.py          # rich CLI over ~/.geo-prospects\npython3 scripts/webapp/app.py             # CRM web UI at http://localhost:5050\n```\n\n## Testing\n\nTests are pytest-style classes (`tests/test_fetch_page_ssr.py`, using `unittest.mock`, no network).\n`unittest discover` does not collect them, so run them with pytest (`pip install pytest`):\n\n```bash\npython3 -m pytest tests/                                        # all tests\npython3 -m pytest tests/test_fetch_page_ssr.py -k ssr_content   # a single test\n```\n\n## Conventions\n\n- **Docs stay in sync:** when changing code or behavior, update the matching file in `docs/`\n  (a `CONTRIBUTING.md` requirement). Match existing structure and tone.\n- **Commit messages:** imperative present tense, first line ≤ 72 chars, reference issues after.\n- **Scripts → JSON stdout.** Keep the machine-readable output contract.\n- Some code and docstrings are in Italian (e.g. `scripts/crm_dashboard.py`) — match the language of\n  the file you edit.\n- Crawl quality gates (from `geo/SKILL.md`): max 50 pages/audit, 30s fetch timeout, 1s delay between\n  requests, max 5 concurrent, always respect robots.txt.\n- Market-context stats and dates in `geo/SKILL.md` / `README.md` are editorial point-in-time content,\n  not code.\n- White-labeling for agencies is driven by `white-label/` — don't hardcode brand strings that belong\n  in `brand.example.json`.\n","isInternal":false,"tokens":1556,"sizeBytes":5996},{"name":"SKILL.md","path":"geo/SKILL.md","rawUrl":"https://raw.githubusercontent.com/zubair-trabzada/geo-seo-claude/HEAD/geo/SKILL.md","title":"geo","category":"anthropic-skill","format":"markdown","content":"---\nname: geo\ndescription: >\n  GEO-first SEO analysis tool. Optimizes websites for AI-powered search engines\n  (ChatGPT, Claude, Perplexity, Gemini, Google AI Overviews) while maintaining\n  traditional SEO foundations. Performs full GEO audits, citability scoring,\n  AI crawler analysis, llms.txt generation, brand mention scanning, platform-specific\n  optimization, schema markup, technical SEO, content quality (E-E-A-T), and\n  client-ready GEO report generation. Use when user says \"geo\", \"seo\", \"audit\",\n  \"AI search\", \"AI visibility\", \"optimize\", \"citability\", \"llms.txt\", \"schema\",\n  \"brand mentions\", \"GEO report\", or any URL for analysis.\nallowed-tools: Read, Grep, Glob, Bash, WebFetch, Write\n---\n\n# GEO-SEO Analysis Tool — Claude Code Skill (February 2026)\n\n> **Philosophy:** GEO-first, SEO-supported. AI search is eating traditional search.\n> This tool optimizes for where traffic is going, not where it was.\n\n---\n\n## Quick Reference\n\n| Command | What It Does |\n|---------|-------------|\n| `/geo audit <url>` | Full GEO + SEO audit with parallel subagents |\n| `/geo page <url>` | Deep single-page GEO analysis |\n| `/geo citability <url>` | Score content for AI citation readiness |\n| `/geo crawlers <url>` | Check AI crawler access (robots.txt analysis) |\n| `/geo llmstxt <url>` | Analyze or generate llms.txt file |\n| `/geo brands <url>` | Scan brand mentions across AI-cited platforms |\n| `/geo platforms <url>` | Platform-specific optimization (ChatGPT, Perplexity, Google AIO) |\n| `/geo schema <url>` | Detect, validate, and generate structured data |\n| `/geo technical <url>` | Traditional technical SEO audit |\n| `/geo content <url>` | Content quality and E-E-A-T assessment |\n| `/geo report <url>` | Generate client-ready GEO deliverable |\n| `/geo report-pdf <url>` | Generate professional PDF report with charts and scores |\n| `/geo quick <url>` | 60-second GEO visibility snapshot |\n| `/geo prospect <cmd>` | CRM-lite: manage prospects through the sales pipeline |\n| `/geo proposal <domain>` | Auto-generate client proposal from audit data |\n| `/geo compare <domain>` | Monthly delta report: show score improvements to client |\n| `/geo update` | Pull latest GEO skill updates from upstream |\n\n---\n\n## Market Context (Why GEO Matters)\n\n| Metric | Value | Source |\n|--------|-------|--------|\n| GEO services market (2025) | $850M-$886M | Yahoo Finance / Superlines |\n| Projected GEO market (2031) | $7.3B (34% CAGR) | Industry analysts |\n| AI-referred sessions growth | +527% (Jan-May 2025) | SparkToro |\n| AI traffic conversion vs organic | 4.4x higher | Industry data |\n| Google AI Overviews reach | 1.5B users/month, 200+ countries | Google |\n| ChatGPT weekly active users | 900M+ | OpenAI |\n| Perplexity monthly queries | 500M+ | Perplexity |\n| Gartner: search traffic drop by 2028 | -50% | Gartner |\n| Marketers investing in GEO | Only 23% | Industry surveys |\n| Brand mentions vs backlinks for AI | 3x stronger correlation | Ahrefs (Dec 2025) |\n\n---\n\n## Orchestration Logic\n\n### Full Audit (`/geo audit <url>`)\n\n**Phase 1: Discovery (Sequential)**\n1. Fetch homepage HTML (curl or WebFetch)\n2. Detect business type (SaaS, Local, E-commerce, Publisher, Agency, Other)\n3. Extract key pages from sitemap.xml or internal links (up to 50 pages)\n\n**Phase 2: Parallel Analysis (Delegate to Subagents)**\nLaunch these 5 subagents simultaneously:\n\n| Subagent | File | Responsibility |\n|----------|------|---------------|\n| geo-ai-visibility | `agents/geo-ai-visibility.md` | GEO audit, citability, AI crawlers, llms.txt, brand mentions |\n| geo-platform-analysis | `agents/geo-platform-analysis.md` | Platform-specific optimization (ChatGPT, Perplexity, Google AIO) |\n| geo-technical | `agents/geo-technical.md` | Technical SEO, Core Web Vitals, crawlability, indexability |\n| geo-content | `agents/geo-content.md` | Content quality, E-E-A-T, readability, AI content detection |\n| geo-schema | `agents/geo-schema.md` | Schema markup detection, validation, generation |\n\n**Phase 3: Synthesis (Sequential)**\n1. Collect all subagent reports\n2. Calculate composite GEO Score (0-100)\n3. Generate prioritized action plan\n4. Output client-ready report\n\n### Scoring Methodology\n\n| Category | Weight | Measured By |\n|----------|--------|-------------|\n| AI Citability & Visibility | 25% | Passage scoring, answer block quality, AI crawler access |\n| Brand Authority Signals | 20% | Mentions on Reddit, YouTube, Wikipedia, LinkedIn; entity presence |\n| Content Quality & E-E-A-T | 20% | Expertise signals, original data, author credentials |\n| Technical Foundations | 15% | SSR, Core Web Vitals, crawlability, mobile, security |\n| Structured Data | 10% | Schema completeness, JSON-LD validation, rich result eligibility |\n| Platform Optimization | 10% | Platform-specific readiness (Google AIO, ChatGPT, Perplexity) |\n\n---\n\n## Business Type Detection\n\nAnalyze homepage for patterns:\n\n| Type | Signals |\n|------|---------|\n| **SaaS** | Pricing page, \"Sign up\", \"Free trial\", \"/app\", \"/dashboard\", API docs |\n| **Local Service** | Phone number, address, \"Near me\", Google Maps embed, service area |\n| **E-commerce** | Product pages, cart, \"Add to cart\", price elements, product schema |\n| **Publisher** | Blog, articles, bylines, publication dates, article schema |\n| **Agency** | Portfolio, case studies, \"Our services\", client logos, testimonials |\n| **Other** | Default — apply general GEO best practices |\n\nAdjust recommendations based on detected type. Local businesses need LocalBusiness schema and Google Business Profile optimization. SaaS needs SoftwareApplication schema and comparison page strategy. E-commerce needs Product schema and review aggregation.\n\n---\n\n## Sub-Skills (14 Specialized Components)\n\n| # | Skill | Directory | Purpose |\n|---|-------|-----------|---------|\n| 1 | geo-audit | `skills/geo-audit/` | Full audit orchestration and scoring |\n| 2 | geo-citability | `skills/geo-citability/` | Passage-level AI citation readiness |\n| 3 | geo-crawlers | `skills/geo-crawlers/` | AI crawler access and robots.txt |\n| 4 | geo-llmstxt | `skills/geo-llmstxt/` | llms.txt standard analysis and generation |\n| 5 | geo-brand-mentions | `skills/geo-brand-mentions/` | Brand presence on AI-cited platforms |\n| 6 | geo-platform-optimizer | `skills/geo-platform-optimizer/` | Platform-specific AI search optimization |\n| 7 | geo-schema | `skills/geo-schema/` | Structured data for AI discoverability |\n| 8 | geo-technical | `skills/geo-technical/` | Technical SEO foundations |\n| 9 | geo-content | `skills/geo-content/` | Content quality and E-E-A-T |\n| 10 | geo-report | `skills/geo-report/` | Client-ready deliverable generation |\n| 11 | geo-prospect | `skills/geo-prospect/` | CRM-lite prospect and client pipeline management |\n| 12 | geo-proposal | `skills/geo-proposal/` | Auto-generate client proposals from audit data |\n| 13 | geo-compare | `skills/geo-compare/` | Monthly delta tracking and progress reports |\n| 14 | geo-update | `skills/geo-update/` | Pull latest updates from upstream repository |\n\n---\n\n## Subagents (5 Parallel Workers)\n\n| Agent | File | Skills Used |\n|-------|------|-------------|\n| geo-ai-visibility | `agents/geo-ai-visibility.md` | geo-citability, geo-crawlers, geo-llmstxt, geo-brand-mentions |\n| geo-platform-analysis | `agents/geo-platform-analysis.md` | geo-platform-optimizer |\n| geo-technical | `agents/geo-technical.md` | geo-technical |\n| geo-content | `agents/geo-content.md` | geo-content |\n| geo-schema | `agents/geo-schema.md` | geo-schema |\n\n---\n\n## Output Files\n\nAll commands generate structured output:\n\n| Command | Output File |\n|---------|------------|\n| `/geo audit` | `GEO-AUDIT-REPORT.md` |\n| `/geo page` | `GEO-PAGE-ANALYSIS.md` |\n| `/geo citability` | `GEO-CITABILITY-SCORE.md` |\n| `/geo crawlers` | `GEO-CRAWLER-ACCESS.md` |\n| `/geo llmstxt` | `llms.txt` (ready to deploy) |\n| `/geo brands` | `GEO-BRAND-MENTIONS.md` |\n| `/geo platforms` | `GEO-PLATFORM-OPTIMIZATION.md` |\n| `/geo schema` | `GEO-SCHEMA-REPORT.md` + generated JSON-LD |\n| `/geo technical` | `GEO-TECHNICAL-AUDIT.md` |\n| `/geo content` | `GEO-CONTENT-ANALYSIS.md` |\n| `/geo report` | `GEO-CLIENT-REPORT.md` (presentation-ready) |\n| `/geo report-pdf` | `GEO-REPORT.pdf` (professional PDF with charts) |\n| `/geo quick` | Inline summary (no file) |\n| `/geo prospect` | Updates `~/.geo-prospects/prospects.json` |\n| `/geo proposal` | `~/.geo-prospects/proposals/<domain>-proposal-<date>.md` |\n| `/geo compare` | `~/.geo-prospects/reports/<domain>-monthly-<YYYY-MM>.md` |\n\n---\n\n## PDF Report Generation\n\nThe `/geo report-pdf <url>` command converts `GEO-AUDIT-REPORT.md` into a styled, client-ready PDF.\n\n### Requirements\n- **pandoc** — `brew install pandoc`\n- **Google Chrome** — `/Applications/Google Chrome.app/` (standard Mac install)\n\nNo Python dependencies required for PDF generation.\n\n### What the PDF Includes\n- **Cover page** — dark navy gradient, GEO score badge, brand/domain/date/location metadata\n- **Color-coded score tables** — cells with `XX/100` values are automatically colored green/blue/amber/orange/red\n- **Severity-tagged findings** — Critical/High/Medium/Low sections get colored left-border callout blocks\n- **Section page breaks** — major sections break to new pages automatically\n- **Styled code blocks** — JSON schema templates render with dark monospace theme\n\n### Templates\nBundled at `~/.claude/skills/geo/templates/`:\n- `geo-report-style.css` — stylesheet (edit colors, fonts, layout here)\n- `geo-report-template.html` — pandoc HTML template (edit cover fields here)\n\n### Workflow\n1. Run `/geo audit <url>` to produce `GEO-AUDIT-REPORT.md`\n2. Run `/geo report-pdf` — extracts metadata from the report and runs:\n   ```bash\n   pandoc GEO-AUDIT-REPORT.md \\\n     --to html5 --standalone --embed-resources \\\n     --template ~/.claude/skills/geo/templates/geo-report-template.html \\\n     --css ~/.claude/skills/geo/templates/geo-report-style.css \\\n     --metadata brand_name=\"...\" --metadata geo_score=\"...\" \\\n     -o GEO-REPORT.html\n\n   \"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome\" \\\n     --headless=new --disable-gpu --no-sandbox \\\n     --print-to-pdf=\"$(pwd)/GEO-REPORT.pdf\" \\\n     --print-to-pdf-no-header --no-pdf-header-footer \\\n     --virtual-time-budget=5000 \\\n     \"file://$(pwd)/GEO-REPORT.html\"\n   ```\n3. Output: `GEO-REPORT.pdf` in the current directory\n\n---\n\n## Quality Gates\n\n- **Crawl limit:** Max 50 pages per audit (focus on quality over quantity)\n- **Timeout:** 30 seconds per page fetch\n- **Rate limiting:** 1-second delay between requests, max 5 concurrent\n- **Robots.txt:** Always respect, always check\n- **Duplicate detection:** Skip pages with >80% content similarity\n\n---\n\n## Quick Start Examples\n\n```\n# Full GEO audit of a website\n/geo audit https://example.com\n\n# Check if AI bots can see your site\n/geo crawlers https://example.com\n\n# Score a specific page for AI citability\n/geo citability https://example.com/blog/best-article\n\n# Generate an llms.txt file for your site\n/geo llmstxt https://example.com\n\n# Get a 60-second visibility snapshot\n/geo quick https://example.com\n\n# Generate a client-ready report\n/geo report https://example.com\n```\n","frontmatter":{"name":"geo","description":"GEO-first SEO analysis tool. Optimizes websites for AI-powered search engines (ChatGPT, Claude, Perplexity, Gemini, Google AI Overviews) while maintaining traditional SEO foundations. Performs full GEO audits, citability scoring, AI crawler analysis, llms.txt generation, brand mention scanning, platform-specific optimization, schema markup, technical SEO, content quality (E-E-A-T), and client-ready GEO report generation. Use when user says \"geo\", \"seo\", \"audit\", \"AI search\", \"AI visibility\", \"optimize\", \"citability\", \"llms.txt\", \"schema\", \"brand mentions\", \"GEO report\", or any URL for analysis.\n","allowed-tools":"Read, Grep, Glob, Bash, WebFetch, Write","allowedTools":["Read,","Grep,","Glob,","Bash,","WebFetch,","Write"]},"allowedTools":["Read,","Grep,","Glob,","Bash,","WebFetch,","Write"],"isInternal":false,"tokens":2898,"sizeBytes":11167},{"name":"SKILL.md","path":"skills/geo-audit/SKILL.md","rawUrl":"https://raw.githubusercontent.com/zubair-trabzada/geo-seo-claude/HEAD/skills/geo-audit/SKILL.md","title":"geo-audit","category":"anthropic-skill","format":"markdown","content":"---\nname: geo-audit\ndescription: Full website GEO+SEO audit with parallel subagent delegation. Orchestrates a comprehensive Generative Engine Optimization audit across AI citability, platform analysis, technical infrastructure, content quality, and schema markup. Produces a composite GEO Score (0-100) with prioritized action plan.\nallowed-tools:\n  - Read\n  - Grep\n  - Glob\n  - Bash\n  - WebFetch\n  - Write\n---\n\n# GEO Audit Orchestration Skill\n\n## Purpose\n\nThis skill performs a comprehensive Generative Engine Optimization (GEO) audit of any website. GEO is the practice of optimizing web content so that AI systems (ChatGPT, Claude, Perplexity, Gemini, etc.) can discover, understand, cite, and recommend it. This audit measures how well a site performs across all GEO dimensions and produces an actionable improvement plan.\n\n## Key Insight\n\nTraditional SEO optimizes for search engine rankings. GEO optimizes for AI citation and recommendation. Sites that score high on GEO metrics see 30-115% more visibility in AI-generated responses (Georgia Tech / Princeton / IIT Delhi 2024 study). The two disciplines overlap but have distinct requirements.\n\n---\n\n## Audit Workflow\n\n### Phase 1: Discovery and Reconnaissance\n\n**Step 1: Fetch Homepage and Detect Business Type**\n\n1. Use WebFetch to retrieve the homepage at the provided URL.\n2. Extract the following signals:\n   - Page title, meta description, H1 heading\n   - Navigation menu items (reveals site structure)\n   - Footer content (reveals business info, location, legal pages)\n   - Schema.org markup on homepage (Organization, LocalBusiness, etc.)\n   - Pricing page link (SaaS indicator)\n   - Product listing patterns (E-commerce indicator)\n   - Blog/resource section (Publisher indicator)\n   - Service pages (Agency indicator)\n   - Address/phone/Google Maps embed (Local business indicator)\n\n3. Classify the business type using these patterns:\n\n| Business Type | Detection Signals |\n|---|---|\n| **SaaS** | Pricing page, \"Sign up\" / \"Free trial\" CTAs, app.domain.com subdomain, feature comparison tables, integration pages |\n| **Local Business** | Physical address on homepage, Google Maps embed, \"Near me\" content, LocalBusiness schema, service area pages |\n| **E-commerce** | Product listings, shopping cart, product schema, category pages, price displays, \"Add to cart\" buttons |\n| **Publisher** | Blog-heavy navigation, article schema, author pages, date-based archives, RSS feeds, high content volume |\n| **Agency/Services** | Case studies, portfolio, \"Our Work\" section, team page, client logos, service descriptions |\n| **Hybrid** | Combination of above signals -- classify by dominant pattern |\n\n**Step 2: Crawl Sitemap and Internal Links**\n\n1. Attempt to fetch `/sitemap.xml` and `/sitemap_index.xml`.\n2. If sitemap exists, extract up to 50 unique page URLs prioritized by:\n   - Homepage (always include)\n   - Top-level navigation pages\n   - High-value pages (pricing, about, contact, key service/product pages)\n   - Blog posts (sample 5-10 most recent)\n   - Category/landing pages\n3. If no sitemap exists, crawl internal links from the homepage:\n   - Extract all `<a href>` links pointing to the same domain\n   - Follow up to 2 levels deep\n   - Prioritize pages linked from main navigation\n4. Respect `robots.txt` directives -- do not fetch disallowed paths.\n5. Enforce a maximum of 50 pages and a 30-second timeout per fetch.\n\n**Step 3: Collect Page-Level Data**\n\nFor each page in the crawl set, record:\n- URL, title, meta description, canonical URL\n- H1-H6 heading structure\n- Word count of main content\n- Schema.org types present\n- Internal/external link counts\n- Images with/without alt text\n- Open Graph and Twitter Card meta tags\n- Response status code\n- Whether the page has structured data\n\n---\n\n### Phase 2: Parallel Subagent Delegation\n\nDelegate analysis to 5 specialized subagents. Each subagent operates on the collected page data and produces a category score (0-100) plus findings.\n\n**Subagent 1: AI Visibility Analysis (geo-ai-visibility)**\n- Analyze content blocks for quotability by AI systems (citability scoring)\n- Check AI crawler access via robots.txt and llms.txt presence\n- Scan brand presence across YouTube, Reddit, Wikipedia, LinkedIn\n- Score brand authority signals that AI models use for entity recognition\n\n**Subagent 2: Platform Optimization (geo-platform-analysis)**\n- Assess readiness for Google AI Overviews, ChatGPT, Perplexity, Gemini, Bing Copilot\n- Check platform-specific ranking factors and optimization opportunities\n\n**Subagent 3: Technical GEO Infrastructure (geo-technical)**\n- Analyze robots.txt for AI crawler access\n- Verify meta tags, headers, and technical accessibility for AI systems\n- Check page speed, server-side rendering, and Core Web Vitals\n- Assess security headers and mobile optimization\n\n**Subagent 4: Content E-E-A-T Quality (geo-content)**\n- Evaluate Experience, Expertise, Authoritativeness, Trustworthiness signals\n- Check author bios, credentials, source citations\n- Assess content freshness, depth, and originality\n- Verify \"About\" page quality and team credentials\n\n**Subagent 5: Schema & Structured Data (geo-schema)**\n- Validate all schema.org markup\n- Check for GEO-critical schema types (FAQ, HowTo, Organization, Product, Article)\n- Assess schema completeness and accuracy\n- Identify missing schema opportunities\n\n---\n\n### Phase 3: Score Aggregation and Report Generation\n\n#### Composite GEO Score Calculation\n\nThe overall GEO Score (0-100) is a weighted average of six category scores:\n\n| Category | Weight | What It Measures |\n|---|---|---|\n| **AI Citability** | 25% | How quotable/extractable content is for AI systems |\n| **Brand Authority** | 20% | Third-party mentions, entity recognition signals |\n| **Content E-E-A-T** | 20% | Experience, Expertise, Authoritativeness, Trustworthiness |\n| **Technical GEO** | 15% | AI crawler access, llms.txt, rendering, speed |\n| **Schema & Structured Data** | 10% | Schema.org markup quality and completeness |\n| **Platform Optimization** | 10% | Presence on platforms AI models train on and cite |\n\n**Formula:**\n```\nGEO_Score = (Citability * 0.25) + (Brand * 0.20) + (EEAT * 0.20) + (Technical * 0.15) + (Schema * 0.10) + (Platform * 0.10)\n```\n\n#### Score Interpretation\n\n| Score Range | Rating | Interpretation |\n|---|---|---|\n| 90-100 | Excellent | Top-tier GEO optimization; site is highly likely to be cited by AI |\n| 75-89 | Good | Strong GEO foundation with room for improvement |\n| 60-74 | Fair | Moderate GEO presence; significant optimization opportunities exist |\n| 40-59 | Poor | Weak GEO signals; AI systems may struggle to cite or recommend |\n| 0-39 | Critical | Minimal GEO optimization; site is largely invisible to AI systems |\n\n---\n\n## Issue Severity Classification\n\nEvery issue found during the audit is classified by severity:\n\n### Critical (Fix Immediately)\n- All AI crawlers blocked in robots.txt\n- No indexable content (JavaScript-rendered only with no SSR)\n- Domain-level noindex directive\n- Site returns 5xx errors on key pages\n- Complete absence of any structured data\n- Brand not recognized as an entity by any AI system\n\n### High (Fix Within 1 Week)\n- Key AI crawlers (GPTBot, ClaudeBot, PerplexityBot) blocked\n- No llms.txt file present\n- Zero question-answering content blocks on key pages\n- Missing Organization or LocalBusiness schema\n- No author attribution on content pages\n- All content behind login/paywall with no preview\n\n### Medium (Fix Within 1 Month)\n- Partial AI crawler blocking (some allowed, some blocked)\n- llms.txt exists but is incomplete or malformed\n- Content blocks average under 50 citability score\n- Missing FAQ schema on pages with FAQ content\n- Thin author bios without credentials\n- No Wikipedia or Reddit brand presence\n\n### Low (Optimize When Possible)\n- Minor schema validation errors\n- Some images missing alt text\n- Content freshness issues on non-critical pages\n- Missing Open Graph tags\n- Suboptimal heading hierarchy on some pages\n- LinkedIn company page exists but is incomplete\n\n---\n\n## Output Format\n\nGenerate a file called `GEO-AUDIT-REPORT.md` with the following structure:\n\n```markdown\n# GEO Audit Report: [Site Name]\n\n**Audit Date:** [Date]\n**URL:** [URL]\n**Business Type:** [Detected Type]\n**Pages Analyzed:** [Count]\n\n---\n\n## Executive Summary\n\n**Overall GEO Score: [X]/100 ([Rating])**\n\n[2-3 sentence summary of the site's GEO health, biggest strengths, and most critical gaps.]\n\n### Score Breakdown\n\n| Category | Score | Weight | Weighted Score |\n|---|---|---|---|\n| AI Citability | [X]/100 | 25% | [X] |\n| Brand Authority | [X]/100 | 20% | [X] |\n| Content E-E-A-T | [X]/100 | 20% | [X] |\n| Technical GEO | [X]/100 | 15% | [X] |\n| Schema & Structured Data | [X]/100 | 10% | [X] |\n| Platform Optimization | [X]/100 | 10% | [X] |\n| **Overall GEO Score** | | | **[X]/100** |\n\n---\n\n## Critical Issues (Fix Immediately)\n\n[List each critical issue with specific page URLs and recommended fix]\n\n## High Priority Issues\n\n[List each high-priority issue with details]\n\n## Medium Priority Issues\n\n[List each medium-priority issue]\n\n## Low Priority Issues\n\n[List each low-priority issue]\n\n---\n\n## Category Deep Dives\n\n### AI Citability ([X]/100)\n[Detailed findings, examples of good/bad passages, rewrite suggestions]\n\n### Brand Authority ([X]/100)\n[Platform presence map, mention volume, sentiment]\n\n### Content E-E-A-T ([X]/100)\n[Author quality, source citations, freshness, depth]\n\n### Technical GEO ([X]/100)\n[Crawler access, llms.txt, rendering, headers]\n\n### Schema & Structured Data ([X]/100)\n[Schema types found, validation results, missing opportunities]\n\n### Platform Optimization ([X]/100)\n[Presence on YouTube, Reddit, Wikipedia, etc.]\n\n---\n\n## Quick Wins (Implement This Week)\n\n1. [Specific, actionable quick win with expected impact]\n2. [Another quick win]\n3. [Another quick win]\n4. [Another quick win]\n5. [Another quick win]\n\n## 30-Day Action Plan\n\n### Week 1: [Theme]\n- [ ] Action item 1\n- [ ] Action item 2\n\n### Week 2: [Theme]\n- [ ] Action item 1\n- [ ] Action item 2\n\n### Week 3: [Theme]\n- [ ] Action item 1\n- [ ] Action item 2\n\n### Week 4: [Theme]\n- [ ] Action item 1\n- [ ] Action item 2\n\n---\n\n## Appendix: Pages Analyzed\n\n| URL | Title | GEO Issues |\n|---|---|---|\n| [url] | [title] | [issue count] |\n```\n\n---\n\n## Quality Gates\n\n- **Page Limit:** Never crawl more than 50 pages per audit. Prioritize high-value pages.\n- **Timeout:** 30-second maximum per page fetch. Skip pages that exceed this.\n- **Robots.txt:** Always check and respect robots.txt before crawling. Note any AI-specific directives.\n- **Rate Limiting:** Wait at least 1 second between page fetches to avoid overloading the server.\n- **Error Handling:** Log failed fetches but continue the audit. Report fetch failures in the appendix.\n- **Content Type:** Only analyze HTML pages. Skip PDFs, images, and other binary content.\n- **Deduplication:** Canonicalize URLs before crawling. Skip duplicate content (e.g., HTTP vs HTTPS, www vs non-www, trailing slashes).\n\n---\n\n## Business-Type-Specific Audit Adjustments\n\n### SaaS Sites\n- Extra weight on: Feature comparison tables (high citability), integration pages, documentation quality\n- Check for: API documentation structure, changelog pages, knowledge base organization\n- Key schema: SoftwareApplication, FAQPage, HowTo\n\n### Local Businesses\n- Extra weight on: NAP consistency, Google Business Profile signals, local schema\n- Check for: Service area pages, location-specific content, review markup\n- Key schema: LocalBusiness, GeoCoordinates, OpeningHoursSpecification\n\n### E-commerce Sites\n- Extra weight on: Product descriptions (citability), comparison content, buying guides\n- Check for: Product schema completeness, review aggregation, FAQ sections on product pages\n- Key schema: Product, AggregateRating, Offer, BreadcrumbList\n\n### Publishers\n- Extra weight on: Article quality, author credentials, source citation practices\n- Check for: Article schema, author pages, publication date freshness, original research\n- Key schema: Article, NewsArticle, Person (author), ClaimReview\n\n### Agency/Services\n- Extra weight on: Case studies (citability), expertise demonstration, thought leadership\n- Check for: Portfolio schema, team credentials, industry-specific expertise signals\n- Key schema: Organization, Service, Person (team), Review\n","frontmatter":{"name":"geo-audit","description":"Full website GEO+SEO audit with parallel subagent delegation. Orchestrates a comprehensive Generative Engine Optimization audit across AI citability, platform analysis, technical infrastructure, content quality, and schema markup. Produces a composite GEO Score (0-100) with prioritized action plan.","allowed-tools":["Read","Grep","Glob","Bash","WebFetch","Write"],"allowedTools":["Read","Grep","Glob","Bash","WebFetch","Write"]},"allowedTools":["Read","Grep","Glob","Bash","WebFetch","Write"],"isInternal":false,"tokens":2919,"sizeBytes":12320},{"name":"SKILL.md","path":"skills/geo-brand-mentions/SKILL.md","rawUrl":"https://raw.githubusercontent.com/zubair-trabzada/geo-seo-claude/HEAD/skills/geo-brand-mentions/SKILL.md","title":"geo-brand-mentions","category":"anthropic-skill","format":"markdown","content":"---\nname: geo-brand-mentions\ndescription: Brand mention and authority scanner for AI visibility. Analyzes brand presence across platforms that AI models rely on for entity recognition and citation decisions. Produces a Brand Authority Score (0-100) with platform-specific recommendations.\nallowed-tools:\n  - Read\n  - Grep\n  - Glob\n  - Bash\n  - WebFetch\n  - Write\n---\n\n# Brand Mention Scanner Skill\n\n## Core Insight\n\nBrand mentions correlate approximately 3x more strongly with AI visibility than traditional backlinks. An Ahrefs study published in December 2025, analyzing 75,000 brands across AI search platforms, found that **unlinked brand mentions** -- references to a brand name without a hyperlink -- are a stronger predictor of whether AI systems cite and recommend a brand than Domain Rating or backlink count.\n\nThe critical finding: **the platform where the mention appears matters enormously.** Not all mentions are equal. A mention on YouTube or Reddit carries far more weight for AI citation than a mention on a low-authority blog, because AI training data and retrieval systems disproportionately index high-engagement platforms.\n\nThis inverts a core assumption of traditional SEO. In traditional SEO, a backlink from a high-DR site is the gold standard. In GEO, an unlinked mention on Reddit or a YouTube video description may be more valuable than a dofollow backlink from a DR 70 blog.\n\n---\n\n## Platform Importance Ranking for AI Citations\n\nBased on the Ahrefs December 2025 study and corroborating research from Profound (2025) and Terakeet (2025):\n\n### 1. YouTube Mentions -- Correlation ~0.737 (STRONGEST)\n\n**Why YouTube matters most:**\n- YouTube is the second-largest search engine and the largest video platform globally (2.5B+ monthly users).\n- AI training datasets heavily incorporate YouTube transcripts, descriptions, and metadata.\n- Google's Gemini and AI Overviews directly reference YouTube content.\n- Perplexity and ChatGPT both index and cite YouTube video content.\n- YouTube transcripts are particularly valuable because they contain natural language mentions in conversational context, which aligns with how AI models process and generate text.\n\n**What to check:**\n- **Brand YouTube channel:** Does the brand have an active YouTube channel? How many subscribers? Video count? Upload frequency?\n- **Third-party video mentions:** Are other YouTubers or channels mentioning the brand? In what context (reviews, tutorials, comparisons)?\n- **Video descriptions:** Does the brand name appear in video descriptions of industry-relevant content?\n- **Video transcripts:** Is the brand mentioned in spoken content of relevant videos? (AI models index transcripts)\n- **YouTube search presence:** When searching \"[brand name]\" on YouTube, do results appear? Are they positive?\n- **Comment mentions:** Is the brand mentioned in comments on relevant industry videos?\n\n**Scoring for YouTube (0-100):**\n\n| Score | Criteria |\n|---|---|\n| 90-100 | Active channel with 10K+ subscribers, regular uploads, brand mentioned in 20+ third-party videos, appears in YouTube search results for industry terms |\n| 70-89 | Active channel with 1K+ subscribers, brand mentioned in 10-19 third-party videos, some YouTube search presence |\n| 50-69 | Channel exists with some content, brand mentioned in 5-9 third-party videos, limited YouTube search presence |\n| 30-49 | Channel exists but inactive, brand mentioned in 1-4 third-party videos |\n| 10-29 | No channel or empty channel, brand mentioned in 1-2 videos only |\n| 0-9 | No YouTube presence whatsoever |\n\n---\n\n### 2. Reddit Mentions -- High Correlation\n\n**Why Reddit matters:**\n- Reddit is one of the most heavily indexed platforms in AI training data (confirmed in Google's $60M/year Reddit licensing deal, 2024).\n- AI systems heavily weight Reddit for product recommendations, comparisons, and user sentiment.\n- \"Reddit\" is now appended to an estimated 10-15% of Google searches by users seeking authentic opinions.\n- Perplexity frequently cites Reddit threads as sources.\n- ChatGPT and Claude both reference Reddit discussions when answering product/service questions.\n\n**What to check:**\n- **Subreddit presence:** Is the brand discussed in relevant subreddits? Which ones?\n- **Mention volume:** How many Reddit threads mention the brand? What is the trend (increasing/decreasing)?\n- **Sentiment:** Are mentions mostly positive, negative, or neutral? What are common praise points and complaints?\n- **Official presence:** Does the brand have an official Reddit account? Do they participate in discussions? Have they done AMAs?\n- **Recommendation threads:** Does the brand appear in \"What do you recommend for X?\" threads? Is it the top recommendation or an also-ran?\n- **Subreddit community:** Does the brand have its own subreddit? How active is it?\n\n**Scoring for Reddit (0-100):**\n\n| Score | Criteria |\n|---|---|\n| 90-100 | Frequently recommended in relevant subreddits, predominantly positive sentiment, active official presence, own subreddit with 5K+ members, appears in top recommendations for industry queries |\n| 70-89 | Regularly mentioned in relevant subreddits, mostly positive sentiment, some official presence, appears in multiple recommendation threads |\n| 50-69 | Mentioned in several relevant threads, mixed sentiment, brand name is recognized by community members |\n| 30-49 | Occasional mentions, limited to 1-2 subreddits, no official presence |\n| 10-29 | Rare mentions, brand largely unknown on Reddit |\n| 0-9 | No Reddit presence |\n\n---\n\n### 3. Wikipedia Presence -- High Correlation\n\n**Why Wikipedia matters:**\n- Wikipedia is one of the highest-authority sources in AI training data. All major AI models have been trained on Wikipedia dumps.\n- AI systems use Wikipedia as a primary source for entity recognition -- determining whether a brand is a \"real\" entity worth knowing about.\n- Wikidata (Wikipedia's structured data sibling) provides machine-readable facts that AI models use for knowledge graph construction.\n- Having a Wikipedia page is a strong signal of notability, which correlates with AI systems treating the brand as an authoritative entity.\n\n**What to check:**\n- **Wikipedia page:** Does the brand or company have its own Wikipedia article? Is it marked for deletion or quality issues?\n- **Founder page:** Does the founder/CEO have a Wikipedia page? (Strong authority signal)\n- **Wikipedia citations:** Is the brand's website cited as a reference in any Wikipedia articles?\n- **Wikidata entry:** Does the brand have a Wikidata item (Q-number)? How complete is it?\n- **Wikipedia mentions:** Is the brand mentioned in other Wikipedia articles (industry articles, competitor pages, category pages)?\n- **Article quality:** If a Wikipedia page exists, is it a stub, start-class, or higher quality?\n\n**Scoring for Wikipedia (0-100):**\n\n| Score | Criteria |\n|---|---|\n| 90-100 | Detailed Wikipedia article (B-class or higher), Wikidata entry with complete properties, brand cited as reference in multiple articles, founder has Wikipedia page |\n| 70-89 | Wikipedia article exists (start-class or higher), Wikidata entry exists, brand mentioned in 2+ other Wikipedia articles |\n| 50-69 | Wikipedia article exists (stub or start), basic Wikidata entry, limited mentions in other articles |\n| 30-49 | No Wikipedia article but brand is mentioned in other articles or cited as reference; Wikidata entry may exist |\n| 10-29 | Brand mentioned in 1-2 Wikipedia articles as a passing reference only |\n| 0-9 | No Wikipedia or Wikidata presence of any kind |\n\n---\n\n### 4. LinkedIn Presence -- Moderate Correlation\n\n**Why LinkedIn matters:**\n- LinkedIn content is increasingly indexed by AI systems for professional and B2B context.\n- Company LinkedIn pages and employee thought leadership posts build brand entity signals.\n- AI models reference LinkedIn for company information, team credentials, and professional authority.\n- LinkedIn articles and posts are indexed by search engines and AI crawlers.\n\n**What to check:**\n- **Company page:** Does the brand have a LinkedIn company page? Follower count? Post frequency?\n- **Employee thought leadership:** Are employees (especially leadership) posting thought leadership content that mentions the brand?\n- **Company mentions:** Is the brand mentioned in LinkedIn posts by non-employees? Industry analysts? Customers?\n- **LinkedIn articles:** Are there long-form LinkedIn articles about or mentioning the brand?\n- **Employee profiles:** Do employees list the company with detailed descriptions? Do they have strong professional profiles?\n- **Engagement metrics:** What is the typical engagement (likes, comments, shares) on company posts?\n\n**Scoring for LinkedIn (0-100):**\n\n| Score | Criteria |\n|---|---|\n| 90-100 | Active company page with 10K+ followers, leadership regularly posts thought leadership, brand frequently mentioned by industry professionals, strong employee profiles |\n| 70-89 | Active company page with 5K+ followers, some employee thought leadership, occasional third-party mentions |\n| 50-69 | Company page exists with 1K+ followers, irregular posting, limited third-party mentions |\n| 30-49 | Company page exists but is sparse or inactive, few followers, no third-party mentions |\n| 10-29 | Basic company page with minimal information |\n| 0-9 | No LinkedIn company page |\n\n---\n\n### 5. Other Platform Presence -- Supplementary\n\nThese platforms have lower but still meaningful correlation with AI visibility:\n\n#### Quora\n- **Relevance:** Quora answers are frequently included in AI training data and cited by Perplexity.\n- **What to check:** Is the brand mentioned in Quora answers to industry-relevant questions? Does the brand have an official Quora presence?\n- **Signal strength:** Moderate for B2C, lower for B2B.\n\n#### Stack Overflow / Stack Exchange\n- **Relevance:** Critical for developer-facing brands (SaaS, dev tools, APIs).\n- **What to check:** Is the brand's product discussed in Stack Overflow questions/answers? Does the brand have a tag? Do they have an official account answering questions?\n- **Signal strength:** High for technical products, irrelevant for most B2C.\n\n#### GitHub\n- **Relevance:** Critical for open-source and developer-focused brands.\n- **What to check:** Does the brand have a GitHub organization? Stars on repositories? Mentions in other repos' documentation or discussions?\n- **Signal strength:** High for dev tools and open-source, low for non-technical brands.\n\n#### Industry Forums and Communities\n- **Relevance:** Niche authority signals that AI models pick up from domain-specific training data.\n- **What to check:** Is the brand discussed in industry-specific forums (e.g., Hacker News for tech, ProductHunt for startups, industry-specific Slack communities)?\n- **Signal strength:** Moderate, but valuable for establishing niche authority.\n\n#### News and Press\n- **Relevance:** News mentions build entity authority and recency signals.\n- **What to check:** Has the brand been covered by major news outlets or industry publications? How recently? What was the context?\n- **Signal strength:** Moderate. Recency matters -- a mention in the last 6 months is far more valuable than one from 3 years ago.\n\n#### Podcasts\n- **Relevance:** Growing AI training data source. Transcripts are increasingly indexed.\n- **What to check:** Has the brand or its leadership appeared on podcasts? Are podcast transcripts mentioning the brand indexed by search engines?\n- **Signal strength:** Moderate and growing.\n\n---\n\n## Composite Brand Authority Score\n\n### Scoring Formula\n\n| Platform | Weight | Rationale |\n|---|---|---|\n| YouTube Presence | 25% | Strongest correlation with AI citation (0.737) |\n| Reddit Presence | 25% | Second strongest correlation; critical for product recommendations |\n| Wikipedia / Wikidata | 20% | Entity recognition foundation; AI training data cornerstone |\n| LinkedIn Authority | 15% | Professional authority signals; B2B relevance |\n| Other Platforms | 15% | Supplementary signals from Quora, GitHub, news, forums, podcasts |\n\n**Formula:**\n```\nBrand_Authority_Score = (YouTube * 0.25) + (Reddit * 0.25) + (Wikipedia * 0.20) + (LinkedIn * 0.15) + (Other * 0.15)\n```\n\n### Score Interpretation\n\n| Score Range | Rating | Interpretation |\n|---|---|---|\n| 85-100 | Dominant | Brand is a well-recognized entity across AI platforms. Highly likely to be cited and recommended by AI systems. |\n| 70-84 | Strong | Brand has solid cross-platform presence. AI systems likely recognize and cite it for relevant queries. |\n| 50-69 | Moderate | Brand has presence on some platforms but gaps exist. AI citation is inconsistent. |\n| 30-49 | Weak | Brand has limited platform presence. AI systems may not recognize it as a distinct entity. |\n| 0-29 | Minimal | Brand has negligible platform presence. AI systems are unlikely to cite or recommend it. |\n\n---\n\n## Analysis Procedure\n\n### Step 1: Identify Brand Information\n\nGather the following from the user or from the website:\n- **Brand name** (exact spelling, including any official variants)\n- **Founder/CEO name(s)**\n- **Domain URL**\n- **Industry/category**\n- **Key products or services** (top 3)\n- **Key competitors** (for comparison context)\n\n### Step 2: Platform Scanning\n\nFor each platform, use WebFetch to search and assess presence:\n\n**YouTube Check:**\n1. Search: `[brand name] site:youtube.com`\n2. Check: `youtube.com/@[brand-name]` or `youtube.com/c/[brand-name]` for official channel\n3. Search: `\"[brand name]\" site:youtube.com` (exact match for mentions in descriptions)\n4. Note: Channel subscriber count, video count, latest upload date, third-party mention count\n\n**Reddit Check:**\n1. Search: `[brand name] site:reddit.com`\n2. Search: `\"[brand name]\" site:reddit.com` (exact match)\n3. Check: `reddit.com/r/[brand-name]` for official subreddit\n4. Check: `reddit.com/user/[brand-name]` for official account\n5. Note: Thread count, dominant subreddits, sentiment (positive/negative/neutral), recommendation frequency\n\n**Wikipedia Check (IMPORTANT — use BOTH methods to avoid false negatives):**\n\n**Method 1 — Python API check (MOST RELIABLE, do this FIRST):**\n```bash\npython3 -c \"\nimport requests, json\nfrom urllib.parse import quote_plus\nbrand = '[Brand_Name]'\n# Check Wikipedia API directly\napi_url = f'https://en.wikipedia.org/w/api.php?action=query&list=search&srsearch={quote_plus(brand)}&format=json'\nr = requests.get(api_url, headers={'User-Agent': 'GEO-Audit/1.0'}, timeout=15)\ndata = r.json()\nresults = data.get('query', {}).get('search', [])\nif results and brand.lower() in results[0].get('title', '').lower():\n    print(f'WIKIPEDIA PAGE EXISTS: {results[0][\\\"title\\\"]}')\n    print(f'URL: https://en.wikipedia.org/wiki/{results[0][\\\"title\\\"].replace(\\\" \\\", \\\"_\\\")}')\nelse:\n    print('No direct Wikipedia page found')\n# Check Wikidata\nwd_url = f'https://www.wikidata.org/w/api.php?action=wbsearchentities&search={quote_plus(brand)}&language=en&format=json'\nr2 = requests.get(wd_url, headers={'User-Agent': 'GEO-Audit/1.0'}, timeout=15)\nwd = r2.json()\nentities = wd.get('search', [])\nif entities:\n    print(f'WIKIDATA ENTRY: {entities[0].get(\\\"id\\\", \\\"\\\")} — {entities[0].get(\\\"description\\\", \\\"\\\")}')\n\"\n```\n\n**Method 2 — Direct URL check (backup verification):**\n1. WebFetch: `https://en.wikipedia.org/wiki/[Brand_Name]` — check if the page loads (not a redirect to search)\n2. WebFetch: `https://en.wikipedia.org/wiki/[Founder_Name]` for founder article\n\n**Method 3 — Search (least reliable, use only for supplemental info):**\n1. Search: `[brand name] site:wikipedia.org`\n2. Search: `[brand name] site:wikidata.org`\n\n**CRITICAL:** Web search alone is NOT reliable for determining Wikipedia presence. ALWAYS run the Python API check first. If the API says a page exists, it exists — do not override this with a search result that fails to find it.\n\n5. Note: Article existence, quality, edit history, Wikidata completeness\n\n**LinkedIn Check:**\n1. Search: `[brand name] site:linkedin.com`\n2. Check: `linkedin.com/company/[brand-name]` for company page\n3. Note: Follower count, post frequency, employee count listed, engagement levels\n\n**Other Platforms:**\n1. Search: `[brand name] site:quora.com`\n2. Search: `[brand name] site:stackoverflow.com` (if technical brand)\n3. Search: `[brand name] site:github.com` (if technical brand)\n4. Search: `[brand name] site:news.ycombinator.com` (Hacker News)\n5. Search: `\"[brand name]\"` broadly for news mentions (filter to last 6 months)\n6. Note: Presence/absence and quality of mentions on each platform\n\n### Step 3: Sentiment Assessment\n\nFor Reddit and other discussion platforms, assess sentiment by analyzing the most recent and most prominent mentions:\n\n| Sentiment | Indicators |\n|---|---|\n| **Positive** | Recommendations (\"I love [brand],\" \"We switched to [brand] and...\", \"Highly recommend\"), upvoted mentions, positive comparison against competitors |\n| **Neutral** | Factual mentions (\"We use [brand] for...\", \"[Brand] offers...\"), questions about the brand, balanced comparisons |\n| **Negative** | Complaints (\"Avoid [brand]\", \"[Brand] has terrible support\"), downvoted recommendations, negative comparisons |\n| **Mixed** | Combination of positive and negative. Note the ratio and primary themes. |\n\n### Step 4: Competitive Comparison (Optional)\n\nIf competitors are identified, do a quick scan of their platform presence for context. This helps calibrate the score -- a brand with \"moderate\" Reddit presence in an industry where competitors have zero Reddit presence is relatively strong.\n\n### Step 5: Score Calculation\n\n1. Score each platform (0-100) using the rubrics above.\n2. Apply weights to calculate the composite Brand Authority Score.\n3. Identify the strongest and weakest platforms.\n4. Generate specific, actionable recommendations for the weakest platforms.\n\n---\n\n## Output Format\n\nGenerate a file called `GEO-BRAND-MENTIONS.md`:\n\n```markdown\n# Brand Authority Report: [Brand Name]\n\n**Analysis Date:** [Date]\n**Brand:** [Brand Name]\n**Domain:** [URL]\n**Industry:** [Industry]\n\n---\n\n## Brand Authority Score: [X]/100 ([Rating])\n\n### Platform Breakdown\n\n| Platform | Score | Weight | Weighted | Status |\n|---|---|---|---|---|\n| YouTube | [X]/100 | 25% | [X] | [Active Channel / Mentioned / Absent] |\n| Reddit | [X]/100 | 25% | [X] | [Active / Discussed / Absent] |\n| Wikipedia | [X]/100 | 20% | [X] | [Article / Mentioned / Absent] |\n| LinkedIn | [X]/100 | 15% | [X] | [Active / Basic / Absent] |\n| Other Platforms | [X]/100 | 15% | [X] | [Summary] |\n| **Total** | | | **[X]/100** | |\n\n---\n\n## Platform Detail\n\n### YouTube ([X]/100)\n\n**Official Channel:** [Yes/No] | [URL if exists]\n**Subscribers:** [Count or N/A]\n**Videos:** [Count or N/A]\n**Last Upload:** [Date or N/A]\n**Third-Party Mentions:** [Estimated count]\n**Key Findings:**\n- [Finding 1]\n- [Finding 2]\n\n### Reddit ([X]/100)\n\n**Official Account:** [Yes/No] | [URL if exists]\n**Own Subreddit:** [Yes/No] | [URL and member count if exists]\n**Mention Volume:** [Estimated thread count]\n**Primary Subreddits:** [List of subreddits where brand is discussed]\n**Sentiment:** [Positive/Negative/Neutral/Mixed]\n**Key Findings:**\n- [Finding 1]\n- [Finding 2]\n\n### Wikipedia ([X]/100)\n\n**Company Article:** [Yes/No] | [URL if exists]\n**Founder Article:** [Yes/No] | [URL if exists]\n**Wikidata Entry:** [Yes/No] | [Q-number if exists]\n**Cited in Other Articles:** [Yes/No] | [Which articles]\n**Key Findings:**\n- [Finding 1]\n- [Finding 2]\n\n### LinkedIn ([X]/100)\n\n**Company Page:** [Yes/No] | [URL if exists]\n**Followers:** [Count or N/A]\n**Post Frequency:** [Weekly/Monthly/Rare/Never]\n**Key Findings:**\n- [Finding 1]\n- [Finding 2]\n\n### Other Platforms ([X]/100)\n\n| Platform | Presence | Notes |\n|---|---|---|\n| Quora | [Yes/No] | [Brief note] |\n| Stack Overflow | [Yes/No] | [Brief note] |\n| GitHub | [Yes/No] | [Brief note] |\n| Hacker News | [Yes/No] | [Brief note] |\n| News/Press | [Yes/No] | [Brief note] |\n| Podcasts | [Yes/No] | [Brief note] |\n\n---\n\n## Recommendations\n\n### Immediate Actions (Week 1-2)\n\n1. **[Platform]:** [Specific action to take with expected impact]\n2. **[Platform]:** [Specific action]\n\n### Short-Term Strategy (Month 1-3)\n\n1. **[Platform]:** [Strategy with tactics]\n2. **[Platform]:** [Strategy with tactics]\n\n### Long-Term Authority Building (Month 3-12)\n\n1. **[Platform]:** [Long-term strategy]\n2. **[Platform]:** [Long-term strategy]\n\n---\n\n## Competitive Context\n\n[If competitors were analyzed, show a brief comparison table]\n\n| Brand | YouTube | Reddit | Wikipedia | LinkedIn | Other | Total |\n|---|---|---|---|---|---|---|\n| [Subject Brand] | [X] | [X] | [X] | [X] | [X] | **[X]** |\n| [Competitor 1] | [X] | [X] | [X] | [X] | [X] | **[X]** |\n| [Competitor 2] | [X] | [X] | [X] | [X] | [X] | **[X]** |\n\n## Key Takeaway\n\n[1-2 sentence summary of the brand's AI visibility standing and the single most impactful action to take]\n```\n\n---\n\n## Reference Data\n\n### Correlation Strengths (Ahrefs Dec 2025, 75K Brands)\n\n| Signal | Correlation with AI Citation | Traditional SEO Value |\n|---|---|---|\n| YouTube mentions | ~0.737 | Low (not a ranking factor) |\n| Reddit mentions | High (exact coefficient not published) | Low |\n| Wikipedia presence | High | Moderate (trust signal) |\n| LinkedIn presence | Moderate | Low |\n| Domain Rating | ~0.266 | Very High |\n| Backlink count | ~0.266 | Very High |\n| Organic traffic | Moderate | Very High |\n\n**Key insight:** The signals that matter most for AI visibility (YouTube, Reddit) are almost irrelevant in traditional SEO, and the signals that matter most for traditional SEO (backlinks, DR) are weak predictors of AI visibility. This requires a fundamentally different optimization strategy.\n\n### Platform-Specific Tips for Building Presence\n\n**YouTube Quick Wins:**\n- Create a channel and upload 3-5 explainer videos about your core topics.\n- Ensure your brand name appears in video titles, descriptions, and spoken content.\n- Pursue guest appearances on relevant industry YouTube channels.\n- Create comparison or \"alternatives\" videos (these get cited by AI for comparison queries).\n\n**Reddit Quick Wins:**\n- Identify 3-5 subreddits where your target audience is active.\n- Participate authentically (do not shill -- Reddit communities detect and punish this).\n- Do an AMA if appropriate for your brand.\n- Monitor and respond to mentions of your brand.\n- Create genuinely helpful posts that naturally mention your brand's expertise.\n\n**Wikipedia Strategy:**\n- Hire a Wikipedia-knowledgeable consultant -- do NOT edit your own article (conflict of interest).\n- Build notability through press coverage, academic citations, and industry recognition first.\n- Ensure your Wikidata entry is complete even if you do not have a Wikipedia article.\n- Contribute to industry-relevant articles where your brand can be naturally cited as a source.\n\n**LinkedIn Quick Wins:**\n- Optimize your company page with complete information and regular posting.\n- Encourage leadership to post thought leadership content weekly.\n- Publish LinkedIn articles on topics where your brand has unique expertise.\n- Engage with industry discussions to increase brand visibility in professional contexts.\n","frontmatter":{"name":"geo-brand-mentions","description":"Brand mention and authority scanner for AI visibility. Analyzes brand presence across platforms that AI models rely on for entity recognition and citation decisions. Produces a Brand Authority Score (0-100) with platform-specific recommendations.","allowed-tools":["Read","Grep","Glob","Bash","WebFetch","Write"],"allowedTools":["Read","Grep","Glob","Bash","WebFetch","Write"]},"allowedTools":["Read","Grep","Glob","Bash","WebFetch","Write"],"isInternal":false,"tokens":5450,"sizeBytes":23108},{"name":"SKILL.md","path":"skills/geo-citability/SKILL.md","rawUrl":"https://raw.githubusercontent.com/zubair-trabzada/geo-seo-claude/HEAD/skills/geo-citability/SKILL.md","title":"geo-citability","category":"anthropic-skill","format":"markdown","content":"---\nname: geo-citability\ndescription: AI citability scoring and optimization. Analyzes web page content to determine how likely AI systems (ChatGPT, Claude, Perplexity, Gemini) are to cite or quote passages from the page. Provides a citability score (0-100) with specific rewrite suggestions.\nallowed-tools:\n  - Read\n  - Grep\n  - Glob\n  - Bash\n  - WebFetch\n  - Write\n---\n\n# AI Citability Scoring Skill\n\n## Core Insight\n\nAI language models cite passages that meet specific structural criteria. Research from Princeton, Georgia Tech, and IIT Delhi (2024) found that GEO-optimized content achieves 30-115% higher visibility in AI-generated responses. The key finding: AI systems preferentially extract and cite passages that are **134-167 words long**, **self-contained** (understandable without surrounding context), **fact-rich** (containing specific statistics, dates, or named entities), and **directly answer a question** in the first 1-2 sentences.\n\nThis is fundamentally different from traditional SEO copywriting, which optimizes for keyword density and user engagement metrics. GEO citability optimizes for **extractability** -- the ease with which an AI system can pull a passage from your content and present it as a direct answer.\n\n---\n\n## Citability Scoring Rubric (0-100)\n\n### Category 1: Answer Block Quality (30% of total score)\n\nThis measures whether content contains clear, quotable answer passages that AI systems can extract verbatim.\n\n**Scoring Criteria:**\n\n| Score | Criteria |\n|---|---|\n| **90-100** | Every major section opens with a 1-2 sentence direct answer. Uses \"X is...\" or \"X refers to...\" patterns. First 40-60 words of each section can stand alone as a complete answer. |\n| **70-89** | Most sections have clear answer openings. Some definition patterns present. Answers are identifiable but may need minor context. |\n| **50-69** | Some sections have answer-like openings but many bury the answer in the middle or end of paragraphs. Few explicit definition patterns. |\n| **30-49** | Answers are generally buried in long paragraphs. No consistent definition patterns. Content is narrative-driven rather than answer-driven. |\n| **0-29** | No identifiable answer blocks. Content is entirely narrative, conversational, or fragmented. AI would struggle to extract any quotable passage. |\n\n**What to look for:**\n\n- **Definition patterns:** \"X is [definition].\" / \"X refers to [explanation].\" / \"X means [meaning].\"\n- **Answer-first structure:** The answer appears in the first sentence, followed by supporting detail.\n- **Quantified answers:** \"The average cost of X is $Y\" rather than \"Many factors affect the cost of X.\"\n- **Comparison answers:** \"X differs from Y in three ways: [list]\" rather than \"X and Y are often confused.\"\n\n**High-citability example:**\n```\nContent delivery networks (CDNs) are distributed server systems that cache and serve\nweb content from locations geographically close to end users. A CDN reduces latency\nby 50-70% on average by serving assets from edge servers rather than a single origin\nserver. The three largest CDN providers as of 2025 are Cloudflare (serving approximately\n20% of all websites), Amazon CloudFront, and Akamai Technologies.\n```\nWord count: 58. Self-contained: Yes. Facts: 3 specific data points. Definition pattern: Yes.\n\n**Low-citability example:**\n```\nIf you've ever wondered why some websites load faster than others, the answer might\nsurprise you. There's this amazing technology that has been around for a while now.\nIt's changed the way we think about web performance. Let me explain how it works and\nwhy you should care about it for your business.\n```\nWord count: 52. Self-contained: No (no topic identified). Facts: 0. Definition pattern: No.\n\n---\n\n### Category 2: Passage Self-Containment (25% of total score)\n\nThis measures whether individual passages can be extracted and understood without needing the surrounding content.\n\n**Scoring Criteria:**\n\n| Score | Criteria |\n|---|---|\n| **90-100** | 80%+ of content blocks are fully self-contained. Each passage names its subject explicitly. No reliance on pronouns referencing earlier content. Contains specific facts within the passage. |\n| **70-89** | 60-79% of content blocks are self-contained. Most passages name their subject. Occasional pronoun references that require context. |\n| **50-69** | 40-59% of content blocks are self-contained. Mixed use of explicit subjects and pronouns. Some passages require reading prior sections. |\n| **30-49** | 20-39% of content blocks are self-contained. Heavy reliance on pronouns and contextual references. Most passages need surrounding text. |\n| **0-29** | Under 20% self-contained. Content reads as a continuous narrative where extracting any paragraph loses meaning. |\n\n**Self-containment checklist for each passage:**\n\n1. Does the passage explicitly name the subject (not \"it,\" \"this,\" \"they\")?\n2. Can someone understand the main point reading ONLY this passage?\n3. Does the passage contain at least one specific fact, statistic, or named entity?\n4. Is the passage between 50-200 words (the optimal extraction length)?\n5. Does the passage avoid starting with conjunctions (\"But,\" \"However,\" \"And\") that imply prior context?\n\n---\n\n### Category 3: Structural Readability (20% of total score)\n\nThis measures the structural formatting that helps AI systems parse and segment content.\n\n**Scoring Criteria:**\n\n| Score | Criteria |\n|---|---|\n| **90-100** | Clean H1 > H2 > H3 hierarchy. Question-based headings for informational content. Short paragraphs (2-4 sentences). Tables for comparisons. Ordered lists for processes. Unordered lists for features/options. |\n| **70-89** | Good heading hierarchy with minor skips. Some question-based headings. Mostly short paragraphs. Some use of tables and lists. |\n| **50-69** | Heading hierarchy present but inconsistent. Few question-based headings. Mix of short and long paragraphs. Limited tables/lists. |\n| **30-49** | Minimal heading structure. No question-based headings. Long paragraphs dominate. Rare use of tables/lists. |\n| **0-29** | No heading structure or severely broken hierarchy. Wall-of-text paragraphs. No tables or lists. |\n\n**Structural best practices for AI citability:**\n\n- **Heading hierarchy:** H1 (page title) > H2 (major sections) > H3 (subsections). Never skip levels.\n- **Question-based headings:** \"What is [topic]?\" and \"How does [topic] work?\" are directly matchable to AI queries.\n- **Paragraph length:** 2-4 sentences per paragraph. AI systems parse short paragraphs more reliably.\n- **Tables:** Use for any comparison of 3+ items. AI systems extract table data with high accuracy.\n- **Lists:** Use ordered lists for sequential processes, unordered lists for non-sequential items.\n- **Bold key terms:** Bold the first use of important terms. This aids AI entity recognition.\n\n---\n\n### Category 4: Statistical Density (15% of total score)\n\nThis measures the presence of specific, verifiable data points that AI systems prioritize when selecting citation sources.\n\n**Scoring Criteria:**\n\n| Score | Criteria |\n|---|---|\n| **90-100** | 5+ specific statistics per 500 words. All claims backed by named sources or dates. Uses exact numbers (not \"many\" or \"several\"). Includes percentages, dollar amounts, timeframes, and named studies. |\n| **70-89** | 3-4 statistics per 500 words. Most claims have sources. Mostly specific numbers with occasional vague quantifiers. |\n| **50-69** | 1-2 statistics per 500 words. Some claims sourced. Mix of specific and vague numbers. |\n| **30-49** | Less than 1 statistic per 500 words. Few sourced claims. Predominantly vague quantifiers. |\n| **0-29** | No statistics. No sourced claims. All quantifiers are vague (\"many,\" \"most,\" \"a lot\"). |\n\n**What counts as a statistic:**\n- Specific percentages: \"73% of marketers report...\"\n- Dollar amounts: \"The average cost is $4,500 per month\"\n- Timeframes: \"Implementation takes 6-8 weeks on average\"\n- Named studies: \"According to the 2025 HubSpot State of Marketing Report...\"\n- Specific counts: \"The platform integrates with 340+ tools\"\n- Comparison data: \"40% faster than the industry average\"\n\n**What does NOT count:**\n- \"Many companies use...\" (vague)\n- \"A significant percentage...\" (vague)\n- \"Studies show that...\" (no named source)\n- \"Experts agree...\" (no named experts)\n\n---\n\n### Category 5: Uniqueness & Original Data (10% of total score)\n\nThis measures whether the content provides information that AI systems cannot find elsewhere, making it a necessary citation source.\n\n**Scoring Criteria:**\n\n| Score | Criteria |\n|---|---|\n| **90-100** | Contains first-party research, proprietary data, original surveys, or unique datasets. Presents analysis or insights not found on any other page. Clear methodological descriptions. |\n| **70-89** | Contains some original insights or unique analysis of existing data. Offers a distinct perspective with original examples. |\n| **50-69** | Mostly synthesizes existing information but adds some unique commentary or examples. |\n| **30-49** | Largely derivative content that restates common knowledge with minimal original contribution. |\n| **0-29** | Entirely derivative. All information is available (often verbatim) on higher-authority sources. |\n\n**Signals of unique content:**\n- \"Our analysis of [X] data found...\"\n- \"We surveyed [N] [professionals] and found...\"\n- \"Based on our experience with [N] clients...\"\n- Custom charts, graphs, or data visualizations\n- Case studies with specific named outcomes\n- Original frameworks, methodologies, or taxonomies\n\n---\n\n## Analysis Procedure\n\n### Step 1: Fetch and Parse Page Content\n\n1. Use WebFetch to retrieve the target URL.\n2. Extract the main content area (exclude navigation, footer, sidebar, ads).\n3. Preserve heading structure (H1-H6 tags).\n4. Preserve paragraph boundaries, lists, and tables.\n5. Calculate total word count of main content.\n\n### Step 2: Segment Content into Blocks\n\n1. Split content at each heading (H2 or H3) to create content blocks.\n2. For each block, record:\n   - The heading text\n   - The full text content under that heading\n   - Word count of the block\n   - Number of paragraphs\n   - Number of lists and tables\n   - Number of statistics/data points\n   - Whether the block contains a definition pattern\n   - Whether the first 60 words form a standalone answer\n\n### Step 3: Score Each Block\n\nFor each content block, calculate:\n- Answer Block Quality sub-score (0-100)\n- Self-Containment sub-score (0-100)\n- Structural Readability sub-score (0-100)\n- Statistical Density sub-score (0-100)\n- Uniqueness sub-score (0-100)\n\n**Block Citability Score** = (Answer * 0.30) + (SelfContain * 0.25) + (Structure * 0.20) + (Stats * 0.15) + (Unique * 0.10)\n\n### Step 4: Calculate Page-Level Score\n\n1. Calculate the average of all block scores for the page-level citability score.\n2. Identify the top 3 highest-scoring blocks (highlight as strengths).\n3. Identify the bottom 3 lowest-scoring blocks (flag for rewriting).\n4. Calculate the percentage of blocks scoring above 70 (the \"citability coverage\" metric).\n\n### Step 5: Generate Rewrite Suggestions\n\nFor each block scoring below 60, generate a specific rewrite suggestion:\n1. Identify the primary weakness (buried answer, lack of facts, poor structure, etc.).\n2. Propose a rewritten opening sentence using a definition or answer-first pattern.\n3. Suggest specific statistics or facts that could be added.\n4. Recommend structural improvements (add list, add table, split paragraph).\n\n---\n\n## Output Format\n\nGenerate a file called `GEO-CITABILITY-SCORE.md`:\n\n```markdown\n# AI Citability Analysis: [Page Title]\n\n**URL:** [URL]\n**Analysis Date:** [Date]\n**Overall Citability Score: [X]/100**\n**Citability Coverage:** [X]% of content blocks score above 70\n\n---\n\n## Score Summary\n\n| Category | Score | Weight | Weighted |\n|---|---|---|---|\n| Answer Block Quality | [X]/100 | 30% | [X] |\n| Passage Self-Containment | [X]/100 | 25% | [X] |\n| Structural Readability | [X]/100 | 20% | [X] |\n| Statistical Density | [X]/100 | 15% | [X] |\n| Uniqueness & Original Data | [X]/100 | 10% | [X] |\n| **Overall** | | | **[X]/100** |\n\n---\n\n## Strongest Content Blocks\n\n### 1. \"[Heading]\" -- Score: [X]/100\n> [First 2 sentences of the block]\n\n**Why it works:** [Explanation]\n\n### 2. \"[Heading]\" -- Score: [X]/100\n> [First 2 sentences of the block]\n\n**Why it works:** [Explanation]\n\n---\n\n## Weakest Content Blocks (Rewrite Priority)\n\n### 1. \"[Heading]\" -- Score: [X]/100\n\n**Current opening:**\n> [First 2 sentences as they exist]\n\n**Problem:** [Specific issue -- buried answer, no facts, etc.]\n\n**Suggested rewrite:**\n> [Rewritten opening 2-3 sentences with answer-first pattern and facts]\n\n**Additional improvements:**\n- [Add table comparing X, Y, Z]\n- [Include statistic about ...]\n- [Split long paragraph into 2-3 shorter ones]\n\n---\n\n## Quick Win Reformatting Recommendations\n\n1. **[Specific recommendation]** -- Expected citability lift: +[X] points\n2. **[Specific recommendation]** -- Expected citability lift: +[X] points\n3. **[Specific recommendation]** -- Expected citability lift: +[X] points\n4. **[Specific recommendation]** -- Expected citability lift: +[X] points\n5. **[Specific recommendation]** -- Expected citability lift: +[X] points\n\n---\n\n## Per-Section Scores\n\n| Section Heading | Words | Answer Quality | Self-Contained | Structure | Stats | Unique | Overall |\n|---|---|---|---|---|---|---|---|\n| [H2 heading] | [N] | [X] | [X] | [X] | [X] | [X] | [X] |\n```\n\n---\n\n## Reference Data\n\n### Optimal Passage Characteristics (from GEO Research)\n\n- **Optimal length for AI citation:** 134-167 words (Bortolato 2025 analysis of AI Overview passages)\n- **Definition patterns increase citation rate by:** 2.1x (Georgia Tech 2024)\n- **Adding statistics to passages increases citation by:** 40% (Princeton GEO study 2024)\n- **Adding quotations from authorities increases citation by:** 115% in certain categories (IIT Delhi 2024)\n- **Fluency optimization increases visibility by:** 30% on average across all query types\n- **Content with source citations is cited:** 20-25% more often by Perplexity and ChatGPT search\n\n### AI System Citation Preferences\n\n| AI System | Citation Preference |\n|---|---|\n| **ChatGPT (Search)** | Prefers passages with explicit definitions, named sources, and recent dates. Tends to cite 2-4 sources per response. |\n| **Perplexity** | Heavily favors fact-dense passages with statistics. Cites 4-8 sources per response. Values recency highly. |\n| **Claude** | Prefers well-structured, comprehensive passages. Values nuance and accuracy over brevity. |\n| **Gemini (AI Overviews)** | Prefers concise answer blocks (40-60 words). Values content already ranking in top 10 organic results. |\n| **Copilot (Bing)** | Similar to Gemini. Prefers passages from high-authority domains with clear factual claims. |\n","frontmatter":{"name":"geo-citability","description":"AI citability scoring and optimization. Analyzes web page content to determine how likely AI systems (ChatGPT, Claude, Perplexity, Gemini) are to cite or quote passages from the page. Provides a citability score (0-100) with specific rewrite suggestions.","allowed-tools":["Read","Grep","Glob","Bash","WebFetch","Write"],"allowedTools":["Read","Grep","Glob","Bash","WebFetch","Write"]},"allowedTools":["Read","Grep","Glob","Bash","WebFetch","Write"],"isInternal":false,"tokens":3555,"sizeBytes":14804},{"name":"SKILL.md","path":"skills/geo-compare/SKILL.md","rawUrl":"https://raw.githubusercontent.com/zubair-trabzada/geo-seo-claude/HEAD/skills/geo-compare/SKILL.md","title":"geo-compare","category":"anthropic-skill","format":"markdown","content":"---\nname: geo-compare\ndescription: >\n  Monthly delta tracking and progress reporting for GEO clients. Compares two\n  GEO audits (baseline vs. current), calculates score improvements across all\n  categories, tracks action item completion, and generates a \"here's your progress\"\n  client report. Use when user says \"compare\", \"delta\", \"monthly report\", \"progress\",\n  \"confronta\", \"progressi\", \"report mensile\", or when running a monthly client check-in.\nversion: 1.0.0\ntags: [geo, business, delta, monthly, reporting, client, progress]\nallowed-tools: Read, Write, Bash, Glob\n---\n\n# GEO Monthly Delta Report Generator\n\n## Purpose\n\nThe single most powerful retention tool for a GEO agency: show clients **exactly**\nwhat improved since they started working with you. Every point gained on the GEO\nscore is proof of value. This skill generates the \"here's your progress\" report.\n\n---\n\n## Commands\n\n```\n/geo compare <domain>\n/geo compare <baseline-file> <current-file>\n/geo compare electron-srl.com --month march-2026\n```\n\n**Examples:**\n```\n/geo compare electron-srl.com\n/geo compare ~/.geo-prospects/audits/electron-srl.com-2026-01-15.md ~/.geo-prospects/audits/electron-srl.com-2026-03-12.md\n```\n\n---\n\n## Workflow\n\n### Step 1: Find Audit Files\n\nIf only domain is provided:\n1. Look in `~/.geo-prospects/audits/` for files matching `<domain>-*.md`\n2. Sort by date\n3. Use oldest as baseline, newest as current\n4. If only one file exists: use it as baseline, run a fresh quick audit as current\n5. If no files exist: suggest running `/geo prospect audit <domain>` first\n\n### Step 2: Parse Both Audits\n\nExtract from each audit file:\n- Overall GEO Score\n- Per-category scores (6 categories)\n- Per-platform scores (5 platforms)\n- AI crawler status (14 crawlers)\n- Critical issues list\n- Action items list with status\n\n### Step 3: Calculate Deltas\n\nFor each metric:\n- Delta = Current - Baseline\n- Trend = ▲ (improved), ▼ (declined), ── (unchanged)\n- Color coding in report: green (+), red (-), gray (=)\n\n### Step 4: Generate Monthly Report\n\nOutput to `~/.geo-prospects/reports/<domain>-monthly-<date>.md`\n\n---\n\n## Report Template\n\nGenerate the following document:\n\n```markdown\n# GEO Monthly Progress Report\n## [COMPANY NAME] — [MONTH YEAR]\n\n**Reporting period:** [BASELINE DATE] → [CURRENT DATE]\n**Prepared by:** [AGENCY NAME]\n**Report reference:** GEO-MONTHLY-[DOMAIN]-[YYMMDD]\n\n---\n\n## Executive Summary\n\n[2-3 sentences: What improved, what's the trend, what to focus on next month.]\n\nExample: \"Electron Srl's GEO Score improved from 32 to 44 this month (+12 points),\nplacing the site firmly in the 'Below Average' tier and on track to reach 'Moderate'\nby May. The biggest wins were AI crawler access (+3 crawlers now allowed) and schema\nimplementation (+Organization and LocalBusiness schemas live). Next month's focus is\ncontent citability — the highest-weighted remaining gap.\"\n\n---\n\n## GEO Score Progress\n\n```\nOVERALL GEO SCORE\n\n  Baseline   [▓▓▓▓░░░░░░░░░░░░░░░░]  32/100  (Critical)\n  Current    [▓▓▓▓▓▓▓▓░░░░░░░░░░░░]  44/100  (Below Average)\n  Change     ▲ +12 points (+37.5%)\n\n  Target:    65/100 by Month 6 (on track ✓)\n```\n\n---\n\n## Score Breakdown: Before vs. After\n\n| Category | Baseline | Current | Change | Trend |\n|----------|---------|---------|--------|-------|\n| AI Citability & Visibility | [X]/100 | [X]/100 | [+/-X] | [▲/▼/──] |\n| Brand Authority Signals | [X]/100 | [X]/100 | [+/-X] | [▲/▼/──] |\n| Content Quality & E-E-A-T | [X]/100 | [X]/100 | [+/-X] | [▲/▼/──] |\n| Technical Foundations | [X]/100 | [X]/100 | [+/-X] | [▲/▼/──] |\n| Structured Data | [X]/100 | [X]/100 | [+/-X] | [▲/▼/──] |\n| Platform Optimization | [X]/100 | [X]/100 | [+/-X] | [▲/▼/──] |\n| **TOTAL** | **[X]/100** | **[X]/100** | **[+/-X]** | **[▲/▼]** |\n\n---\n\n## Platform Readiness: Before vs. After\n\n| AI Platform | Baseline | Current | Change |\n|-------------|---------|---------|--------|\n| Google AI Overviews | [X]/100 | [X]/100 | [+/-X] |\n| ChatGPT Web Search | [X]/100 | [X]/100 | [+/-X] |\n| Perplexity AI | [X]/100 | [X]/100 | [+/-X] |\n| Google Gemini | [X]/100 | [X]/100 | [+/-X] |\n| Bing Copilot | [X]/100 | [X]/100 | [+/-X] |\n\n---\n\n## AI Crawler Access Changes\n\n| Crawler | Baseline | Current | Change |\n|---------|---------|---------|--------|\n| GPTBot (ChatGPT) | Blocked/Allowed | Blocked/Allowed | ✓ Fixed / No change |\n| ClaudeBot (Anthropic) | Blocked/Allowed | Blocked/Allowed | ✓ Fixed / No change |\n| PerplexityBot | Blocked/Allowed | Blocked/Allowed | ✓ Fixed / No change |\n| Google-Extended (Gemini) | Blocked/Allowed | Blocked/Allowed | ✓ Fixed / No change |\n| Bingbot | Blocked/Allowed | Blocked/Allowed | ✓ Fixed / No change |\n\n[Show only crawlers that changed, or all if few crawlers.]\n\n---\n\n## Action Plan Progress\n\n### Quick Wins — Status Update\n\n| # | Action | Assigned | Status | Impact |\n|---|--------|---------|--------|--------|\n| 1 | Allow all AI crawlers in robots.txt | Client dev | ✅ Done | +3 crawlers |\n| 2 | Add Organization schema to homepage | Client dev | ✅ Done | Schema score +15 |\n| 3 | Create llms.txt | Agency | ✅ Done | AI visibility +8 |\n| 4 | Add author bylines to all articles | Client content | 🔄 In Progress | — |\n| 5 | Fix meta descriptions (47 pages missing) | Client dev | ❌ Not started | — |\n\n**Quick wins completed: [X]/[Y] ([%])**\n\n### Medium-Term — Status Update\n\n| # | Action | Target Month | Status |\n|---|--------|-------------|--------|\n| 1 | Rewrite top 10 pages with Q&A structure | Month 2 | 🔄 3/10 done |\n| 2 | E-E-A-T: Create author pages | Month 2 | ❌ Not started |\n| 3 | Register Bing Webmaster Tools | Month 1 | ✅ Done |\n| 4 | Implement IndexNow | Month 2 | 🔄 In Progress |\n\n### Strategic — Status Update\n\n| # | Action | Target | Status |\n|---|--------|--------|--------|\n| 1 | Wikipedia entity creation | Month 4 | 📋 Planned |\n| 2 | YouTube channel launch | Month 3 | 📋 Planned |\n| 3 | Reddit presence (industry subs) | Month 3 | 📋 Planned |\n\n---\n\n## This Month's Wins\n\n> Use this section to celebrate — clients need to see the value clearly.\n\n✅ **[WIN 1]:** [Specific, tangible result — e.g., \"GPTBot and ClaudeBot are now allowed. ChatGPT can now crawl and cite your content.\"]\n✅ **[WIN 2]:** [e.g., \"Organization schema implemented on homepage. Your brand entity is now machine-readable.\"]\n✅ **[WIN 3]:** [e.g., \"llms.txt created and deployed at electron-srl.com/llms.txt — one of only ~12% of sites in your industry to have this.\"]\n\n---\n\n## New Issues Discovered\n\n> Issues found in current audit that weren't in baseline.\n\n⚠️ **[ISSUE 1]:** [What it is, what it means, how we'll fix it]\n⚠️ **[ISSUE 2]:** [What it is, what it means, how we'll fix it]\n\n---\n\n## Next Month Focus\n\n### Priority Actions for [NEXT MONTH]:\n\n| Priority | Action | Owner | Expected Impact |\n|----------|--------|-------|----------------|\n| 1 | [Highest ROI action] | [Agency/Client] | +[X] GEO points |\n| 2 | [Second priority] | [Agency/Client] | +[X] GEO points |\n| 3 | [Third priority] | [Agency/Client] | +[X] GEO points |\n\n**Target GEO Score next month:** [CURRENT + estimated gain]/100\n\n---\n\n## 6-Month Trajectory\n\n| Month | Date | Score | Delta | Key Achievement |\n|-------|------|-------|-------|----------------|\n| Baseline | [Date] | [Score] | — | Initial audit |\n| Month 1 | [Date] | [Score] | [+X] | Quick wins implemented |\n| Month 2 | [Date] | [Score] | [+X] | *Current month* |\n| Month 3 | [Date] | — | — | Content citability |\n| Month 4 | — | — | — | Brand authority |\n| Month 5 | — | — | — | Strategic initiatives |\n| Month 6 | — | **Target: [X]** | — | Full review |\n\n[Only fill rows that have happened. Show projected rows as \"—\"]\n\n---\n\n## Estimated Business Impact\n\nBased on the [X]-point improvement this month:\n\n- **AI citation likelihood:** Increased by approximately [X]%\n- **Crawlers with access:** [X]/14 → [Y]/14 (better coverage on [platforms])\n- **Estimated monthly AI-referred traffic improvement:** +[X]% (conservative)\n- **Traffic value at current conversion rates:** +€[X]/month in organic value\n\n*Note: Full traffic impact from GEO changes typically takes 4-8 weeks to materialize\nas AI platforms re-index and update their knowledge bases.*\n\n---\n\n*GEO Monthly Report — [COMPANY NAME] — [DATE]*\n*Questions or comments? [CONTACT EMAIL]*\n```\n\n---\n\n## Delta Calculation Logic\n\nWhen parsing two audit files, look for these patterns:\n\n```\nScore markers to extract:\n- \"GEO Score: XX/100\"\n- \"Overall Score: XX\"\n- \"AI Citability: XX/100\"\n- \"Brand Authority: XX/100\"\n- \"Technical: XX/100\"\n- \"Schema: XX/100\"\n- \"Platform: XX/100\"\n- \"Content: XX/100\"\n- \"GPTBot: Allowed/Blocked\"\n- \"ClaudeBot: Allowed/Blocked\"\n```\n\nIf exact scores are not found in audit files, use contextual analysis of the\nwritten findings to estimate approximate scores based on issues described.\n\n---\n\n## Trend Interpretation\n\n| Delta | Trend Symbol | Meaning |\n|-------|-------------|---------|\n| +5 or more | ▲▲ | Strong improvement |\n| +1 to +4 | ▲ | Improvement |\n| 0 | ── | No change |\n| -1 to -4 | ▼ | Slight decline |\n| -5 or more | ▼▼ | Significant decline — needs discussion |\n\nA decline is not necessarily bad — it can mean new issues were discovered in the\nfresh audit that weren't visible before. Frame declines as \"newly discovered opportunities.\"\n\n---\n\n## Output\n\n1. Save report to `~/.geo-prospects/reports/<domain>-monthly-<YYYY-MM>.md`\n2. Print confirmation with key stats:\n   ```\n   ✓ Monthly report generated: ~/.geo-prospects/reports/electron-srl.com-monthly-2026-03.md\n\n   SUMMARY:\n   GEO Score: 32 → 44 (+12 points) ▲\n   Quick wins completed: 3/5 (60%)\n   New issues found: 2 (minor)\n   On track for Month 6 target: YES (65/100)\n   ```\n3. Suggest next action: \"Share with client or run `/geo report-pdf` for a visual version\"\n","frontmatter":{"name":"geo-compare","description":"Monthly delta tracking and progress reporting for GEO clients. Compares two GEO audits (baseline vs. current), calculates score improvements across all categories, tracks action item completion, and generates a \"here's your progress\" client report. Use when user says \"compare\", \"delta\", \"monthly report\", \"progress\", \"confronta\", \"progressi\", \"report mensile\", or when running a monthly client check-in.\n","version":"1.0.0","tags":["geo","business","delta","monthly","reporting","client","progress"],"allowed-tools":"Read, Write, Bash, Glob","allowedTools":["Read,","Write,","Bash,","Glob"]},"allowedTools":["Read,","Write,","Bash,","Glob"],"isInternal":false,"tokens":2807,"sizeBytes":9952},{"name":"SKILL.md","path":"skills/geo-content/SKILL.md","rawUrl":"https://raw.githubusercontent.com/zubair-trabzada/geo-seo-claude/HEAD/skills/geo-content/SKILL.md","title":"geo-content","category":"anthropic-skill","format":"markdown","content":"---\nname: geo-content\ndescription: Content quality and E-E-A-T assessment for AI citability — evaluate experience, expertise, authoritativeness, trustworthiness, and content structure\nversion: 1.0.0\nauthor: geo-seo-claude\ntags: [geo, content-quality, eeat, citability, ai-content, topical-authority]\nallowed-tools: Read, Grep, Glob, Bash, WebFetch, Write\n---\n\n# GEO Content Quality & E-E-A-T Assessment\n\n## Purpose\n\nAI search platforms do not just find content — they evaluate whether content deserves to be cited. The primary framework for this evaluation is **E-E-A-T** (Experience, Expertise, Authoritativeness, Trustworthiness), which per Google's December 2025 Quality Rater Guidelines update now applies to **ALL competitive queries**, not just YMYL (Your Money Your Life) topics. Content that scores high on E-E-A-T is dramatically more likely to be cited by AI platforms.\n\nThis skill evaluates content through two lenses:\n1. **E-E-A-T signals** — does the content demonstrate real expertise and trust?\n2. **AI citability** — is the content structured so AI platforms can extract and cite specific claims?\n\n## How to Use This Skill\n\n1. Fetch the target page(s) — homepage, key blog posts, service/product pages\n2. Evaluate E-E-A-T across the 4 dimensions (25% each)\n3. Assess content quality metrics (structure, readability, depth)\n4. Check for AI content quality signals\n5. Evaluate topical authority across the site\n6. Score and generate GEO-CONTENT-ANALYSIS.md\n\n---\n\n## E-E-A-T Framework (100 points total)\n\n### Experience — 25 points\nFirst-hand knowledge and direct involvement with the topic. AI platforms increasingly distinguish between content that reports on a topic and content from someone who has DONE it.\n\n**Signals to evaluate:**\n\n| Signal | Points | How to Score |\n|---|---|---|\n| First-person accounts (\"I tested...\", \"We implemented...\") | 5 | 5 if present and specific, 3 if generic, 0 if absent |\n| Original research or data not available elsewhere | 5 | 5 if original data, 3 if references original work, 0 if none |\n| Case studies with specific results | 4 | 4 if detailed with numbers, 2 if general, 0 if none |\n| Screenshots, photos, or evidence of direct use | 3 | 3 if authentic evidence, 1 if stock/generic, 0 if none |\n| Specific examples from personal experience | 4 | 4 if specific and unique, 2 if somewhat specific, 0 if generic |\n| Demonstrations of process (not just outcome) | 4 | 4 if step-by-step from experience, 2 if partial, 0 if none |\n\n**What to flag as weak Experience:**\n- Content that only summarizes what other sources say without adding new perspective\n- Generic advice that could apply to any situation (\"It depends on your needs\")\n- No mention of actual usage, testing, or direct involvement\n- Hedging language that suggests lack of direct knowledge (\"reportedly\", \"supposedly\", \"some say\")\n\n### Expertise — 25 points\nDemonstrated knowledge depth and professional competence in the subject matter.\n\n**Signals to evaluate:**\n\n| Signal | Points | How to Score |\n|---|---|---|\n| Author credentials visible (bio, degrees, certifications) | 5 | 5 if full credentials, 3 if basic bio, 0 if no author |\n| Technical depth appropriate to topic | 5 | 5 if thorough technical treatment, 3 if adequate, 0 if superficial |\n| Methodology explanation (how conclusions were reached) | 4 | 4 if clear methodology, 2 if some explanation, 0 if none |\n| Data-backed claims (statistics, research citations) | 4 | 4 if well-sourced, 2 if some data, 0 if unsupported claims |\n| Industry-specific terminology used correctly | 3 | 3 if accurate specialized language, 1 if basic, 0 if errors |\n| Author page with detailed professional background | 4 | 4 if dedicated author page, 2 if brief bio, 0 if none |\n\n**What to flag as weak Expertise:**\n- Claims without supporting evidence or sources\n- Surface-level coverage of complex topics\n- Misuse of technical terminology\n- No visible author or author without relevant credentials\n- Content that is broad and generic rather than deep and specific\n\n### Authoritativeness — 25 points\nRecognition by others as a credible source on the topic.\n\n**Signals to evaluate:**\n\n| Signal | Points | How to Score |\n|---|---|---|\n| Inbound citations from authoritative sources | 5 | 5 if cited by major sources, 3 if some citations, 0 if none |\n| Author quoted or cited in press/media | 4 | 4 if media mentions, 2 if industry mentions, 0 if none |\n| Industry awards or recognition mentioned | 3 | 3 if relevant awards, 1 if tangential, 0 if none |\n| Speaker credentials (conferences, events) | 3 | 3 if listed, 0 if none |\n| Published in peer-reviewed or respected outlets | 4 | 4 if tier-1 publications, 2 if industry outlets, 0 if none |\n| Comprehensive topic coverage (topical authority) | 3 | 3 if site covers topic thoroughly, 1 if some coverage, 0 if isolated |\n| Brand mentioned on Wikipedia or authoritative references | 3 | 3 if Wikipedia, 2 if other encyclopedic refs, 0 if none |\n\n**What to flag as weak Authoritativeness:**\n- Single-topic site with no depth of coverage\n- No external validation of expertise claims\n- No backlinks from authoritative sources\n- Claims of authority without evidence (self-proclaimed \"expert\")\n\n### Trustworthiness — 25 points\nSignals that the content and its publisher are reliable and transparent.\n\n**Signals to evaluate:**\n\n| Signal | Points | How to Score |\n|---|---|---|\n| Contact information visible (address, phone, email) | 4 | 4 if full contact info, 2 if email only, 0 if none |\n| Privacy policy present and linked | 2 | 2 if present, 0 if absent |\n| Terms of service present | 1 | 1 if present, 0 if absent |\n| HTTPS with valid certificate | 2 | 2 if valid HTTPS, 0 if not |\n| Editorial standards or corrections policy | 3 | 3 if documented, 1 if implicit, 0 if none |\n| Transparent about business model and conflicts | 3 | 3 if clear disclosures, 1 if some, 0 if none |\n| Reviews and testimonials from real customers | 3 | 3 if verified reviews, 1 if testimonials, 0 if none |\n| Accurate claims (no misinformation detected) | 4 | 4 if all claims accurate, 2 if mostly accurate, 0 if errors found |\n| Clear affiliate/sponsorship disclosures | 3 | 3 if properly disclosed, 0 if undisclosed or absent |\n\n**What to flag as weak Trustworthiness:**\n- No contact information or physical address\n- Missing privacy policy or terms\n- Undisclosed affiliate links or sponsored content\n- Claims that are verifiably false or misleading\n- No way to contact the publisher for corrections\n\n---\n\n## Content Quality Metrics\n\n### Word Count Benchmarks\nThese are **floors, not targets**. More words does not mean better content. The benchmark is the minimum length to adequately cover a topic for AI citability.\n\n| Page Type | Minimum Words | Ideal Range | Notes |\n|---|---|---|---|\n| Homepage | 500 | 500-1,500 | Clear value proposition, not a wall of text |\n| Blog post | 1,500 | 1,500-3,000 | Thorough but focused |\n| Pillar content / Ultimate guide | 2,000 | 2,500-5,000 | Comprehensive topic coverage |\n| Product page | 300 | 500-1,500 | Descriptions, specs, use cases |\n| Service page | 500 | 800-2,000 | What, how, why, for whom |\n| About page | 300 | 500-1,000 | Company/person story and credentials |\n| FAQ page | 500 | 1,000-2,500 | Thorough answers, not one-liners |\n\n### Readability Assessment\n- **Target Flesch Reading Ease**: 60-70 (8th-9th grade level)\n- This is NOT a direct ranking factor but affects citability — AI platforms prefer content that is clear and unambiguous\n- Overly academic writing (score < 30) reduces citability for general queries\n- Overly simple writing (score > 80) may lack the depth needed for expertise signals\n\n**How to estimate without a tool:**\n- Average sentence length: 15-20 words is ideal\n- Average paragraph length: 2-4 sentences\n- Presence of jargon: should be defined when first used\n- Passive voice: < 15% of sentences\n\n### Paragraph Structure for AI Parsing\nAI platforms extract content at the paragraph level. Each paragraph should be a self-contained unit of meaning.\n\n**Optimal paragraph structure:**\n- **2-4 sentences** per paragraph (1-sentence paragraphs are weak; 5+ sentences are hard to extract)\n- **One idea per paragraph** — do not mix topics within a paragraph\n- **Lead with the key claim** — first sentence should contain the main point\n- **Support with evidence** — remaining sentences provide data, examples, or context\n- **Quotable standalone** — each paragraph should make sense if extracted in isolation\n\n### Heading Structure\n- **One H1 per page** — the primary topic/title\n- **H2 for major sections** — should represent distinct subtopics\n- **H3 for subsections** — nested under relevant H2\n- **No skipped levels** — do not go from H1 to H3 without an H2\n- **Descriptive headings** — \"How to Optimize for AI Search\" not \"Section 2\"\n- **Question-based headings** where appropriate — these map directly to AI queries\n\n### Internal Linking\n- Every content page should link to 3-5 related pages on the same site\n- Links should use descriptive anchor text (not \"click here\")\n- Create a topic cluster structure: pillar page linked to/from all related subtopic pages\n- Orphan pages (no internal links pointing to them) are rarely cited by AI\n\n---\n\n## AI Content Assessment\n\n### AI-Generated Content Policy\nAI-generated content is **acceptable** per Google's guidance (March 2024 clarification) as long as it demonstrates genuine E-E-A-T signals and has human oversight. The concern is not HOW content is created but WHETHER it provides value.\n\n### Signs of Low-Quality AI Content (flag these)\n\n| Signal | Description |\n|---|---|\n| Generic phrasing | \"In today's fast-paced world...\", \"It's important to note that...\", \"At the end of the day...\" |\n| No original insight | Content that only rephrases widely available information |\n| Lack of first-hand experience | No personal anecdotes, case studies, or specific examples |\n| Perfect but empty structure | Well-formatted headings with shallow content beneath them |\n| No specific examples | Uses abstract explanations without concrete instances |\n| Repetitive conclusions | Each section ends with a variation of the same point |\n| Hedging overload | \"Generally speaking\", \"In most cases\", \"It depends on various factors\" without specifying which factors |\n| Missing human voice | No opinions, preferences, or professional judgment expressed |\n| Filler content | Paragraphs that could be deleted without losing information |\n| No data or sources | Claims presented as facts without attribution or evidence |\n\n### High-Quality Content Signals (regardless of production method)\n\n| Signal | Description |\n|---|---|\n| Original data | Surveys, experiments, benchmarks, proprietary analysis |\n| Specific examples | Named products, companies, dates, numbers |\n| Contrarian or nuanced views | Disagreement with conventional wisdom, backed by reasoning |\n| First-person experience | \"When I tested this...\" or \"Our team found...\" |\n| Updated information | References to recent events, current data |\n| Expert opinion | Clear professional judgment, not just facts |\n| Practical recommendations | Specific, actionable advice, not vague guidance |\n| Trade-offs acknowledged | \"This approach works well for X but not for Y because...\" |\n\n---\n\n## Content Freshness Assessment\n\n### Publication Dates\n- Check for visible `datePublished` and `dateModified` in both the content and structured data\n- Content without dates is treated as less trustworthy by AI platforms\n- Dates should be specific (January 15, 2026) not vague (\"recently\")\n\n### Freshness Scoring\n\n| Criterion | Score |\n|---|---|\n| Updated within 3 months | Excellent — current and relevant |\n| Updated within 6 months | Good — still reasonably current |\n| Updated within 12 months | Acceptable — may need refresh |\n| Updated 12-24 months ago | Warning — review for accuracy |\n| No date or 24+ months old | Critical — AI platforms may deprioritize |\n\n### Evergreen Indicators\nSome content remains relevant regardless of age. Flag content as evergreen if:\n- It covers fundamental concepts that do not change (physics, basic math, legal definitions)\n- It is clearly labeled as a reference/guide for lasting concepts\n- It does not contain time-dependent claims (\"the latest\", \"currently\", \"in 2024\")\n\n---\n\n## Topical Authority Assessment\n\n### What It Is\nTopical authority measures whether a site comprehensively covers a topic rather than touching on it superficially. AI platforms prefer citing sites that are recognized authorities on their topics.\n\n### How to Assess\n1. **Content breadth**: Does the site have multiple pages covering different aspects of its core topic?\n2. **Content depth**: Do individual pages go deep into subtopics?\n3. **Topic clustering**: Are pages organized into logical groups with internal linking?\n4. **Content gaps**: Are there obvious subtopics that the site should cover but does not?\n5. **Competitor comparison**: Do competitors cover subtopics that this site misses?\n\n### Scoring\n\n| Level | Description | Score Impact |\n|---|---|---|\n| Authority | 20+ pages covering topic comprehensively, strong clustering | +10 bonus |\n| Developing | 10-20 pages with some clustering | +5 bonus |\n| Emerging | 5-10 pages on topic, limited clustering | +0 |\n| Thin | < 5 pages, no clustering | -5 penalty |\n\n---\n\n## Overall Scoring (0-100)\n\n### Score Composition\n| Component | Weight | Max Points |\n|---|---|---|\n| Experience | 25% | 25 |\n| Expertise | 25% | 25 |\n| Authoritativeness | 25% | 25 |\n| Trustworthiness | 25% | 25 |\n| **Subtotal** | | **100** |\n| Topical Authority Modifier | | +10 to -5 |\n| **Final Score** | | **Capped at 100** |\n\n### Score Interpretation\n- **85-100**: Exceptional — strong AI citation candidate across platforms\n- **70-84**: Good — solid foundation, specific improvements will increase citability\n- **55-69**: Average — multiple E-E-A-T gaps reducing AI visibility\n- **40-54**: Below Average — significant content quality and trust issues\n- **0-39**: Poor — fundamental content strategy overhaul needed\n\n---\n\n## Output Format\n\nGenerate **GEO-CONTENT-ANALYSIS.md** with:\n\n```markdown\n# GEO Content Quality & E-E-A-T Analysis — [Domain]\nDate: [Date]\n\n## Content Score: XX/100\n\n## E-E-A-T Breakdown\n| Dimension | Score | Key Finding |\n|---|---|---|\n| Experience | XX/25 | [One-line summary] |\n| Expertise | XX/25 | [One-line summary] |\n| Authoritativeness | XX/25 | [One-line summary] |\n| Trustworthiness | XX/25 | [One-line summary] |\n\n## Topical Authority Modifier: [+10 to -5]\n\n## Pages Analyzed\n| Page | Word Count | Readability | Heading Structure | Citability Rating |\n|---|---|---|---|---|\n| [URL] | [Count] | [Score] | [Pass/Warn/Fail] | [High/Medium/Low] |\n\n## E-E-A-T Detailed Findings\n\n### Experience\n[Specific passages and pages with strong/weak experience signals]\n\n### Expertise\n[Author credentials found, technical depth assessment, specific gaps]\n\n### Authoritativeness\n[External validation found, topical authority assessment, gaps]\n\n### Trustworthiness\n[Trust signals present/missing, accuracy concerns if any]\n\n## Content Quality Issues\n[Specific passages flagged with reasons and rewrite suggestions]\n\n## AI Content Concerns\n[Any low-quality AI content patterns detected, with specific examples]\n\n## Freshness Assessment\n| Page | Published | Last Updated | Status |\n|---|---|---|---|\n| [URL] | [Date] | [Date] | [Current/Stale/No Date] |\n\n## Citability Assessment\n### Most Citable Passages\n[Top 5 passages that AI platforms are most likely to cite, with reasons]\n\n### Least Citable Pages\n[Pages with lowest citability, with specific improvement recommendations]\n\n## Improvement Recommendations\n### Quick Wins\n[Specific content changes that can be made immediately]\n\n### Content Gaps\n[Topics the site should cover to strengthen topical authority]\n\n### Author/E-E-A-T Improvements\n[Specific steps to strengthen E-E-A-T signals]\n```\n","frontmatter":{"name":"geo-content","description":"Content quality and E-E-A-T assessment for AI citability — evaluate experience, expertise, authoritativeness, trustworthiness, and content structure","version":"1.0.0","author":"geo-seo-claude","tags":["geo","content-quality","eeat","citability","ai-content","topical-authority"],"allowed-tools":"Read, Grep, Glob, Bash, WebFetch, Write","allowedTools":["Read,","Grep,","Glob,","Bash,","WebFetch,","Write"]},"allowedTools":["Read,","Grep,","Glob,","Bash,","WebFetch,","Write"],"isInternal":false,"tokens":3774,"sizeBytes":15913},{"name":"SKILL.md","path":"skills/geo-crawlers/SKILL.md","rawUrl":"https://raw.githubusercontent.com/zubair-trabzada/geo-seo-claude/HEAD/skills/geo-crawlers/SKILL.md","title":"geo-crawlers","category":"anthropic-skill","format":"markdown","content":"---\nname: geo-crawlers\ndescription: AI crawler access analysis. Checks robots.txt, meta tags, and HTTP headers to determine which AI crawlers can access the site. Provides a complete access map and recommendations for maximizing AI visibility while maintaining appropriate control.\nallowed-tools:\n  - Read\n  - Grep\n  - Glob\n  - Bash\n  - WebFetch\n  - Write\n---\n\n# AI Crawler Access Analysis Skill\n\n## Purpose\n\nThis skill analyzes a website's accessibility to AI crawlers -- the bots that AI companies use to discover, index, and train on web content. If AI crawlers are blocked, the site's content cannot appear in AI-generated responses regardless of its quality. Crawler access is the foundational technical requirement for GEO.\n\n## Key Insight\n\nAs of early 2026, many websites inadvertently block AI crawlers through overly aggressive robots.txt rules, inherited from legacy SEO configurations. An Originality.ai 2025 study found that over 35% of the top 1,000 websites block at least one major AI crawler, and 5-10% block all AI crawlers. Blocking AI crawlers is the single fastest way to become invisible in AI-generated search results.\n\n---\n\n## Complete AI Crawler Reference\n\n### Tier 1: Critical for AI Search Visibility (RECOMMEND: ALLOW)\n\nThese crawlers power the AI search products where users actively look for answers. Blocking them directly reduces your visibility in AI-generated responses.\n\n#### GPTBot\n- **Operator:** OpenAI\n- **User-Agent:** `GPTBot`\n- **Full User-Agent String:** `Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; GPTBot/1.2; +https://openai.com/gptbot)`\n- **Purpose:** Fetches content for ChatGPT's web browsing, plugins, and search features. Content accessed by GPTBot may be used to improve OpenAI models.\n- **Impact of Blocking:** Content will NOT appear in ChatGPT Search results or be accessible when users ask ChatGPT to browse the web. This is the highest-impact AI crawler to allow.\n- **Recommendation:** **ALLOW** -- ChatGPT has 300M+ weekly active users as of 2025. Blocking GPTBot removes your content from one of the largest AI search surfaces.\n\n#### OAI-SearchBot\n- **Operator:** OpenAI\n- **User-Agent:** `OAI-SearchBot`\n- **Full User-Agent String:** `Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; OAI-SearchBot/1.0; +https://docs.openai.com/bots/overview)`\n- **Purpose:** Specifically powers ChatGPT's search feature. Unlike GPTBot, content accessed by OAI-SearchBot is NOT used for model training -- only for live search results.\n- **Impact of Blocking:** Content will not appear in ChatGPT's search results even if GPTBot is allowed.\n- **Recommendation:** **ALLOW** -- This is a search-only crawler with no training implications. There is no strategic reason to block it.\n\n#### ChatGPT-User\n- **Operator:** OpenAI\n- **User-Agent:** `ChatGPT-User`\n- **Full User-Agent String:** `Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ChatGPT-User/1.0; +https://openai.com/bot)`\n- **Purpose:** Used when a ChatGPT user explicitly asks the model to visit a specific URL. Acts like a browser agent on behalf of the user.\n- **Impact of Blocking:** ChatGPT cannot visit your pages when users ask it to read or summarize them. This prevents direct user-initiated traffic.\n- **Recommendation:** **ALLOW** -- Blocking this bot prevents users who are actively trying to engage with your content from accessing it through ChatGPT.\n\n#### ClaudeBot\n- **Operator:** Anthropic\n- **User-Agent:** `ClaudeBot`\n- **Full User-Agent String:** `ClaudeBot/1.0; +https://www.anthropic.com/claude-bot`\n- **Purpose:** Fetches web content for Claude's features including web search, citations, and analysis tools.\n- **Impact of Blocking:** Content will not be accessible to Claude for web search or when users ask Claude to analyze specific URLs.\n- **Recommendation:** **ALLOW** -- Claude is a major AI assistant with growing market share. Blocking ClaudeBot reduces your AI search footprint.\n\n#### PerplexityBot\n- **Operator:** Perplexity AI\n- **User-Agent:** `PerplexityBot`\n- **Full User-Agent String:** `Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; PerplexityBot/1.0; +https://perplexity.ai/perplexitybot)`\n- **Purpose:** Powers Perplexity's AI search engine, which provides sourced answers with direct citations and links back to source pages.\n- **Impact of Blocking:** Content will not appear in Perplexity search results. Perplexity is one of the best referral traffic sources among AI search products because it always displays source links.\n- **Recommendation:** **ALLOW** -- Perplexity drives actual referral traffic and always attributes sources. High-value AI crawler for publishers and businesses.\n\n---\n\n### Tier 2: Important for Broader AI Ecosystem (RECOMMEND: ALLOW)\n\nThese crawlers serve large AI platforms or search ecosystems. Allowing them increases your content's reach.\n\n#### Google-Extended\n- **Operator:** Google\n- **User-Agent:** `Google-Extended`\n- **Purpose:** Controls whether Google uses your content for Gemini model training and AI Overviews improvement. **CRITICAL NOTE:** Blocking Google-Extended does NOT affect your Google Search rankings or your appearance in Google Search results. That is controlled by the standard Googlebot.\n- **Impact of Blocking:** Content may not be used for Gemini training or to improve AI Overviews. However, your content can still appear in AI Overviews based on standard search indexing.\n- **Recommendation:** **ALLOW** -- Blocking provides minimal content protection upside while reducing your presence in Google's AI features. Since it does not affect standard search ranking, the only reason to block is philosophical objection to training data usage.\n\n#### GoogleOther\n- **Operator:** Google\n- **User-Agent:** `GoogleOther`\n- **Purpose:** Used by Google for various non-search-ranking purposes including research, one-off crawls, and AI-related data collection.\n- **Impact of Blocking:** Minimal impact on search rankings. May reduce presence in Google's AI research and experimental features.\n- **Recommendation:** **ALLOW** -- Low risk, moderate potential benefit for AI feature inclusion.\n\n#### Applebot-Extended\n- **Operator:** Apple\n- **User-Agent:** `Applebot-Extended`\n- **Purpose:** Used by Apple to train and improve Apple Intelligence features, Siri, and Apple's AI products. Separate from standard Applebot (which powers Siri search and Spotlight Suggestions).\n- **Impact of Blocking:** Content may not be used in Apple Intelligence features. Standard Siri and Spotlight functionality is unaffected (controlled by Applebot).\n- **Recommendation:** **ALLOW** -- Apple Intelligence is integrated into all Apple devices (2B+ active devices). Presence in Apple's AI features has growing strategic value.\n\n#### Amazonbot\n- **Operator:** Amazon\n- **User-Agent:** `Amazonbot`\n- **Full User-Agent String:** `Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/600.2.5 (KHTML, like Gecko) Version/8.0.2 Safari/600.2.5 (compatible; Amazonbot/0.1; +https://developer.amazon.com/support/amazonbot)`\n- **Purpose:** Indexes content for Alexa answers and Amazon's AI features.\n- **Impact of Blocking:** Content will not appear in Alexa voice responses or Amazon's AI-powered search features.\n- **Recommendation:** **ALLOW** -- Relevant for voice search optimization. Lower priority than Tier 1 crawlers but no downside to allowing.\n\n#### FacebookBot\n- **Operator:** Meta\n- **User-Agent:** `FacebookBot`\n- **Purpose:** Used by Meta for AI features across Facebook, Instagram, WhatsApp, and Meta AI assistant.\n- **Impact of Blocking:** Content may not be accessible to Meta AI. Link previews on Facebook/Instagram are handled by a different crawler and are unaffected.\n- **Recommendation:** **ALLOW** -- Meta AI is embedded in apps with 3B+ combined users. Growing importance for AI visibility.\n\n---\n\n### Tier 3: Training-Only Crawlers (ALLOW or BLOCK Based on Strategy)\n\nThese crawlers are primarily used for AI model training rather than live search features. Blocking them does not affect AI search visibility.\n\n#### CCBot\n- **Operator:** Common Crawl (nonprofit)\n- **User-Agent:** `CCBot`\n- **Full User-Agent String:** `CCBot/2.0 (https://commoncrawl.org/faq/)`\n- **Purpose:** Builds the Common Crawl dataset, which is used as training data by many AI companies (Google, Meta, Stability AI, and others).\n- **Impact of Blocking:** Content will not appear in future Common Crawl datasets. Does NOT affect any live AI search product.\n- **Recommendation:** **CONTEXT-DEPENDENT** -- Allow if you want maximum long-term AI training presence. Block if you want to control training data usage. No impact on search visibility.\n\n#### anthropic-ai\n- **Operator:** Anthropic\n- **User-Agent:** `anthropic-ai`\n- **Purpose:** Used by Anthropic for AI safety research and Claude model training. Separate from ClaudeBot (which powers live features).\n- **Impact of Blocking:** Content will not be used for Claude training. Does NOT affect Claude's live search or web browsing features (controlled by ClaudeBot).\n- **Recommendation:** **CONTEXT-DEPENDENT** -- Similar to CCBot. Allow for training presence, block for training data control. No impact on live AI search.\n\n#### Bytespider\n- **Operator:** ByteDance\n- **User-Agent:** `Bytespider`\n- **Purpose:** Used by ByteDance for various AI products including TikTok's AI features and Doubao (their ChatGPT competitor in China).\n- **Impact of Blocking:** Content will not be used for ByteDance AI products. Minimal impact for Western-market businesses.\n- **Recommendation:** **BLOCK** for most Western businesses (aggressive crawling behavior reported, minimal search visibility benefit). **ALLOW** if targeting Chinese/Asian markets.\n\n#### cohere-ai\n- **Operator:** Cohere\n- **User-Agent:** `cohere-ai`\n- **Purpose:** Used by Cohere for model training. Cohere powers enterprise AI solutions and the Coral chat product.\n- **Impact of Blocking:** Content will not be used for Cohere model training. Minimal direct consumer-facing impact.\n- **Recommendation:** **CONTEXT-DEPENDENT** -- Low priority. Allow or block based on general training data stance.\n\n---\n\n## Recommendation Matrix Summary\n\n| Crawler | Tier | Recommendation | Reason |\n|---|---|---|---|\n| GPTBot | 1 | **ALLOW** | Powers ChatGPT Search (300M+ users) |\n| OAI-SearchBot | 1 | **ALLOW** | Search-only, no training use |\n| ChatGPT-User | 1 | **ALLOW** | User-initiated browsing |\n| ClaudeBot | 1 | **ALLOW** | Claude web search and analysis |\n| PerplexityBot | 1 | **ALLOW** | Best referral traffic AI search |\n| Google-Extended | 2 | **ALLOW** | Gemini features; no search rank impact |\n| GoogleOther | 2 | **ALLOW** | Google AI research |\n| Applebot-Extended | 2 | **ALLOW** | Apple Intelligence (2B+ devices) |\n| Amazonbot | 2 | **ALLOW** | Alexa and Amazon AI |\n| FacebookBot | 2 | **ALLOW** | Meta AI (3B+ app users) |\n| CCBot | 3 | Context | Training data only |\n| anthropic-ai | 3 | Context | Training data only |\n| Bytespider | 3 | **BLOCK** | Aggressive crawler, low benefit |\n| cohere-ai | 3 | Context | Training data only |\n\n### Maximum AI Visibility Configuration (robots.txt)\n\nFor sites wanting maximum AI search visibility:\n\n```\n# AI Crawlers - ALLOWED for AI search visibility\nUser-agent: GPTBot\nAllow: /\n\nUser-agent: OAI-SearchBot\nAllow: /\n\nUser-agent: ChatGPT-User\nAllow: /\n\nUser-agent: ClaudeBot\nAllow: /\n\nUser-agent: anthropic-ai\nAllow: /\n\nUser-agent: PerplexityBot\nAllow: /\n\nUser-agent: Google-Extended\nAllow: /\n\nUser-agent: GoogleOther\nAllow: /\n\nUser-agent: Applebot-Extended\nAllow: /\n\nUser-agent: Amazonbot\nAllow: /\n\nUser-agent: FacebookBot\nAllow: /\n\n# AI Crawlers - BLOCKED (aggressive/low value)\nUser-agent: Bytespider\nDisallow: /\n\nUser-agent: CCBot\nDisallow: /\n```\n\n---\n\n## Analysis Procedure\n\n### Step 1: Fetch and Parse robots.txt\n\n1. Use WebFetch to retrieve `[domain]/robots.txt`.\n2. Parse all User-agent directives and their associated Allow/Disallow rules.\n3. For each AI crawler in the reference list above:\n   - Check if there is a specific User-agent block for that crawler\n   - Check if there is a wildcard (`User-agent: *`) block that would apply\n   - Determine effective access: **Allowed**, **Blocked**, or **Not Mentioned** (inherits wildcard rules)\n4. Note any `Crawl-delay` directives that may slow AI crawler access.\n5. Check for `Sitemap` directives (AI crawlers use these for discovery).\n\n### Step 2: Check Meta Robots Tags\n\n1. For a sample of 5-10 key pages, fetch the HTML and check for:\n   - `<meta name=\"robots\" content=\"noindex\">` -- blocks all bots\n   - `<meta name=\"robots\" content=\"nofollow\">` -- prevents link following\n   - `<meta name=\"robots\" content=\"noai\">` -- emerging tag to block AI use\n   - `<meta name=\"robots\" content=\"noimageai\">` -- blocks AI image training\n   - Bot-specific meta tags: `<meta name=\"GPTBot\" content=\"noindex\">`\n2. Record any page-level overrides of the robots.txt directives.\n\n### Step 3: Check HTTP Headers\n\n1. For the same sample pages, check response headers for:\n   - `X-Robots-Tag: noindex` -- HTTP header equivalent of meta noindex\n   - `X-Robots-Tag: noai` -- HTTP header to block AI use\n   - `X-Robots-Tag: noimageai` -- blocks AI image training\n   - Bot-specific headers: `X-Robots-Tag: GPTBot: noindex`\n2. Note that HTTP headers override meta tags and apply to non-HTML resources too.\n\n### Step 4: Check for AI-Specific Files\n\n1. Check for `/llms.txt` (emerging standard for AI crawler guidance).\n2. Check for `/.well-known/ai-plugin.json` (OpenAI plugin manifest).\n3. Check for `/ai.txt` (proposed standard, similar to ads.txt for AI).\n4. Record presence/absence and quality of each file.\n\n### Step 5: Assess JavaScript Rendering Requirements\n\n1. Check if the site is a Single Page Application (SPA) or heavily JavaScript-rendered.\n2. AI crawlers vary in their JavaScript rendering capabilities:\n   - GPTBot: Limited JS rendering\n   - ClaudeBot: Limited JS rendering\n   - PerplexityBot: Limited JS rendering\n   - Googlebot: Full JS rendering (but Google-Extended inherits this)\n3. If critical content requires JS rendering, flag this as a potential issue.\n4. Check for Server-Side Rendering (SSR) or Static Site Generation (SSG) as mitigations.\n\n### Step 6: Parse Content Signals\n\nUsing the already-fetched robots.txt from Step 1, scan for `Content-Signal:` directives (IETF draft `draft-romm-aipref-contentsignals`).\n\n1. Scan every line for a line starting with `Content-Signal:` (case-insensitive).\n2. If found:\n   - Parse all key=value pairs (split on `,` then on `=`).\n   - Validate keys against the known set: `ai-train`, `search`, `ai-personalization`, `ai-retrieval`.\n   - Validate values: only `yes` and `no` are valid.\n   - Flag any unknown keys or invalid values as a warning — the spec is still an IETF draft.\n   - Record the result as **Pass** and surface parsed values with plain-English meaning.\n3. If absent: record as **Recommendation** — the site has not declared AI usage preferences.\n\nNo additional HTTP request is needed. robots.txt is already fetched in Step 1.\n\n### Step 7: Detect Cloudflare Managed robots.txt\n\nUsing the already-fetched robots.txt from Step 1, check for a block starting with `# BEGIN Cloudflare Managed content` (case-insensitive).\n\n1. If found, Cloudflare is prepending its managed robots.txt to the site's own file. That block disallows GPTBot, ClaudeBot, Google-Extended, Applebot-Extended, Amazonbot, Bytespider, CCBot and meta-externalagent.\n2. Record it as a **Critical Issue** if the site owner's own rules allow AI crawlers. The owner usually doesn't know it's on, because the block never appears in the robots.txt file on their server, only in the live response.\n3. Recommend: in the Cloudflare dashboard, go to Security Settings, filter by \"Bot traffic\", and turn off \"block training in robots.txt\" if the site wants to be used by AI. If blocking training is intentional, note it as a deliberate choice, not an issue.\n\nNo additional HTTP request is needed. `fetch_page.py robots` returns this as `cloudflare_managed: true`.\n\n---\n\n## Output Format\n\nGenerate a file called `GEO-CRAWLER-ACCESS.md`:\n\n```markdown\n# AI Crawler Access Report: [Domain]\n\n**Analysis Date:** [Date]\n**Domain:** [Domain]\n**robots.txt Status:** [Found/Not Found/Error]\n\n---\n\n## Crawler Access Summary\n\n| Crawler | Operator | Tier | Status | Impact |\n|---|---|---|---|---|\n| GPTBot | OpenAI | 1 | [Allowed/Blocked/Not Mentioned] | [Impact description] |\n| OAI-SearchBot | OpenAI | 1 | [Status] | [Impact] |\n| ChatGPT-User | OpenAI | 1 | [Status] | [Impact] |\n| ClaudeBot | Anthropic | 1 | [Status] | [Impact] |\n| PerplexityBot | Perplexity | 1 | [Status] | [Impact] |\n| Google-Extended | Google | 2 | [Status] | [Impact] |\n| GoogleOther | Google | 2 | [Status] | [Impact] |\n| Applebot-Extended | Apple | 2 | [Status] | [Impact] |\n| Amazonbot | Amazon | 2 | [Status] | [Impact] |\n| FacebookBot | Meta | 2 | [Status] | [Impact] |\n| CCBot | Common Crawl | 3 | [Status] | [Impact] |\n| anthropic-ai | Anthropic | 3 | [Status] | [Impact] |\n| Bytespider | ByteDance | 3 | [Status] | [Impact] |\n| cohere-ai | Cohere | 3 | [Status] | [Impact] |\n\n## AI Visibility Score: [X]/100\n\n**Tier 1 Access:** [X/5 crawlers allowed]\n**Tier 2 Access:** [X/5 crawlers allowed]\n**Tier 3 Access:** [X/4 crawlers allowed]\n\n---\n\n## Critical Issues\n\n[List any Tier 1 crawlers that are blocked]\n\n## Recommendations\n\n### Immediate Actions\n[Specific robots.txt changes needed]\n\n### robots.txt Recommendation\n```\n[Complete recommended robots.txt content for AI crawlers]\n```\n\n### Additional Technical Findings\n- **Meta Robots Tags:** [Findings]\n- **X-Robots-Tag Headers:** [Findings]\n- **JavaScript Rendering:** [Assessment]\n- **llms.txt:** [Present/Absent]\n- **Sitemap Accessibility:** [Assessment]\n\n### Content Signals (IETF Draft)\n\n**Status:** Present / Absent\n\n<!-- If present: -->\n| Signal Key | Value | Meaning |\n|---|---|---|\n| ai-train | no | Opted out of AI model training |\n| search | yes | Permits use in AI-powered search results |\n\n<!-- If absent: -->\n**Recommendation:** Add a `Content-Signal:` directive to robots.txt to declare AI usage preferences explicitly. Example:\n\n`Content-Signal: ai-train=no, search=yes, ai-retrieval=yes`\n\nSee https://contentsignals.org/ for the full specification.\n```\n\n---\n\n## Scoring for Crawler Access\n\nThe AI Crawler Access Score is calculated as:\n\n| Component | Weight | Scoring |\n|---|---|---|\n| Tier 1 Crawlers Allowed | 50% | 20 points per Tier 1 crawler allowed (5 crawlers = 100 points max, scaled to 50) |\n| Tier 2 Crawlers Allowed | 25% | 20 points per Tier 2 crawler allowed (5 crawlers = 100 points max, scaled to 25) |\n| No Blanket AI Blocks | 15% | Full points if no `User-agent: *` Disallow: / and no noai meta tags |\n| AI-Specific Files Present | 10% | 5 points for llms.txt, 5 points for sitemap accessible to AI crawlers |\n\nFinal score = sum of all weighted components, capped at 100.\n","frontmatter":{"name":"geo-crawlers","description":"AI crawler access analysis. Checks robots.txt, meta tags, and HTTP headers to determine which AI crawlers can access the site. Provides a complete access map and recommendations for maximizing AI visibility while maintaining appropriate control.","allowed-tools":["Read","Grep","Glob","Bash","WebFetch","Write"],"allowedTools":["Read","Grep","Glob","Bash","WebFetch","Write"]},"allowedTools":["Read","Grep","Glob","Bash","WebFetch","Write"],"isInternal":false,"tokens":4677,"sizeBytes":18885},{"name":"SKILL.md","path":"skills/geo-llmstxt/SKILL.md","rawUrl":"https://raw.githubusercontent.com/zubair-trabzada/geo-seo-claude/HEAD/skills/geo-llmstxt/SKILL.md","title":"geo-llmstxt","category":"anthropic-skill","format":"markdown","content":"---\nname: geo-llmstxt\ndescription: Analyzes and generates llms.txt files -- the emerging standard for helping AI systems understand website structure and content. Can validate existing llms.txt files or generate new ones from scratch by crawling the site.\nallowed-tools:\n  - Read\n  - Grep\n  - Glob\n  - Bash\n  - WebFetch\n  - Write\n---\n\n# llms.txt Standard Analysis and Generation Skill\n\n## Purpose\n\nThis skill handles everything related to the `llms.txt` standard -- an emerging convention (proposed by Jeremy Howard in September 2024, gaining adoption through 2025-2026) that allows websites to provide structured guidance to AI systems about their content, structure, and key information. It is analogous to `robots.txt` (which tells crawlers what NOT to access) but instead tells AI systems what IS most useful to understand about the site.\n\n## Why llms.txt Matters\n\nAI language models face a fundamental challenge when processing websites: they must determine which pages are most important, what the site is about, and how content is organized -- typically by crawling many pages and inferring structure. `llms.txt` solves this by providing an explicit, machine-readable (and human-readable) summary.\n\n**Benefits of having a well-crafted llms.txt:**\n\n1. **Faster AI comprehension:** AI systems can understand your site's purpose and structure from a single file rather than crawling dozens of pages.\n2. **Controlled narrative:** You choose which pages and facts AI systems see first, shaping how they represent your brand.\n3. **Higher citation accuracy:** AI systems that consult llms.txt can cite the correct, authoritative page for each topic.\n4. **Reduced misrepresentation:** Key facts (pricing, features, locations) are stated explicitly, reducing AI hallucination about your business.\n5. **Early adopter advantage:** As of early 2026, fewer than 5% of websites have an llms.txt file, making it a differentiator.\n\n---\n\n## The llms.txt Specification\n\n### File Location\n\nThe file MUST be located at the root of the domain:\n```\nhttps://example.com/llms.txt\n```\n\n### Format Specification\n\nThe file uses Markdown formatting with specific conventions:\n\n```markdown\n# [Site Name]\n\n> [One-sentence description of what the site/business does. Keep under 200 characters.]\n\n## Docs\n\n- [Page Title](https://example.com/page-url): Concise description of what this page covers and why it matters.\n- [Another Page](https://example.com/another-page): Description of content.\n\n## Optional\n\n- [Less Critical Page](https://example.com/optional-page): Description.\n```\n\n### Detailed Format Rules\n\n**1. Title (Required)**\n```markdown\n# Site Name\n```\n- Must be the first line of the file.\n- Should be the official business/site name.\n- Use the H1 heading format (single `#`).\n\n**2. Description (Required)**\n```markdown\n> Brief description of the site/business\n```\n- Must appear immediately after the title.\n- Use Markdown blockquote format (`>`).\n- Keep under 200 characters.\n- Should clearly state what the business does and who it serves.\n- Avoid marketing fluff -- be factual and specific.\n\n**3. Main Sections (Required -- at least one)**\n\nUse H2 headings (`##`) to organize pages by category. Common section names:\n\n| Section Name | Purpose | Example Content |\n|---|---|---|\n| `## Docs` | Primary documentation or key pages | Product pages, service descriptions, core content |\n| `## Optional` | Secondary pages worth knowing about | Blog posts, supplementary resources |\n| `## API` | API documentation | API reference, authentication guides |\n| `## Blog` | Blog or news content | Recent/popular articles |\n| `## Products` | Product catalog | Product pages, pricing |\n| `## Services` | Service offerings | Service descriptions, process pages |\n| `## About` | Company information | About page, team, mission |\n| `## Resources` | Educational/reference content | Guides, tutorials, whitepapers |\n| `## Legal` | Legal documents | Terms of service, privacy policy |\n| `## Contact` | Contact information | Contact page, support channels |\n\n**4. Page Entries (Required)**\n\nEach entry follows the format:\n```markdown\n- [Page Title](URL): Description of page content\n```\n\nRules for page entries:\n- **Title:** Use the actual page title or a clear descriptive title.\n- **URL:** Must be a full, absolute URL (not relative paths).\n- **Description:** 10-30 words describing what the page covers. Be specific about the information available.\n- **Order:** List pages in order of importance within each section.\n- **Limit:** Include 10-30 page entries total. Prioritize your most authoritative and useful pages.\n\n**5. Key Facts Section (Recommended)**\n\n```markdown\n## Key Facts\n- Founded in [year] by [founder(s)]\n- Headquarters: [City, Country]\n- [X] customers/users in [Y] countries\n- Key products: [Product A], [Product B], [Product C]\n- Industry: [Industry classification]\n```\n\nThis section provides quick reference data that AI systems frequently need to answer user queries about your business.\n\n**6. Contact Section (Recommended)**\n\n```markdown\n## Contact\n- Website: https://example.com\n- Email: hello@example.com\n- Support: support@example.com\n- Phone: +1-555-123-4567\n- Address: 123 Main St, City, State, ZIP, Country\n```\n\n---\n\n## llms-full.txt (Extended Version)\n\nIn addition to `llms.txt`, sites can provide `/llms-full.txt` -- an extended version with more detail.\n\n**Differences from llms.txt:**\n\n| Feature | llms.txt | llms-full.txt |\n|---|---|---|\n| **Length** | Concise (50-150 lines) | Comprehensive (150-500+ lines) |\n| **Page entries** | 10-30 key pages | 30-100+ pages |\n| **Descriptions** | 10-30 words per entry | 30-100 words per entry, may include key facts from each page |\n| **Audience** | Quick AI comprehension | Deep AI analysis |\n| **Sections** | 3-6 sections | 8-15 sections |\n| **Key facts** | Business-level facts | Page-level facts and data points |\n\nBoth files can coexist. AI systems check for `llms.txt` first, then may optionally load `llms-full.txt` for deeper understanding.\n\n---\n\n## Analysis Mode\n\nWhen checking an existing llms.txt file:\n\n### Step 1: Fetch the File\n\n1. Use WebFetch to retrieve `[domain]/llms.txt`.\n2. Also check for `[domain]/llms-full.txt`.\n3. Record HTTP status code:\n   - **200:** File exists -- proceed to validation.\n   - **404:** File does not exist -- recommend generation.\n   - **403:** File exists but is blocked -- flag as misconfiguration.\n   - **301/302:** Redirect -- follow and note the redirect.\n\n### Step 2: Validate Format\n\nCheck each structural element:\n\n| Element | Check | Severity if Missing |\n|---|---|---|\n| H1 Title | Present, matches business name | Critical |\n| Blockquote description | Present, under 200 chars, factual | High |\n| At least one H2 section | Present | Critical |\n| Page entries with URLs | At least 5 entries present | High |\n| URLs are absolute | All URLs use full https:// paths | High |\n| URLs are valid | All URLs return 200 status | Medium |\n| Descriptions present | Every entry has a description after the colon | Medium |\n| Key Facts section | Present with business information | Medium |\n| Contact section | Present with at least email | Low |\n| Reasonable length | 30-200 lines | Low |\n| No broken Markdown | Proper formatting throughout | Medium |\n\n### Step 3: Assess Content Quality\n\nRate the llms.txt on these dimensions:\n\n**Completeness (0-100):**\n- Does it cover all major site sections visible in the navigation?\n- Are the most important/highest-traffic pages included?\n- Is the Key Facts section present with accurate business data?\n- Does it include recent/updated content?\n\n**Accuracy (0-100):**\n- Do descriptions accurately reflect page content?\n- Are URLs valid and pointing to the correct pages?\n- Are Key Facts verifiable and current?\n- Is the business description accurate?\n\n**Usefulness (0-100):**\n- Would an AI system understand the site's purpose from this file alone?\n- Are descriptions specific enough to differentiate pages?\n- Are the most citation-worthy pages highlighted?\n- Is the organization logical and intuitive?\n\n**Overall llms.txt Score** = (Completeness * 0.40) + (Accuracy * 0.35) + (Usefulness * 0.25)\n\n### Step 4: Compare Against Site Content\n\n1. Crawl the site's main navigation and sitemap.\n2. Identify important pages NOT listed in llms.txt.\n3. Check if any listed URLs are broken or redirected.\n4. Verify that the business description matches current homepage messaging.\n5. Flag stale entries (pages that have been significantly updated since the llms.txt was written).\n\n---\n\n## Generation Mode\n\nWhen creating a new llms.txt file from scratch:\n\n### Step 1: Site Discovery\n\n1. Fetch the homepage and extract:\n   - Site name (from `<title>`, `<meta property=\"og:site_name\">`, or H1)\n   - Business description (from meta description or hero section)\n   - Main navigation links\n   - Footer links\n2. Fetch `/sitemap.xml` to discover all public pages.\n3. Identify the site's primary business type (SaaS, E-commerce, Local, Publisher, Agency).\n\n### Step 2: Page Prioritization\n\nCategorize all discovered pages and select the most important ones:\n\n**Always Include:**\n- Homepage\n- About / Company page\n- Pricing page (if exists)\n- Primary product/service pages (top 3-5)\n- Contact page\n- Documentation landing page (if exists)\n\n**Include if High Quality:**\n- Top blog posts (by apparent importance, recency, or comprehensiveness)\n- Case studies or customer stories\n- Key resource/guide pages\n- FAQ page\n- Careers page (for large companies)\n\n**Skip:**\n- Thin category/tag pages\n- Pagination pages\n- Login/signup pages\n- Legal boilerplate (unless specifically relevant)\n- Duplicate or near-duplicate content\n- Pages with minimal unique content\n\n### Step 3: Write Descriptions\n\nFor each selected page:\n\n1. Fetch the page content using WebFetch.\n2. Read the H1, meta description, and first 2-3 paragraphs.\n3. Write a description that:\n   - Is 10-30 words long\n   - States what information is on the page\n   - Mentions specific topics, data, or features covered\n   - Avoids marketing language (\"best,\" \"leading,\" \"revolutionary\")\n   - Uses factual, informative language\n\n**Good description examples:**\n- `Explains the three pricing tiers (Free, Pro, Enterprise) with feature comparison and annual/monthly costs.`\n- `Details the company's founding in 2018, team of 45 employees, and office locations in Austin and London.`\n- `Covers integration setup for Slack, Salesforce, and HubSpot with step-by-step guides and API endpoints.`\n\n**Bad description examples:**\n- `Our amazing pricing page!` (marketing language, no specifics)\n- `Learn more about our company.` (too vague)\n- `Click here for details.` (not descriptive)\n\n### Step 4: Compile Key Facts\n\nGather key business facts from the site:\n\n- Year founded\n- Founder name(s)\n- Headquarters location\n- Number of employees (if public)\n- Number of customers/users (if public)\n- Key products or services (list top 3-5)\n- Industry classification\n- Notable clients or partnerships (if public)\n- Key differentiators (what makes this business unique)\n- Recent milestones or achievements (last 12 months)\n\n### Step 5: Assemble the File\n\nConstruct the llms.txt following this template:\n\n```markdown\n# [Site Name]\n\n> [One clear sentence: what the business does, who it serves, and its primary value proposition. Under 200 characters.]\n\n## Docs\n\n- [Most Important Page](https://example.com/page): Description covering the key content on this page.\n- [Second Page](https://example.com/page-2): Description of this page's content and value.\n- [Third Page](https://example.com/page-3): What users and AI systems will find here.\n\n## Products\n\n- [Product A](https://example.com/product-a): Core features, target users, and pricing model for Product A.\n- [Product B](https://example.com/product-b): What Product B does and how it differs from Product A.\n\n## Resources\n\n- [Guide Title](https://example.com/guide): Comprehensive guide covering [topic] with [X] sections and practical examples.\n- [Blog Post](https://example.com/blog/post): Analysis of [topic] with original data from [source].\n\n## Key Facts\n\n- Founded in [year] by [name(s)]\n- Headquartered in [City, Country]\n- [Specific metric: e.g., \"Serves 10,000+ businesses in 40 countries\"]\n- [Key differentiator: e.g., \"Only platform offering real-time X and Y integration\"]\n- Industry: [Classification]\n\n## Contact\n\n- Website: https://example.com\n- Email: [primary contact email]\n- Support: [support URL or email]\n```\n\n### Step 6: Validate the Generated File\n\nBefore outputting:\n1. Verify all URLs are reachable (200 status).\n2. Confirm total entry count is between 10-30.\n3. Check that no description exceeds 50 words.\n4. Verify the overall file length is 50-150 lines.\n5. Ensure Markdown formatting is clean and consistent.\n\n---\n\n## Output Format\n\n### For Analysis Mode\n\nGenerate `GEO-LLMSTXT-ANALYSIS.md`:\n\n```markdown\n# llms.txt Analysis: [Domain]\n\n**Analysis Date:** [Date]\n**llms.txt Status:** [Found at URL / Not Found / Error]\n**llms-full.txt Status:** [Found / Not Found]\n\n---\n\n## Overall llms.txt Score: [X]/100\n\n| Dimension | Score |\n|---|---|\n| Completeness | [X]/100 |\n| Accuracy | [X]/100 |\n| Usefulness | [X]/100 |\n\n---\n\n## Format Validation\n\n| Element | Status | Notes |\n|---|---|---|\n| H1 Title | [Pass/Fail] | [Notes] |\n| Description blockquote | [Pass/Fail] | [Notes] |\n| H2 Sections | [Pass/Fail] | [X sections found] |\n| Page entries | [Pass/Fail] | [X entries found] |\n| URL validity | [Pass/Fail] | [X broken URLs] |\n| Entry descriptions | [Pass/Fail] | [X missing descriptions] |\n| Key Facts | [Pass/Fail] | [Notes] |\n| Contact section | [Pass/Fail] | [Notes] |\n\n---\n\n## Missing Pages\n\nThese important pages were found on the site but not in llms.txt:\n\n1. [Page Title](URL) -- [Why it should be included]\n2. [Page Title](URL) -- [Why it should be included]\n\n## Improvement Recommendations\n\n1. [Specific recommendation]\n2. [Specific recommendation]\n3. [Specific recommendation]\n\n## Suggested Updated llms.txt\n\n[Complete rewritten llms.txt file if significant improvements are needed]\n```\n\n### For Generation Mode\n\nOutput the complete `llms.txt` file content, ready to be saved to the site's root directory. Also output a brief `GEO-LLMSTXT-GENERATION.md` report explaining:\n- How many pages were discovered and how many were selected\n- The prioritization rationale\n- Any pages that were borderline (might add later)\n- Recommended update frequency (e.g., monthly for active blogs, quarterly for stable sites)\n\n---\n\n## Best Practices Reference\n\n1. **Update regularly.** If your site publishes weekly blog posts, update llms.txt monthly. If your product changes quarterly, update after each release.\n2. **Lead with your strongest content.** The first entries in each section should be your most authoritative, comprehensive pages.\n3. **Be specific in descriptions.** \"Comprehensive 3,000-word guide to React Server Components with code examples\" is far more useful than \"React guide.\"\n4. **Include your differentiators.** If your site has unique data, original research, or exclusive features, highlight these in descriptions and Key Facts.\n5. **Keep it concise.** The llms.txt should be scannable in under 60 seconds. Save detail for llms-full.txt.\n6. **Use absolute URLs.** Always include the full `https://` URL, never relative paths.\n7. **Test after deployment.** After uploading, verify the file is accessible at `https://yourdomain.com/llms.txt` with no redirects.\n8. **Coordinate with robots.txt.** Ensure pages listed in llms.txt are not blocked in robots.txt for AI crawlers.\n9. **Mirror your site structure.** Section names in llms.txt should roughly correspond to your main navigation categories.\n10. **Avoid sensitive pages.** Do not include internal tools, admin panels, or pages with sensitive information.\n","frontmatter":{"name":"geo-llmstxt","description":"Analyzes and generates llms.txt files -- the emerging standard for helping AI systems understand website structure and content. Can validate existing llms.txt files or generate new ones from scratch by crawling the site.","allowed-tools":["Read","Grep","Glob","Bash","WebFetch","Write"],"allowedTools":["Read","Grep","Glob","Bash","WebFetch","Write"]},"allowedTools":["Read","Grep","Glob","Bash","WebFetch","Write"],"isInternal":false,"tokens":3711,"sizeBytes":15739},{"name":"SKILL.md","path":"skills/geo-platform-optimizer/SKILL.md","rawUrl":"https://raw.githubusercontent.com/zubair-trabzada/geo-seo-claude/HEAD/skills/geo-platform-optimizer/SKILL.md","title":"geo-platform-optimizer","category":"anthropic-skill","format":"markdown","content":"---\nname: geo-platform-optimizer\ndescription: Platform-specific AI search optimization — audit and optimize for Google AI Overviews, ChatGPT, Perplexity, Gemini, and Bing Copilot individually\nversion: 1.0.0\nauthor: geo-seo-claude\ntags: [geo, ai-search, platform-optimization, chatgpt, perplexity, gemini, aio]\nallowed-tools: Read, Grep, Glob, Bash, WebFetch, Write\n---\n\n# GEO Platform Optimizer\n\n## Core Insight\n\nOnly **11% of domains** are cited by BOTH ChatGPT and Google AI Overviews for the same query. Each AI search platform uses different indexes, ranking logic, and source preferences. A page optimized for Google AI Overviews may be invisible to ChatGPT, and vice versa. Platform-specific optimization is not optional — it is the foundation of any serious GEO strategy.\n\n## How to Use This Skill\n\n1. Collect the target URL and the site's primary topic/industry\n2. Run each platform checklist below against the site\n3. Score each platform on the 0-100 rubric\n4. Generate GEO-PLATFORM-OPTIMIZATION.md with per-platform scores, gaps, and action items\n\n---\n\n## Platform 1: Google AI Overviews (AIO)\n\n### How AIO Selects Sources\n- 92% of AIO citations come from pages already ranking in the **top 10 organic results** — traditional SEO is the gateway\n- However, 47% of citations come from pages ranking **below position 5** — AIO has its own selection logic favoring clarity and directness over raw rank\n- AIO strongly favors pages with **clean structure, direct answers, and scannable formatting**\n- Featured snippet optimization has ~70% overlap with AIO optimization\n- AIO prefers **concise, factual, unambiguous answers** — hedging and filler reduce citation probability\n\n### Optimization Checklist\n\n1. **Question-Based Headings**: Use H2/H3 headings phrased as questions matching real user queries. Check Google's \"People Also Ask\" for the target topic and mirror those exact phrasings.\n2. **Direct Answer in First Paragraph**: After each question heading, provide a clear 1-2 sentence answer immediately. Then expand with supporting detail. The first sentence should be a standalone citation candidate.\n3. **Tables and Structured Comparisons**: AIO heavily cites tables. Convert any comparison, pricing, specification, or feature data into HTML tables. Use clear column headers.\n4. **Ordered and Unordered Lists**: Step-by-step processes should use ordered lists. Feature lists should use unordered lists. AIO extracts these directly.\n5. **FAQ Sections**: Add a dedicated FAQ section with 5-10 real questions. Use proper H3 headings for each question. While FAQPage schema rich results are restricted to govt/health sites since Aug 2023, the content pattern still helps AIO extraction.\n6. **Definitions and Glossary Boxes**: For any industry-specific term, provide a clear definition. Format: \"**[Term]** is [concise definition].\" AIO frequently cites definitions.\n7. **Statistics with Sources**: Include specific numbers with attribution. \"According to [Source], [statistic].\" AIO prefers citeable, specific claims over vague assertions.\n8. **Publication Date**: Include a visible publication date and last-updated date. AIO deprioritizes undated content for time-sensitive queries.\n9. **Author Byline**: Display author name with credentials. Link to an author page with bio, credentials, and sameAs links.\n10. **Page Depth**: Keep target pages within 3 clicks of homepage. AIO rarely cites deep, orphaned content.\n\n### Scoring Rubric (0-100)\n\n| Criterion | Points | How to Score |\n|---|---|---|\n| Ranks in top 10 for target queries | 20 | 20 if yes, 10 if top 20, 0 if beyond |\n| Question-based headings present | 10 | 2 points per question heading, max 10 |\n| Direct answers after headings | 15 | 3 points per direct answer, max 15 |\n| Tables present for comparison data | 10 | 10 if tables used appropriately, 5 if partial, 0 if absent |\n| Lists for processes/features | 10 | 10 if present, 5 if partial |\n| FAQ section with 5+ questions | 10 | 10 if 5+, 5 if 1-4, 0 if none |\n| Statistics with citations | 10 | 2 points per cited stat, max 10 |\n| Publication/updated date visible | 5 | 5 if both dates, 3 if one, 0 if none |\n| Author byline with credentials | 5 | 5 if full byline, 3 if name only, 0 if none |\n| Clean URL + heading hierarchy | 5 | 5 if H1>H2>H3 clean, 3 if minor issues, 0 if broken |\n\n---\n\n## Platform 2: ChatGPT Web Search\n\n### How ChatGPT Selects Sources\n- Uses **Bing's search index** as its foundation (not Google)\n- Top citation sources by domain share: **Wikipedia (47.9%)**, Reddit (11.3%), YouTube, major news outlets\n- ChatGPT heavily weights **entity recognition** — if your brand exists as a structured entity (Wikipedia, Wikidata, Crunchbase), it is far more likely to be cited\n- Prefers **authoritative, well-established sources** over new or niche sites\n- Longer, more comprehensive articles get cited more often than short pieces\n- ChatGPT tends to cite **the most canonical source** for a claim rather than the original\n\n### Optimization Checklist\n\n1. **Wikipedia Presence**: Check if the brand/person/product has a Wikipedia article. If not, assess notability criteria. If notable, create a draft. If an article exists, ensure it is accurate and current.\n2. **Wikidata Entity**: Verify the entity exists on Wikidata (wikidata.org). If not, create a Wikidata item with key properties: instance of, official website, social media links, founding date, headquarters location.\n3. **Bing Webmaster Tools**: Verify the site is registered in Bing Webmaster Tools. Submit sitemap. Check for crawl errors.\n4. **Bing Index Coverage**: Use `site:domain.com` on Bing to verify key pages are indexed. Bing may have different indexed pages than Google.\n5. **Reddit Authority**: Check for brand mentions on Reddit. Identify relevant subreddits. Assess whether the brand participates authentically in discussions.\n6. **YouTube Presence**: Verify YouTube channel exists with relevant content. Video descriptions should contain full URLs and entity information.\n7. **Authoritative Backlinks**: ChatGPT/Bing weight .edu, .gov, and major publication backlinks heavily. Audit backlink profile for these sources.\n8. **Entity Consistency**: Brand name, founding date, leadership, and key facts must be consistent across Wikipedia, Crunchbase, LinkedIn, and the official website.\n9. **Comprehensive Content**: Pages targeting ChatGPT citation should be **2000+ words** with thorough topic coverage. ChatGPT prefers single authoritative sources over combining multiple thin pages.\n10. **Clear Attribution**: Include \"About\" sections, company descriptions, and founding stories. ChatGPT uses these for entity grounding.\n\n### Scoring Rubric (0-100)\n\n| Criterion | Points | How to Score |\n|---|---|---|\n| Wikipedia article exists and is accurate | 20 | 20 if exists, 10 if stub, 0 if none |\n| Wikidata entity with 5+ properties | 10 | 10 if complete, 5 if basic, 0 if none |\n| Bing index coverage of key pages | 10 | 10 if full, 5 if partial, 0 if poor |\n| Reddit brand mentions (positive) | 10 | 10 if active discussions, 5 if mentions, 0 if none |\n| YouTube channel with relevant content | 10 | 10 if active, 5 if present but sparse, 0 if none |\n| Authoritative backlinks (.edu, .gov, press) | 15 | 3 points per authoritative backlink category, max 15 |\n| Entity consistency across platforms | 10 | 10 if consistent, 5 if minor discrepancies, 0 if major |\n| Content comprehensiveness (2000+ words) | 10 | 10 if thorough, 5 if adequate, 0 if thin |\n| Bing Webmaster Tools configured | 5 | 5 if verified, 0 if not |\n\n---\n\n## Platform 3: Perplexity AI\n\n### How Perplexity Selects Sources\n- Top citation sources: **Reddit (46.7%)**, Wikipedia, YouTube, major publications\n- Perplexity places the **heaviest emphasis on community validation** of all AI search platforms\n- Strongly favors **discussion threads** where claims are debated, validated, or expanded by multiple participants\n- Prefers recent content — publication date is a strong ranking signal\n- Cites **multiple sources per answer** (typically 5-15), so there is more opportunity for mid-authority sites to appear\n- Uses its own crawling infrastructure in addition to search APIs\n\n### Optimization Checklist\n\n1. **Active Reddit Presence**: The brand or its representatives should participate authentically in relevant subreddit discussions. Not promotional — helpful, specific, and community-oriented.\n2. **Reddit AMAs and Threads**: Encourage or participate in AMAs, detailed discussion threads, and community Q&As. Perplexity treats these as high-signal content.\n3. **Forum and Community Presence**: Beyond Reddit, check Hacker News, Stack Overflow, Quora, and niche industry forums. Perplexity indexes these heavily.\n4. **Discussion-Friendly Content**: Publish content that invites discussion — opinion pieces, research findings, contrarian takes, original data. Content that gets shared and debated in communities ranks higher.\n5. **Freshness Signals**: Publish content with clear dates. Update content regularly. Perplexity deprioritizes stale content more aggressively than other platforms.\n6. **Multiple Source Validation**: Claims in your content should be supported by other sources. Perplexity cross-references and prefers claims it can verify from multiple origins.\n7. **YouTube Video Content**: Create video content that Perplexity can reference. Ensure video titles, descriptions, and transcripts contain target information.\n8. **Direct, Quotable Passages**: Write paragraphs that can stand alone as citations. Each paragraph should make one clear point with supporting evidence.\n9. **Original Data and Research**: Publish original surveys, benchmarks, case studies, or datasets. Perplexity heavily favors primary sources.\n10. **Perplexity Pages**: Check if Perplexity has created a \"Page\" about your topic/brand. These are curated summaries that influence future citations.\n\n### Scoring Rubric (0-100)\n\n| Criterion | Points | How to Score |\n|---|---|---|\n| Active Reddit presence in relevant subreddits | 20 | 20 if active contributor, 10 if mentioned, 0 if absent |\n| Forum/community mentions (HN, SO, Quora) | 10 | 10 if multiple platforms, 5 if one, 0 if none |\n| Content freshness (updated within 6 months) | 10 | 10 if recent, 5 if within year, 0 if older |\n| Original research/data published | 15 | 15 if original research, 10 if case studies, 5 if some data, 0 if none |\n| YouTube content with transcripts | 10 | 10 if active channel, 5 if some videos, 0 if none |\n| Quotable, standalone paragraphs | 10 | 2 points per well-structured quotable paragraph, max 10 |\n| Multi-source claim validation | 10 | 10 if claims well-sourced, 5 if some sourcing, 0 if none |\n| Discussion-generating content | 10 | 10 if content gets shared/discussed, 5 if some engagement, 0 if none |\n| Wikipedia/Wikidata presence | 5 | 5 if present, 0 if absent |\n\n---\n\n## Platform 4: Google Gemini\n\n### How Gemini Selects Sources\n- Uses **Google's search index** plus strong weighting toward **Google-owned properties**\n- YouTube content is weighted significantly more heavily than in standard Google Search\n- Google Business Profile data is directly accessible to Gemini\n- Gemini uses Google's Knowledge Graph directly — entity presence in Knowledge Graph is a major advantage\n- Structured data (Schema.org) is consumed directly by Gemini for entity understanding\n- Gemini multi-modal: can reference images, videos, and text together\n\n### Optimization Checklist\n\n1. **Google Knowledge Panel**: Check if the brand has a Google Knowledge Panel. If not, claim it through Google Business Profile or structured data. Ensure all information is accurate.\n2. **Google Business Profile**: Complete and optimize GBP with all fields: hours, services, photos, posts, Q&A. Gemini pulls directly from GBP for local queries.\n3. **YouTube Strategy**: Create YouTube content for every key topic. Optimize titles, descriptions, timestamps, and closed captions. Gemini cites YouTube more than any other AI platform.\n4. **YouTube Chapters and Timestamps**: Use chapters (timestamps in description) so Gemini can reference specific segments of videos.\n5. **Google Merchant Center**: For e-commerce, ensure products are in Google Merchant Center. Gemini references product data directly.\n6. **Structured Data (Schema.org)**: Implement comprehensive Schema.org markup. Gemini uses this for entity understanding more aggressively than other platforms.\n7. **Google Sites Ecosystem**: Ensure presence across Google ecosystem: Google Scholar (for research), Google News (for publishers), Google Maps (for local).\n8. **Image Optimization**: Gemini is multi-modal. Use descriptive alt text, structured image filenames, and high-quality images. Include relevant images with every piece of content.\n9. **Google E-E-A-T Signals**: All standard Google E-E-A-T signals apply with extra weight. Author pages, about pages, editorial policies, and expertise demonstrations.\n10. **Chrome Web Store / Google Workspace Marketplace**: For software companies, presence on Google platforms adds entity signals.\n\n### Scoring Rubric (0-100)\n\n| Criterion | Points | How to Score |\n|---|---|---|\n| Google Knowledge Panel exists | 15 | 15 if complete, 10 if partial, 0 if none |\n| Google Business Profile complete | 10 | 10 if fully optimized, 5 if basic, 0 if none |\n| YouTube channel with topic-relevant content | 20 | 20 if active with chapters, 10 if present, 0 if none |\n| Schema.org structured data implemented | 15 | 15 if comprehensive, 10 if basic, 5 if minimal, 0 if none |\n| Google ecosystem presence (Scholar, News, Maps) | 10 | 10 if 3+, 5 if 1-2, 0 if none |\n| Image optimization (alt text, filenames) | 10 | 10 if all images optimized, 5 if partial, 0 if none |\n| E-E-A-T signals (author pages, about, editorial) | 10 | 10 if strong, 5 if partial, 0 if weak |\n| Google Merchant Center (if e-commerce) | 5 | 5 if applicable and active, N/A otherwise |\n| Multi-modal content (text + images + video) | 5 | 5 if rich multi-modal, 3 if some, 0 if text-only |\n\n---\n\n## Platform 5: Bing Copilot\n\n### How Copilot Selects Sources\n- Uses **Bing's search index** (shared infrastructure with ChatGPT but different ranking/selection)\n- Supports **IndexNow protocol** for near-instant indexing of new and updated content\n- Copilot tends to cite **fewer sources per answer** (typically 3-5) but gives more prominent attribution\n- Microsoft ecosystem integration: LinkedIn, GitHub, Microsoft Learn content is weighted\n- Copilot prefers pages with clear, structured markup and fast load times\n\n### Optimization Checklist\n\n1. **Bing Webmaster Tools**: Register and verify site. Submit XML sitemap. Review and fix any crawl issues.\n2. **IndexNow Implementation**: Implement the IndexNow protocol to notify Bing of content changes in real-time. Submit a key file at `/.well-known/indexnow-key.txt` and ping the IndexNow API on content publish/update.\n3. **LinkedIn Company Page**: Ensure the company LinkedIn page is complete with accurate description, employee connections, and regular posts. Copilot indexes LinkedIn content.\n4. **GitHub Presence**: For tech companies, maintain an active GitHub presence. Copilot references GitHub repos, documentation, and README files.\n5. **Microsoft Learn / Documentation**: If relevant, contribute to Microsoft Learn or ensure documentation is compatible with Microsoft's documentation standards.\n6. **Bing Places for Business**: Equivalent to Google Business Profile. Complete all fields for local search visibility in Copilot.\n7. **Clear Meta Descriptions**: Bing/Copilot weights meta descriptions more heavily than Google does. Write compelling, keyword-rich meta descriptions for every page.\n8. **Social Signals**: Bing has historically weighted social signals (shares, likes, engagement) more than Google. Maintain active social media presence.\n9. **Exact-Match Keywords**: Bing's algorithm is more literal about keyword matching than Google. Include exact target phrases in titles, headings, and body content.\n10. **Fast Page Load**: Copilot deprioritizes slow pages. Target sub-2-second load time. Optimize images, enable compression, minimize render-blocking resources.\n\n### Scoring Rubric (0-100)\n\n| Criterion | Points | How to Score |\n|---|---|---|\n| Bing Webmaster Tools verified + sitemap | 15 | 15 if verified, 5 if partial, 0 if not |\n| IndexNow protocol implemented | 15 | 15 if active, 0 if not |\n| Bing index coverage of key pages | 10 | 10 if full, 5 if partial, 0 if poor |\n| LinkedIn company page (complete) | 10 | 10 if complete, 5 if basic, 0 if none |\n| GitHub presence (if applicable) | 5 | 5 if active, N/A if not applicable |\n| Meta descriptions optimized | 10 | 10 if all key pages, 5 if partial, 0 if missing |\n| Social media engagement signals | 10 | 10 if active engagement, 5 if present, 0 if none |\n| Exact-match keywords in titles/headings | 10 | 10 if well-optimized, 5 if partial, 0 if not |\n| Page load speed < 2 seconds | 10 | 10 if < 2s, 5 if < 4s, 0 if > 4s |\n| Bing Places configured (if local) | 5 | 5 if complete, N/A if not local |\n\n---\n\n## Cross-Platform Summary\n\n### Universal Optimization Actions (help ALL platforms)\n1. Wikipedia/Wikidata entity presence\n2. YouTube channel with relevant content\n3. Comprehensive, well-structured content with clear headings\n4. Schema.org structured data (especially Organization + sameAs)\n5. Fast page load and clean HTML\n6. Author pages with credentials and sameAs links\n7. Regular content updates with visible dates\n\n### Platform-Specific Priorities\n| Priority | Google AIO | ChatGPT | Perplexity | Gemini | Copilot |\n|---|---|---|---|---|---|\n| #1 | Top-10 ranking | Wikipedia | Reddit presence | YouTube | IndexNow |\n| #2 | Q&A structure | Entity graph | Original research | Knowledge Panel | Bing WMT |\n| #3 | Tables/lists | Bing SEO | Freshness | Schema.org | LinkedIn |\n| #4 | Featured snippets | Reddit | Community forums | GBP | Meta descriptions |\n\n---\n\n## Output Format\n\nGenerate **GEO-PLATFORM-OPTIMIZATION.md** with the following structure:\n\n```markdown\n# GEO Platform Optimization Report — [Domain]\nDate: [Date]\n\n## Overall Platform Readiness\n- Combined GEO Score: XX/100 (average of all platform scores)\n\n## Platform Scores\n| Platform | Score | Status |\n|---|---|---|\n| Google AI Overviews | XX/100 | [Strong/Moderate/Weak] |\n| ChatGPT Web Search | XX/100 | [Strong/Moderate/Weak] |\n| Perplexity AI | XX/100 | [Strong/Moderate/Weak] |\n| Google Gemini | XX/100 | [Strong/Moderate/Weak] |\n| Bing Copilot | XX/100 | [Strong/Moderate/Weak] |\n\nStatus thresholds: Strong = 70+, Moderate = 40-69, Weak = 0-39\n\n## Platform Details\n[Per-platform breakdown with score, gaps found, specific actions]\n\n## Prioritized Action Plan\n### Quick Wins (this week)\n[Actions that improve multiple platform scores with minimal effort]\n\n### Medium-Term (this month)\n[Actions requiring content creation or technical changes]\n\n### Strategic (this quarter)\n[Actions requiring entity building, community development, or platform presence]\n```\n","frontmatter":{"name":"geo-platform-optimizer","description":"Platform-specific AI search optimization — audit and optimize for Google AI Overviews, ChatGPT, Perplexity, Gemini, and Bing Copilot individually","version":"1.0.0","author":"geo-seo-claude","tags":["geo","ai-search","platform-optimization","chatgpt","perplexity","gemini","aio"],"allowed-tools":"Read, Grep, Glob, Bash, WebFetch, Write","allowedTools":["Read,","Grep,","Glob,","Bash,","WebFetch,","Write"]},"allowedTools":["Read,","Grep,","Glob,","Bash,","WebFetch,","Write"],"isInternal":false,"tokens":4471,"sizeBytes":18997},{"name":"SKILL.md","path":"skills/geo-proposal/SKILL.md","rawUrl":"https://raw.githubusercontent.com/zubair-trabzada/geo-seo-claude/HEAD/skills/geo-proposal/SKILL.md","title":"geo-proposal","category":"anthropic-skill","format":"markdown","content":"---\nname: geo-proposal\ndescription: >\n  Auto-generate a professional, client-ready GEO service proposal from audit data.\n  Creates a full proposal in markdown and PDF including executive summary, findings,\n  recommended service packages (Basic/Standard/Premium), pricing, timeline, and terms.\n  Use when user says \"proposal\", \"proposta\", \"offerta\", \"preventivo\", \"generate proposal\",\n  or after completing a GEO audit for a prospect.\nversion: 1.0.0\ntags: [geo, business, proposal, sales, pricing, client]\nallowed-tools: Read, Write, Bash, Glob, WebFetch\n---\n\n# GEO Proposal Generator\n\n## Purpose\n\nGenerate a fully customized, client-ready GEO service proposal that:\n1. Pulls findings directly from the prospect's GEO audit\n2. Translates technical gaps into business pain points\n3. Presents 3 service tiers with clear pricing\n4. Includes a realistic ROI projection\n5. Outputs a professional markdown document ready to send\n\n---\n\n## Command\n\n```\n/geo proposal <domain-or-audit-file> [--tier basic|standard|premium] [--client-name \"Name\"] [--monthly EUR]\n```\n\n**Examples:**\n```\n/geo proposal electron-srl.com\n/geo proposal electron-srl.com --tier standard --client-name \"Electron Srl\"\n/geo proposal ~/.geo-prospects/audits/electron-srl.com-2026-03-12.md\n```\n\n---\n\n## Workflow\n\n### Step 1: Load Audit Data\n\n1. Check if `~/.geo-prospects/audits/<domain>*.md` exists\n2. If not, suggest running `/geo quick <domain>` first\n3. Extract from audit:\n   - GEO Score (overall and per-category)\n   - Top 3 critical findings\n   - Quick wins list\n   - Business type\n   - Estimated organic traffic impact\n\n### Step 2: Customize the Proposal\n\nAuto-fill proposal template with:\n- Company name (from domain or prospect record)\n- GEO score and tier label\n- 3 most critical pain points (translated to business language)\n- Estimated revenue at risk from AI search shift\n- Recommended service tier based on score:\n  - Score 0-40 → Recommend Premium (critical issues need full attention)\n  - Score 41-60 → Recommend Standard (significant gaps, needs monthly work)\n  - Score 61-75 → Recommend Basic (solid base, needs monitoring)\n\n### Step 3: Generate Proposal File\n\nOutput to `~/.geo-prospects/proposals/<domain>-proposal-<date>.md`\nAlso update prospect record if it exists in `~/.geo-prospects/prospects.json`\n\n---\n\n## Proposal Template\n\nGenerate the following document, filling all `[PLACEHOLDERS]` with real audit data:\n\n---\n\n```markdown\n# GEO Optimization Proposal\n## [COMPANY NAME] — AI Search Visibility\n\n**Prepared by:** [YOUR AGENCY NAME]\n**Prepared for:** [CONTACT NAME], [COMPANY NAME]\n**Date:** [DATE]\n**Valid until:** [DATE + 30 DAYS]\n**Reference:** GEO-PROP-[YYMMDD]-[DOMAIN]\n\n---\n\n## Executive Summary\n\n[COMPANY NAME] operates in [INDUSTRY] and serves customers across [GEOGRAPHY].\nOur GEO audit of [DOMAIN], conducted on [DATE], reveals a GEO Readiness Score\nof **[SCORE]/100 ([TIER LABEL])**.\n\nThis means your website currently has [TIER DESCRIPTION — use score interpretation table].\nAs AI-powered search (ChatGPT, Google AI Overviews, Perplexity) now influences\n**[X]% of online discovery** and is growing at 527% year-over-year, this gap\nrepresents a measurable risk to your pipeline.\n\nThe three most urgent issues are:\n1. **[CRITICAL FINDING 1]** — [Business impact in one sentence]\n2. **[CRITICAL FINDING 2]** — [Business impact in one sentence]\n3. **[CRITICAL FINDING 3]** — [Business impact in one sentence]\n\nWe recommend the **[TIER NAME] package** at **€[PRICE]/month**, which addresses\nall critical issues within 90 days and positions [COMPANY] as an AI-visible\nauthority in [INDUSTRY].\n\n---\n\n## The Opportunity: Why GEO Matters for [COMPANY NAME]\n\n### The AI Search Shift Is Already Happening\n\n| Metric | Value |\n|--------|-------|\n| AI-referred traffic growth (2025) | +527% YoY |\n| AI traffic conversion vs. organic | 4.4x higher |\n| ChatGPT weekly active users | 900M+ |\n| Google AI Overviews monthly reach | 1.5B users, 200+ countries |\n| Gartner: traditional search traffic drop by 2028 | -50% |\n| Marketers investing in GEO today | Only 23% |\n\n**First-mover advantage is real.** Companies that invest in GEO now will\ncapture the AI search channel before competitors do.\n\n### Your Current Position\n\n| Metric | [COMPANY] | Industry Average | Top Performers |\n|--------|-----------|------------------|----------------|\n| GEO Score | [SCORE]/100 | 45/100 | 75+/100 |\n| AI Crawlers Allowed | [X]/14 | 8/14 | 14/14 |\n| Brand Mentions (AI platforms) | [STATUS] | Moderate | High |\n| Schema Coverage | [STATUS] | Partial | Complete |\n| llms.txt | [Yes/No] | 12% have it | 78% have it |\n\n---\n\n## Audit Findings Summary\n\n### GEO Score Breakdown\n\n| Category | Your Score | Weight | Weighted | Priority |\n|----------|-----------|--------|---------|----------|\n| AI Citability & Visibility | [SCORE]/100 | 25% | [WEIGHTED] | [HIGH/MED/LOW] |\n| Brand Authority Signals | [SCORE]/100 | 20% | [WEIGHTED] | [HIGH/MED/LOW] |\n| Content Quality & E-E-A-T | [SCORE]/100 | 20% | [WEIGHTED] | [HIGH/MED/LOW] |\n| Technical Foundations | [SCORE]/100 | 15% | [WEIGHTED] | [HIGH/MED/LOW] |\n| Structured Data | [SCORE]/100 | 10% | [WEIGHTED] | [HIGH/MED/LOW] |\n| Platform Optimization | [SCORE]/100 | 10% | [WEIGHTED] | [HIGH/MED/LOW] |\n| **TOTAL GEO SCORE** | | | **[SCORE]/100** | **[TIER]** |\n\n### Critical Issues Found\n\n[For each critical issue from audit:]\n\n#### 🔴 [ISSUE TITLE]\n**What we found:** [Technical finding in plain language]\n**Business impact:** [What this means for their revenue/visibility]\n**Our fix:** [What we will do to resolve it]\n**Timeline:** [When they will see improvement]\n\n---\n\n## Our Solution: Service Packages\n\nWe offer three engagement models based on the scope of optimization needed.\n\n---\n\n### BASIC — €2,500/month\n*Best for: Sites with score 61-75 needing targeted improvements*\n\n**What's included:**\n- Quarterly full GEO audit (4x/year)\n- Quarterly client report with score tracking\n- Schema.org implementation (Organization + key page schemas)\n- AI crawler access optimization (robots.txt)\n- llms.txt creation and maintenance\n- Email support (48-hour response)\n\n**Estimated GEO score improvement:** +10-20 points in 6 months\n**Contract:** Minimum 6 months\n\n---\n\n### STANDARD — €5,000/month ⭐ Recommended for [COMPANY]\n*Best for: Sites with score 40-60 needing structured monthly work*\n\n**Everything in Basic, plus:**\n- Monthly full GEO audit + delta report\n- Monthly strategy call (60 minutes)\n- Content citability optimization (up to 10 pages/month)\n- Brand authority building (Wikipedia, Wikidata, LinkedIn optimization)\n- Platform-specific optimization (Google AIO, ChatGPT, Perplexity)\n- E-E-A-T improvements (author pages, credentials, freshness signals)\n- Slack channel for fast communication (24-hour response)\n\n**Estimated GEO score improvement:** +25-40 points in 6 months\n**Contract:** Minimum 6 months\n\n---\n\n### PREMIUM — €9,500/month\n*Best for: Sites with score 0-40 with critical issues, or competitive industries*\n\n**Everything in Standard, plus:**\n- Bi-weekly strategy calls\n- Technical SEO implementation support (Core Web Vitals, SSR, speed)\n- Full content strategy + production (4 optimized articles/month)\n- Active brand building (Reddit, YouTube, industry citations)\n- Competitor monitoring and response\n- Dedicated account manager\n- Priority support (4-hour response)\n\n**Estimated GEO score improvement:** +40-60 points in 6 months\n**Contract:** Minimum 12 months\n\n---\n\n## ROI Projection for [COMPANY NAME]\n\nBased on your current GEO score of [SCORE]/100 and industry benchmarks:\n\n| Scenario | 6-Month Score | AI Traffic Increase | Est. Additional Value/Month |\n|----------|--------------|--------------------|-----------------------------|\n| No action | [SCORE + 2]/100 | +5% (organic growth) | €[LOW] |\n| Basic package | [SCORE + 15]/100 | +30-40% | €[MED] |\n| Standard package | [SCORE + 32]/100 | +60-90% | €[HIGH] |\n| Premium package | [SCORE + 50]/100 | +100-150% | €[VERY HIGH] |\n\n**Assumptions:**\n- Based on estimated [X] monthly organic visitors to [DOMAIN]\n- AI search is projected to drive 25-40% of organic discovery by end of 2026\n- AI-referred traffic converts at 4.4x the rate of regular organic traffic\n- Calculations use conservative estimates — actual results may vary\n\n**Payback period (Standard package):** [X] months based on current traffic\n\n---\n\n## Engagement Timeline\n\n### Month 1 — Foundation\n- Kick-off call and onboarding (Week 1)\n- Full technical audit + baseline metrics capture\n- Quick wins implementation: robots.txt, schema, llms.txt, meta descriptions\n- Expected score improvement: +5-10 points\n\n### Month 2-3 — Optimization\n- Content citability rewrites (top 10 pages)\n- E-E-A-T improvements: author pages, credentials, dates\n- Platform-specific optimization (Google AIO, ChatGPT, Perplexity)\n- Brand presence: LinkedIn, Wikipedia/Wikidata groundwork\n- Expected score improvement: +15-25 points cumulative\n\n### Month 4-6 — Authority Building\n- Brand mention campaigns (Reddit, industry sites, YouTube)\n- Topical authority content strategy\n- Monthly reports showing score improvements\n- Expected score improvement: +30-45 points cumulative\n\n### Month 6 — Review\n- Full re-audit with before/after comparison\n- ROI report\n- Renewal discussion\n\n---\n\n## Why Us\n\n- **GEO specialists**: We focus exclusively on AI search optimization, not traditional SEO agencies adapting to GEO\n- **Transparent reporting**: Monthly reports show exactly what changed and why\n- **No lock-in beyond minimum**: Month-to-month after initial commitment\n- **Proven methodology**: 11-dimension GEO audit covering all major AI platforms\n- **Fast results**: Quick wins visible within 30 days\n\n---\n\n## Investment Summary\n\n| Package | Monthly | 6-Month | 12-Month |\n|---------|---------|---------|----------|\n| Basic | €2,500 | €15,000 | €30,000 |\n| Standard | €5,000 | €30,000 | €60,000 |\n| Premium | €9,500 | €57,000 | €114,000 |\n\n*All prices exclude VAT. Payment terms: monthly, due within 15 days of invoice.*\n\n---\n\n## Next Steps\n\nTo move forward:\n\n1. **Review this proposal** and share any questions\n2. **Schedule a 30-minute call** to walk through findings together: [CALENDAR LINK]\n3. **Sign the service agreement** (sent separately upon acceptance)\n4. **Kick-off call** scheduled for your chosen start date\n\nThis proposal is valid for **30 days** from the date above.\n\n---\n\n## Terms & Conditions\n\n- **Minimum commitment:** As stated per package above\n- **Cancellation:** 30-day written notice after minimum term\n- **Confidentiality:** All audit findings and client data are strictly confidential\n- **Results:** We guarantee effort and methodology, not specific ranking outcomes\n- **Reporting:** Monthly reports delivered by the 5th of each month\n- **Access needed:** Read access to Google Analytics / Search Console (if available)\n\n---\n\n*This proposal was prepared using GEO-SEO analysis tools and reflects findings\nfrom the audit of [DOMAIN] conducted on [DATE]. All scores and recommendations\nare based on current industry best practices for Generative Engine Optimization.*\n```\n\n---\n\n## Output\n\n1. Save proposal to `~/.geo-prospects/proposals/<domain>-proposal-<date>.md`\n2. Update prospect record: set `status` to `proposal`, save `proposal_file` path\n3. Print confirmation:\n   ```\n   ✓ Proposal generated: ~/.geo-prospects/proposals/electron-srl.com-proposal-2026-03-12.md\n   ✓ Prospect status updated: Qualified → Proposal\n   ✓ Recommended package: STANDARD (€5,000/month) — Score 32/100\n\n   Next: Share the proposal file or run `/geo report-pdf` for a visual version.\n   ```\n\n## Pricing Recommendation Logic\n\nBase recommendation on GEO score:\n- Score 0-40 → Recommend **Premium** (critical issues require intensive work)\n- Score 41-60 → Recommend **Standard** (structured monthly optimization)\n- Score 61-75 → Recommend **Basic** (maintenance + targeted improvements)\n- Score 76+ → Offer **Basic** or quarterly retainer check-in\n","frontmatter":{"name":"geo-proposal","description":"Auto-generate a professional, client-ready GEO service proposal from audit data. Creates a full proposal in markdown and PDF including executive summary, findings, recommended service packages (Basic/Standard/Premium), pricing, timeline, and terms. Use when user says \"proposal\", \"proposta\", \"offerta\", \"preventivo\", \"generate proposal\", or after completing a GEO audit for a prospect.\n","version":"1.0.0","tags":["geo","business","proposal","sales","pricing","client"],"allowed-tools":"Read, Write, Bash, Glob, WebFetch","allowedTools":["Read,","Write,","Bash,","Glob,","WebFetch"]},"allowedTools":["Read,","Write,","Bash,","Glob,","WebFetch"],"isInternal":false,"tokens":2974,"sizeBytes":11973},{"name":"SKILL.md","path":"skills/geo-prospect/SKILL.md","rawUrl":"https://raw.githubusercontent.com/zubair-trabzada/geo-seo-claude/HEAD/skills/geo-prospect/SKILL.md","title":"geo-prospect","category":"anthropic-skill","format":"markdown","content":"---\nname: geo-prospect\ndescription: >\n  CRM-lite for managing GEO agency prospects and clients. Track leads through\n  the full sales pipeline: Lead → Qualified → Proposal Sent → Won → Lost.\n  Store audit history, notes, deal values, and generate pipeline summaries.\n  Use when user says \"prospect\", \"lead\", \"client\", \"pipeline\", \"crm\", \"nuovo prospect\",\n  \"aggiungi cliente\", or when managing the business side of GEO services.\nversion: 1.0.0\ntags: [geo, business, crm, prospect, pipeline, sales]\nallowed-tools: Read, Write, Bash, Glob\n---\n\n# GEO Prospect Manager\n\n## Purpose\n\nManage GEO agency prospects and clients through the full sales lifecycle.\nAll data is stored in `~/.geo-prospects/prospects.json` (persistent across sessions).\n\n---\n\n## Commands\n\n| Command | What It Does |\n|---------|-------------|\n| `/geo prospect new <domain>` | Create new prospect (interactive prompts) |\n| `/geo prospect list` | Show all prospects with pipeline status |\n| `/geo prospect list <status>` | Filter: lead, qualified, proposal, won, lost |\n| `/geo prospect show <id-or-domain>` | Full prospect detail with history |\n| `/geo prospect audit <id-or-domain>` | Run quick GEO audit and save to prospect record |\n| `/geo prospect note <id-or-domain> \"<text>\"` | Add interaction note with timestamp |\n| `/geo prospect status <id-or-domain> <new-status>` | Move through pipeline |\n| `/geo prospect won <id-or-domain> <monthly-value>` | Mark as won, set contract value |\n| `/geo prospect lost <id-or-domain> \"<reason>\"` | Mark as lost with reason |\n| `/geo prospect pipeline` | Visual pipeline summary with revenue forecast |\n\n---\n\n## Data Structure\n\nEach prospect is stored as a JSON record:\n\n```json\n{\n  \"id\": \"PRO-001\",\n  \"company\": \"Electron Srl\",\n  \"domain\": \"electron-srl.com\",\n  \"contact_email\": \"info@electron-srl.com\",\n  \"contact_name\": \"\",\n  \"industry\": \"Educational Equipment Manufacturing\",\n  \"country\": \"Italy\",\n  \"status\": \"qualified\",\n  \"geo_score\": 32,\n  \"audit_date\": \"2026-03-12\",\n  \"audit_file\": \"~/.geo-prospects/audits/electron-srl.com-2026-03-12.md\",\n  \"proposal_file\": \"~/.geo-prospects/proposals/electron-srl.com-proposal.md\",\n  \"monthly_value\": 0,\n  \"contract_start\": null,\n  \"contract_months\": 0,\n  \"notes\": [\n    {\n      \"date\": \"2026-03-12\",\n      \"text\": \"Initial GEO quick scan. Score 32/100 - Critical tier. Strong candidate for GEO services.\"\n    }\n  ],\n  \"created_at\": \"2026-03-12\",\n  \"updated_at\": \"2026-03-12\"\n}\n```\n\n---\n\n## Orchestration Instructions\n\n### `/geo prospect new <domain>`\n\n1. Check if `~/.geo-prospects/prospects.json` exists, create if not (empty array)\n2. Auto-detect company name from domain (e.g., `electron-srl.com` → `Electron Srl`)\n3. Assign next sequential ID: `PRO-001`, `PRO-002`, etc.\n4. Ask user for:\n   - Contact name (optional)\n   - Contact email\n   - Monthly contract value estimate (optional)\n5. Set status to `lead`\n6. Save to JSON file\n7. Suggest next step: \"Run `/geo prospect audit electron-srl.com` to score this prospect\"\n\n### `/geo prospect list`\n\nRead `~/.geo-prospects/prospects.json` and render a summary table:\n\n```\nGEO Prospect Pipeline — March 2026\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\nID       Domain                  Company           Status      Score  Value\n───────  ──────────────────────  ────────────────  ──────────  ─────  ──────\nPRO-001  electron-srl.com        Electron Srl      Qualified   32/100  €4.5K\nPRO-002  acme.com                ACME Corp         Lead        —       —\nPRO-003  bigshop.it              BigShop           Won         41/100  €6.0K\n\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\nPipeline: 1 lead | 1 qualified | 0 proposals | 1 won | 0 lost\nCommitted MRR: €6,000 | Pipeline Value: €4,500\n```\n\n### `/geo prospect audit <id-or-domain>`\n\n1. Run `/geo quick <domain>` to get GEO snapshot score\n2. Save score to prospect record: `geo_score`, `audit_date`\n3. Save audit output to `~/.geo-prospects/audits/<domain>-<date>.md`\n4. Update `audit_file` path in prospect record\n5. Add auto-note: \"Quick audit run. GEO Score: XX/100.\"\n6. If score < 55: suggest \"Score indicates strong sales opportunity. Run `/geo proposal <domain>` to generate proposal.\"\n\n### `/geo prospect note <id-or-domain> \"<text>\"`\n\n1. Find prospect by ID or domain\n2. Append note with current ISO date\n3. Save back to JSON\n4. Confirm: \"Note added to Electron Srl (PRO-001)\"\n\n### `/geo prospect status <id-or-domain> <status>`\n\nValid statuses: `lead`, `qualified`, `proposal`, `won`, `lost`\n\n1. Update status field\n2. Add auto-note: \"Status changed to <status>\"\n3. Save and confirm\n\n### `/geo prospect pipeline`\n\nVisual revenue-focused pipeline summary:\n\n```\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\nGEO AGENCY PIPELINE SUMMARY — March 2026\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\nSTAGE          COUNT   POTENTIAL VALUE   NOTES\n─────────────  ─────   ───────────────   ─────────────────────\nLead             2      €8,000/mo        New discoveries\nQualified        1      €4,500/mo        Ready for proposal\nProposal Sent    1      €6,000/mo        Awaiting signature\nWon              3      €18,500/mo       Active clients (MRR)\nLost             1      —                Budget freeze\n\nCOMMITTED MRR:        €18,500\nPIPELINE (qualified+): €10,500\nTOTAL POTENTIAL:      €29,000/mo → €348,000/yr\n\nNext actions:\n→ PRO-003 (acme.com): Send proposal — score 38/100 (strong case)\n→ PRO-007 (shop.it): Follow up — proposal sent 8 days ago\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n```\n\n---\n\n## Storage Location\n\nAll data stored in `~/.geo-prospects/`:\n```\n~/.geo-prospects/\n├── prospects.json          # Main CRM database\n├── audits/                 # Quick audit snapshots\n│   └── electron-srl.com-2026-03-12.md\n└── proposals/              # Generated proposals\n    └── electron-srl.com-proposal.md\n```\n\nCreate directory if it does not exist: `mkdir -p ~/.geo-prospects/audits ~/.geo-prospects/proposals`\n\n---\n\n## Pipeline Stage Definitions\n\n| Status | Meaning | Typical Next Action |\n|--------|---------|---------------------|\n| `lead` | Discovered, not yet contacted | Run quick audit, assess opportunity |\n| `qualified` | Audit done, confirmed pain points | Generate proposal |\n| `proposal` | Proposal sent, awaiting decision | Follow up, answer questions |\n| `won` | Contract signed, active client | Run full audit, start onboarding |\n| `lost` | Deal closed lost | Log reason for future reference |\n\n---\n\n## Output\n\n- All commands print confirmation + current prospect status to terminal\n- No external files unless explicitly saving audits/proposals\n- JSON database is the single source of truth\n","frontmatter":{"name":"geo-prospect","description":"CRM-lite for managing GEO agency prospects and clients. Track leads through the full sales pipeline: Lead → Qualified → Proposal Sent → Won → Lost. Store audit history, notes, deal values, and generate pipeline summaries. Use when user says \"prospect\", \"lead\", \"client\", \"pipeline\", \"crm\", \"nuovo prospect\", \"aggiungi cliente\", or when managing the business side of GEO services.\n","version":"1.0.0","tags":["geo","business","crm","prospect","pipeline","sales"],"allowed-tools":"Read, Write, Bash, Glob","allowedTools":["Read,","Write,","Bash,","Glob"]},"allowedTools":["Read,","Write,","Bash,","Glob"],"isInternal":false,"tokens":1841,"sizeBytes":7453},{"name":"SKILL.md","path":"skills/geo-report-pdf/SKILL.md","rawUrl":"https://raw.githubusercontent.com/zubair-trabzada/geo-seo-claude/HEAD/skills/geo-report-pdf/SKILL.md","title":"geo-report-pdf","category":"anthropic-skill","format":"markdown","content":"---\nname: geo-report-pdf\ndescription: Generate a professional PDF report from a GEO audit using pandoc + Chrome headless. Converts GEO-AUDIT-REPORT.md into a styled, client-ready PDF with a cover page, color-coded score tables, severity-tagged findings, and a 90-day roadmap.\nversion: 2.0.0\nauthor: geo-seo-claude\ntags: [geo, pdf, report, client-deliverable, professional]\nallowed-tools: Read, Grep, Glob, Bash, Write\n---\n\n# GEO PDF Report Generator (pandoc pipeline)\n\n## Prerequisites\n\n- **pandoc** — `brew install pandoc`\n- **Google Chrome** — must be installed at `/Applications/Google Chrome.app/`\n\nNo Python dependencies. No ReportLab. No JSON data wrangling.\n\n## How It Works\n\n1. Read `GEO-AUDIT-REPORT.md` in the current directory (created by `/geo audit`)\n2. Extract cover metadata from the report (brand name, domain, GEO score, date, locations)\n3. Run `pandoc` with the bundled CSS + HTML template to produce a self-contained `GEO-REPORT.html`\n4. Run Chrome headless to print the HTML to `GEO-REPORT.pdf`\n\nThe pandoc template (`~/.claude/skills/geo/templates/geo-report-template.html`) injects:\n- A full-bleed dark navy cover section with the GEO score badge\n- Per-section cover metadata (date, business type, locations, platform)\n- JavaScript that runs inside Chrome before printing to color-code score cells and severity-tag finding sections\n\n## Workflow\n\n### Step 1: Check for audit report\n\nLook for `GEO-AUDIT-REPORT.md` in the current directory. If absent, tell the user to run `/geo audit <url>` first.\n\n### Step 2: Extract cover metadata from the report\n\nRead the top of `GEO-AUDIT-REPORT.md` and extract:\n\n| Field | Where to find it |\n|---|---|\n| `brand_name` | First H1 title (after \"GEO Audit Report:\") |\n| `domain` | Second bold line (e.g. `**Domain:** alexamediasolutions.com`) |\n| `geo_score` | Line matching `## Overall GEO Score: XX / 100` |\n| `score_label` | Word after the score on that same line (e.g. \"Poor\", \"Fair\", \"Good\") |\n| `date` | `**Audit Date:**` line |\n| `business_type` | `**Business Type:**` line |\n| `locations` | `**Locations:**` line |\n| `platform` | `**CMS:**` line |\n\n### Step 3: Run pandoc\n\n```bash\npandoc GEO-AUDIT-REPORT.md \\\n  --to html5 \\\n  --standalone \\\n  --embed-resources \\\n  --template ~/.claude/skills/geo/templates/geo-report-template.html \\\n  --css ~/.claude/skills/geo/templates/geo-report-style.css \\\n  --metadata title=\"GEO Audit Report — <brand_name>\" \\\n  --metadata brand_name=\"<brand_name>\" \\\n  --metadata domain=\"<domain>\" \\\n  --metadata geo_score=\"<geo_score>\" \\\n  --metadata score_label=\"<score_label>\" \\\n  --metadata date=\"<date>\" \\\n  --metadata business_type=\"<business_type>\" \\\n  --metadata locations=\"<locations>\" \\\n  --metadata platform=\"<platform>\" \\\n  -o GEO-REPORT.html\n```\n\nReplace `<field>` placeholders with values extracted in Step 2. If a field is not found in the report, omit that `--metadata` flag — the template has sensible defaults.\n\n### Step 4: Run Chrome headless\n\n```bash\n\"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome\" \\\n  --headless=new \\\n  --disable-gpu \\\n  --no-sandbox \\\n  --print-to-pdf=\"$(pwd)/GEO-REPORT.pdf\" \\\n  --print-to-pdf-no-header \\\n  --no-pdf-header-footer \\\n  --virtual-time-budget=5000 \\\n  \"file://$(pwd)/GEO-REPORT.html\"\n```\n\n### Step 5: Report completion\n\nTell the user:\n- `GEO-REPORT.pdf` was generated in the current directory\n- File size\n- Optionally: `open GEO-REPORT.pdf` to preview it\n\n## What the PDF Contains\n\n- **Cover page** — Dark navy gradient, brand name, domain, GEO score badge (colored by score), audit date, business type, locations, CMS platform\n- **Score tables** — Cells containing `XX/100` are color-coded: ≥80 green, ≥65 blue, ≥50 amber, ≥35 orange, <35 red\n- **Finding sections** — `h3` headings containing \"Critical / High / Medium / Low\" get severity-colored left-border callout blocks (red / orange / yellow / green)\n- **Section page breaks** — Major sections (High Priority, 90-Day Roadmap, Component Score Summary, Generated Schema) break to new pages automatically\n- **Code blocks** — JSON schema templates render with dark theme monospace styling\n- **Page footer** — Brand name · GEO Audit · date + page numbers (via CSS `@page`)\n\n## Customizing the Report\n\n- **Colors / typography** — Edit `~/.claude/skills/geo/templates/geo-report-style.css`\n- **Cover layout** — Edit `~/.claude/skills/geo/templates/geo-report-template.html`\n- **Score thresholds for color-coding** — Edit the `scoreColor()` function in the template's `<script>` block\n- **Which sections get page breaks** — Edit the `breakBefore` array in the template's `<script>` block\n\n## Troubleshooting\n\n| Problem | Fix |\n|---|---|\n| `pandoc: command not found` | `brew install pandoc` |\n| Chrome not found | Check path: `/Applications/Google Chrome.app/Contents/MacOS/Google Chrome` |\n| PDF is blank / empty | Increase `--virtual-time-budget` to 8000 |\n| Cover metadata missing | Check GEO-AUDIT-REPORT.md has the standard header format |\n| Fonts not loading | PDF is rendered offline; system fonts are used as fallback — this is expected |\n","frontmatter":{"name":"geo-report-pdf","description":"Generate a professional PDF report from a GEO audit using pandoc + Chrome headless. Converts GEO-AUDIT-REPORT.md into a styled, client-ready PDF with a cover page, color-coded score tables, severity-tagged findings, and a 90-day roadmap.","version":"2.0.0","author":"geo-seo-claude","tags":["geo","pdf","report","client-deliverable","professional"],"allowed-tools":"Read, Grep, Glob, Bash, Write","allowedTools":["Read,","Grep,","Glob,","Bash,","Write"]},"allowedTools":["Read,","Grep,","Glob,","Bash,","Write"],"isInternal":false,"tokens":1331,"sizeBytes":5096},{"name":"SKILL.md","path":"skills/geo-report/SKILL.md","rawUrl":"https://raw.githubusercontent.com/zubair-trabzada/geo-seo-claude/HEAD/skills/geo-report/SKILL.md","title":"geo-report","category":"anthropic-skill","format":"markdown","content":"---\nname: geo-report\ndescription: Generate a professional, client-facing GEO report combining all audit results into a single deliverable with scores, findings, and prioritized actions\nversion: 1.0.0\nauthor: geo-seo-claude\ntags: [geo, report, client-deliverable, executive-summary, action-plan]\nallowed-tools: Read, Grep, Glob, Bash, WebFetch, Write\n---\n\n# GEO Client Report Generator\n\n## Purpose\n\nThis skill aggregates outputs from all GEO audit skills into a single, professional report that can be delivered directly to a client or stakeholder. The report is written for **business owners and marketing leaders**, not developers — technical findings are translated into business impact and clear action items with priority levels.\n\n## How to Use This Skill\n\n1. Run the following audits first (or use existing report data):\n   - `geo-platform-optimizer` -> GEO-PLATFORM-OPTIMIZATION.md\n   - `geo-schema` -> GEO-SCHEMA-REPORT.md\n   - `geo-technical` -> GEO-TECHNICAL-AUDIT.md\n   - `geo-content` -> GEO-CONTENT-ANALYSIS.md\n   - (Optional) `geo-llmstxt` -> llms.txt assessment\n   - (Optional) `geo-brand-mentions` -> brand authority data\n2. Collect all scores and findings\n3. Calculate the composite GEO Readiness Score\n4. Generate the client report using the template below\n5. Output: GEO-CLIENT-REPORT.md\n\n---\n\n## GEO Readiness Score Calculation\n\n### Component Weights\n\n| Component | Weight | Source Skill |\n|---|---|---|\n| AI Platform Readiness | 25% | geo-platform-optimizer |\n| Content Quality & E-E-A-T | 25% | geo-content |\n| Technical Foundation | 20% | geo-technical |\n| Schema & Structured Data | 15% | geo-schema |\n| Brand Authority & Entity Presence | 15% | geo-platform-optimizer (entity signals) |\n\n### Score Formula\n```\nGEO Score = (Platform Score * 0.25) + (Content Score * 0.25) + (Technical Score * 0.20) + (Schema Score * 0.15) + (Brand Score * 0.15)\n```\n\nRound to the nearest integer. Cap at 100.\n\n### Score Interpretation for Clients\n\n| Score Range | Label | Client-Facing Description |\n|---|---|---|\n| 85-100 | Excellent | Your site is well-positioned for AI search. Focus on maintaining and expanding your advantage. |\n| 70-84 | Good | Solid foundation with clear opportunities to improve AI visibility. Targeted optimizations will yield significant results. |\n| 55-69 | Moderate | Your site has gaps in AI readiness that competitors may be exploiting. A structured optimization plan will close these gaps. |\n| 40-54 | Below Average | Significant barriers to AI search visibility exist. Without action, your brand risks being invisible in AI-generated answers. |\n| 0-39 | Needs Attention | Critical AI readiness issues require immediate action. Your competitors are likely capturing the AI search traffic your brand should own. |\n\n---\n\n## Report Template\n\nThe complete report follows this exact structure. Each section includes instructions on what to write and how.\n\n---\n\n### Section 1: Executive Summary\n\nWrite exactly ONE paragraph (4-6 sentences) covering:\n- What was analyzed (domain, number of pages, date of analysis)\n- The overall GEO Readiness Score with context (\"XX/100, which places [brand] in the [label] tier\")\n- The single most impactful finding (positive or negative)\n- Top 3 priority recommendations in one sentence\n- One sentence on the business impact (\"Addressing these recommendations could increase AI-driven traffic by an estimated XX%, representing approximately $X,XXX/month based on current traffic patterns\")\n\n**Tone**: Confident, direct, professional. No jargon. No hedging. Write as a consultant delivering findings, not as a tool generating a report.\n\n### Section 2: GEO Readiness Score\n\nPresent the overall score prominently:\n\n```\n## GEO Readiness Score: XX/100 — [Label]\n```\n\nThen break down by component in a table:\n\n```markdown\n| Component | Score | Weight | Weighted Score |\n|---|---|---|---|\n| AI Platform Readiness | XX/100 | 25% | XX |\n| Content Quality & E-E-A-T | XX/100 | 25% | XX |\n| Technical Foundation | XX/100 | 20% | XX |\n| Schema & Structured Data | XX/100 | 15% | XX |\n| Brand Authority | XX/100 | 15% | XX |\n| **Overall** | | | **XX/100** |\n```\n\n### Section 3: AI Visibility Dashboard\n\nPresent per-platform readiness scores:\n\n```markdown\n## AI Visibility Dashboard\n\n| AI Platform | Readiness Score | Key Gap | Priority Action |\n|---|---|---|---|\n| Google AI Overviews | XX/100 | [One-line gap] | [One-line action] |\n| ChatGPT Web Search | XX/100 | [One-line gap] | [One-line action] |\n| Perplexity AI | XX/100 | [One-line gap] | [One-line action] |\n| Google Gemini | XX/100 | [One-line gap] | [One-line action] |\n| Bing Copilot | XX/100 | [One-line gap] | [One-line action] |\n```\n\nAdd a brief paragraph explaining what these scores mean: \"These scores reflect how likely your content is to be cited by each AI search platform. A score below 50 indicates significant barriers to citation on that platform.\"\n\n### Section 4: AI Crawler Access Status\n\nPresent as a clear table:\n\n```markdown\n## AI Crawler Access\n\n| AI Crawler | Platform | Status | Impact | Recommendation |\n|---|---|---|---|---|\n| Googlebot | Google Search + AIO | Allowed/Blocked | Critical | [Action] |\n| GPTBot | ChatGPT / OpenAI | Allowed/Blocked | High | [Action] |\n| Bingbot | Bing + Copilot + ChatGPT | Allowed/Blocked | High | [Action] |\n| PerplexityBot | Perplexity AI | Allowed/Blocked | Medium | [Action] |\n| Google-Extended | Gemini Training | Allowed/Blocked | Medium | [Action] |\n| ClaudeBot | Anthropic Claude | Allowed/Blocked | Medium | [Action] |\n| Applebot-Extended | Apple Intelligence | Allowed/Blocked | Medium | [Action] |\n```\n\n**Translate for the client**: \"Blocking AI crawlers is like closing your store during business hours. If a crawler cannot access your site, the AI platform it powers cannot cite your content. We recommend allowing all major AI crawlers unless you have a specific data licensing concern.\"\n\n### Section 5: Brand Authority Analysis\n\nPresent entity presence across platforms:\n\n```markdown\n## Brand Authority\n\n| Platform | Presence | Status | Impact on AI Visibility |\n|---|---|---|---|\n| Wikipedia | Yes/No | [Detail] | Very High — 47.9% of ChatGPT citations are Wikipedia |\n| Wikidata | Yes/No | [Detail] | High — machine-readable entity data |\n| LinkedIn | Yes/No | [Detail] | High — Bing Copilot and ChatGPT signal |\n| YouTube | Yes/No | [Detail] | High — Gemini and Perplexity signal |\n| Reddit | Yes/No | [Detail] | Very High — 46.7% of Perplexity citations are Reddit |\n| Google Knowledge Panel | Yes/No | [Detail] | High — Gemini entity recognition |\n| Crunchbase | Yes/No | [Detail] | Medium — entity validation |\n| GitHub | Yes/No | [Detail] | Medium — tech brand signal |\n```\n\n**Translate for the client**: \"AI platforms build trust by cross-referencing your brand across multiple authoritative sources. Each platform where your brand has an accurate, consistent presence increases the likelihood of being cited in AI answers.\"\n\n### Section 6: Citability Analysis\n\n#### Top 5 Most Citable Pages\nFor each page:\n- URL\n- Why it is citable (structure, depth, E-E-A-T signals)\n- One specific improvement that would make it even more citable\n\n#### Top 5 Least Citable Pages\nFor each page:\n- URL\n- Why it is unlikely to be cited (thin content, poor structure, missing signals)\n- Specific rewrite or restructure recommendation\n\n**Business impact framing**: \"Your most citable pages are your best candidates for appearing in AI-generated answers. Improving the 5 least citable pages represents the highest-ROI content investment you can make for AI visibility.\"\n\n### Section 7: Technical Health Summary\n\nPresent the key technical findings in business-friendly language:\n\n```markdown\n## Technical Health\n\n| Area | Status | Business Impact |\n|---|---|---|\n| Core Web Vitals | Good/Needs Work/Poor | [Impact on user experience and rankings] |\n| Server-Side Rendering | Yes/Partial/No | [Impact on AI crawler visibility] |\n| Mobile Optimization | Good/Needs Work/Poor | [Impact on Google's mobile-first indexing] |\n| Security (HTTPS + Headers) | Good/Needs Work/Poor | [Impact on trust signals] |\n| Page Speed | Fast/Average/Slow | [Impact on user experience and crawl budget] |\n| IndexNow Protocol | Implemented/Not | [Impact on Bing/ChatGPT indexing speed] |\n```\n\n**Critical finding callout**: If SSR is missing or partial, highlight this prominently: \"Your site uses client-side rendering, which means AI crawlers see an empty page when they visit. This is the single most impactful technical issue for AI search visibility. Until this is resolved, most AI platforms cannot cite your content.\"\n\n### Section 8: Schema & Structured Data\n\n```markdown\n## Schema & Structured Data\n\n### Current Implementation\n| Schema Type | Present | Status | AI Impact |\n|---|---|---|---|\n| Organization | Yes/No | [Valid/Issues] | Critical — entity recognition |\n| Article + Author | Yes/No | [Valid/Issues] | High — E-E-A-T signal |\n| sameAs (entity links) | Yes/No | [Count] links | Critical — cross-platform entity graph |\n| [Business-specific] | Yes/No | [Valid/Issues] | [Impact] |\n| WebSite + SearchAction | Yes/No | [Valid/Issues] | Medium — sitelinks |\n| BreadcrumbList | Yes/No | [Valid/Issues] | Low-Medium — navigation context |\n```\n\nIf schemas are missing, note: \"Ready-to-use structured data code has been prepared and is included in the technical appendix. Your development team can add this to your site with minimal effort.\"\n\n### Section 9: llms.txt Status\n\n```markdown\n## llms.txt — AI Content Guide\n\n| File | Status | Recommendation |\n|---|---|---|\n| /llms.txt | Present/Missing | [Action] |\n| /llms-full.txt | Present/Missing | [Action] |\n```\n\n**Translate for the client**: \"llms.txt is an emerging standard (similar to robots.txt) that tells AI systems what your site is about and which pages are most important. While not universally adopted yet, implementing it positions your brand ahead of competitors and provides direct guidance to AI platforms.\"\n\n### Section 10: Prioritized Action Plan\n\nThis is the most important section of the report. Organize actions by timeline and impact.\n\n```markdown\n## Prioritized Action Plan\n\n### Quick Wins (This Week)\n*High impact, low effort — can be implemented immediately*\n\n| # | Action | Impact | Effort | Platforms Affected |\n|---|---|---|---|---|\n| 1 | [Specific action] | [High/Med] | [Hours estimate] | [Which AI platforms] |\n| 2 | [Specific action] | [High/Med] | [Hours estimate] | [Which AI platforms] |\n```\n\n**Quick Win criteria**: Can be done in < 4 hours by one person. Examples:\n- Unblock AI crawlers in robots.txt\n- Add publication dates to existing content\n- Add author bylines with credentials\n- Fix broken meta descriptions\n- Add sameAs properties to existing Organization schema\n- Create/claim llms.txt file\n\n```markdown\n### Medium-Term Improvements (This Month)\n*Significant impact, moderate effort — requires content or technical changes*\n\n| # | Action | Impact | Effort | Platforms Affected |\n|---|---|---|---|---|\n| 1 | [Specific action] | [High/Med] | [Days estimate] | [Which AI platforms] |\n```\n\n**Medium-Term criteria**: 1-5 days of work. Examples:\n- Restructure top 10 pages with question-based headings and direct answers\n- Implement comprehensive Schema.org markup\n- Create author pages with credentials and sameAs links\n- Optimize Core Web Vitals (image compression, code splitting)\n- Register and configure Bing Webmaster Tools\n- Implement IndexNow protocol\n\n```markdown\n### Strategic Initiatives (This Quarter)\n*Long-term competitive advantage, requires ongoing investment*\n\n| # | Action | Impact | Effort | Platforms Affected |\n|---|---|---|---|---|\n| 1 | [Specific action] | [High/Med] | [Weeks estimate] | [Which AI platforms] |\n```\n\n**Strategic criteria**: Ongoing effort over weeks/months. Examples:\n- Build Wikipedia/Wikidata entity presence\n- Develop active Reddit community engagement strategy\n- Create YouTube content strategy aligned with search queries\n- Implement server-side rendering (if currently client-rendered)\n- Build topical authority through comprehensive content strategy\n- Establish original research/data publication program\n\n### Estimated Impact\nAfter the action plan, include an impact estimate:\n\n\"Based on industry benchmarks and the specific gaps identified in this audit:\n- **Quick Wins alone** could improve your GEO score by approximately [X-Y] points\n- **Full implementation** of this action plan could improve your GEO score to approximately [XX]/100\n- At current traffic levels and conversion rates, improved AI visibility represents an estimated **$X,XXX - $XX,XXX per month** in additional organic value\"\n\nUse conservative estimates. Base the dollar figure on:\n- Current estimated organic traffic value (from analytics if available, or estimate from industry benchmarks)\n- AI search is projected to drive 25-40% of organic discovery by end of 2026\n- A 10-point GEO score improvement typically correlates with a 15-25% increase in AI citation frequency\n\n### Section 11: Competitor Comparison (if competitor URLs provided)\n\nIf competitor URLs were analyzed alongside the primary domain:\n\n```markdown\n## Competitor Comparison\n\n| Metric | [Your Brand] | [Competitor 1] | [Competitor 2] |\n|---|---|---|---|\n| Overall GEO Score | XX/100 | XX/100 | XX/100 |\n| Google AIO Readiness | XX/100 | XX/100 | XX/100 |\n| ChatGPT Readiness | XX/100 | XX/100 | XX/100 |\n| Perplexity Readiness | XX/100 | XX/100 | XX/100 |\n| Schema Coverage | [Detail] | [Detail] | [Detail] |\n| Wikipedia Presence | Yes/No | Yes/No | Yes/No |\n| Reddit Authority | [Detail] | [Detail] | [Detail] |\n| SSR Status | Yes/No | Yes/No | Yes/No |\n\n### Where You Lead\n[Specific areas where the brand outperforms competitors]\n\n### Where You Trail\n[Specific areas where competitors have an advantage, with actions to close the gap]\n```\n\n### Section 12: Appendix\n\n```markdown\n## Appendix\n\n### Methodology\nThis GEO audit was conducted using the following methodology:\n- **Pages analyzed**: [List of specific URLs audited]\n- **Platforms assessed**: Google AI Overviews, ChatGPT, Perplexity AI, Google Gemini, Bing Copilot\n- **Technical checks**: HTTP headers, robots.txt, HTML source analysis, structured data validation\n- **Content assessment**: E-E-A-T framework (Experience, Expertise, Authoritativeness, Trustworthiness) per Google's December 2025 Quality Rater Guidelines\n- **Schema validation**: JSON-LD parsing and Schema.org specification compliance\n- **Date of analysis**: [Date]\n\n### Data Sources\n- Google Search Quality Rater Guidelines (December 2025 update)\n- Schema.org full type hierarchy\n- Industry citation studies (Zyppy, Authoritas, Semrush AI search research, 2025-2026)\n- Core Web Vitals thresholds (web.dev, 2026 standards)\n- AI crawler user-agent documentation (per-platform official docs)\n\n### Glossary\n\n| Term | Definition |\n|---|---|\n| GEO | Generative Engine Optimization — optimizing content to be cited by AI search platforms |\n| AIO | AI Overviews — Google's AI-generated answer boxes at the top of search results |\n| E-E-A-T | Experience, Expertise, Authoritativeness, Trustworthiness — Google's content quality framework |\n| SSR | Server-Side Rendering — generating HTML on the server so crawlers can read content without JavaScript |\n| CWV | Core Web Vitals — Google's page experience metrics (LCP, INP, CLS) |\n| LCP | Largest Contentful Paint — time to render the largest visible element |\n| INP | Interaction to Next Paint — responsiveness metric (replaced FID in March 2024) |\n| CLS | Cumulative Layout Shift — visual stability metric |\n| JSON-LD | JavaScript Object Notation for Linked Data — preferred structured data format |\n| sameAs | Schema.org property linking an entity to its profiles on other platforms |\n| IndexNow | Protocol for instantly notifying search engines of content changes |\n| llms.txt | Proposed standard file for guiding AI systems about a site's content |\n| YMYL | Your Money or Your Life — topics requiring highest E-E-A-T standards |\n| SERP | Search Engine Results Page |\n| Topical Authority | The depth and breadth of a site's coverage of its core topic area |\n```\n\n---\n\n## Formatting and Tone Guidelines\n\n### Formatting\n- Use clean markdown throughout: tables, headers (H2/H3), bullet points, bold for emphasis\n- Tables for data, bullets for recommendations, bold for key terms\n- One blank line between sections for readability\n- Use horizontal rules (---) to separate major sections\n- All URLs should be absolute (not relative)\n\n### Tone\n- **Professional but accessible** — written for a business owner, not a developer\n- **Confident and direct** — state findings as conclusions, not possibilities\n- **Action-oriented** — every finding should connect to a specific action\n- **Business-impact focused** — translate technical issues into business outcomes\n- Avoid: jargon without explanation, hedging language, passive voice, excessive caveats\n- Use: \"Your site [does/does not]...\", \"We recommend...\", \"This impacts...\"\n\n### Dollar-Value Framing\nWhere possible, connect recommendations to business value:\n- \"Improving your Google AIO readiness from 35 to 70 could increase your presence in AI Overviews by an estimated 50%, which at current search volumes represents approximately 2,000 additional monthly visitors\"\n- \"Server-side rendering would make your content accessible to ChatGPT, Perplexity, and other AI platforms — collectively representing an audience your competitors are already reaching\"\n- \"The investment in Schema.org markup (estimated 8-16 hours of developer time) could increase your entity recognition score from 20 to 75, significantly improving citation probability\"\n\nBe conservative with estimates. State assumptions clearly. Never guarantee specific results.\n\n---\n\n## Output\n\nGenerate **GEO-CLIENT-REPORT.md** using the complete template above, filled with actual audit data. The report should be:\n- 40-80 pages equivalent in detail (3,000-6,000 words)\n- Ready to send to a client without editing\n- Self-contained (no references to other report files — all relevant data is included)\n- Printable and presentable (clean markdown formatting)\n","frontmatter":{"name":"geo-report","description":"Generate a professional, client-facing GEO report combining all audit results into a single deliverable with scores, findings, and prioritized actions","version":"1.0.0","author":"geo-seo-claude","tags":["geo","report","client-deliverable","executive-summary","action-plan"],"allowed-tools":"Read, Grep, Glob, Bash, WebFetch, Write","allowedTools":["Read,","Grep,","Glob,","Bash,","WebFetch,","Write"]},"allowedTools":["Read,","Grep,","Glob,","Bash,","WebFetch,","Write"],"isInternal":false,"tokens":4279,"sizeBytes":18135},{"name":"SKILL.md","path":"skills/geo-schema/SKILL.md","rawUrl":"https://raw.githubusercontent.com/zubair-trabzada/geo-seo-claude/HEAD/skills/geo-schema/SKILL.md","title":"geo-schema","category":"anthropic-skill","format":"markdown","content":"---\nname: geo-schema\ndescription: Schema.org structured data audit and generation optimized for AI discoverability — detect, validate, and generate JSON-LD markup\nversion: 1.0.0\nauthor: geo-seo-claude\ntags: [geo, schema, structured-data, json-ld, entity-recognition, ai-discoverability]\nallowed-tools: Read, Grep, Glob, Bash, WebFetch, Write\n---\n\n# GEO Schema & Structured Data\n\n## Purpose\n\nStructured data is the primary machine-readable signal that tells AI systems what an entity IS, what it does, and how it connects to other entities. While schema markup has traditionally been about earning Google rich results, its role in GEO is fundamentally different: **structured data is how AI models understand and trust your entity**. A complete entity graph in structured data dramatically increases citation probability across all AI search platforms.\n\n## How to Use This Skill\n\n1. Fetch the target page HTML using `fetch_page.py` (see note below)\n2. Detect all existing structured data (JSON-LD, Microdata, RDFa)\n3. Validate detected schemas against Schema.org specifications\n4. Identify missing recommended schemas based on business type\n5. Generate ready-to-use JSON-LD code blocks\n6. Output GEO-SCHEMA-REPORT.md\n\n---\n\n## Step 1: Detection\n\n**IMPORTANT:** WebFetch converts HTML to markdown and strips `<head>` content, which removes JSON-LD blocks. Use `fetch_page.py` instead:\n```bash\npython3 ~/.claude/skills/geo/scripts/fetch_page.py <url> page\n```\nThe output includes a `structured_data` array with all parsed JSON-LD blocks from the page.\n\n### Scan for JSON-LD\nLook for `<script type=\"application/ld+json\">` blocks in the HTML. Parse each block as JSON. A page may contain multiple JSON-LD blocks — collect all of them.\n\n### Scan for Microdata\nLook for elements with `itemscope`, `itemtype`, and `itemprop` attributes. Map the hierarchy of nested items. Note: Microdata is harder for AI crawlers to parse than JSON-LD. Flag a recommendation to migrate to JSON-LD if Microdata is the only format found.\n\n### Scan for RDFa\nLook for elements with `typeof`, `property`, and `vocab` attributes. Similar to Microdata — recommend migration to JSON-LD.\n\n### Priority Order\nJSON-LD is the **strongly recommended format** for GEO. Google, Bing, and AI platforms all process JSON-LD most reliably. If the site uses Microdata or RDFa exclusively, flag this as a high-priority migration.\n\n---\n\n## Step 2: Validation\n\nFor each detected schema block, validate:\n\n1. **Valid JSON**: Is the JSON-LD syntactically valid? Check for trailing commas, unquoted keys, malformed strings.\n2. **Valid @type**: Does the `@type` match a recognized Schema.org type? Check against https://schema.org/docs/full.html.\n3. **Required Properties**: Does the schema include all required properties for its type? (See per-type requirements below.)\n4. **Recommended Properties**: Does the schema include recommended properties that increase AI discoverability?\n5. **sameAs Links**: Does the schema include `sameAs` properties linking to other platform presences?\n6. **URL Validity**: Do all URLs in the schema resolve (not 404)?\n7. **Nesting**: Is the schema properly nested (e.g., author inside Article, address inside Organization)?\n8. **Rendering Method**: Is the JSON-LD in the server-rendered HTML or injected via JavaScript? Per Google's December 2025 guidance, **JavaScript-injected structured data may face delayed processing**. Flag any schema that requires JS execution.\n\n---\n\n## Step 3: Schema Types for GEO\n\n### Organization (CRITICAL — every business site)\nEssential for entity recognition across all AI platforms. This is how AI models identify WHAT the business is.\n\n**Required properties:**\n- `@type`: \"Organization\" (or subtype: Corporation, LocalBusiness, etc.)\n- `name`: Official business name\n- `url`: Official website URL\n- `logo`: URL to logo image (ImageObject preferred)\n\n**Recommended properties for GEO:**\n- `sameAs`: Array of ALL platform URLs (see sameAs strategy below)\n- `description`: 1-2 sentence description of the organization\n- `foundingDate`: ISO 8601 date\n- `founder`: Person schema\n- `address`: PostalAddress schema\n- `contactPoint`: ContactPoint with telephone, email, contactType\n- `areaServed`: Geographic area\n- `numberOfEmployees`: QuantitativeValue\n- `industry`: Text or DefinedTerm\n- `award`: Array of awards received\n- `knowsAbout`: Array of topics the organization is expert in (strong GEO signal)\n\n### LocalBusiness (for businesses with physical locations)\nExtends Organization. Critical for local AI search results and Google Gemini.\n\n**Additional required properties:**\n- `address`: Full PostalAddress\n- `telephone`: Phone number\n- `openingHoursSpecification`: Operating hours\n\n**Recommended for GEO:**\n- `geo`: GeoCoordinates (latitude, longitude)\n- `priceRange`: Price indicator\n- `aggregateRating`: AggregateRating schema\n- `review`: Array of Review schemas\n- `hasMap`: URL to Google Maps\n\n### Article + Author (CRITICAL for publishers)\nThe Author schema is one of the strongest E-E-A-T signals for AI platforms.\n\n**Article required:**\n- `@type`: \"Article\" (or NewsArticle, BlogPosting, TechArticle)\n- `headline`: Article title\n- `datePublished`: ISO 8601\n- `dateModified`: ISO 8601 (critical for freshness signals)\n- `author`: Person or Organization schema\n- `publisher`: Organization schema with logo\n- `image`: Representative image\n\n**Author (Person) required for GEO:**\n- `name`: Full name\n- `url`: Author page URL on the site\n- `sameAs`: LinkedIn, Twitter, personal site, Google Scholar, ORCID\n- `jobTitle`: Professional title\n- `worksFor`: Organization schema\n- `knowsAbout`: Array of expertise areas\n- `alumniOf`: Educational institutions\n- `award`: Professional awards\n\n### Product (for e-commerce)\n**Required:**\n- `name`, `description`, `image`\n- `offers`: Offer with price, priceCurrency, availability\n- `brand`: Brand schema\n- `sku` or `gtin`/`mpn`\n\n**Recommended for GEO:**\n- `aggregateRating`: AggregateRating\n- `review`: Array of individual reviews\n- `category`: Product category\n- `material`, `weight`, `width`, `height` (where applicable)\n\n### FAQPage\n**Status as of 2024**: Google restricts FAQ rich results to government and health sites. However, the FAQPage schema still serves GEO purposes — AI platforms parse FAQ structured data for question-answer extraction. Implement it for AI readability even though rich results may not appear.\n\n**Structure:**\n- `@type`: \"FAQPage\"\n- `mainEntity`: Array of Question schemas, each with `acceptedAnswer` containing an Answer schema\n\n### SoftwareApplication (for SaaS)\n**Required:**\n- `name`, `description`\n- `applicationCategory`: e.g., \"BusinessApplication\"\n- `operatingSystem`: Supported platforms\n- `offers`: Pricing\n\n**Recommended for GEO:**\n- `aggregateRating`: User ratings\n- `featureList`: Array of features (strong citation signal)\n- `screenshot`: Screenshots\n- `softwareVersion`: Current version\n- `releaseNotes`: Link to changelog\n\n### WebSite + SearchAction (for sitelinks search box)\n**Structure:**\n```json\n{\n  \"@type\": \"WebSite\",\n  \"name\": \"Site Name\",\n  \"url\": \"https://example.com\",\n  \"potentialAction\": {\n    \"@type\": \"SearchAction\",\n    \"target\": {\n      \"@type\": \"EntryPoint\",\n      \"urlTemplate\": \"https://example.com/search?q={search_term_string}\"\n    },\n    \"query-input\": \"required name=search_term_string\"\n  }\n}\n```\n\n### Person (standalone — for personal brands, authors, thought leaders)\nUse as a standalone schema on About/Bio pages. This builds the entity graph for individual expertise.\n\n**Required:** `name`, `url`\n**Recommended for GEO:** `sameAs`, `jobTitle`, `worksFor`, `knowsAbout`, `alumniOf`, `award`, `description`, `image`\n\n### speakable Property (for voice/AI assistants)\nThe `speakable` property marks specific sections of content as particularly suitable for voice and AI assistant consumption. Add to Article or WebPage schemas.\n\n```json\n{\n  \"@type\": \"Article\",\n  \"speakable\": {\n    \"@type\": \"SpeakableSpecification\",\n    \"cssSelector\": [\".article-summary\", \".key-takeaway\"]\n  }\n}\n```\nThis signals to AI assistants which passages are the best candidates for citation or reading aloud.\n\n---\n\n## Step 4: Deprecated/Changed Schemas to Flag\n\n| Schema | Status | Note |\n|---|---|---|\n| HowTo | Rich results deprecated Aug 2023 | Still useful for AI parsing, but do not promise rich results |\n| FAQPage | Restricted to govt/health Aug 2023 | Still useful for AI parsing (see above) |\n| SpecialAnnouncement | Deprecated 2023 | Was for COVID; remove if still present |\n| CourseInfo | Replaced by Course updates 2024 | Use updated Course schema properties |\n| VideoObject `contentUrl` | Changed behavior 2024 | Must point to actual video file, not page URL |\n| Review snippet | Stricter enforcement 2024 | Self-serving reviews on product pages may not display |\n\nFlag any deprecated schemas found and recommend replacements.\n\n---\n\n## Step 5: sameAs Strategy (CRITICAL for Entity Recognition)\n\nThe `sameAs` property is the single most important structured data property for GEO. It tells AI systems: \"This entity on my website is the SAME entity as these profiles elsewhere.\" This creates the entity graph that AI platforms use to verify, trust, and cite sources.\n\n### Recommended sameAs Links (in priority order)\n\n1. **Wikipedia article** — highest authority entity link\n2. **Wikidata item** — machine-readable entity identifier (e.g., `https://www.wikidata.org/wiki/Q12345`)\n3. **LinkedIn** — company page or personal profile\n4. **YouTube** — channel URL\n5. **Twitter/X** — profile URL\n6. **Facebook** — page URL\n7. **Crunchbase** — company profile (for startups/tech)\n8. **GitHub** — organization or personal profile (for tech)\n9. **Google Scholar** — author profile (for researchers/academics)\n10. **ORCID** — researcher identifier (for academics)\n11. **Instagram** — profile URL\n12. **Apple App Store / Google Play** — app listings (for software)\n13. **BBB** — Better Business Bureau listing (for US businesses)\n14. **Industry directories** — relevant vertical directories\n\n### sameAs Audit Process\n1. Collect all known web presences for the entity\n2. Check that each URL resolves (not 404 or redirected)\n3. Verify the Organization/Person schema includes ALL of them\n4. Check that the information on each platform is consistent (name, description, founding date, etc.)\n5. Flag any platforms where the entity should have a presence but does not\n\n---\n\n## Step 6: JSON-LD Generation\n\nBased on the detected business type, generate ready-to-paste JSON-LD blocks. Always generate:\n\n1. **Organization or Person** (depending on entity type) — always\n2. **WebSite with SearchAction** — always for the homepage\n3. **Business-type-specific** — Article for publishers, Product for e-commerce, LocalBusiness for local, SoftwareApplication for SaaS\n4. **BreadcrumbList** — for any page deeper than homepage\n\n### Generation Rules\n- Use the `@graph` pattern to include multiple schemas in one JSON-LD block\n- All URLs must be absolute (not relative)\n- Include `@id` properties for cross-referencing between schemas\n- Use ISO 8601 for all dates\n- Include `speakable` on Article schemas with CSS selectors pointing to key content sections\n- Place JSON-LD in `<head>` section — NOT injected via JavaScript\n\n### Template: Organization with Full GEO Signals\n```json\n{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"Organization\",\n  \"@id\": \"https://example.com/#organization\",\n  \"name\": \"Company Name\",\n  \"url\": \"https://example.com\",\n  \"logo\": {\n    \"@type\": \"ImageObject\",\n    \"url\": \"https://example.com/logo.png\",\n    \"width\": 600,\n    \"height\": 60\n  },\n  \"description\": \"Concise description of what the company does.\",\n  \"foundingDate\": \"2020-01-15\",\n  \"founder\": {\n    \"@type\": \"Person\",\n    \"name\": \"Founder Name\",\n    \"sameAs\": \"https://www.linkedin.com/in/founder\"\n  },\n  \"address\": {\n    \"@type\": \"PostalAddress\",\n    \"streetAddress\": \"123 Main St\",\n    \"addressLocality\": \"City\",\n    \"addressRegion\": \"State\",\n    \"postalCode\": \"12345\",\n    \"addressCountry\": \"US\"\n  },\n  \"contactPoint\": {\n    \"@type\": \"ContactPoint\",\n    \"telephone\": \"+1-555-555-5555\",\n    \"contactType\": \"customer service\",\n    \"email\": \"support@example.com\"\n  },\n  \"sameAs\": [\n    \"https://en.wikipedia.org/wiki/Company_Name\",\n    \"https://www.wikidata.org/wiki/Q12345\",\n    \"https://www.linkedin.com/company/company-name\",\n    \"https://www.youtube.com/@companyname\",\n    \"https://twitter.com/companyname\",\n    \"https://github.com/companyname\",\n    \"https://www.crunchbase.com/organization/company-name\"\n  ],\n  \"knowsAbout\": [\n    \"Topic 1\",\n    \"Topic 2\",\n    \"Topic 3\"\n  ]\n}\n```\n\n---\n\n## Scoring Rubric (0-100)\n\n| Criterion | Points | How to Score |\n|---|---|---|\n| Organization/Person schema present and complete | 15 | 15 if full, 10 if basic, 0 if none |\n| sameAs links (5+ platforms) | 15 | 3 per valid sameAs link, max 15 |\n| Article schema with author details | 10 | 10 if full author schema, 5 if name only, 0 if none |\n| Business-type-specific schema present | 10 | 10 if complete, 5 if partial, 0 if missing |\n| WebSite + SearchAction | 5 | 5 if present, 0 if not |\n| BreadcrumbList on inner pages | 5 | 5 if present, 0 if not |\n| JSON-LD format (not Microdata/RDFa) | 5 | 5 if JSON-LD, 3 if mixed, 0 if only Microdata/RDFa |\n| Server-rendered (not JS-injected) | 10 | 10 if in HTML source, 5 if JS but in head, 0 if dynamic JS |\n| speakable property on articles | 5 | 5 if present, 0 if not |\n| Valid JSON + valid Schema.org types | 10 | 10 if no errors, 5 if minor issues, 0 if major errors |\n| knowsAbout property on Organization/Person | 5 | 5 if present with 3+ topics, 0 if missing |\n| No deprecated schemas present | 5 | 5 if clean, 0 if deprecated schemas found |\n\n---\n\n## Output Format\n\nGenerate **GEO-SCHEMA-REPORT.md** with:\n\n```markdown\n# GEO Schema & Structured Data Report — [Domain]\nDate: [Date]\n\n## Schema Score: XX/100\n\n## Detected Schemas\n| Page | Schema Type | Format | Status | Issues |\n|---|---|---|---|---|\n| / | Organization | JSON-LD | Valid | Missing sameAs |\n| /blog/post-1 | Article | JSON-LD | Valid | No author schema |\n\n## Validation Results\n[List each schema with pass/fail per property]\n\n## Missing Recommended Schemas\n[List schemas that should be present based on business type but are not]\n\n## sameAs Audit\n| Platform | URL | Status |\n|---|---|---|\n| Wikipedia | [URL or \"Not found\"] | Present/Missing |\n| LinkedIn | [URL or \"Not found\"] | Present/Missing |\n[Continue for all recommended platforms]\n\n## Generated JSON-LD Code\n[Ready-to-paste JSON-LD blocks for each missing or incomplete schema]\n\n## Implementation Notes\n- Where to place each JSON-LD block\n- Server-rendering requirements\n- Testing with Google Rich Results Test and Schema.org Validator\n```\n","frontmatter":{"name":"geo-schema","description":"Schema.org structured data audit and generation optimized for AI discoverability — detect, validate, and generate JSON-LD markup","version":"1.0.0","author":"geo-seo-claude","tags":["geo","schema","structured-data","json-ld","entity-recognition","ai-discoverability"],"allowed-tools":"Read, Grep, Glob, Bash, WebFetch, Write","allowedTools":["Read,","Grep,","Glob,","Bash,","WebFetch,","Write"]},"allowedTools":["Read,","Grep,","Glob,","Bash,","WebFetch,","Write"],"isInternal":false,"tokens":3625,"sizeBytes":14734},{"name":"SKILL.md","path":"skills/geo-technical/SKILL.md","rawUrl":"https://raw.githubusercontent.com/zubair-trabzada/geo-seo-claude/HEAD/skills/geo-technical/SKILL.md","title":"geo-technical","category":"anthropic-skill","format":"markdown","content":"---\nname: geo-technical\ndescription: Technical SEO audit with GEO-specific checks — crawlability, indexability, security, performance, SSR, and AI crawler access\nversion: 1.0.0\nauthor: geo-seo-claude\ntags: [geo, technical-seo, core-web-vitals, ssr, crawlability, security, performance]\nallowed-tools: Read, Grep, Glob, Bash, WebFetch, Write\n---\n\n# GEO Technical SEO Audit\n\n## Purpose\n\nTechnical SEO forms the foundation of both traditional search visibility and AI search citation. A technically broken site cannot be crawled, indexed, or cited by any platform. This skill audits 8 categories of technical health with specific attention to GEO requirements — most critically, **server-side rendering** (AI crawlers do not execute JavaScript) and **AI crawler access** (many sites inadvertently block AI crawlers in robots.txt).\n\n## How to Use This Skill\n\n1. Collect the target URL (homepage + 2-3 key inner pages)\n2. Fetch each page using curl/WebFetch to get raw HTML and HTTP headers\n3. Run through each of the 8 audit categories below\n4. Score each category using the rubric\n5. Generate GEO-TECHNICAL-AUDIT.md with results\n\n---\n\n## Category 1: Crawlability (15 points)\n\n### 1.1 robots.txt Validity\n- Fetch `https://[domain]/robots.txt`\n- Check for syntactic validity: proper `User-agent`, `Allow`, `Disallow` directives\n- Check for common errors: missing User-agent, wildcards blocking important paths, Disallow: / blocking entire site\n- Verify XML sitemap is referenced: `Sitemap: https://[domain]/sitemap.xml`\n\n### 1.2 AI Crawler Access (CRITICAL for GEO)\nCheck robots.txt for directives targeting these AI crawlers:\n\n| Crawler | User-Agent | Platform |\n|---|---|---|\n| GPTBot | GPTBot | ChatGPT / OpenAI |\n| Google-Extended | Google-Extended | Gemini / Google AI training |\n| Googlebot | Googlebot | Google Search + AI Overviews |\n| Bingbot | bingbot | Bing Copilot + ChatGPT (via Bing) |\n| PerplexityBot | PerplexityBot | Perplexity AI |\n| ClaudeBot | ClaudeBot | Anthropic Claude |\n| Amazonbot | Amazonbot | Alexa / Amazon AI |\n| CCBot | CCBot | Common Crawl (used by many AI models) |\n| FacebookBot | FacebookExternalHit | Meta AI |\n| Bytespider | Bytespider | TikTok / ByteDance AI |\n| Applebot-Extended | Applebot-Extended | Apple Intelligence |\n\n**Scoring for AI crawler access:**\n- All major AI crawlers allowed: 5 points\n- Some blocked but Googlebot + Bingbot allowed: 3 points\n- GPTBot or PerplexityBot blocked: 1 point (significant GEO impact)\n- Googlebot blocked: 0 points (fatal)\n\n**Important nuance**: Blocking Google-Extended does NOT block Googlebot. Google-Extended only controls AI training data usage, not search indexing. However, blocking Google-Extended may reduce presence in AI Overviews. Recommend allowing Google-Extended unless there is a specific data licensing concern.\n\n### 1.3 XML Sitemaps\n- Fetch sitemap (check robots.txt for location, or try `/sitemap.xml`, `/sitemap_index.xml`)\n- Validate XML syntax\n- Check for `<lastmod>` dates (should be present and accurate)\n- Count URLs — compare to expected number of indexable pages\n- Check for sitemap index if large site (50,000+ URLs per sitemap max)\n- Verify all sitemap URLs return 200 status codes (sample check)\n\n### 1.4 Crawl Depth\n- Homepage = depth 0. Check that all important pages are reachable within **3 clicks** (depth 3)\n- Pages at depth 4+ receive significantly less crawl budget and are less likely to be cited by AI\n- Check internal linking: are key content pages linked from the homepage or main navigation?\n\n### 1.5 Noindex Management\n- Check for `<meta name=\"robots\" content=\"noindex\">` on pages that SHOULD be indexed\n- Check for `X-Robots-Tag: noindex` HTTP headers\n- Common mistakes: noindex on paginated pages, category pages, or key landing pages\n\n**Category Scoring:**\n| Check | Points |\n|---|---|\n| robots.txt valid and complete | 3 |\n| AI crawlers allowed | 5 |\n| XML sitemap present and valid | 3 |\n| Crawl depth within 3 clicks | 2 |\n| No erroneous noindex directives | 2 |\n\n---\n\n## Category 2: Indexability (12 points)\n\n### 2.1 Canonical Tags\n- Every indexable page must have a `<link rel=\"canonical\" href=\"...\">` tag\n- Canonical must point to itself (self-referencing) for the authoritative version\n- Check for conflicting canonicals (canonical in HTML vs. HTTP header)\n- Check for canonical chains (A canonicals to B, B canonicals to C — should be A to C)\n\n### 2.2 Duplicate Content\n- Check for www vs. non-www (both should resolve, one should redirect)\n- Check for HTTP vs. HTTPS (HTTP should redirect to HTTPS)\n- Check for trailing slash consistency (pick one pattern and redirect the other)\n- Check for parameter-based duplicates (`?sort=price` creating duplicate pages)\n\n### 2.3 Pagination\n- If paginated content exists, check for `rel=\"next\"` / `rel=\"prev\"` (note: Google ignores these as of 2019, but Bing still uses them)\n- Preferred: use `rel=\"canonical\"` on paginated pages pointing to a view-all page or the first page\n- Ensure paginated pages are not noindexed if they contain unique content\n\n### 2.4 Hreflang (international sites)\n- Check for `<link rel=\"alternate\" hreflang=\"xx\">` tags\n- Validate: reciprocal hreflang (if page A points to page B, B must point back to A)\n- Validate: x-default fallback exists\n- Check for language/region code validity (ISO 639-1 / ISO 3166-1)\n\n### 2.5 Index Bloat\n- Estimate number of indexed pages (check sitemap count, use `site:domain.com` estimate)\n- Compare indexed pages to actual valuable content pages\n- Flag if indexed pages significantly exceed content pages (index bloat from thin/duplicate/parameter pages)\n\n**Category Scoring:**\n| Check | Points |\n|---|---|\n| Canonical tags correct on all pages | 3 |\n| No duplicate content issues | 3 |\n| Pagination handled correctly | 2 |\n| Hreflang correct (if applicable) | 2 |\n| No index bloat | 2 |\n\n---\n\n## Category 3: Security (10 points)\n\n### 3.1 HTTPS Enforcement\n- Site must load over HTTPS\n- HTTP must redirect to HTTPS (301 redirect)\n- No mixed content warnings (HTTP resources on HTTPS pages)\n- SSL/TLS certificate must be valid and not expired\n\n### 3.2 Security Headers\nCheck HTTP response headers for:\n\n| Header | Required Value | Purpose |\n|---|---|---|\n| `Strict-Transport-Security` | `max-age=31536000; includeSubDomains` | Forces HTTPS |\n| `Content-Security-Policy` | Appropriate policy | Prevents XSS |\n| `X-Content-Type-Options` | `nosniff` | Prevents MIME sniffing |\n| `X-Frame-Options` | `DENY` or `SAMEORIGIN` | Prevents clickjacking |\n| `Referrer-Policy` | `strict-origin-when-cross-origin` or stricter | Controls referrer data |\n| `Permissions-Policy` | Appropriate restrictions | Controls browser features |\n\n**Category Scoring:**\n| Check | Points |\n|---|---|\n| HTTPS enforced with valid cert | 4 |\n| HSTS header present | 2 |\n| X-Content-Type-Options | 1 |\n| X-Frame-Options | 1 |\n| Referrer-Policy | 1 |\n| Content-Security-Policy | 1 |\n\n---\n\n## Category 4: URL Structure (8 points)\n\n### 4.1 Clean URLs\n- URLs should be human-readable: `/blog/seo-guide` not `/blog?id=12345`\n- No session IDs in URLs\n- Lowercase only (no mixed case)\n- Hyphens for word separation (not underscores)\n- No special characters or encoded spaces\n\n### 4.2 Logical Hierarchy\n- URL path should reflect site architecture: `/category/subcategory/page`\n- Flat where appropriate — avoid unnecessarily deep nesting\n- Consistent pattern across the site\n\n### 4.3 Redirect Chains\n- Check for redirect chains (A redirects to B redirects to C)\n- Maximum 1 hop recommended (A redirects to C directly)\n- Check for redirect loops\n- All redirects should be 301 (permanent), not 302 (temporary), unless intentionally temporary\n\n### 4.4 Parameter Handling\n- URL parameters should not create duplicate indexable pages\n- Use canonical tags or `robots.txt` Disallow for parameter variations\n- Configure parameter handling in Google Search Console and Bing Webmaster Tools\n\n**Category Scoring:**\n| Check | Points |\n|---|---|\n| Clean, readable URLs | 2 |\n| Logical hierarchy | 2 |\n| No redirect chains (max 1 hop) | 2 |\n| Parameter handling configured | 2 |\n\n---\n\n## Category 5: Mobile Optimization (10 points)\n\n### Critical Context\nAs of **July 2024**, Google crawls ALL sites exclusively with mobile Googlebot. There is no desktop crawling. If your site does not work on mobile, it does not work for Google. Period.\n\n### 5.1 Responsive Design\n- Check for `<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">`\n- Content must not require horizontal scrolling on mobile\n- No fixed-width layouts wider than viewport\n\n### 5.2 Tap Targets\n- Interactive elements (buttons, links) must be at least 48x48 CSS pixels\n- Minimum 8px spacing between tap targets\n- Check that navigation is usable on mobile\n\n### 5.3 Font Sizes\n- Base font size should be at least 16px\n- No text requiring zoom to read\n- Sufficient contrast ratio (WCAG AA: 4.5:1 for normal text, 3:1 for large text)\n\n### 5.4 Mobile Content Parity\n- All content visible on desktop must also be visible on mobile\n- No hidden content behind \"read more\" toggles that Googlebot cannot expand (though Google has improved at expanding these as of 2025)\n- Images and media must load on mobile\n\n**Category Scoring:**\n| Check | Points |\n|---|---|\n| Viewport meta tag correct | 3 |\n| Responsive layout (no horizontal scroll) | 3 |\n| Tap targets appropriately sized | 2 |\n| Font sizes legible | 2 |\n\n---\n\n## Category 6: Core Web Vitals (15 points)\n\n### 2026 Metrics and Thresholds\nCore Web Vitals use the **75th percentile** of real user data (field data) as the benchmark. Lab data is useful for debugging but field data determines the ranking signal.\n\n| Metric | Good | Needs Improvement | Poor | Notes |\n|---|---|---|---|---|\n| **LCP** (Largest Contentful Paint) | < 2.5s | 2.5s - 4.0s | > 4.0s | Measures loading — time until largest visible element renders |\n| **INP** (Interaction to Next Paint) | < 200ms | 200ms - 500ms | > 500ms | Replaced FID in March 2024. Measures ALL interactions, not just first |\n| **CLS** (Cumulative Layout Shift) | < 0.1 | 0.1 - 0.25 | > 0.25 | Measures visual stability — unexpected layout movements |\n\n### How to Assess Without CrUX Data\nWhen real user data is unavailable, estimate from page characteristics:\n- **LCP**: Check largest above-fold element. Is it an image (check size/format)? Is it text (check web font loading)? Server response time (TTFB)?\n- **INP**: Check for heavy JavaScript on page. Long tasks (>50ms) block interactivity. Check for third-party scripts.\n- **CLS**: Check for images without explicit width/height. Check for dynamically inserted content above the fold. Check for web fonts causing layout shift (FOUT/FOIT).\n\n### Common LCP Fixes\n1. Optimize hero images: WebP/AVIF format, correct sizing, preload with `<link rel=\"preload\">`\n2. Reduce server response time (TTFB < 800ms)\n3. Eliminate render-blocking CSS/JS\n4. Preconnect to critical third-party origins\n\n### Common INP Fixes\n1. Break up long tasks (>50ms) into smaller chunks using `requestIdleCallback` or `scheduler.yield()`\n2. Reduce third-party JavaScript\n3. Use `content-visibility: auto` for off-screen content\n4. Debounce/throttle event handlers\n\n### Common CLS Fixes\n1. Always include `width` and `height` attributes on images and videos\n2. Reserve space for ads and embeds with CSS `aspect-ratio` or explicit dimensions\n3. Use `font-display: swap` with size-adjusted fallback fonts\n4. Avoid inserting content above existing content after page load\n\n**Category Scoring:**\n| Check | Points |\n|---|---|\n| LCP < 2.5s | 5 |\n| INP < 200ms | 5 |\n| CLS < 0.1 | 5 |\n\n---\n\n## Category 7: Server-Side Rendering (15 points) — CRITICAL FOR GEO\n\n### Why SSR Is Mandatory for AI Visibility\nAI crawlers (GPTBot, PerplexityBot, ClaudeBot, etc.) do **NOT execute JavaScript**. They fetch the raw HTML and parse it. If your content is rendered client-side by React, Vue, Angular, or any other JavaScript framework, AI crawlers see an empty page.\n\nEven Googlebot, which does execute JavaScript, deprioritizes JS-rendered content due to the additional crawl budget required. Google processes JS rendering in a separate \"rendering queue\" that can delay indexing by days or weeks.\n\n### Detection Method\n1. Fetch the page with curl (no JavaScript execution): `curl -s [URL]`\n2. Compare the raw HTML to the rendered DOM (via browser)\n3. If key content (headings, paragraphs, product info, article text) is MISSING from the curl output, the site relies on client-side rendering\n\n### What to Check\n- **Main content text**: Is the article body / product description / page content in the raw HTML?\n- **Headings**: Are H1, H2, H3 tags present in raw HTML?\n- **Navigation**: Is the main navigation server-rendered?\n- **Structured data**: Is JSON-LD in the raw HTML or injected by JavaScript?\n- **Meta tags**: Are title, description, canonical, OG tags in the raw HTML?\n- **Internal links**: Are navigation and content links in the raw HTML? (Critical for crawlability)\n\n### SSR Solutions to Recommend\n| Framework | SSR Solution |\n|---|---|\n| React | Next.js (SSR/SSG), Remix, Gatsby (SSG) |\n| Vue | Nuxt.js (SSR/SSG) |\n| Angular | Angular Universal |\n| Svelte | SvelteKit |\n| Generic | Prerender.io (prerendering service), Rendertron |\n\n### Scoring Detail\n- All key content server-rendered: 15 points\n- Main content server-rendered but some elements JS-only: 10 points\n- Critical content requires JS (product info, article text): 5 points\n- Entire page is client-rendered (empty body in raw HTML): 0 points\n\n**Category Scoring:**\n| Check | Points |\n|---|---|\n| Main content in raw HTML | 8 |\n| Meta tags + structured data in raw HTML | 4 |\n| Internal links in raw HTML | 3 |\n\n---\n\n## Category 8: Page Speed & Server Performance (15 points)\n\n### 8.1 Time to First Byte (TTFB)\n- Target: **< 800ms** (ideally < 200ms)\n- Measure with curl: `curl -o /dev/null -s -w 'TTFB: %{time_starttransfer}s\\n' [URL]`\n- If TTFB > 800ms: check server location, caching, database queries, CDN usage\n\n### 8.2 Resource Optimization\n- Total page weight target: **< 2MB** (critical pages < 1MB)\n- Check for uncompressed resources (gzip/brotli compression should be enabled)\n- Check for unminified CSS and JavaScript\n- Check for unused CSS/JS (can represent 50%+ of downloaded bytes on many sites)\n\n### 8.3 Image Optimization\n- Check image formats: WebP or AVIF preferred over JPEG/PNG\n- Check for oversized images (images larger than display size)\n- Check for lazy loading: images below fold should have `loading=\"lazy\"`\n- Check for explicit dimensions (width/height attributes prevent CLS)\n- Above-fold images should NOT be lazy loaded (harms LCP)\n\n### 8.4 Code Splitting and Lazy Loading\n- JavaScript should be code-split so each page only loads what it needs\n- Check for large JavaScript bundles (> 200KB compressed is a warning, > 500KB is critical)\n- Third-party scripts should load asynchronously (`async` or `defer`)\n- Check for render-blocking resources in `<head>`\n\n### 8.5 Caching\n- Check `Cache-Control` headers on static resources (images, CSS, JS)\n- Static assets should have long cache times: `max-age=31536000` (1 year) with content-hashed filenames\n- HTML pages should have shorter cache or `no-cache` with validation (`ETag` or `Last-Modified`)\n\n### 8.6 CDN Usage\n- Check if static resources are served from a CDN (different domain or CDN-specific headers)\n- For global audience, CDN is critical for consistent performance\n- Check for CDN-specific headers: `CF-Ray` (Cloudflare), `X-Cache` (AWS CloudFront), `X-Served-By` (Fastly)\n\n**Category Scoring:**\n| Check | Points |\n|---|---|\n| TTFB < 800ms | 3 |\n| Page weight < 2MB | 2 |\n| Images optimized (format, size, lazy) | 3 |\n| JS bundles reasonable (< 200KB compressed) | 2 |\n| Compression enabled (gzip/brotli) | 2 |\n| Cache headers on static resources | 2 |\n| CDN in use | 1 |\n\n---\n\n## Category 9: Agent-Readiness Signals (non-scoring)\n\nThese checks surface emerging AI agent compatibility signals. None contribute to the numeric score — they produce a pass or a recommendation. The underlying standards are either IETF drafts or early-adoption features; penalizing absence would be unfair.\n\n### 9.1 RFC 8288 Link Headers (Service Discovery)\n\nRFC 8288 (Web Linking) defines the HTTP `Link:` response header. Servers can use it to advertise related resources — API catalog, service docs, MCP server card — in a machine-readable way, without HTML parsing.\n\n**How to check:** Capture all `Link:` response headers from the standard homepage fetch (no extra request).\n\n**What to look for:**\n- Parse `<url>; rel=\"relation-type\"` pairs.\n- High-value rel types: `api-catalog` (RFC 9609), `describedby`, `service-doc`, `mcp-server-card`.\n\n**When to surface a recommendation:** Only for API-first sites (API docs linked in nav, `/api/` or `/developers/` paths, swagger/OpenAPI in sitemap). Omit this section entirely for standard business sites — absence is expected and not noteworthy.\n\n| State | Treatment |\n|---|---|\n| `Link:` headers present, known rel types | Informational — document what was found |\n| `Link:` headers present, unknown rel types | Informational — note and explain |\n| Absent, API-first site | Recommendation — explain and suggest implementation |\n| Absent, standard business site | Omit — do not surface |\n\n### 9.2 Markdown Content Negotiation\n\nChecks if the server responds to `Accept: text/markdown` with `Content-Type: text/markdown`. Cloudflare's \"Markdown for Agents\" feature enables this — AI agents receive clean Markdown instead of HTML, eliminating boilerplate stripping and improving content extraction accuracy.\n\n**How to check:** Send a GET to the homepage with `Accept: text/markdown`. This is one additional HTTP request per audit.\n\n**Evaluation:**\n- If response `Content-Type` is `text/markdown` (or `text/markdown; charset=utf-8`): pass — note as a leading-edge capability.\n- Otherwise: forward-looking recommendation, not a failure.\n- If the request errors or returns non-200: skip and note the error. Do not penalize.\n\n| State | Treatment |\n|---|---|\n| `text/markdown` returned | Bonus — note as a leading-edge capability |\n| Standard HTML returned | Forward-looking recommendation |\n| Request errors / non-200 | Skip, note the error, do not penalize |\n\n---\n\n## IndexNow Protocol\n\n### What It Is\nIndexNow is an open protocol that allows websites to notify search engines instantly when content is created, updated, or deleted. Supported by Bing, Yandex, Seznam, and Naver. Google does NOT support IndexNow but monitors the protocol.\n\n### Why It Matters for GEO\nChatGPT uses Bing's index. Bing Copilot uses Bing's index. Faster Bing indexing means faster AI visibility on two major platforms.\n\n### Implementation Check\n1. Check for IndexNow key file: `https://[domain]/.well-known/indexnow-key.txt` or similar\n2. Check if CMS has IndexNow plugin (WordPress: IndexNow plugin; many modern CMS platforms support it natively)\n3. If not implemented, recommend adding it with instructions\n\n---\n\n## Overall Scoring\n\n| Category | Max Points | Weight |\n|---|---|---|\n| Crawlability | 15 | Core foundation |\n| Indexability | 12 | Core foundation |\n| Security | 10 | Trust signal |\n| URL Structure | 8 | Crawl efficiency |\n| Mobile Optimization | 10 | Google requirement |\n| Core Web Vitals | 15 | Ranking signal |\n| Server-Side Rendering | 15 | GEO critical |\n| Page Speed & Server | 15 | Performance |\n| **Total** | **100** | |\n\nNon-scoring checks (Category 9) appear in the output under \"Agent-Readiness Signals\" and do not affect this total.\n\n### Score Interpretation\n- **90-100**: Excellent — technically sound for both traditional SEO and GEO\n- **70-89**: Good — minor issues to address but fundamentally solid\n- **50-69**: Needs Work — significant technical debt impacting visibility\n- **30-49**: Poor — major issues blocking crawling, indexing, or AI visibility\n- **0-29**: Critical — fundamental technical failures requiring immediate attention\n\n---\n\n## Output Format\n\nGenerate **GEO-TECHNICAL-AUDIT.md** with:\n\n```markdown\n# GEO Technical SEO Audit — [Domain]\nDate: [Date]\n\n## Technical Score: XX/100\n\n## Score Breakdown\n| Category | Score | Status |\n|---|---|---|\n| Crawlability | XX/15 | Pass/Warn/Fail |\n| Indexability | XX/12 | Pass/Warn/Fail |\n| Security | XX/10 | Pass/Warn/Fail |\n| URL Structure | XX/8 | Pass/Warn/Fail |\n| Mobile Optimization | XX/10 | Pass/Warn/Fail |\n| Core Web Vitals | XX/15 | Pass/Warn/Fail |\n| Server-Side Rendering | XX/15 | Pass/Warn/Fail |\n| Page Speed & Server | XX/15 | Pass/Warn/Fail |\n\nStatus: Pass = 80%+ of category points, Warn = 50-79%, Fail = <50%\n\n## AI Crawler Access\n| Crawler | User-Agent | Status | Recommendation |\n|---|---|---|---|\n| GPTBot | GPTBot | Allowed/Blocked | [Action] |\n| Googlebot | Googlebot | Allowed/Blocked | [Action] |\n[Continue for all AI crawlers]\n\n## Critical Issues (fix immediately)\n[List with specific page URLs and what is wrong]\n\n## Warnings (fix this month)\n[List with details]\n\n## Recommendations (optimize this quarter)\n[List with details]\n\n## Agent-Readiness Signals (non-scoring)\n\n### RFC 8288 Link Headers (Service Discovery)\n\n**Status:** Present / Absent / Not Applicable\n\n<!-- If present: -->\n| Relation Type | URL | Meaning |\n|---|---|---|\n| api-catalog | /.well-known/api-catalog | Machine-readable index of available APIs |\n| mcp-server-card | /.well-known/mcp.json | MCP server capability declaration |\n\nAI agents and API clients can discover your services without parsing HTML.\n\n<!-- If absent, API-first site only: -->\n**Informational Recommendation:** This site has API/developer-oriented content but no `Link:` headers advertising discoverable services.\n\nExample: `Link: </.well-known/api-catalog>; rel=\"api-catalog\"`\n\nRelevant for: sites with public APIs, OpenAPI docs, or MCP server integrations.\nReference: RFC 8288, RFC 9609.\n\n<!-- If absent, standard business site: omit this section entirely -->\n\n### Markdown Content Negotiation\n\n**Status:** Supported / Not Supported\n**Test:** GET [url] with `Accept: text/markdown`\n**Response Content-Type:** [value]\n\n<!-- If supported: -->\nThis site serves clean Markdown to AI agents on request. AI crawlers that support content negotiation receive formatted text without HTML boilerplate.\n\n<!-- If not supported: -->\n**Forward-Looking Recommendation:** Cloudflare Workers/Pages sites can enable Markdown content negotiation with a one-line configuration change. When an AI agent sends `Accept: text/markdown`, the server responds with clean Markdown instead of HTML.\n\n- Currently Cloudflare-specific\n- Relevant for: sites already on Cloudflare infrastructure\n- Other CDNs and frameworks expected to adopt this pattern as AI agent traffic grows\n\n## Detailed Findings\n[Per-category breakdown with evidence]\n```\n","frontmatter":{"name":"geo-technical","description":"Technical SEO audit with GEO-specific checks — crawlability, indexability, security, performance, SSR, and AI crawler access","version":"1.0.0","author":"geo-seo-claude","tags":["geo","technical-seo","core-web-vitals","ssr","crawlability","security","performance"],"allowed-tools":"Read, Grep, Glob, Bash, WebFetch, Write","allowedTools":["Read,","Grep,","Glob,","Bash,","WebFetch,","Write"]},"allowedTools":["Read,","Grep,","Glob,","Bash,","WebFetch,","Write"],"isInternal":false,"tokens":5679,"sizeBytes":22723},{"name":"SKILL.md","path":"skills/geo-update/SKILL.md","rawUrl":"https://raw.githubusercontent.com/zubair-trabzada/geo-seo-claude/HEAD/skills/geo-update/SKILL.md","title":"geo-update","category":"anthropic-skill","format":"markdown","content":"---\nname: geo-update\ndescription: Pull the latest GEO-SEO skill updates from the upstream repository. Compares installed files against the latest release, shows what changed, and updates all skills, agents, scripts, and schema templates in place.\nallowed-tools:\n  - Bash\n  - Read\n  - Write\n---\n\n# GEO-SEO Update Skill\n\n## Purpose\n\nUpdates the locally installed GEO-SEO skills, agents, scripts, and schema templates to the latest version from the upstream repository. Shows a summary of what changed before and after the update.\n\n---\n\n## Update Workflow\n\n### Step 1: Determine Installed Location\n\nThe GEO-SEO toolkit installs to these locations under `~/.claude/`:\n\n| Component | Install Path |\n|-----------|-------------|\n| Main skill | `~/.claude/skills/geo/` |\n| Sub-skills | `~/.claude/skills/geo-*/` |\n| Agents | `~/.claude/agents/geo-*.md` |\n| Scripts | `~/.claude/skills/geo/scripts/` |\n| Schema templates | `~/.claude/skills/geo/schema/` |\n| Hooks | `~/.claude/skills/geo/hooks/` |\n\nVerify the installation exists by checking for `~/.claude/skills/geo/SKILL.md`. If it does not exist, inform the user that GEO-SEO is not installed and suggest running the installer instead.\n\n### Step 2: Clone Latest from Upstream\n\n```bash\nTEMP_DIR=$(mktemp -d)\ngit clone --depth 1 https://github.com/zubair-trabzada/geo-seo-claude.git \"$TEMP_DIR/repo\"\n```\n\nIf the clone fails, report the error and stop. Do not modify any installed files.\n\n### Step 3: Compare Installed vs Latest\n\nBefore copying files, generate a diff summary so the user knows what will change:\n\n1. For each component directory, compare the installed files against the cloned files using `diff --recursive --brief`.\n2. Categorise changes as:\n   - **New files** — exist in upstream but not locally\n   - **Modified files** — exist in both but differ\n   - **Removed files** — exist locally but not in upstream (these are NOT deleted automatically)\n3. Present the summary to the user.\n\n### Step 4: Apply Updates\n\nCopy files from the cloned repo over the installed locations:\n\n```bash\nCLAUDE_DIR=\"${HOME}/.claude\"\nSOURCE_DIR=\"$TEMP_DIR/repo\"\n\n# Main skill\ncp -r \"$SOURCE_DIR/geo/\"* \"$CLAUDE_DIR/skills/geo/\"\n\n# Sub-skills\nfor skill_dir in \"$SOURCE_DIR/skills\"/*/; do\n    skill_name=$(basename \"$skill_dir\")\n    mkdir -p \"$CLAUDE_DIR/skills/${skill_name}\"\n    cp -r \"$skill_dir\"* \"$CLAUDE_DIR/skills/${skill_name}/\"\ndone\n\n# Agents\nfor agent_file in \"$SOURCE_DIR/agents/\"*.md; do\n    cp \"$agent_file\" \"$CLAUDE_DIR/agents/\"\ndone\n\n# Scripts\nif [ -d \"$SOURCE_DIR/scripts\" ]; then\n    cp -r \"$SOURCE_DIR/scripts/\"* \"$CLAUDE_DIR/skills/geo/scripts/\"\n    chmod +x \"$CLAUDE_DIR/skills/geo/scripts/\"*.py 2>/dev/null || true\nfi\n\n# Schema templates\nif [ -d \"$SOURCE_DIR/schema\" ]; then\n    cp -r \"$SOURCE_DIR/schema/\"* \"$CLAUDE_DIR/skills/geo/schema/\"\nfi\n\n# Hooks\nif [ -d \"$SOURCE_DIR/hooks\" ] && [ \"$(ls -A \"$SOURCE_DIR/hooks\" 2>/dev/null)\" ]; then\n    mkdir -p \"$CLAUDE_DIR/skills/geo/hooks\"\n    cp -r \"$SOURCE_DIR/hooks/\"* \"$CLAUDE_DIR/skills/geo/hooks/\"\n    chmod +x \"$CLAUDE_DIR/skills/geo/hooks/\"* 2>/dev/null || true\nfi\n```\n\n### Step 5: Update Python Dependencies\n\nIf `requirements.txt` exists in the upstream repo and differs from the installed version:\n\n```bash\npython3 -m pip install -r \"$SOURCE_DIR/requirements.txt\" --quiet\n```\n\nReport any failures but do not treat them as fatal.\n\n### Step 6: Clean Up\n\n```bash\nrm -rf \"$TEMP_DIR\"\n```\n\n### Step 7: Report Results\n\nPresent a summary:\n\n```\nGEO-SEO Update Complete\n=======================\nNew files:      [count]\nModified files: [count]\nUnchanged:      [count]\nRemoved upstream (kept locally): [count]\n\nDependencies: [updated / unchanged / failed]\n```\n\nIf there were removed files upstream, list them and suggest the user review whether to delete them manually.\n\n---\n\n## Important Notes\n\n- **Never delete locally installed files** that no longer exist upstream. The user may have customised them. List them and let the user decide.\n- **Never modify `~/.claude/settings.json` or `~/.claude/settings.local.json`** — these are user configuration files, not part of the GEO-SEO toolkit.\n- **If already up to date** (no diff), report that and skip the copy step.\n- **Restart notice:** Remind the user that skill changes take effect in new Claude Code sessions. They should restart their session to use the updated skills.\n","frontmatter":{"name":"geo-update","description":"Pull the latest GEO-SEO skill updates from the upstream repository. Compares installed files against the latest release, shows what changed, and updates all skills, agents, scripts, and schema templates in place.","allowed-tools":["Bash","Read","Write"],"allowedTools":["Bash","Read","Write"]},"allowedTools":["Bash","Read","Write"],"isInternal":false,"tokens":1136,"sizeBytes":4326},{"name":"architecture.md","path":"docs/architecture.md","rawUrl":"https://raw.githubusercontent.com/zubair-trabzada/geo-seo-claude/HEAD/docs/architecture.md","title":"docs - System Architecture & Module Boundaries","category":"project-spec","format":"markdown","content":"# Architecture & Design\n\nThe repository is structured to seamlessly provide GEO+SEO support by using Claude's tool capabilities alongside agents and python utility scripts.\n\n```\ngeo-seo-claude/\n├── geo/                          # Main skill orchestrator\n│   └── SKILL.md                  # Primary skill file with commands & routing\n├── skills/                       # 13 specialized sub-skills\n│   ├── geo-audit/                # Full audit orchestration & scoring\n│   ├── geo-citability/           # AI citation readiness scoring\n│   ├── geo-crawlers/             # AI crawler access analysis\n│   ├── geo-llmstxt/              # llms.txt standard analysis & generation\n│   ├── geo-brand-mentions/       # Brand presence on AI-cited platforms\n│   ├── geo-platform-optimizer/   # Platform-specific AI search optimization\n│   ├── geo-schema/               # Structured data for AI discoverability\n│   ├── geo-technical/            # Technical SEO foundations\n│   ├── geo-content/              # Content quality & E-E-A-T\n│   ├── geo-report/               # Client-ready markdown report generation\n│   ├── geo-report-pdf/           # Professional PDF report with charts\n│   ├── geo-prospect/             # CRM-lite prospect pipeline management\n│   ├── geo-proposal/             # Auto-generate client proposals\n│   └── geo-compare/              # Monthly delta tracking & progress reports\n├── agents/                       # 5 parallel subagents\n│   ├── geo-ai-visibility.md      # GEO audit, citability, crawlers, brands\n│   ├── geo-platform-analysis.md  # Platform-specific optimization\n│   ├── geo-technical.md          # Technical SEO analysis\n│   ├── geo-content.md            # Content & E-E-A-T analysis\n│   └── geo-schema.md             # Schema markup analysis\n├── scripts/                      # Python utilities\n│   ├── fetch_page.py             # Page fetching & parsing\n│   ├── citability_scorer.py      # AI citability scoring engine\n│   ├── brand_scanner.py          # Brand mention detection\n│   ├── llmstxt_generator.py      # llms.txt validation & generation\n│   └── generate_pdf_report.py    # PDF report generator (ReportLab)\n├── schema/                       # JSON-LD templates\n│   ├── organization.json         # Organization schema (with sameAs)\n│   ├── local-business.json       # LocalBusiness schema\n│   ├── article-author.json       # Article + Person schema (E-E-A-T)\n│   ├── software-saas.json        # SoftwareApplication schema\n│   ├── product-ecommerce.json    # Product schema with offers\n│   └── website-searchaction.json # WebSite + SearchAction schema\n├── install.sh                    # One-command installer\n├── uninstall.sh                  # Uninstaller\n├── requirements.txt              # Python dependencies\n└── README.md                     # Main project view\n```\n\n### Full Audit Flow\n\nWhen you run `/geo audit https://example.com`:\n\n1. **Discovery** — Fetches homepage, detects business type, crawls sitemap\n2. **Parallel Analysis** — Launches 5 subagents simultaneously:\n   - AI Visibility (citability, crawlers, llms.txt, brand mentions)\n   - Platform Analysis (ChatGPT, Perplexity, Google AIO readiness)\n   - Technical SEO (Core Web Vitals, SSR, security, mobile)\n   - Content Quality (E-E-A-T, readability, freshness)\n   - Schema Markup (detection, validation, generation)\n3. **Synthesis** — Aggregates scores, generates composite GEO Score (0-100)\n4. **Report** — Outputs prioritized action plan with quick wins\n\n### Data Storage\n\nThe CRM and reporting skills (`/geo prospect`, `/geo proposal`, `/geo compare`) store runtime data outside the Claude Code directory:\n\n```\n~/.geo-prospects/\n├── prospects.json              # Client/prospect pipeline data\n├── proposals/                  # Generated proposal documents\n│   └── <domain>-proposal-<date>.md\n└── reports/                    # Monthly delta reports\n    └── <domain>-monthly-<YYYY-MM>.md\n```\n\nThis directory is **not removed** by the uninstaller — delete it manually if you no longer need your prospect data.\n","isInternal":false,"tokens":926,"sizeBytes":4359}],"systemPromptSnippet":"<yakaai_skills repo=\"zubair-trabzada/geo-seo-claude\">\n<!-- File: CLAUDE.md (Tokens: ~1556 | Category: claude-rule) -->\n# CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.\n\n## What this is\n\nA **GEO-SEO analysis toolkit** distributed as a suite of Claude Code skills + subagents + Python\nscripts. \"GEO\" = Generative Engine Optimization — optimizing websites for AI search engines\n(ChatGPT, Claude, Perplexity, Gemini, Google AI Overviews) rather than only traditional search.\nPhilosophy: **GEO-first, SEO-supported.**\n\nThis repo is the **source**. Users install it into `~/.claude/` (see [install](#install--uninstall)),\nthen invoke `/geo <command> <url>` inside Claude Code. Audits are run from the user's own working\ndirectory and deliverables land there — never in this repo.\n\nDeep documentation already lives in [`docs/`](docs/) — read it before large changes and keep it in\nsync (per `CONTRIBUTING.md`):\n\n| Topic | File |\n|-------|------|\n| Component architecture & data flow | `docs/architecture.md` |\n| Composite GEO Score weights & formulas | `docs/scoring-methodology.md` |\n| Skills / agents / scripts / schemas map | `docs/skills-and-agents.md` |\n| Every `/geo` subcommand | `docs/commands-reference.md` |\n\n## Repository layout\n\n| Path | Contents |\n|------|----------|\n| `geo/SKILL.md` | Orchestrator — routes `/geo` subcommands, detects business type, fans out and synthesizes the audit |\n| `skills/geo-*/` | 15 sub-skills (one `SKILL.md` each) — the reusable units and single-purpose subcommands |\n| `agents/geo-*.md` | 5 parallel subagents launched during a full audit |\n| `scripts/*.py` | Python analysis scripts (`fetch_page`, `citability_scorer`, `brand_scanner`, `llmstxt_generator`, `crm_dashboard`) |\n| `scripts/webapp/` | Flask + HTMX CRM web UI (`app.py`) |\n| `schema/*.json` | JSON-LD schema templates by business type |\n| `templates/` | `geo-report-style.css` + `geo-report-template.html` for the PDF report |\n| `docs/` | Long-form documentation (keep in sync with code) |\n| `examples/` | Sample audit outputs, proposals, demo CRM data |\n| `tests/` | Test suite (see [Testing](#testing)) |\n| `white-label/` | Agency rebranding config (`brand_config.py`, `brand.example.json`) |\n| `install.sh` / `install-win.sh` / `uninstall.sh` | Installers and uninstaller |\n\n## Architecture (in brief)\n\nThree layers — see `docs/architecture.md` for the full picture:\n\n1. **Orchestrator** (`geo/SKILL.md`) routes subcommands, detects business type\n   (SaaS / Local / E-commerce / Publisher / Agency / Other, which tailors recommendations), and\n   for a full `/geo audit` fans out to subagents then synthesizes a composite **GEO Score (0-100)**.\n2. **5 parallel subagents** (`agents/geo-*.md`) run simultaneously during an audit; each owns a\n   slice (AI visibility, platform analysis, technical, content, schema) and writes a report section.\n3. **15 sub-skills** (`skills/geo-*/`) are the reusable units the subagents invoke and the targets\n   of single-purpose subcommands (`citability`, `crawlers`, `llmstxt`, …), plus the agency layer\n   (`geo-prospect` CRM, `geo-proposal`, `geo-compare`, `geo-report-pdf`, `geo-update`).\n\n**Two kinds of state:** audit deliverables are written to the user's current working directory;\nagency/CRM data persists under `~/.geo-prospects/` (`prospects.json`, `audits/`, `proposals/`,\n`reports/`), which the Python scripts and the Flask webapp read/write directly.\n\n## Install / uninstall\n\n`install.sh` copies `geo/`, `skills/`, `agents/`, `scripts/`, `schema/`, and `templates/` into\n`~/.claude/`, creates a Python venv at `~/.claude/skills/geo/.venv` (using `uv` if available, else\nstdlib `venv` + `pip`), installs `requirements.txt`, and **rewrites the script shebangs to point at\nthat venv**. That is why installed scripts run under `~/.claude/skills/geo/.venv/bin/python3`\n(`.venv/Scripts/python.exe` when `install.sh` is run from Git Bash on Windows) while\nthe scripts in this repo carry a portable `#!/usr/bin/env python3`. `uninstall.sh` reverses it.\n\n## Running the scripts (from the repo)\n\nScripts print **JSON to stdout** so skills/agents can parse them — preserve that contract. Run them\nwith any Python that has `requirements.txt` installed (beautifulsoup4, requests, lxml, playwright,\nPillow, flask, rich, validators):\n\n```bash\npython3 -m venv .venv && . .venv/bin/activate && pip install -r requirements.txt\npython3 -m playwright install chromium   # fetch_page.py uses Playwright for SSR/JS checks\n\npython3 scripts/fetch_page.py <url>\npython3 scripts/citability_scorer.py <url>\npython3 scripts/brand_scanner.py \"<brand name>\"\npython3 scripts/llmstxt_generator.py <url>\npython3 scripts/crm_dashboard.py          # rich CLI over ~/.geo-prospects\npython3 scripts/webapp/app.py             # CRM web UI at http://localhost:5050\n```\n\n## Testing\n\nTests are pytest-style classes (`tests/test_fetch_page_ssr.py`, using `unittest.mock`, no network).\n`unittest discover` does not collect them, so run them with pytest (`pip install pytest`):\n\n```bash\npython3 -m pytest tests/                                        # all tests\npython3 -m pytest tests/test_fetch_page_ssr.py -k ssr_content   # a single test\n```\n\n## Conventions\n\n- **Docs stay in sync:** when changing code or behavior, update the matching file in `docs/`\n  (a `CONTRIBUTING.md` requirement). Match existing structure and tone.\n- **Commit messages:** imperative present tense, first line ≤ 72 chars, reference issues after.\n- **Scripts → JSON stdout.** Keep the machine-readable output contract.\n- Some code and docstrings are in Italian (e.g. `scripts/crm_dashboard.py`) — match the language of\n  the file you edit.\n- Crawl quality gates (from `geo/SKILL.md`): max 50 pages/audit, 30s fetch timeout, 1s delay between\n  requests, max 5 concurrent, always respect robots.txt.\n- Market-context stats and dates in `geo/SKILL.md` / `README.md` are editorial point-in-time content,\n  not code.\n- White-labeling for agencies is driven by `white-label/` — don't hardcode brand strings that belong\n  in `brand.example.json`.\n\n<!-- File: geo/SKILL.md (Tokens: ~2898 | Category: anthropic-skill) -->\n---\nname: geo\ndescription: >\n  GEO-first SEO analysis tool. Optimizes websites for AI-powered search engines\n  (ChatGPT, Claude, Perplexity, Gemini, Google AI Overviews) while maintaining\n  traditional SEO foundations. Performs full GEO audits, citability scoring,\n  AI crawler analysis, llms.txt generation, brand mention scanning, platform-specific\n  optimization, schema markup, technical SEO, content quality (E-E-A-T), and\n  client-ready GEO report generation. Use when user says \"geo\", \"seo\", \"audit\",\n  \"AI search\", \"AI visibility\", \"optimize\", \"citability\", \"llms.txt\", \"schema\",\n  \"brand mentions\", \"GEO report\", or any URL for analysis.\nallowed-tools: Read, Grep, Glob, Bash, WebFetch, Write\n---\n\n# GEO-SEO Analysis Tool — Claude Code Skill (February 2026)\n\n> **Philosophy:** GEO-first, SEO-supported. AI search is eating traditional search.\n> This tool optimizes for where traffic is going, not where it was.\n\n---\n\n## Quick Reference\n\n| Command | What It Does |\n|---------|-------------|\n| `/geo audit <url>` | Full GEO + SEO audit with parallel subagents |\n| `/geo page <url>` | Deep single-page GEO analysis |\n| `/geo citability <url>` | Score content for AI citation readiness |\n| `/geo crawlers <url>` | Check AI crawler access (robots.txt analysis) |\n| `/geo llmstxt <url>` | Analyze or generate llms.txt file |\n| `/geo brands <url>` | Scan brand mentions across AI-cited platforms |\n| `/geo platforms <url>` | Platform-specific optimization (ChatGPT, Perplexity, Google AIO) |\n| `/geo schema <url>` | Detect, validate, and generate structured data |\n| `/geo technical <url>` | Traditional technical SEO audit |\n| `/geo content <url>` | Content quality and E-E-A-T assessment |\n| `/geo report <url>` | Generate client-ready GEO deliverable |\n| `/geo report-pdf <url>` | Generate professional PDF report with charts and scores |\n| `/geo quick <url>` | 60-second GEO visibility snapshot |\n| `/geo prospect <cmd>` | CRM-lite: manage prospects through the sales pipeline |\n| `/geo proposal <domain>` | Auto-generate client proposal from audit data |\n| `/geo compare <domain>` | Monthly delta report: show score improvements to client |\n| `/geo update` | Pull latest GEO skill updates from upstream |\n\n---\n\n## Market Context (Why GEO Matters)\n\n| Metric | Value | Source |\n|--------|-------|--------|\n| GEO services market (2025) | $850M-$886M | Yahoo Finance / Superlines |\n| Projected GEO market (2031) | $7.3B (34% CAGR) | Industry analysts |\n| AI-referred sessions growth | +527% (Jan-May 2025) | SparkToro |\n| AI traffic conversion vs organic | 4.4x higher | Industry data |\n| Google AI Overviews reach | 1.5B users/month, 200+ countries | Google |\n| ChatGPT weekly active users | 900M+ | OpenAI |\n| Perplexity monthly queries | 500M+ | Perplexity |\n| Gartner: search traffic drop by 2028 | -50% | Gartner |\n| Marketers investing in GEO | Only 23% | Industry surveys |\n| Brand mentions vs backlinks for AI | 3x stronger correlation | Ahrefs (Dec 2025) |\n\n---\n\n## Orchestration Logic\n\n### Full Audit (`/geo audit <url>`)\n\n**Phase 1: Discovery (Sequential)**\n1. Fetch homepage HTML (curl or WebFetch)\n2. Detect business type (SaaS, Local, E-commerce, Publisher, Agency, Other)\n3. Extract key pages from sitemap.xml or internal links (up to 50 pages)\n\n**Phase 2: Parallel Analysis (Delegate to Subagents)**\nLaunch these 5 subagents simultaneously:\n\n| Subagent | File | Responsibility |\n|----------|------|---------------|\n| geo-ai-visibility | `agents/geo-ai-visibility.md` | GEO audit, citability, AI crawlers, llms.txt, brand mentions |\n| geo-platform-analysis | `agents/geo-platform-analysis.md` | Platform-specific optimization (ChatGPT, Perplexity, Google AIO) |\n| geo-technical | `agents/geo-technical.md` | Technical SEO, Core Web Vitals, crawlability, indexability |\n| geo-content | `agents/geo-content.md` | Content quality, E-E-A-T, readability, AI content detection |\n| geo-schema | `agents/geo-schema.md` | Schema markup detection, validation, generation |\n\n**Phase 3: Synthesis (Sequential)**\n1. Collect all subagent reports\n2. Calculate composite GEO Score (0-100)\n3. Generate prioritized action plan\n4. Output client-ready report\n\n### Scoring Methodology\n\n| Category | Weight | Measured By |\n|----------|--------|-------------|\n| AI Citability & Visibility | 25% | Passage scoring, answer block quality, AI crawler access |\n| Brand Authority Signals | 20% | Mentions on Reddit, YouTube, Wikipedia, LinkedIn; entity presence |\n| Content Quality & E-E-A-T | 20% | Expertise signals, original data, author credentials |\n| Technical Foundations | 15% | SSR, Core Web Vitals, crawlability, mobile, security |\n| Structured Data | 10% | Schema completeness, JSON-LD validation, rich result eligibility |\n| Platform Optimization | 10% | Platform-specific readiness (Google AIO, ChatGPT, Perplexity) |\n\n---\n\n## Business Type Detection\n\nAnalyze homepage for patterns:\n\n| Type | Signals |\n|------|---------|\n| **SaaS** | Pricing page, \"Sign up\", \"Free trial\", \"/app\", \"/dashboard\", API docs |\n| **Local Service** | Phone number, address, \"Near me\", Google Maps embed, service area |\n| **E-commerce** | Product pages, cart, \"Add to cart\", price elements, product schema |\n| **Publisher** | Blog, articles, bylines, publication dates, article schema |\n| **Agency** | Portfolio, case studies, \"Our services\", client logos, testimonials |\n| **Other** | Default — apply general GEO best practices |\n\nAdjust recommendations based on detected type. Local businesses need LocalBusiness schema and Google Business Profile optimization. SaaS needs SoftwareApplication schema and comparison page strategy. E-commerce needs Product schema and review aggregation.\n\n---\n\n## Sub-Skills (14 Specialized Components)\n\n| # | Skill | Directory | Purpose |\n|---|-------|-----------|---------|\n| 1 | geo-audit | `skills/geo-audit/` | Full audit orchestration and scoring |\n| 2 | geo-citability | `skills/geo-citability/` | Passage-level AI citation readiness |\n| 3 | geo-crawlers | `skills/geo-crawlers/` | AI crawler access and robots.txt |\n| 4 | geo-llmstxt | `skills/geo-llmstxt/` | llms.txt standard analysis and generation |\n| 5 | geo-brand-mentions | `skills/geo-brand-mentions/` | Brand presence on AI-cited platforms |\n| 6 | geo-platform-optimizer | `skills/geo-platform-optimizer/` | Platform-specific AI search optimization |\n| 7 | geo-schema | `skills/geo-schema/` | Structured data for AI discoverability |\n| 8 | geo-technical | `skills/geo-technical/` | Technical SEO foundations |\n| 9 | geo-content | `skills/geo-content/` | Content quality and E-E-A-T |\n| 10 | geo-report | `skills/geo-report/` | Client-ready deliverable generation |\n| 11 | geo-prospect | `skills/geo-prospect/` | CRM-lite prospect and client pipeline management |\n| 12 | geo-proposal | `skills/geo-proposal/` | Auto-generate client proposals from audit data |\n| 13 | geo-compare | `skills/geo-compare/` | Monthly delta tracking and progress reports |\n| 14 | geo-update | `skills/geo-update/` | Pull latest updates from upstream repository |\n\n---\n\n## Subagents (5 Parallel Workers)\n\n| Agent | File | Skills Used |\n|-------|------|-------------|\n| geo-ai-visibility | `agents/geo-ai-visibility.md` | geo-citability, geo-crawlers, geo-llmstxt, geo-brand-mentions |\n| geo-platform-analysis | `agents/geo-platform-analysis.md` | geo-platform-optimizer |\n| geo-technical | `agents/geo-technical.md` | geo-technical |\n| geo-content | `agents/geo-content.md` | geo-content |\n| geo-schema | `agents/geo-schema.md` | geo-schema |\n\n---\n\n## Output Files\n\nAll commands generate structured output:\n\n| Command | Output File |\n|---------|------------|\n| `/geo audit` | `GEO-AUDIT-REPORT.md` |\n| `/geo page` | `GEO-PAGE-ANALYSIS.md` |\n| `/geo citability` | `GEO-CITABILITY-SCORE.md` |\n| `/geo crawlers` | `GEO-CRAWLER-ACCESS.md` |\n| `/geo llmstxt` | `llms.txt` (ready to deploy) |\n| `/geo brands` | `GEO-BRAND-MENTIONS.md` |\n| `/geo platforms` | `GEO-PLATFORM-OPTIMIZATION.md` |\n| `/geo schema` | `GEO-SCHEMA-REPORT.md` + generated JSON-LD |\n| `/geo technical` | `GEO-TECHNICAL-AUDIT.md` |\n| `/geo content` | `GEO-CONTENT-ANALYSIS.md` |\n| `/geo report` | `GEO-CLIENT-REPORT.md` (presentation-ready) |\n| `/geo report-pdf` | `GEO-REPORT.pdf` (professional PDF with charts) |\n| `/geo quick` | Inline summary (no file) |\n| `/geo prospect` | Updates `~/.geo-prospects/prospects.json` |\n| `/geo proposal` | `~/.geo-prospects/proposals/<domain>-proposal-<date>.md` |\n| `/geo compare` | `~/.geo-prospects/reports/<domain>-monthly-<YYYY-MM>.md` |\n\n---\n\n## PDF Report Generation\n\nThe `/geo report-pdf <url>` command converts `GEO-AUDIT-REPORT.md` into a styled, client-ready PDF.\n\n### Requirements\n- **pandoc** — `brew install pandoc`\n- **Google Chrome** — `/Applications/Google Chrome.app/` (standard Mac install)\n\nNo Python dependencies required for PDF generation.\n\n### What the PDF Includes\n- **Cover page** — dark navy gradient, GEO score badge, brand/domain/date/location metadata\n- **Color-coded score tables** — cells with `XX/100` values are automatically colored green/blue/amber/orange/red\n- **Severity-tagged findings** — Critical/High/Medium/Low sections get colored left-border callout blocks\n- **Section page breaks** — major sections break to new pages automatically\n- **Styled code blocks** — JSON schema templates render with dark monospace theme\n\n### Templates\nBundled at `~/.claude/skills/geo/templates/`:\n- `geo-report-style.css` — stylesheet (edit colors, fonts, layout here)\n- `geo-report-template.html` — pandoc HTML template (edit cover fields here)\n\n### Workflow\n1. Run `/geo audit <url>` to produce `GEO-AUDIT-REPORT.md`\n2. Run `/geo report-pdf` — extracts metadata from the report and runs:\n   ```bash\n   pandoc GEO-AUDIT-REPORT.md \\\n     --to html5 --standalone --embed-resources \\\n     --template ~/.claude/skills/geo/templates/geo-report-template.html \\\n     --css ~/.claude/skills/geo/templates/geo-report-style.css \\\n     --metadata brand_name=\"...\" --metadata geo_score=\"...\" \\\n     -o GEO-REPORT.html\n\n   \"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome\" \\\n     --headless=new --disable-gpu --no-sandbox \\\n     --print-to-pdf=\"$(pwd)/GEO-REPORT.pdf\" \\\n     --print-to-pdf-no-header --no-pdf-header-footer \\\n     --virtual-time-budget=5000 \\\n     \"file://$(pwd)/GEO-REPORT.html\"\n   ```\n3. Output: `GEO-REPORT.pdf` in the current directory\n\n---\n\n## Quality Gates\n\n- **Crawl limit:** Max 50 pages per audit (focus on quality over quantity)\n- **Timeout:** 30 seconds per page fetch\n- **Rate limiting:** 1-second delay between requests, max 5 concurrent\n- **Robots.txt:** Always respect, always check\n- **Duplicate detection:** Skip pages with >80% content similarity\n\n---\n\n## Quick Start Examples\n\n```\n# Full GEO audit of a website\n/geo audit https://example.com\n\n# Check if AI bots can see your site\n/geo crawlers https://example.com\n\n# Score a specific page for AI citability\n/geo citability https://example.com/blog/best-article\n\n# Generate an llms.txt file for your site\n/geo llmstxt https://example.com\n\n# Get a 60-second visibility snapshot\n/geo quick https://example.com\n\n# Generate a client-ready report\n/geo report https://example.com\n```\n\n<!-- File: skills/geo-audit/SKILL.md (Tokens: ~2919 | Category: anthropic-skill) -->\n---\nname: geo-audit\ndescription: Full website GEO+SEO audit with parallel subagent delegation. Orchestrates a comprehensive Generative Engine Optimization audit across AI citability, platform analysis, technical infrastructure, content quality, and schema markup. Produces a composite GEO Score (0-100) with prioritized action plan.\nallowed-tools:\n  - Read\n  - Grep\n  - Glob\n  - Bash\n  - WebFetch\n  - Write\n---\n\n# GEO Audit Orchestration Skill\n\n## Purpose\n\nThis skill performs a comprehensive Generative Engine Optimization (GEO) audit of any website. GEO is the practice of optimizing web content so that AI systems (ChatGPT, Claude, Perplexity, Gemini, etc.) can discover, understand, cite, and recommend it. This audit measures how well a site performs across all GEO dimensions and produces an actionable improvement plan.\n\n## Key Insight\n\nTraditional SEO optimizes for search engine rankings. GEO optimizes for AI citation and recommendation. Sites that score high on GEO metrics see 30-115% more visibility in AI-generated responses (Georgia Tech / Princeton / IIT Delhi 2024 study). The two disciplines overlap but have distinct requirements.\n\n---\n\n## Audit Workflow\n\n### Phase 1: Discovery and Reconnaissance\n\n**Step 1: Fetch Homepage and Detect Business Type**\n\n1. Use WebFetch to retrieve the homepage at the provided URL.\n2. Extract the following signals:\n   - Page title, meta description, H1 heading\n   - Navigation menu items (reveals site structure)\n   - Footer content (reveals business info, location, legal pages)\n   - Schema.org markup on homepage (Organization, LocalBusiness, etc.)\n   - Pricing page link (SaaS indicator)\n   - Product listing patterns (E-commerce indicator)\n   - Blog/resource section (Publisher indicator)\n   - Service pages (Agency indicator)\n   - Address/phone/Google Maps embed (Local business indicator)\n\n3. Classify the business type using these patterns:\n\n| Business Type | Detection Signals |\n|---|---|\n| **SaaS** | Pricing page, \"Sign up\" / \"Free trial\" CTAs, app.domain.com subdomain, feature comparison tables, integration pages |\n| **Local Business** | Physical address on homepage, Google Maps embed, \"Near me\" content, LocalBusiness schema, service area pages |\n| **E-commerce** | Product listings, shopping cart, product schema, category pages, price displays, \"Add to cart\" buttons |\n| **Publisher** | Blog-heavy navigation, article schema, author pages, date-based archives, RSS feeds, high content volume |\n| **Agency/Services** | Case studies, portfolio, \"Our Work\" section, team page, client logos, service descriptions |\n| **Hybrid** | Combination of above signals -- classify by dominant pattern |\n\n**Step 2: Crawl Sitemap and Internal Links**\n\n1. Attempt to fetch `/sitemap.xml` and `/sitemap_index.xml`.\n2. If sitemap exists, extract up to 50 unique page URLs prioritized by:\n   - Homepage (always include)\n   - Top-level navigation pages\n   - High-value pages (pricing, about, contact, key service/product pages)\n   - Blog posts (sample 5-10 most recent)\n   - Category/landing pages\n3. If no sitemap exists, crawl internal links from the homepage:\n   - Extract all `<a href>` links pointing to the same domain\n   - Follow up to 2 levels deep\n   - Prioritize pages linked from main navigation\n4. Respect `robots.txt` directives -- do not fetch disallowed paths.\n5. Enforce a maximum of 50 pages and a 30-second timeout per fetch.\n\n**Step 3: Collect Page-Level Data**\n\nFor each page in the crawl set, record:\n- URL, title, meta description, canonical URL\n- H1-H6 heading structure\n- Word count of main content\n- Schema.org types present\n- Internal/external link counts\n- Images with/without alt text\n- Open Graph and Twitter Card meta tags\n- Response status code\n- Whether the page has structured data\n\n---\n\n### Phase 2: Parallel Subagent Delegation\n\nDelegate analysis to 5 specialized subagents. Each subagent operates on the collected page data and produces a category score (0-100) plus findings.\n\n**Subagent 1: AI Visibility Analysis (geo-ai-visibility)**\n- Analyze content blocks for quotability by AI systems (citability scoring)\n- Check AI crawler access via robots.txt and llms.txt presence\n- Scan brand presence across YouTube, Reddit, Wikipedia, LinkedIn\n- Score brand authority signals that AI models use for entity recognition\n\n**Subagent 2: Platform Optimization (geo-platform-analysis)**\n- Assess readiness for Google AI Overviews, ChatGPT, Perplexity, Gemini, Bing Copilot\n- Check platform-specific ranking factors and optimization opportunities\n\n**Subagent 3: Technical GEO Infrastructure (geo-technical)**\n- Analyze robots.txt for AI crawler access\n- Verify meta tags, headers, and technical accessibility for AI systems\n- Check page speed, server-side rendering, and Core Web Vitals\n- Assess security headers and mobile optimization\n\n**Subagent 4: Content E-E-A-T Quality (geo-content)**\n- Evaluate Experience, Expertise, Authoritativeness, Trustworthiness signals\n- Check author bios, credentials, source citations\n- Assess content freshness, depth, and originality\n- Verify \"About\" page quality and team credentials\n\n**Subagent 5: Schema & Structured Data (geo-schema)**\n- Validate all schema.org markup\n- Check for GEO-critical schema types (FAQ, HowTo, Organization, Product, Article)\n- Assess schema completeness and accuracy\n- Identify missing schema opportunities\n\n---\n\n### Phase 3: Score Aggregation and Report Generation\n\n#### Composite GEO Score Calculation\n\nThe overall GEO Score (0-100) is a weighted average of six category scores:\n\n| Category | Weight | What It Measures |\n|---|---|---|\n| **AI Citability** | 25% | How quotable/extractable content is for AI systems |\n| **Brand Authority** | 20% | Third-party mentions, entity recognition signals |\n| **Content E-E-A-T** | 20% | Experience, Expertise, Authoritativeness, Trustworthiness |\n| **Technical GEO** | 15% | AI crawler access, llms.txt, rendering, speed |\n| **Schema & Structured Data** | 10% | Schema.org markup quality and completeness |\n| **Platform Optimization** | 10% | Presence on platforms AI models train on and cite |\n\n**Formula:**\n```\nGEO_Score = (Citability * 0.25) + (Brand * 0.20) + (EEAT * 0.20) + (Technical * 0.15) + (Schema * 0.10) + (Platform * 0.10)\n```\n\n#### Score Interpretation\n\n| Score Range | Rating | Interpretation |\n|---|---|---|\n| 90-100 | Excellent | Top-tier GEO optimization; site is highly likely to be cited by AI |\n| 75-89 | Good | Strong GEO foundation with room for improvement |\n| 60-74 | Fair | Moderate GEO presence; significant optimization opportunities exist |\n| 40-59 | Poor | Weak GEO signals; AI systems may struggle to cite or recommend |\n| 0-39 | Critical | Minimal GEO optimization; site is largely invisible to AI systems |\n\n---\n\n## Issue Severity Classification\n\nEvery issue found during the audit is classified by severity:\n\n### Critical (Fix Immediately)\n- All AI crawlers blocked in robots.txt\n- No indexable content (JavaScript-rendered only with no SSR)\n- Domain-level noindex directive\n- Site returns 5xx errors on key pages\n- Complete absence of any structured data\n- Brand not recognized as an entity by any AI system\n\n### High (Fix Within 1 Week)\n- Key AI crawlers (GPTBot, ClaudeBot, PerplexityBot) blocked\n- No llms.txt file present\n- Zero question-answering content blocks on key pages\n- Missing Organization or LocalBusiness schema\n- No author attribution on content pages\n- All content behind login/paywall with no preview\n\n### Medium (Fix Within 1 Month)\n- Partial AI crawler blocking (some allowed, some blocked)\n- llms.txt exists but is incomplete or malformed\n- Content blocks average under 50 citability score\n- Missing FAQ schema on pages with FAQ content\n- Thin author bios without credentials\n- No Wikipedia or Reddit brand presence\n\n### Low (Optimize When Possible)\n- Minor schema validation errors\n- Some images missing alt text\n- Content freshness issues on non-critical pages\n- Missing Open Graph tags\n- Suboptimal heading hierarchy on some pages\n- LinkedIn company page exists but is incomplete\n\n---\n\n## Output Format\n\nGenerate a file called `GEO-AUDIT-REPORT.md` with the following structure:\n\n```markdown\n# GEO Audit Report: [Site Name]\n\n**Audit Date:** [Date]\n**URL:** [URL]\n**Business Type:** [Detected Type]\n**Pages Analyzed:** [Count]\n\n---\n\n## Executive Summary\n\n**Overall GEO Score: [X]/100 ([Rating])**\n\n[2-3 sentence summary of the site's GEO health, biggest strengths, and most critical gaps.]\n\n### Score Breakdown\n\n| Category | Score | Weight | Weighted Score |\n|---|---|---|---|\n| AI Citability | [X]/100 | 25% | [X] |\n| Brand Authority | [X]/100 | 20% | [X] |\n| Content E-E-A-T | [X]/100 | 20% | [X] |\n| Technical GEO | [X]/100 | 15% | [X] |\n| Schema & Structured Data | [X]/100 | 10% | [X] |\n| Platform Optimization | [X]/100 | 10% | [X] |\n| **Overall GEO Score** | | | **[X]/100** |\n\n---\n\n## Critical Issues (Fix Immediately)\n\n[List each critical issue with specific page URLs and recommended fix]\n\n## High Priority Issues\n\n[List each high-priority issue with details]\n\n## Medium Priority Issues\n\n[List each medium-priority issue]\n\n## Low Priority Issues\n\n[List each low-priority issue]\n\n---\n\n## Category Deep Dives\n\n### AI Citability ([X]/100)\n[Detailed findings, examples of good/bad passages, rewrite suggestions]\n\n### Brand Authority ([X]/100)\n[Platform presence map, mention volume, sentiment]\n\n### Content E-E-A-T ([X]/100)\n[Author quality, source citations, freshness, depth]\n\n### Technical GEO ([X]/100)\n[Crawler access, llms.txt, rendering, headers]\n\n### Schema & Structured Data ([X]/100)\n[Schema types found, validation results, missing opportunities]\n\n### Platform Optimization ([X]/100)\n[Presence on YouTube, Reddit, Wikipedia, etc.]\n\n---\n\n## Quick Wins (Implement This Week)\n\n1. [Specific, actionable quick win with expected impact]\n2. [Another quick win]\n3. [Another quick win]\n4. [Another quick win]\n5. [Another quick win]\n\n## 30-Day Action Plan\n\n### Week 1: [Theme]\n- [ ] Action item 1\n- [ ] Action item 2\n\n### Week 2: [Theme]\n- [ ] Action item 1\n- [ ] Action item 2\n\n### Week 3: [Theme]\n- [ ] Action item 1\n- [ ] Action item 2\n\n### Week 4: [Theme]\n- [ ] Action item 1\n- [ ] Action item 2\n\n---\n\n## Appendix: Pages Analyzed\n\n| URL | Title | GEO Issues |\n|---|---|---|\n| [url] | [title] | [issue count] |\n```\n\n---\n\n## Quality Gates\n\n- **Page Limit:** Never crawl more than 50 pages per audit. Prioritize high-value pages.\n- **Timeout:** 30-second maximum per page fetch. Skip pages that exceed this.\n- **Robots.txt:** Always check and respect robots.txt before crawling. Note any AI-specific directives.\n- **Rate Limiting:** Wait at least 1 second between page fetches to avoid overloading the server.\n- **Error Handling:** Log failed fetches but continue the audit. Report fetch failures in the appendix.\n- **Content Type:** Only analyze HTML pages. Skip PDFs, images, and other binary content.\n- **Deduplication:** Canonicalize URLs before crawling. Skip duplicate content (e.g., HTTP vs HTTPS, www vs non-www, trailing slashes).\n\n---\n\n## Business-Type-Specific Audit Adjustments\n\n### SaaS Sites\n- Extra weight on: Feature comparison tables (high citability), integration pages, documentation quality\n- Check for: API documentation structure, changelog pages, knowledge base organization\n- Key schema: SoftwareApplication, FAQPage, HowTo\n\n### Local Businesses\n- Extra weight on: NAP consistency, Google Business Profile signals, local schema\n- Check for: Service area pages, location-specific content, review markup\n- Key schema: LocalBusiness, GeoCoordinates, OpeningHoursSpecification\n\n### E-commerce Sites\n- Extra weight on: Product descriptions (citability), comparison content, buying guides\n- Check for: Product schema completeness, review aggregation, FAQ sections on product pages\n- Key schema: Product, AggregateRating, Offer, BreadcrumbList\n\n### Publishers\n- Extra weight on: Article quality, author credentials, source citation practices\n- Check for: Article schema, author pages, publication date freshness, original research\n- Key schema: Article, NewsArticle, Person (author), ClaimReview\n\n### Agency/Services\n- Extra weight on: Case studies (citability), expertise demonstration, thought leadership\n- Check for: Portfolio schema, team credentials, industry-specific expertise signals\n- Key schema: Organization, Service, Person (team), Review\n\n<!-- File: skills/geo-brand-mentions/SKILL.md (Tokens: ~5450 | Category: anthropic-skill) -->\n---\nname: geo-brand-mentions\ndescription: Brand mention and authority scanner for AI visibility. Analyzes brand presence across platforms that AI models rely on for entity recognition and citation decisions. Produces a Brand Authority Score (0-100) with platform-specific recommendations.\nallowed-tools:\n  - Read\n  - Grep\n  - Glob\n  - Bash\n  - WebFetch\n  - Write\n---\n\n# Brand Mention Scanner Skill\n\n## Core Insight\n\nBrand mentions correlate approximately 3x more strongly with AI visibility than traditional backlinks. An Ahrefs study published in December 2025, analyzing 75,000 brands across AI search platforms, found that **unlinked brand mentions** -- references to a brand name without a hyperlink -- are a stronger predictor of whether AI systems cite and recommend a brand than Domain Rating or backlink count.\n\nThe critical finding: **the platform where the mention appears matters enormously.** Not all mentions are equal. A mention on YouTube or Reddit carries far more weight for AI citation than a mention on a low-authority blog, because AI training data and retrieval systems disproportionately index high-engagement platforms.\n\nThis inverts a core assumption of traditional SEO. In traditional SEO, a backlink from a high-DR site is the gold standard. In GEO, an unlinked mention on Reddit or a YouTube video description may be more valuable than a dofollow backlink from a DR 70 blog.\n\n---\n\n## Platform Importance Ranking for AI Citations\n\nBased on the Ahrefs December 2025 study and corroborating research from Profound (2025) and Terakeet (2025):\n\n### 1. YouTube Mentions -- Correlation ~0.737 (STRONGEST)\n\n**Why YouTube matters most:**\n- YouTube is the second-largest search engine and the largest video platform globally (2.5B+ monthly users).\n- AI training datasets heavily incorporate YouTube transcripts, descriptions, and metadata.\n- Google's Gemini and AI Overviews directly reference YouTube content.\n- Perplexity and ChatGPT both index and cite YouTube video content.\n- YouTube transcripts are particularly valuable because they contain natural language mentions in conversational context, which aligns with how AI models process and generate text.\n\n**What to check:**\n- **Brand YouTube channel:** Does the brand have an active YouTube channel? How many subscribers? Video count? Upload frequency?\n- **Third-party video mentions:** Are other YouTubers or channels mentioning the brand? In what context (reviews, tutorials, comparisons)?\n- **Video descriptions:** Does the brand name appear in video descriptions of industry-relevant content?\n- **Video transcripts:** Is the brand mentioned in spoken content of relevant videos? (AI models index transcripts)\n- **YouTube search presence:** When searching \"[brand name]\" on YouTube, do results appear? Are they positive?\n- **Comment mentions:** Is the brand mentioned in comments on relevant industry videos?\n\n**Scoring for YouTube (0-100):**\n\n| Score | Criteria |\n|---|---|\n| 90-100 | Active channel with 10K+ subscribers, regular uploads, brand mentioned in 20+ third-party videos, appears in YouTube search results for industry terms |\n| 70-89 | Active channel with 1K+ subscribers, brand mentioned in 10-19 third-party videos, some YouTube search presence |\n| 50-69 | Channel exists with some content, brand mentioned in 5-9 third-party videos, limited YouTube search presence |\n| 30-49 | Channel exists but inactive, brand mentioned in 1-4 third-party videos |\n| 10-29 | No channel or empty channel, brand mentioned in 1-2 videos only |\n| 0-9 | No YouTube presence whatsoever |\n\n---\n\n### 2. Reddit Mentions -- High Correlation\n\n**Why Reddit matters:**\n- Reddit is one of the most heavily indexed platforms in AI training data (confirmed in Google's $60M/year Reddit licensing deal, 2024).\n- AI systems heavily weight Reddit for product recommendations, comparisons, and user sentiment.\n- \"Reddit\" is now appended to an estimated 10-15% of Google searches by users seeking authentic opinions.\n- Perplexity frequently cites Reddit threads as sources.\n- ChatGPT and Claude both reference Reddit discussions when answering product/service questions.\n\n**What to check:**\n- **Subreddit presence:** Is the brand discussed in relevant subreddits? Which ones?\n- **Mention volume:** How many Reddit threads mention the brand? What is the trend (increasing/decreasing)?\n- **Sentiment:** Are mentions mostly positive, negative, or neutral? What are common praise points and complaints?\n- **Official presence:** Does the brand have an official Reddit account? Do they participate in discussions? Have they done AMAs?\n- **Recommendation threads:** Does the brand appear in \"What do you recommend for X?\" threads? Is it the top recommendation or an also-ran?\n- **Subreddit community:** Does the brand have its own subreddit? How active is it?\n\n**Scoring for Reddit (0-100):**\n\n| Score | Criteria |\n|---|---|\n| 90-100 | Frequently recommended in relevant subreddits, predominantly positive sentiment, active official presence, own subreddit with 5K+ members, appears in top recommendations for industry queries |\n| 70-89 | Regularly mentioned in relevant subreddits, mostly positive sentiment, some official presence, appears in multiple recommendation threads |\n| 50-69 | Mentioned in several relevant threads, mixed sentiment, brand name is recognized by community members |\n| 30-49 | Occasional mentions, limited to 1-2 subreddits, no official presence |\n| 10-29 | Rare mentions, brand largely unknown on Reddit |\n| 0-9 | No Reddit presence |\n\n---\n\n### 3. Wikipedia Presence -- High Correlation\n\n**Why Wikipedia matters:**\n- Wikipedia is one of the highest-authority sources in AI training data. All major AI models have been trained on Wikipedia dumps.\n- AI systems use Wikipedia as a primary source for entity recognition -- determining whether a brand is a \"real\" entity worth knowing about.\n- Wikidata (Wikipedia's structured data sibling) provides machine-readable facts that AI models use for knowledge graph construction.\n- Having a Wikipedia page is a strong signal of notability, which correlates with AI systems treating the brand as an authoritative entity.\n\n**What to check:**\n- **Wikipedia page:** Does the brand or company have its own Wikipedia article? Is it marked for deletion or quality issues?\n- **Founder page:** Does the founder/CEO have a Wikipedia page? (Strong authority signal)\n- **Wikipedia citations:** Is the brand's website cited as a reference in any Wikipedia articles?\n- **Wikidata entry:** Does the brand have a Wikidata item (Q-number)? How complete is it?\n- **Wikipedia mentions:** Is the brand mentioned in other Wikipedia articles (industry articles, competitor pages, category pages)?\n- **Article quality:** If a Wikipedia page exists, is it a stub, start-class, or higher quality?\n\n**Scoring for Wikipedia (0-100):**\n\n| Score | Criteria |\n|---|---|\n| 90-100 | Detailed Wikipedia article (B-class or higher), Wikidata entry with complete properties, brand cited as reference in multiple articles, founder has Wikipedia page |\n| 70-89 | Wikipedia article exists (start-class or higher), Wikidata entry exists, brand mentioned in 2+ other Wikipedia articles |\n| 50-69 | Wikipedia article exists (stub or start), basic Wikidata entry, limited mentions in other articles |\n| 30-49 | No Wikipedia article but brand is mentioned in other articles or cited as reference; Wikidata entry may exist |\n| 10-29 | Brand mentioned in 1-2 Wikipedia articles as a passing reference only |\n| 0-9 | No Wikipedia or Wikidata presence of any kind |\n\n---\n\n### 4. LinkedIn Presence -- Moderate Correlation\n\n**Why LinkedIn matters:**\n- LinkedIn content is increasingly indexed by AI systems for professional and B2B context.\n- Company LinkedIn pages and employee thought leadership posts build brand entity signals.\n- AI models reference LinkedIn for company information, team credentials, and professional authority.\n- LinkedIn articles and posts are indexed by search engines and AI crawlers.\n\n**What to check:**\n- **Company page:** Does the brand have a LinkedIn company page? Follower count? Post frequency?\n- **Employee thought leadership:** Are employees (especially leadership) posting thought leadership content that mentions the brand?\n- **Company mentions:** Is the brand mentioned in LinkedIn posts by non-employees? Industry analysts? Customers?\n- **LinkedIn articles:** Are there long-form LinkedIn articles about or mentioning the brand?\n- **Employee profiles:** Do employees list the company with detailed descriptions? Do they have strong professional profiles?\n- **Engagement metrics:** What is the typical engagement (likes, comments, shares) on company posts?\n\n**Scoring for LinkedIn (0-100):**\n\n| Score | Criteria |\n|---|---|\n| 90-100 | Active company page with 10K+ followers, leadership regularly posts thought leadership, brand frequently mentioned by industry professionals, strong employee profiles |\n| 70-89 | Active company page with 5K+ followers, some employee thought leadership, occasional third-party mentions |\n| 50-69 | Company page exists with 1K+ followers, irregular posting, limited third-party mentions |\n| 30-49 | Company page exists but is sparse or inactive, few followers, no third-party mentions |\n| 10-29 | Basic company page with minimal information |\n| 0-9 | No LinkedIn company page |\n\n---\n\n### 5. Other Platform Presence -- Supplementary\n\nThese platforms have lower but still meaningful correlation with AI visibility:\n\n#### Quora\n- **Relevance:** Quora answers are frequently included in AI training data and cited by Perplexity.\n- **What to check:** Is the brand mentioned in Quora answers to industry-relevant questions? Does the brand have an official Quora presence?\n- **Signal strength:** Moderate for B2C, lower for B2B.\n\n#### Stack Overflow / Stack Exchange\n- **Relevance:** Critical for developer-facing brands (SaaS, dev tools, APIs).\n- **What to check:** Is the brand's product discussed in Stack Overflow questions/answers? Does the brand have a tag? Do they have an official account answering questions?\n- **Signal strength:** High for technical products, irrelevant for most B2C.\n\n#### GitHub\n- **Relevance:** Critical for open-source and developer-focused brands.\n- **What to check:** Does the brand have a GitHub organization? Stars on repositories? Mentions in other repos' documentation or discussions?\n- **Signal strength:** High for dev tools and open-source, low for non-technical brands.\n\n#### Industry Forums and Communities\n- **Relevance:** Niche authority signals that AI models pick up from domain-specific training data.\n- **What to check:** Is the brand discussed in industry-specific forums (e.g., Hacker News for tech, ProductHunt for startups, industry-specific Slack communities)?\n- **Signal strength:** Moderate, but valuable for establishing niche authority.\n\n#### News and Press\n- **Relevance:** News mentions build entity authority and recency signals.\n- **What to check:** Has the brand been covered by major news outlets or industry publications? How recently? What was the context?\n- **Signal strength:** Moderate. Recency matters -- a mention in the last 6 months is far more valuable than one from 3 years ago.\n\n#### Podcasts\n- **Relevance:** Growing AI training data source. Transcripts are increasingly indexed.\n- **What to check:** Has the brand or its leadership appeared on podcasts? Are podcast transcripts mentioning the brand indexed by search engines?\n- **Signal strength:** Moderate and growing.\n\n---\n\n## Composite Brand Authority Score\n\n### Scoring Formula\n\n| Platform | Weight | Rationale |\n|---|---|---|\n| YouTube Presence | 25% | Strongest correlation with AI citation (0.737) |\n| Reddit Presence | 25% | Second strongest correlation; critical for product recommendations |\n| Wikipedia / Wikidata | 20% | Entity recognition foundation; AI training data cornerstone |\n| LinkedIn Authority | 15% | Professional authority signals; B2B relevance |\n| Other Platforms | 15% | Supplementary signals from Quora, GitHub, news, forums, podcasts |\n\n**Formula:**\n```\nBrand_Authority_Score = (YouTube * 0.25) + (Reddit * 0.25) + (Wikipedia * 0.20) + (LinkedIn * 0.15) + (Other * 0.15)\n```\n\n### Score Interpretation\n\n| Score Range | Rating | Interpretation |\n|---|---|---|\n| 85-100 | Dominant | Brand is a well-recognized entity across AI platforms. Highly likely to be cited and recommended by AI systems. |\n| 70-84 | Strong | Brand has solid cross-platform presence. AI systems likely recognize and cite it for relevant queries. |\n| 50-69 | Moderate | Brand has presence on some platforms but gaps exist. AI citation is inconsistent. |\n| 30-49 | Weak | Brand has limited platform presence. AI systems may not recognize it as a distinct entity. |\n| 0-29 | Minimal | Brand has negligible platform presence. AI systems are unlikely to cite or recommend it. |\n\n---\n\n## Analysis Procedure\n\n### Step 1: Identify Brand Information\n\nGather the following from the user or from the website:\n- **Brand name** (exact spelling, including any official variants)\n- **Founder/CEO name(s)**\n- **Domain URL**\n- **Industry/category**\n- **Key products or services** (top 3)\n- **Key competitors** (for comparison context)\n\n### Step 2: Platform Scanning\n\nFor each platform, use WebFetch to search and assess presence:\n\n**YouTube Check:**\n1. Search: `[brand name] site:youtube.com`\n2. Check: `youtube.com/@[brand-name]` or `youtube.com/c/[brand-name]` for official channel\n3. Search: `\"[brand name]\" site:youtube.com` (exact match for mentions in descriptions)\n4. Note: Channel subscriber count, video count, latest upload date, third-party mention count\n\n**Reddit Check:**\n1. Search: `[brand name] site:reddit.com`\n2. Search: `\"[brand name]\" site:reddit.com` (exact match)\n3. Check: `reddit.com/r/[brand-name]` for official subreddit\n4. Check: `reddit.com/user/[brand-name]` for official account\n5. Note: Thread count, dominant subreddits, sentiment (positive/negative/neutral), recommendation frequency\n\n**Wikipedia Check (IMPORTANT — use BOTH methods to avoid false negatives):**\n\n**Method 1 — Python API check (MOST RELIABLE, do this FIRST):**\n```bash\npython3 -c \"\nimport requests, json\nfrom urllib.parse import quote_plus\nbrand = '[Brand_Name]'\n# Check Wikipedia API directly\napi_url = f'https://en.wikipedia.org/w/api.php?action=query&list=search&srsearch={quote_plus(brand)}&format=json'\nr = requests.get(api_url, headers={'User-Agent': 'GEO-Audit/1.0'}, timeout=15)\ndata = r.json()\nresults = data.get('query', {}).get('search', [])\nif results and brand.lower() in results[0].get('title', '').lower():\n    print(f'WIKIPEDIA PAGE EXISTS: {results[0][\\\"title\\\"]}')\n    print(f'URL: https://en.wikipedia.org/wiki/{results[0][\\\"title\\\"].replace(\\\" \\\", \\\"_\\\")}')\nelse:\n    print('No direct Wikipedia page found')\n# Check Wikidata\nwd_url = f'https://www.wikidata.org/w/api.php?action=wbsearchentities&search={quote_plus(brand)}&language=en&format=json'\nr2 = requests.get(wd_url, headers={'User-Agent': 'GEO-Audit/1.0'}, timeout=15)\nwd = r2.json()\nentities = wd.get('search', [])\nif entities:\n    print(f'WIKIDATA ENTRY: {entities[0].get(\\\"id\\\", \\\"\\\")} — {entities[0].get(\\\"description\\\", \\\"\\\")}')\n\"\n```\n\n**Method 2 — Direct URL check (backup verification):**\n1. WebFetch: `https://en.wikipedia.org/wiki/[Brand_Name]` — check if the page loads (not a redirect to search)\n2. WebFetch: `https://en.wikipedia.org/wiki/[Founder_Name]` for founder article\n\n**Method 3 — Search (least reliable, use only for supplemental info):**\n1. Search: `[brand name] site:wikipedia.org`\n2. Search: `[brand name] site:wikidata.org`\n\n**CRITICAL:** Web search alone is NOT reliable for determining Wikipedia presence. ALWAYS run the Python API check first. If the API says a page exists, it exists — do not override this with a search result that fails to find it.\n\n5. Note: Article existence, quality, edit history, Wikidata completeness\n\n**LinkedIn Check:**\n1. Search: `[brand name] site:linkedin.com`\n2. Check: `linkedin.com/company/[brand-name]` for company page\n3. Note: Follower count, post frequency, employee count listed, engagement levels\n\n**Other Platforms:**\n1. Search: `[brand name] site:quora.com`\n2. Search: `[brand name] site:stackoverflow.com` (if technical brand)\n3. Search: `[brand name] site:github.com` (if technical brand)\n4. Search: `[brand name] site:news.ycombinator.com` (Hacker News)\n5. Search: `\"[brand name]\"` broadly for news mentions (filter to last 6 months)\n6. Note: Presence/absence and quality of mentions on each platform\n\n### Step 3: Sentiment Assessment\n\nFor Reddit and other discussion platforms, assess sentiment by analyzing the most recent and most prominent mentions:\n\n| Sentiment | Indicators |\n|---|---|\n| **Positive** | Recommendations (\"I love [brand],\" \"We switched to [brand] and...\", \"Highly recommend\"), upvoted mentions, positive comparison against competitors |\n| **Neutral** | Factual mentions (\"We use [brand] for...\", \"[Brand] offers...\"), questions about the brand, balanced comparisons |\n| **Negative** | Complaints (\"Avoid [brand]\", \"[Brand] has terrible support\"), downvoted recommendations, negative comparisons |\n| **Mixed** | Combination of positive and negative. Note the ratio and primary themes. |\n\n### Step 4: Competitive Comparison (Optional)\n\nIf competitors are identified, do a quick scan of their platform presence for context. This helps calibrate the score -- a brand with \"moderate\" Reddit presence in an industry where competitors have zero Reddit presence is relatively strong.\n\n### Step 5: Score Calculation\n\n1. Score each platform (0-100) using the rubrics above.\n2. Apply weights to calculate the composite Brand Authority Score.\n3. Identify the strongest and weakest platforms.\n4. Generate specific, actionable recommendations for the weakest platforms.\n\n---\n\n## Output Format\n\nGenerate a file called `GEO-BRAND-MENTIONS.md`:\n\n```markdown\n# Brand Authority Report: [Brand Name]\n\n**Analysis Date:** [Date]\n**Brand:** [Brand Name]\n**Domain:** [URL]\n**Industry:** [Industry]\n\n---\n\n## Brand Authority Score: [X]/100 ([Rating])\n\n### Platform Breakdown\n\n| Platform | Score | Weight | Weighted | Status |\n|---|---|---|---|---|\n| YouTube | [X]/100 | 25% | [X] | [Active Channel / Mentioned / Absent] |\n| Reddit | [X]/100 | 25% | [X] | [Active / Discussed / Absent] |\n| Wikipedia | [X]/100 | 20% | [X] | [Article / Mentioned / Absent] |\n| LinkedIn | [X]/100 | 15% | [X] | [Active / Basic / Absent] |\n| Other Platforms | [X]/100 | 15% | [X] | [Summary] |\n| **Total** | | | **[X]/100** | |\n\n---\n\n## Platform Detail\n\n### YouTube ([X]/100)\n\n**Official Channel:** [Yes/No] | [URL if exists]\n**Subscribers:** [Count or N/A]\n**Videos:** [Count or N/A]\n**Last Upload:** [Date or N/A]\n**Third-Party Mentions:** [Estimated count]\n**Key Findings:**\n- [Finding 1]\n- [Finding 2]\n\n### Reddit ([X]/100)\n\n**Official Account:** [Yes/No] | [URL if exists]\n**Own Subreddit:** [Yes/No] | [URL and member count if exists]\n**Mention Volume:** [Estimated thread count]\n**Primary Subreddits:** [List of subreddits where brand is discussed]\n**Sentiment:** [Positive/Negative/Neutral/Mixed]\n**Key Findings:**\n- [Finding 1]\n- [Finding 2]\n\n### Wikipedia ([X]/100)\n\n**Company Article:** [Yes/No] | [URL if exists]\n**Founder Article:** [Yes/No] | [URL if exists]\n**Wikidata Entry:** [Yes/No] | [Q-number if exists]\n**Cited in Other Articles:** [Yes/No] | [Which articles]\n**Key Findings:**\n- [Finding 1]\n- [Finding 2]\n\n### LinkedIn ([X]/100)\n\n**Company Page:** [Yes/No] | [URL if exists]\n**Followers:** [Count or N/A]\n**Post Frequency:** [Weekly/Monthly/Rare/Never]\n**Key Findings:**\n- [Finding 1]\n- [Finding 2]\n\n### Other Platforms ([X]/100)\n\n| Platform | Presence | Notes |\n|---|---|---|\n| Quora | [Yes/No] | [Brief note] |\n| Stack Overflow | [Yes/No] | [Brief note] |\n| GitHub | [Yes/No] | [Brief note] |\n| Hacker News | [Yes/No] | [Brief note] |\n| News/Press | [Yes/No] | [Brief note] |\n| Podcasts | [Yes/No] | [Brief note] |\n\n---\n\n## Recommendations\n\n### Immediate Actions (Week 1-2)\n\n1. **[Platform]:** [Specific action to take with expected impact]\n2. **[Platform]:** [Specific action]\n\n### Short-Term Strategy (Month 1-3)\n\n1. **[Platform]:** [Strategy with tactics]\n2. **[Platform]:** [Strategy with tactics]\n\n### Long-Term Authority Building (Month 3-12)\n\n1. **[Platform]:** [Long-term strategy]\n2. **[Platform]:** [Long-term strategy]\n\n---\n\n## Competitive Context\n\n[If competitors were analyzed, show a brief comparison table]\n\n| Brand | YouTube | Reddit | Wikipedia | LinkedIn | Other | Total |\n|---|---|---|---|---|---|---|\n| [Subject Brand] | [X] | [X] | [X] | [X] | [X] | **[X]** |\n| [Competitor 1] | [X] | [X] | [X] | [X] | [X] | **[X]** |\n| [Competitor 2] | [X] | [X] | [X] | [X] | [X] | **[X]** |\n\n## Key Takeaway\n\n[1-2 sentence summary of the brand's AI visibility standing and the single most impactful action to take]\n```\n\n---\n\n## Reference Data\n\n### Correlation Strengths (Ahrefs Dec 2025, 75K Brands)\n\n| Signal | Correlation with AI Citation | Traditional SEO Value |\n|---|---|---|\n| YouTube mentions | ~0.737 | Low (not a ranking factor) |\n| Reddit mentions | High (exact coefficient not published) | Low |\n| Wikipedia presence | High | Moderate (trust signal) |\n| LinkedIn presence | Moderate | Low |\n| Domain Rating | ~0.266 | Very High |\n| Backlink count | ~0.266 | Very High |\n| Organic traffic | Moderate | Very High |\n\n**Key insight:** The signals that matter most for AI visibility (YouTube, Reddit) are almost irrelevant in traditional SEO, and the signals that matter most for traditional SEO (backlinks, DR) are weak predictors of AI visibility. This requires a fundamentally different optimization strategy.\n\n### Platform-Specific Tips for Building Presence\n\n**YouTube Quick Wins:**\n- Create a channel and upload 3-5 explainer videos about your core topics.\n- Ensure your brand name appears in video titles, descriptions, and spoken content.\n- Pursue guest appearances on relevant industry YouTube channels.\n- Create comparison or \"alternatives\" videos (these get cited by AI for comparison queries).\n\n**Reddit Quick Wins:**\n- Identify 3-5 subreddits where your target audience is active.\n- Participate authentically (do not shill -- Reddit communities detect and punish this).\n- Do an AMA if appropriate for your brand.\n- Monitor and respond to mentions of your brand.\n- Create genuinely helpful posts that naturally mention your brand's expertise.\n\n**Wikipedia Strategy:**\n- Hire a Wikipedia-knowledgeable consultant -- do NOT edit your own article (conflict of interest).\n- Build notability through press coverage, academic citations, and industry recognition first.\n- Ensure your Wikidata entry is complete even if you do not have a Wikipedia article.\n- Contribute to industry-relevant articles where your brand can be naturally cited as a source.\n\n**LinkedIn Quick Wins:**\n- Optimize your company page with complete information and regular posting.\n- Encourage leadership to post thought leadership content weekly.\n- Publish LinkedIn articles on topics where your brand has unique expertise.\n- Engage with industry discussions to increase brand visibility in professional contexts.\n\n<!-- File: skills/geo-citability/SKILL.md (Tokens: ~3555 | Category: anthropic-skill) -->\n---\nname: geo-citability\ndescription: AI citability scoring and optimization. Analyzes web page content to determine how likely AI systems (ChatGPT, Claude, Perplexity, Gemini) are to cite or quote passages from the page. Provides a citability score (0-100) with specific rewrite suggestions.\nallowed-tools:\n  - Read\n  - Grep\n  - Glob\n  - Bash\n  - WebFetch\n  - Write\n---\n\n# AI Citability Scoring Skill\n\n## Core Insight\n\nAI language models cite passages that meet specific structural criteria. Research from Princeton, Georgia Tech, and IIT Delhi (2024) found that GEO-optimized content achieves 30-115% higher visibility in AI-generated responses. The key finding: AI systems preferentially extract and cite passages that are **134-167 words long**, **self-contained** (understandable without surrounding context), **fact-rich** (containing specific statistics, dates, or named entities), and **directly answer a question** in the first 1-2 sentences.\n\nThis is fundamentally different from traditional SEO copywriting, which optimizes for keyword density and user engagement metrics. GEO citability optimizes for **extractability** -- the ease with which an AI system can pull a passage from your content and present it as a direct answer.\n\n---\n\n## Citability Scoring Rubric (0-100)\n\n### Category 1: Answer Block Quality (30% of total score)\n\nThis measures whether content contains clear, quotable answer passages that AI systems can extract verbatim.\n\n**Scoring Criteria:**\n\n| Score | Criteria |\n|---|---|\n| **90-100** | Every major section opens with a 1-2 sentence direct answer. Uses \"X is...\" or \"X refers to...\" patterns. First 40-60 words of each section can stand alone as a complete answer. |\n| **70-89** | Most sections have clear answer openings. Some definition patterns present. Answers are identifiable but may need minor context. |\n| **50-69** | Some sections have answer-like openings but many bury the answer in the middle or end of paragraphs. Few explicit definition patterns. |\n| **30-49** | Answers are generally buried in long paragraphs. No consistent definition patterns. Content is narrative-driven rather than answer-driven. |\n| **0-29** | No identifiable answer blocks. Content is entirely narrative, conversational, or fragmented. AI would struggle to extract any quotable passage. |\n\n**What to look for:**\n\n- **Definition patterns:** \"X is [definition].\" / \"X refers to [explanation].\" / \"X means [meaning].\"\n- **Answer-first structure:** The answer appears in the first sentence, followed by supporting detail.\n- **Quantified answers:** \"The average cost of X is $Y\" rather than \"Many factors affect the cost of X.\"\n- **Comparison answers:** \"X differs from Y in three ways: [list]\" rather than \"X and Y are often confused.\"\n\n**High-citability example:**\n```\nContent delivery networks (CDNs) are distributed server systems that cache and serve\nweb content from locations geographically close to end users. A CDN reduces latency\nby 50-70% on average by serving assets from edge servers rather than a single origin\nserver. The three largest CDN providers as of 2025 are Cloudflare (serving approximately\n20% of all websites), Amazon CloudFront, and Akamai Technologies.\n```\nWord count: 58. Self-contained: Yes. Facts: 3 specific data points. Definition pattern: Yes.\n\n**Low-citability example:**\n```\nIf you've ever wondered why some websites load faster than others, the answer might\nsurprise you. There's this amazing technology that has been around for a while now.\nIt's changed the way we think about web performance. Let me explain how it works and\nwhy you should care about it for your business.\n```\nWord count: 52. Self-contained: No (no topic identified). Facts: 0. Definition pattern: No.\n\n---\n\n### Category 2: Passage Self-Containment (25% of total score)\n\nThis measures whether individual passages can be extracted and understood without needing the surrounding content.\n\n**Scoring Criteria:**\n\n| Score | Criteria |\n|---|---|\n| **90-100** | 80%+ of content blocks are fully self-contained. Each passage names its subject explicitly. No reliance on pronouns referencing earlier content. Contains specific facts within the passage. |\n| **70-89** | 60-79% of content blocks are self-contained. Most passages name their subject. Occasional pronoun references that require context. |\n| **50-69** | 40-59% of content blocks are self-contained. Mixed use of explicit subjects and pronouns. Some passages require reading prior sections. |\n| **30-49** | 20-39% of content blocks are self-contained. Heavy reliance on pronouns and contextual references. Most passages need surrounding text. |\n| **0-29** | Under 20% self-contained. Content reads as a continuous narrative where extracting any paragraph loses meaning. |\n\n**Self-containment checklist for each passage:**\n\n1. Does the passage explicitly name the subject (not \"it,\" \"this,\" \"they\")?\n2. Can someone understand the main point reading ONLY this passage?\n3. Does the passage contain at least one specific fact, statistic, or named entity?\n4. Is the passage between 50-200 words (the optimal extraction length)?\n5. Does the passage avoid starting with conjunctions (\"But,\" \"However,\" \"And\") that imply prior context?\n\n---\n\n### Category 3: Structural Readability (20% of total score)\n\nThis measures the structural formatting that helps AI systems parse and segment content.\n\n**Scoring Criteria:**\n\n| Score | Criteria |\n|---|---|\n| **90-100** | Clean H1 > H2 > H3 hierarchy. Question-based headings for informational content. Short paragraphs (2-4 sentences). Tables for comparisons. Ordered lists for processes. Unordered lists for features/options. |\n| **70-89** | Good heading hierarchy with minor skips. Some question-based headings. Mostly short paragraphs. Some use of tables and lists. |\n| **50-69** | Heading hierarchy present but inconsistent. Few question-based headings. Mix of short and long paragraphs. Limited tables/lists. |\n| **30-49** | Minimal heading structure. No question-based headings. Long paragraphs dominate. Rare use of tables/lists. |\n| **0-29** | No heading structure or severely broken hierarchy. Wall-of-text paragraphs. No tables or lists. |\n\n**Structural best practices for AI citability:**\n\n- **Heading hierarchy:** H1 (page title) > H2 (major sections) > H3 (subsections). Never skip levels.\n- **Question-based headings:** \"What is [topic]?\" and \"How does [topic] work?\" are directly matchable to AI queries.\n- **Paragraph length:** 2-4 sentences per paragraph. AI systems parse short paragraphs more reliably.\n- **Tables:** Use for any comparison of 3+ items. AI systems extract table data with high accuracy.\n- **Lists:** Use ordered lists for sequential processes, unordered lists for non-sequential items.\n- **Bold key terms:** Bold the first use of important terms. This aids AI entity recognition.\n\n---\n\n### Category 4: Statistical Density (15% of total score)\n\nThis measures the presence of specific, verifiable data points that AI systems prioritize when selecting citation sources.\n\n**Scoring Criteria:**\n\n| Score | Criteria |\n|---|---|\n| **90-100** | 5+ specific statistics per 500 words. All claims backed by named sources or dates. Uses exact numbers (not \"many\" or \"several\"). Includes percentages, dollar amounts, timeframes, and named studies. |\n| **70-89** | 3-4 statistics per 500 words. Most claims have sources. Mostly specific numbers with occasional vague quantifiers. |\n| **50-69** | 1-2 statistics per 500 words. Some claims sourced. Mix of specific and vague numbers. |\n| **30-49** | Less than 1 statistic per 500 words. Few sourced claims. Predominantly vague quantifiers. |\n| **0-29** | No statistics. No sourced claims. All quantifiers are vague (\"many,\" \"most,\" \"a lot\"). |\n\n**What counts as a statistic:**\n- Specific percentages: \"73% of marketers report...\"\n- Dollar amounts: \"The average cost is $4,500 per month\"\n- Timeframes: \"Implementation takes 6-8 weeks on average\"\n- Named studies: \"According to the 2025 HubSpot State of Marketing Report...\"\n- Specific counts: \"The platform integrates with 340+ tools\"\n- Comparison data: \"40% faster than the industry average\"\n\n**What does NOT count:**\n- \"Many companies use...\" (vague)\n- \"A significant percentage...\" (vague)\n- \"Studies show that...\" (no named source)\n- \"Experts agree...\" (no named experts)\n\n---\n\n### Category 5: Uniqueness & Original Data (10% of total score)\n\nThis measures whether the content provides information that AI systems cannot find elsewhere, making it a necessary citation source.\n\n**Scoring Criteria:**\n\n| Score | Criteria |\n|---|---|\n| **90-100** | Contains first-party research, proprietary data, original surveys, or unique datasets. Presents analysis or insights not found on any other page. Clear methodological descriptions. |\n| **70-89** | Contains some original insights or unique analysis of existing data. Offers a distinct perspective with original examples. |\n| **50-69** | Mostly synthesizes existing information but adds some unique commentary or examples. |\n| **30-49** | Largely derivative content that restates common knowledge with minimal original contribution. |\n| **0-29** | Entirely derivative. All information is available (often verbatim) on higher-authority sources. |\n\n**Signals of unique content:**\n- \"Our analysis of [X] data found...\"\n- \"We surveyed [N] [professionals] and found...\"\n- \"Based on our experience with [N] clients...\"\n- Custom charts, graphs, or data visualizations\n- Case studies with specific named outcomes\n- Original frameworks, methodologies, or taxonomies\n\n---\n\n## Analysis Procedure\n\n### Step 1: Fetch and Parse Page Content\n\n1. Use WebFetch to retrieve the target URL.\n2. Extract the main content area (exclude navigation, footer, sidebar, ads).\n3. Preserve heading structure (H1-H6 tags).\n4. Preserve paragraph boundaries, lists, and tables.\n5. Calculate total word count of main content.\n\n### Step 2: Segment Content into Blocks\n\n1. Split content at each heading (H2 or H3) to create content blocks.\n2. For each block, record:\n   - The heading text\n   - The full text content under that heading\n   - Word count of the block\n   - Number of paragraphs\n   - Number of lists and tables\n   - Number of statistics/data points\n   - Whether the block contains a definition pattern\n   - Whether the first 60 words form a standalone answer\n\n### Step 3: Score Each Block\n\nFor each content block, calculate:\n- Answer Block Quality sub-score (0-100)\n- Self-Containment sub-score (0-100)\n- Structural Readability sub-score (0-100)\n- Statistical Density sub-score (0-100)\n- Uniqueness sub-score (0-100)\n\n**Block Citability Score** = (Answer * 0.30) + (SelfContain * 0.25) + (Structure * 0.20) + (Stats * 0.15) + (Unique * 0.10)\n\n### Step 4: Calculate Page-Level Score\n\n1. Calculate the average of all block scores for the page-level citability score.\n2. Identify the top 3 highest-scoring blocks (highlight as strengths).\n3. Identify the bottom 3 lowest-scoring blocks (flag for rewriting).\n4. Calculate the percentage of blocks scoring above 70 (the \"citability coverage\" metric).\n\n### Step 5: Generate Rewrite Suggestions\n\nFor each block scoring below 60, generate a specific rewrite suggestion:\n1. Identify the primary weakness (buried answer, lack of facts, poor structure, etc.).\n2. Propose a rewritten opening sentence using a definition or answer-first pattern.\n3. Suggest specific statistics or facts that could be added.\n4. Recommend structural improvements (add list, add table, split paragraph).\n\n---\n\n## Output Format\n\nGenerate a file called `GEO-CITABILITY-SCORE.md`:\n\n```markdown\n# AI Citability Analysis: [Page Title]\n\n**URL:** [URL]\n**Analysis Date:** [Date]\n**Overall Citability Score: [X]/100**\n**Citability Coverage:** [X]% of content blocks score above 70\n\n---\n\n## Score Summary\n\n| Category | Score | Weight | Weighted |\n|---|---|---|---|\n| Answer Block Quality | [X]/100 | 30% | [X] |\n| Passage Self-Containment | [X]/100 | 25% | [X] |\n| Structural Readability | [X]/100 | 20% | [X] |\n| Statistical Density | [X]/100 | 15% | [X] |\n| Uniqueness & Original Data | [X]/100 | 10% | [X] |\n| **Overall** | | | **[X]/100** |\n\n---\n\n## Strongest Content Blocks\n\n### 1. \"[Heading]\" -- Score: [X]/100\n> [First 2 sentences of the block]\n\n**Why it works:** [Explanation]\n\n### 2. \"[Heading]\" -- Score: [X]/100\n> [First 2 sentences of the block]\n\n**Why it works:** [Explanation]\n\n---\n\n## Weakest Content Blocks (Rewrite Priority)\n\n### 1. \"[Heading]\" -- Score: [X]/100\n\n**Current opening:**\n> [First 2 sentences as they exist]\n\n**Problem:** [Specific issue -- buried answer, no facts, etc.]\n\n**Suggested rewrite:**\n> [Rewritten opening 2-3 sentences with answer-first pattern and facts]\n\n**Additional improvements:**\n- [Add table comparing X, Y, Z]\n- [Include statistic about ...]\n- [Split long paragraph into 2-3 shorter ones]\n\n---\n\n## Quick Win Reformatting Recommendations\n\n1. **[Specific recommendation]** -- Expected citability lift: +[X] points\n2. **[Specific recommendation]** -- Expected citability lift: +[X] points\n3. **[Specific recommendation]** -- Expected citability lift: +[X] points\n4. **[Specific recommendation]** -- Expected citability lift: +[X] points\n5. **[Specific recommendation]** -- Expected citability lift: +[X] points\n\n---\n\n## Per-Section Scores\n\n| Section Heading | Words | Answer Quality | Self-Contained | Structure | Stats | Unique | Overall |\n|---|---|---|---|---|---|---|---|\n| [H2 heading] | [N] | [X] | [X] | [X] | [X] | [X] | [X] |\n```\n\n---\n\n## Reference Data\n\n### Optimal Passage Characteristics (from GEO Research)\n\n- **Optimal length for AI citation:** 134-167 words (Bortolato 2025 analysis of AI Overview passages)\n- **Definition patterns increase citation rate by:** 2.1x (Georgia Tech 2024)\n- **Adding statistics to passages increases citation by:** 40% (Princeton GEO study 2024)\n- **Adding quotations from authorities increases citation by:** 115% in certain categories (IIT Delhi 2024)\n- **Fluency optimization increases visibility by:** 30% on average across all query types\n- **Content with source citations is cited:** 20-25% more often by Perplexity and ChatGPT search\n\n### AI System Citation Preferences\n\n| AI System | Citation Preference |\n|---|---|\n| **ChatGPT (Search)** | Prefers passages with explicit definitions, named sources, and recent dates. Tends to cite 2-4 sources per response. |\n| **Perplexity** | Heavily favors fact-dense passages with statistics. Cites 4-8 sources per response. Values recency highly. |\n| **Claude** | Prefers well-structured, comprehensive passages. Values nuance and accuracy over brevity. |\n| **Gemini (AI Overviews)** | Prefers concise answer blocks (40-60 words). Values content already ranking in top 10 organic results. |\n| **Copilot (Bing)** | Similar to Gemini. Prefers passages from high-authority domains with clear factual claims. |\n\n<!-- File: skills/geo-compare/SKILL.md (Tokens: ~2807 | Category: anthropic-skill) -->\n---\nname: geo-compare\ndescription: >\n  Monthly delta tracking and progress reporting for GEO clients. Compares two\n  GEO audits (baseline vs. current), calculates score improvements across all\n  categories, tracks action item completion, and generates a \"here's your progress\"\n  client report. Use when user says \"compare\", \"delta\", \"monthly report\", \"progress\",\n  \"confronta\", \"progressi\", \"report mensile\", or when running a monthly client check-in.\nversion: 1.0.0\ntags: [geo, business, delta, monthly, reporting, client, progress]\nallowed-tools: Read, Write, Bash, Glob\n---\n\n# GEO Monthly Delta Report Generator\n\n## Purpose\n\nThe single most powerful retention tool for a GEO agency: show clients **exactly**\nwhat improved since they started working with you. Every point gained on the GEO\nscore is proof of value. This skill generates the \"here's your progress\" report.\n\n---\n\n## Commands\n\n```\n/geo compare <domain>\n/geo compare <baseline-file> <current-file>\n/geo compare electron-srl.com --month march-2026\n```\n\n**Examples:**\n```\n/geo compare electron-srl.com\n/geo compare ~/.geo-prospects/audits/electron-srl.com-2026-01-15.md ~/.geo-prospects/audits/electron-srl.com-2026-03-12.md\n```\n\n---\n\n## Workflow\n\n### Step 1: Find Audit Files\n\nIf only domain is provided:\n1. Look in `~/.geo-prospects/audits/` for files matching `<domain>-*.md`\n2. Sort by date\n3. Use oldest as baseline, newest as current\n4. If only one file exists: use it as baseline, run a fresh quick audit as current\n5. If no files exist: suggest running `/geo prospect audit <domain>` first\n\n### Step 2: Parse Both Audits\n\nExtract from each audit file:\n- Overall GEO Score\n- Per-category scores (6 categories)\n- Per-platform scores (5 platforms)\n- AI crawler status (14 crawlers)\n- Critical issues list\n- Action items list with status\n\n### Step 3: Calculate Deltas\n\nFor each metric:\n- Delta = Current - Baseline\n- Trend = ▲ (improved), ▼ (declined), ── (unchanged)\n- Color coding in report: green (+), red (-), gray (=)\n\n### Step 4: Generate Monthly Report\n\nOutput to `~/.geo-prospects/reports/<domain>-monthly-<date>.md`\n\n---\n\n## Report Template\n\nGenerate the following document:\n\n```markdown\n# GEO Monthly Progress Report\n## [COMPANY NAME] — [MONTH YEAR]\n\n**Reporting period:** [BASELINE DATE] → [CURRENT DATE]\n**Prepared by:** [AGENCY NAME]\n**Report reference:** GEO-MONTHLY-[DOMAIN]-[YYMMDD]\n\n---\n\n## Executive Summary\n\n[2-3 sentences: What improved, what's the trend, what to focus on next month.]\n\nExample: \"Electron Srl's GEO Score improved from 32 to 44 this month (+12 points),\nplacing the site firmly in the 'Below Average' tier and on track to reach 'Moderate'\nby May. The biggest wins were AI crawler access (+3 crawlers now allowed) and schema\nimplementation (+Organization and LocalBusiness schemas live). Next month's focus is\ncontent citability — the highest-weighted remaining gap.\"\n\n---\n\n## GEO Score Progress\n\n```\nOVERALL GEO SCORE\n\n  Baseline   [▓▓▓▓░░░░░░░░░░░░░░░░]  32/100  (Critical)\n  Current    [▓▓▓▓▓▓▓▓░░░░░░░░░░░░]  44/100  (Below Average)\n  Change     ▲ +12 points (+37.5%)\n\n  Target:    65/100 by Month 6 (on track ✓)\n```\n\n---\n\n## Score Breakdown: Before vs. After\n\n| Category | Baseline | Current | Change | Trend |\n|----------|---------|---------|--------|-------|\n| AI Citability & Visibility | [X]/100 | [X]/100 | [+/-X] | [▲/▼/──] |\n| Brand Authority Signals | [X]/100 | [X]/100 | [+/-X] | [▲/▼/──] |\n| Content Quality & E-E-A-T | [X]/100 | [X]/100 | [+/-X] | [▲/▼/──] |\n| Technical Foundations | [X]/100 | [X]/100 | [+/-X] | [▲/▼/──] |\n| Structured Data | [X]/100 | [X]/100 | [+/-X] | [▲/▼/──] |\n| Platform Optimization | [X]/100 | [X]/100 | [+/-X] | [▲/▼/──] |\n| **TOTAL** | **[X]/100** | **[X]/100** | **[+/-X]** | **[▲/▼]** |\n\n---\n\n## Platform Readiness: Before vs. After\n\n| AI Platform | Baseline | Current | Change |\n|-------------|---------|---------|--------|\n| Google AI Overviews | [X]/100 | [X]/100 | [+/-X] |\n| ChatGPT Web Search | [X]/100 | [X]/100 | [+/-X] |\n| Perplexity AI | [X]/100 | [X]/100 | [+/-X] |\n| Google Gemini | [X]/100 | [X]/100 | [+/-X] |\n| Bing Copilot | [X]/100 | [X]/100 | [+/-X] |\n\n---\n\n## AI Crawler Access Changes\n\n| Crawler | Baseline | Current | Change |\n|---------|---------|---------|--------|\n| GPTBot (ChatGPT) | Blocked/Allowed | Blocked/Allowed | ✓ Fixed / No change |\n| ClaudeBot (Anthropic) | Blocked/Allowed | Blocked/Allowed | ✓ Fixed / No change |\n| PerplexityBot | Blocked/Allowed | Blocked/Allowed | ✓ Fixed / No change |\n| Google-Extended (Gemini) | Blocked/Allowed | Blocked/Allowed | ✓ Fixed / No change |\n| Bingbot | Blocked/Allowed | Blocked/Allowed | ✓ Fixed / No change |\n\n[Show only crawlers that changed, or all if few crawlers.]\n\n---\n\n## Action Plan Progress\n\n### Quick Wins — Status Update\n\n| # | Action | Assigned | Status | Impact |\n|---|--------|---------|--------|--------|\n| 1 | Allow all AI crawlers in robots.txt | Client dev | ✅ Done | +3 crawlers |\n| 2 | Add Organization schema to homepage | Client dev | ✅ Done | Schema score +15 |\n| 3 | Create llms.txt | Agency | ✅ Done | AI visibility +8 |\n| 4 | Add author bylines to all articles | Client content | 🔄 In Progress | — |\n| 5 | Fix meta descriptions (47 pages missing) | Client dev | ❌ Not started | — |\n\n**Quick wins completed: [X]/[Y] ([%])**\n\n### Medium-Term — Status Update\n\n| # | Action | Target Month | Status |\n|---|--------|-------------|--------|\n| 1 | Rewrite top 10 pages with Q&A structure | Month 2 | 🔄 3/10 done |\n| 2 | E-E-A-T: Create author pages | Month 2 | ❌ Not started |\n| 3 | Register Bing Webmaster Tools | Month 1 | ✅ Done |\n| 4 | Implement IndexNow | Month 2 | 🔄 In Progress |\n\n### Strategic — Status Update\n\n| # | Action | Target | Status |\n|---|--------|--------|--------|\n| 1 | Wikipedia entity creation | Month 4 | 📋 Planned |\n| 2 | YouTube channel launch | Month 3 | 📋 Planned |\n| 3 | Reddit presence (industry subs) | Month 3 | 📋 Planned |\n\n---\n\n## This Month's Wins\n\n> Use this section to celebrate — clients need to see the value clearly.\n\n✅ **[WIN 1]:** [Specific, tangible result — e.g., \"GPTBot and ClaudeBot are now allowed. ChatGPT can now crawl and cite your content.\"]\n✅ **[WIN 2]:** [e.g., \"Organization schema implemented on homepage. Your brand entity is now machine-readable.\"]\n✅ **[WIN 3]:** [e.g., \"llms.txt created and deployed at electron-srl.com/llms.txt — one of only ~12% of sites in your industry to have this.\"]\n\n---\n\n## New Issues Discovered\n\n> Issues found in current audit that weren't in baseline.\n\n⚠️ **[ISSUE 1]:** [What it is, what it means, how we'll fix it]\n⚠️ **[ISSUE 2]:** [What it is, what it means, how we'll fix it]\n\n---\n\n## Next Month Focus\n\n### Priority Actions for [NEXT MONTH]:\n\n| Priority | Action | Owner | Expected Impact |\n|----------|--------|-------|----------------|\n| 1 | [Highest ROI action] | [Agency/Client] | +[X] GEO points |\n| 2 | [Second priority] | [Agency/Client] | +[X] GEO points |\n| 3 | [Third priority] | [Agency/Client] | +[X] GEO points |\n\n**Target GEO Score next month:** [CURRENT + estimated gain]/100\n\n---\n\n## 6-Month Trajectory\n\n| Month | Date | Score | Delta | Key Achievement |\n|-------|------|-------|-------|----------------|\n| Baseline | [Date] | [Score] | — | Initial audit |\n| Month 1 | [Date] | [Score] | [+X] | Quick wins implemented |\n| Month 2 | [Date] | [Score] | [+X] | *Current month* |\n| Month 3 | [Date] | — | — | Content citability |\n| Month 4 | — | — | — | Brand authority |\n| Month 5 | — | — | — | Strategic initiatives |\n| Month 6 | — | **Target: [X]** | — | Full review |\n\n[Only fill rows that have happened. Show projected rows as \"—\"]\n\n---\n\n## Estimated Business Impact\n\nBased on the [X]-point improvement this month:\n\n- **AI citation likelihood:** Increased by approximately [X]%\n- **Crawlers with access:** [X]/14 → [Y]/14 (better coverage on [platforms])\n- **Estimated monthly AI-referred traffic improvement:** +[X]% (conservative)\n- **Traffic value at current conversion rates:** +€[X]/month in organic value\n\n*Note: Full traffic impact from GEO changes typically takes 4-8 weeks to materialize\nas AI platforms re-index and update their knowledge bases.*\n\n---\n\n*GEO Monthly Report — [COMPANY NAME] — [DATE]*\n*Questions or comments? [CONTACT EMAIL]*\n```\n\n---\n\n## Delta Calculation Logic\n\nWhen parsing two audit files, look for these patterns:\n\n```\nScore markers to extract:\n- \"GEO Score: XX/100\"\n- \"Overall Score: XX\"\n- \"AI Citability: XX/100\"\n- \"Brand Authority: XX/100\"\n- \"Technical: XX/100\"\n- \"Schema: XX/100\"\n- \"Platform: XX/100\"\n- \"Content: XX/100\"\n- \"GPTBot: Allowed/Blocked\"\n- \"ClaudeBot: Allowed/Blocked\"\n```\n\nIf exact scores are not found in audit files, use contextual analysis of the\nwritten findings to estimate approximate scores based on issues described.\n\n---\n\n## Trend Interpretation\n\n| Delta | Trend Symbol | Meaning |\n|-------|-------------|---------|\n| +5 or more | ▲▲ | Strong improvement |\n| +1 to +4 | ▲ | Improvement |\n| 0 | ── | No change |\n| -1 to -4 | ▼ | Slight decline |\n| -5 or more | ▼▼ | Significant decline — needs discussion |\n\nA decline is not necessarily bad — it can mean new issues were discovered in the\nfresh audit that weren't visible before. Frame declines as \"newly discovered opportunities.\"\n\n---\n\n## Output\n\n1. Save report to `~/.geo-prospects/reports/<domain>-monthly-<YYYY-MM>.md`\n2. Print confirmation with key stats:\n   ```\n   ✓ Monthly report generated: ~/.geo-prospects/reports/electron-srl.com-monthly-2026-03.md\n\n   SUMMARY:\n   GEO Score: 32 → 44 (+12 points) ▲\n   Quick wins completed: 3/5 (60%)\n   New issues found: 2 (minor)\n   On track for Month 6 target: YES (65/100)\n   ```\n3. Suggest next action: \"Share with client or run `/geo report-pdf` for a visual version\"\n\n<!-- File: skills/geo-content/SKILL.md (Tokens: ~3774 | Category: anthropic-skill) -->\n---\nname: geo-content\ndescription: Content quality and E-E-A-T assessment for AI citability — evaluate experience, expertise, authoritativeness, trustworthiness, and content structure\nversion: 1.0.0\nauthor: geo-seo-claude\ntags: [geo, content-quality, eeat, citability, ai-content, topical-authority]\nallowed-tools: Read, Grep, Glob, Bash, WebFetch, Write\n---\n\n# GEO Content Quality & E-E-A-T Assessment\n\n## Purpose\n\nAI search platforms do not just find content — they evaluate whether content deserves to be cited. The primary framework for this evaluation is **E-E-A-T** (Experience, Expertise, Authoritativeness, Trustworthiness), which per Google's December 2025 Quality Rater Guidelines update now applies to **ALL competitive queries**, not just YMYL (Your Money Your Life) topics. Content that scores high on E-E-A-T is dramatically more likely to be cited by AI platforms.\n\nThis skill evaluates content through two lenses:\n1. **E-E-A-T signals** — does the content demonstrate real expertise and trust?\n2. **AI citability** — is the content structured so AI platforms can extract and cite specific claims?\n\n## How to Use This Skill\n\n1. Fetch the target page(s) — homepage, key blog posts, service/product pages\n2. Evaluate E-E-A-T across the 4 dimensions (25% each)\n3. Assess content quality metrics (structure, readability, depth)\n4. Check for AI content quality signals\n5. Evaluate topical authority across the site\n6. Score and generate GEO-CONTENT-ANALYSIS.md\n\n---\n\n## E-E-A-T Framework (100 points total)\n\n### Experience — 25 points\nFirst-hand knowledge and direct involvement with the topic. AI platforms increasingly distinguish between content that reports on a topic and content from someone who has DONE it.\n\n**Signals to evaluate:**\n\n| Signal | Points | How to Score |\n|---|---|---|\n| First-person accounts (\"I tested...\", \"We implemented...\") | 5 | 5 if present and specific, 3 if generic, 0 if absent |\n| Original research or data not available elsewhere | 5 | 5 if original data, 3 if references original work, 0 if none |\n| Case studies with specific results | 4 | 4 if detailed with numbers, 2 if general, 0 if none |\n| Screenshots, photos, or evidence of direct use | 3 | 3 if authentic evidence, 1 if stock/generic, 0 if none |\n| Specific examples from personal experience | 4 | 4 if specific and unique, 2 if somewhat specific, 0 if generic |\n| Demonstrations of process (not just outcome) | 4 | 4 if step-by-step from experience, 2 if partial, 0 if none |\n\n**What to flag as weak Experience:**\n- Content that only summarizes what other sources say without adding new perspective\n- Generic advice that could apply to any situation (\"It depends on your needs\")\n- No mention of actual usage, testing, or direct involvement\n- Hedging language that suggests lack of direct knowledge (\"reportedly\", \"supposedly\", \"some say\")\n\n### Expertise — 25 points\nDemonstrated knowledge depth and professional competence in the subject matter.\n\n**Signals to evaluate:**\n\n| Signal | Points | How to Score |\n|---|---|---|\n| Author credentials visible (bio, degrees, certifications) | 5 | 5 if full credentials, 3 if basic bio, 0 if no author |\n| Technical depth appropriate to topic | 5 | 5 if thorough technical treatment, 3 if adequate, 0 if superficial |\n| Methodology explanation (how conclusions were reached) | 4 | 4 if clear methodology, 2 if some explanation, 0 if none |\n| Data-backed claims (statistics, research citations) | 4 | 4 if well-sourced, 2 if some data, 0 if unsupported claims |\n| Industry-specific terminology used correctly | 3 | 3 if accurate specialized language, 1 if basic, 0 if errors |\n| Author page with detailed professional background | 4 | 4 if dedicated author page, 2 if brief bio, 0 if none |\n\n**What to flag as weak Expertise:**\n- Claims without supporting evidence or sources\n- Surface-level coverage of complex topics\n- Misuse of technical terminology\n- No visible author or author without relevant credentials\n- Content that is broad and generic rather than deep and specific\n\n### Authoritativeness — 25 points\nRecognition by others as a credible source on the topic.\n\n**Signals to evaluate:**\n\n| Signal | Points | How to Score |\n|---|---|---|\n| Inbound citations from authoritative sources | 5 | 5 if cited by major sources, 3 if some citations, 0 if none |\n| Author quoted or cited in press/media | 4 | 4 if media mentions, 2 if industry mentions, 0 if none |\n| Industry awards or recognition mentioned | 3 | 3 if relevant awards, 1 if tangential, 0 if none |\n| Speaker credentials (conferences, events) | 3 | 3 if listed, 0 if none |\n| Published in peer-reviewed or respected outlets | 4 | 4 if tier-1 publications, 2 if industry outlets, 0 if none |\n| Comprehensive topic coverage (topical authority) | 3 | 3 if site covers topic thoroughly, 1 if some coverage, 0 if isolated |\n| Brand mentioned on Wikipedia or authoritative references | 3 | 3 if Wikipedia, 2 if other encyclopedic refs, 0 if none |\n\n**What to flag as weak Authoritativeness:**\n- Single-topic site with no depth of coverage\n- No external validation of expertise claims\n- No backlinks from authoritative sources\n- Claims of authority without evidence (self-proclaimed \"expert\")\n\n### Trustworthiness — 25 points\nSignals that the content and its publisher are reliable and transparent.\n\n**Signals to evaluate:**\n\n| Signal | Points | How to Score |\n|---|---|---|\n| Contact information visible (address, phone, email) | 4 | 4 if full contact info, 2 if email only, 0 if none |\n| Privacy policy present and linked | 2 | 2 if present, 0 if absent |\n| Terms of service present | 1 | 1 if present, 0 if absent |\n| HTTPS with valid certificate | 2 | 2 if valid HTTPS, 0 if not |\n| Editorial standards or corrections policy | 3 | 3 if documented, 1 if implicit, 0 if none |\n| Transparent about business model and conflicts | 3 | 3 if clear disclosures, 1 if some, 0 if none |\n| Reviews and testimonials from real customers | 3 | 3 if verified reviews, 1 if testimonials, 0 if none |\n| Accurate claims (no misinformation detected) | 4 | 4 if all claims accurate, 2 if mostly accurate, 0 if errors found |\n| Clear affiliate/sponsorship disclosures | 3 | 3 if properly disclosed, 0 if undisclosed or absent |\n\n**What to flag as weak Trustworthiness:**\n- No contact information or physical address\n- Missing privacy policy or terms\n- Undisclosed affiliate links or sponsored content\n- Claims that are verifiably false or misleading\n- No way to contact the publisher for corrections\n\n---\n\n## Content Quality Metrics\n\n### Word Count Benchmarks\nThese are **floors, not targets**. More words does not mean better content. The benchmark is the minimum length to adequately cover a topic for AI citability.\n\n| Page Type | Minimum Words | Ideal Range | Notes |\n|---|---|---|---|\n| Homepage | 500 | 500-1,500 | Clear value proposition, not a wall of text |\n| Blog post | 1,500 | 1,500-3,000 | Thorough but focused |\n| Pillar content / Ultimate guide | 2,000 | 2,500-5,000 | Comprehensive topic coverage |\n| Product page | 300 | 500-1,500 | Descriptions, specs, use cases |\n| Service page | 500 | 800-2,000 | What, how, why, for whom |\n| About page | 300 | 500-1,000 | Company/person story and credentials |\n| FAQ page | 500 | 1,000-2,500 | Thorough answers, not one-liners |\n\n### Readability Assessment\n- **Target Flesch Reading Ease**: 60-70 (8th-9th grade level)\n- This is NOT a direct ranking factor but affects citability — AI platforms prefer content that is clear and unambiguous\n- Overly academic writing (score < 30) reduces citability for general queries\n- Overly simple writing (score > 80) may lack the depth needed for expertise signals\n\n**How to estimate without a tool:**\n- Average sentence length: 15-20 words is ideal\n- Average paragraph length: 2-4 sentences\n- Presence of jargon: should be defined when first used\n- Passive voice: < 15% of sentences\n\n### Paragraph Structure for AI Parsing\nAI platforms extract content at the paragraph level. Each paragraph should be a self-contained unit of meaning.\n\n**Optimal paragraph structure:**\n- **2-4 sentences** per paragraph (1-sentence paragraphs are weak; 5+ sentences are hard to extract)\n- **One idea per paragraph** — do not mix topics within a paragraph\n- **Lead with the key claim** — first sentence should contain the main point\n- **Support with evidence** — remaining sentences provide data, examples, or context\n- **Quotable standalone** — each paragraph should make sense if extracted in isolation\n\n### Heading Structure\n- **One H1 per page** — the primary topic/title\n- **H2 for major sections** — should represent distinct subtopics\n- **H3 for subsections** — nested under relevant H2\n- **No skipped levels** — do not go from H1 to H3 without an H2\n- **Descriptive headings** — \"How to Optimize for AI Search\" not \"Section 2\"\n- **Question-based headings** where appropriate — these map directly to AI queries\n\n### Internal Linking\n- Every content page should link to 3-5 related pages on the same site\n- Links should use descriptive anchor text (not \"click here\")\n- Create a topic cluster structure: pillar page linked to/from all related subtopic pages\n- Orphan pages (no internal links pointing to them) are rarely cited by AI\n\n---\n\n## AI Content Assessment\n\n### AI-Generated Content Policy\nAI-generated content is **acceptable** per Google's guidance (March 2024 clarification) as long as it demonstrates genuine E-E-A-T signals and has human oversight. The concern is not HOW content is created but WHETHER it provides value.\n\n### Signs of Low-Quality AI Content (flag these)\n\n| Signal | Description |\n|---|---|\n| Generic phrasing | \"In today's fast-paced world...\", \"It's important to note that...\", \"At the end of the day...\" |\n| No original insight | Content that only rephrases widely available information |\n| Lack of first-hand experience | No personal anecdotes, case studies, or specific examples |\n| Perfect but empty structure | Well-formatted headings with shallow content beneath them |\n| No specific examples | Uses abstract explanations without concrete instances |\n| Repetitive conclusions | Each section ends with a variation of the same point |\n| Hedging overload | \"Generally speaking\", \"In most cases\", \"It depends on various factors\" without specifying which factors |\n| Missing human voice | No opinions, preferences, or professional judgment expressed |\n| Filler content | Paragraphs that could be deleted without losing information |\n| No data or sources | Claims presented as facts without attribution or evidence |\n\n### High-Quality Content Signals (regardless of production method)\n\n| Signal | Description |\n|---|---|\n| Original data | Surveys, experiments, benchmarks, proprietary analysis |\n| Specific examples | Named products, companies, dates, numbers |\n| Contrarian or nuanced views | Disagreement with conventional wisdom, backed by reasoning |\n| First-person experience | \"When I tested this...\" or \"Our team found...\" |\n| Updated information | References to recent events, current data |\n| Expert opinion | Clear professional judgment, not just facts |\n| Practical recommendations | Specific, actionable advice, not vague guidance |\n| Trade-offs acknowledged | \"This approach works well for X but not for Y because...\" |\n\n---\n\n## Content Freshness Assessment\n\n### Publication Dates\n- Check for visible `datePublished` and `dateModified` in both the content and structured data\n- Content without dates is treated as less trustworthy by AI platforms\n- Dates should be specific (January 15, 2026) not vague (\"recently\")\n\n### Freshness Scoring\n\n| Criterion | Score |\n|---|---|\n| Updated within 3 months | Excellent — current and relevant |\n| Updated within 6 months | Good — still reasonably current |\n| Updated within 12 months | Acceptable — may need refresh |\n| Updated 12-24 months ago | Warning — review for accuracy |\n| No date or 24+ months old | Critical — AI platforms may deprioritize |\n\n### Evergreen Indicators\nSome content remains relevant regardless of age. Flag content as evergreen if:\n- It covers fundamental concepts that do not change (physics, basic math, legal definitions)\n- It is clearly labeled as a reference/guide for lasting concepts\n- It does not contain time-dependent claims (\"the latest\", \"currently\", \"in 2024\")\n\n---\n\n## Topical Authority Assessment\n\n### What It Is\nTopical authority measures whether a site comprehensively covers a topic rather than touching on it superficially. AI platforms prefer citing sites that are recognized authorities on their topics.\n\n### How to Assess\n1. **Content breadth**: Does the site have multiple pages covering different aspects of its core topic?\n2. **Content depth**: Do individual pages go deep into subtopics?\n3. **Topic clustering**: Are pages organized into logical groups with internal linking?\n4. **Content gaps**: Are there obvious subtopics that the site should cover but does not?\n5. **Competitor comparison**: Do competitors cover subtopics that this site misses?\n\n### Scoring\n\n| Level | Description | Score Impact |\n|---|---|---|\n| Authority | 20+ pages covering topic comprehensively, strong clustering | +10 bonus |\n| Developing | 10-20 pages with some clustering | +5 bonus |\n| Emerging | 5-10 pages on topic, limited clustering | +0 |\n| Thin | < 5 pages, no clustering | -5 penalty |\n\n---\n\n## Overall Scoring (0-100)\n\n### Score Composition\n| Component | Weight | Max Points |\n|---|---|---|\n| Experience | 25% | 25 |\n| Expertise | 25% | 25 |\n| Authoritativeness | 25% | 25 |\n| Trustworthiness | 25% | 25 |\n| **Subtotal** | | **100** |\n| Topical Authority Modifier | | +10 to -5 |\n| **Final Score** | | **Capped at 100** |\n\n### Score Interpretation\n- **85-100**: Exceptional — strong AI citation candidate across platforms\n- **70-84**: Good — solid foundation, specific improvements will increase citability\n- **55-69**: Average — multiple E-E-A-T gaps reducing AI visibility\n- **40-54**: Below Average — significant content quality and trust issues\n- **0-39**: Poor — fundamental content strategy overhaul needed\n\n---\n\n## Output Format\n\nGenerate **GEO-CONTENT-ANALYSIS.md** with:\n\n```markdown\n# GEO Content Quality & E-E-A-T Analysis — [Domain]\nDate: [Date]\n\n## Content Score: XX/100\n\n## E-E-A-T Breakdown\n| Dimension | Score | Key Finding |\n|---|---|---|\n| Experience | XX/25 | [One-line summary] |\n| Expertise | XX/25 | [One-line summary] |\n| Authoritativeness | XX/25 | [One-line summary] |\n| Trustworthiness | XX/25 | [One-line summary] |\n\n## Topical Authority Modifier: [+10 to -5]\n\n## Pages Analyzed\n| Page | Word Count | Readability | Heading Structure | Citability Rating |\n|---|---|---|---|---|\n| [URL] | [Count] | [Score] | [Pass/Warn/Fail] | [High/Medium/Low] |\n\n## E-E-A-T Detailed Findings\n\n### Experience\n[Specific passages and pages with strong/weak experience signals]\n\n### Expertise\n[Author credentials found, technical depth assessment, specific gaps]\n\n### Authoritativeness\n[External validation found, topical authority assessment, gaps]\n\n### Trustworthiness\n[Trust signals present/missing, accuracy concerns if any]\n\n## Content Quality Issues\n[Specific passages flagged with reasons and rewrite suggestions]\n\n## AI Content Concerns\n[Any low-quality AI content patterns detected, with specific examples]\n\n## Freshness Assessment\n| Page | Published | Last Updated | Status |\n|---|---|---|---|\n| [URL] | [Date] | [Date] | [Current/Stale/No Date] |\n\n## Citability Assessment\n### Most Citable Passages\n[Top 5 passages that AI platforms are most likely to cite, with reasons]\n\n### Least Citable Pages\n[Pages with lowest citability, with specific improvement recommendations]\n\n## Improvement Recommendations\n### Quick Wins\n[Specific content changes that can be made immediately]\n\n### Content Gaps\n[Topics the site should cover to strengthen topical authority]\n\n### Author/E-E-A-T Improvements\n[Specific steps to strengthen E-E-A-T signals]\n```\n\n<!-- File: skills/geo-crawlers/SKILL.md (Tokens: ~4677 | Category: anthropic-skill) -->\n---\nname: geo-crawlers\ndescription: AI crawler access analysis. Checks robots.txt, meta tags, and HTTP headers to determine which AI crawlers can access the site. Provides a complete access map and recommendations for maximizing AI visibility while maintaining appropriate control.\nallowed-tools:\n  - Read\n  - Grep\n  - Glob\n  - Bash\n  - WebFetch\n  - Write\n---\n\n# AI Crawler Access Analysis Skill\n\n## Purpose\n\nThis skill analyzes a website's accessibility to AI crawlers -- the bots that AI companies use to discover, index, and train on web content. If AI crawlers are blocked, the site's content cannot appear in AI-generated responses regardless of its quality. Crawler access is the foundational technical requirement for GEO.\n\n## Key Insight\n\nAs of early 2026, many websites inadvertently block AI crawlers through overly aggressive robots.txt rules, inherited from legacy SEO configurations. An Originality.ai 2025 study found that over 35% of the top 1,000 websites block at least one major AI crawler, and 5-10% block all AI crawlers. Blocking AI crawlers is the single fastest way to become invisible in AI-generated search results.\n\n---\n\n## Complete AI Crawler Reference\n\n### Tier 1: Critical for AI Search Visibility (RECOMMEND: ALLOW)\n\nThese crawlers power the AI search products where users actively look for answers. Blocking them directly reduces your visibility in AI-generated responses.\n\n#### GPTBot\n- **Operator:** OpenAI\n- **User-Agent:** `GPTBot`\n- **Full User-Agent String:** `Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; GPTBot/1.2; +https://openai.com/gptbot)`\n- **Purpose:** Fetches content for ChatGPT's web browsing, plugins, and search features. Content accessed by GPTBot may be used to improve OpenAI models.\n- **Impact of Blocking:** Content will NOT appear in ChatGPT Search results or be accessible when users ask ChatGPT to browse the web. This is the highest-impact AI crawler to allow.\n- **Recommendation:** **ALLOW** -- ChatGPT has 300M+ weekly active users as of 2025. Blocking GPTBot removes your content from one of the largest AI search surfaces.\n\n#### OAI-SearchBot\n- **Operator:** OpenAI\n- **User-Agent:** `OAI-SearchBot`\n- **Full User-Agent String:** `Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; OAI-SearchBot/1.0; +https://docs.openai.com/bots/overview)`\n- **Purpose:** Specifically powers ChatGPT's search feature. Unlike GPTBot, content accessed by OAI-SearchBot is NOT used for model training -- only for live search results.\n- **Impact of Blocking:** Content will not appear in ChatGPT's search results even if GPTBot is allowed.\n- **Recommendation:** **ALLOW** -- This is a search-only crawler with no training implications. There is no strategic reason to block it.\n\n#### ChatGPT-User\n- **Operator:** OpenAI\n- **User-Agent:** `ChatGPT-User`\n- **Full User-Agent String:** `Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ChatGPT-User/1.0; +https://openai.com/bot)`\n- **Purpose:** Used when a ChatGPT user explicitly asks the model to visit a specific URL. Acts like a browser agent on behalf of the user.\n- **Impact of Blocking:** ChatGPT cannot visit your pages when users ask it to read or summarize them. This prevents direct user-initiated traffic.\n- **Recommendation:** **ALLOW** -- Blocking this bot prevents users who are actively trying to engage with your content from accessing it through ChatGPT.\n\n#### ClaudeBot\n- **Operator:** Anthropic\n- **User-Agent:** `ClaudeBot`\n- **Full User-Agent String:** `ClaudeBot/1.0; +https://www.anthropic.com/claude-bot`\n- **Purpose:** Fetches web content for Claude's features including web search, citations, and analysis tools.\n- **Impact of Blocking:** Content will not be accessible to Claude for web search or when users ask Claude to analyze specific URLs.\n- **Recommendation:** **ALLOW** -- Claude is a major AI assistant with growing market share. Blocking ClaudeBot reduces your AI search footprint.\n\n#### PerplexityBot\n- **Operator:** Perplexity AI\n- **User-Agent:** `PerplexityBot`\n- **Full User-Agent String:** `Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; PerplexityBot/1.0; +https://perplexity.ai/perplexitybot)`\n- **Purpose:** Powers Perplexity's AI search engine, which provides sourced answers with direct citations and links back to source pages.\n- **Impact of Blocking:** Content will not appear in Perplexity search results. Perplexity is one of the best referral traffic sources among AI search products because it always displays source links.\n- **Recommendation:** **ALLOW** -- Perplexity drives actual referral traffic and always attributes sources. High-value AI crawler for publishers and businesses.\n\n---\n\n### Tier 2: Important for Broader AI Ecosystem (RECOMMEND: ALLOW)\n\nThese crawlers serve large AI platforms or search ecosystems. Allowing them increases your content's reach.\n\n#### Google-Extended\n- **Operator:** Google\n- **User-Agent:** `Google-Extended`\n- **Purpose:** Controls whether Google uses your content for Gemini model training and AI Overviews improvement. **CRITICAL NOTE:** Blocking Google-Extended does NOT affect your Google Search rankings or your appearance in Google Search results. That is controlled by the standard Googlebot.\n- **Impact of Blocking:** Content may not be used for Gemini training or to improve AI Overviews. However, your content can still appear in AI Overviews based on standard search indexing.\n- **Recommendation:** **ALLOW** -- Blocking provides minimal content protection upside while reducing your presence in Google's AI features. Since it does not affect standard search ranking, the only reason to block is philosophical objection to training data usage.\n\n#### GoogleOther\n- **Operator:** Google\n- **User-Agent:** `GoogleOther`\n- **Purpose:** Used by Google for various non-search-ranking purposes including research, one-off crawls, and AI-related data collection.\n- **Impact of Blocking:** Minimal impact on search rankings. May reduce presence in Google's AI research and experimental features.\n- **Recommendation:** **ALLOW** -- Low risk, moderate potential benefit for AI feature inclusion.\n\n#### Applebot-Extended\n- **Operator:** Apple\n- **User-Agent:** `Applebot-Extended`\n- **Purpose:** Used by Apple to train and improve Apple Intelligence features, Siri, and Apple's AI products. Separate from standard Applebot (which powers Siri search and Spotlight Suggestions).\n- **Impact of Blocking:** Content may not be used in Apple Intelligence features. Standard Siri and Spotlight functionality is unaffected (controlled by Applebot).\n- **Recommendation:** **ALLOW** -- Apple Intelligence is integrated into all Apple devices (2B+ active devices). Presence in Apple's AI features has growing strategic value.\n\n#### Amazonbot\n- **Operator:** Amazon\n- **User-Agent:** `Amazonbot`\n- **Full User-Agent String:** `Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/600.2.5 (KHTML, like Gecko) Version/8.0.2 Safari/600.2.5 (compatible; Amazonbot/0.1; +https://developer.amazon.com/support/amazonbot)`\n- **Purpose:** Indexes content for Alexa answers and Amazon's AI features.\n- **Impact of Blocking:** Content will not appear in Alexa voice responses or Amazon's AI-powered search features.\n- **Recommendation:** **ALLOW** -- Relevant for voice search optimization. Lower priority than Tier 1 crawlers but no downside to allowing.\n\n#### FacebookBot\n- **Operator:** Meta\n- **User-Agent:** `FacebookBot`\n- **Purpose:** Used by Meta for AI features across Facebook, Instagram, WhatsApp, and Meta AI assistant.\n- **Impact of Blocking:** Content may not be accessible to Meta AI. Link previews on Facebook/Instagram are handled by a different crawler and are unaffected.\n- **Recommendation:** **ALLOW** -- Meta AI is embedded in apps with 3B+ combined users. Growing importance for AI visibility.\n\n---\n\n### Tier 3: Training-Only Crawlers (ALLOW or BLOCK Based on Strategy)\n\nThese crawlers are primarily used for AI model training rather than live search features. Blocking them does not affect AI search visibility.\n\n#### CCBot\n- **Operator:** Common Crawl (nonprofit)\n- **User-Agent:** `CCBot`\n- **Full User-Agent String:** `CCBot/2.0 (https://commoncrawl.org/faq/)`\n- **Purpose:** Builds the Common Crawl dataset, which is used as training data by many AI companies (Google, Meta, Stability AI, and others).\n- **Impact of Blocking:** Content will not appear in future Common Crawl datasets. Does NOT affect any live AI search product.\n- **Recommendation:** **CONTEXT-DEPENDENT** -- Allow if you want maximum long-term AI training presence. Block if you want to control training data usage. No impact on search visibility.\n\n#### anthropic-ai\n- **Operator:** Anthropic\n- **User-Agent:** `anthropic-ai`\n- **Purpose:** Used by Anthropic for AI safety research and Claude model training. Separate from ClaudeBot (which powers live features).\n- **Impact of Blocking:** Content will not be used for Claude training. Does NOT affect Claude's live search or web browsing features (controlled by ClaudeBot).\n- **Recommendation:** **CONTEXT-DEPENDENT** -- Similar to CCBot. Allow for training presence, block for training data control. No impact on live AI search.\n\n#### Bytespider\n- **Operator:** ByteDance\n- **User-Agent:** `Bytespider`\n- **Purpose:** Used by ByteDance for various AI products including TikTok's AI features and Doubao (their ChatGPT competitor in China).\n- **Impact of Blocking:** Content will not be used for ByteDance AI products. Minimal impact for Western-market businesses.\n- **Recommendation:** **BLOCK** for most Western businesses (aggressive crawling behavior reported, minimal search visibility benefit). **ALLOW** if targeting Chinese/Asian markets.\n\n#### cohere-ai\n- **Operator:** Cohere\n- **User-Agent:** `cohere-ai`\n- **Purpose:** Used by Cohere for model training. Cohere powers enterprise AI solutions and the Coral chat product.\n- **Impact of Blocking:** Content will not be used for Cohere model training. Minimal direct consumer-facing impact.\n- **Recommendation:** **CONTEXT-DEPENDENT** -- Low priority. Allow or block based on general training data stance.\n\n---\n\n## Recommendation Matrix Summary\n\n| Crawler | Tier | Recommendation | Reason |\n|---|---|---|---|\n| GPTBot | 1 | **ALLOW** | Powers ChatGPT Search (300M+ users) |\n| OAI-SearchBot | 1 | **ALLOW** | Search-only, no training use |\n| ChatGPT-User | 1 | **ALLOW** | User-initiated browsing |\n| ClaudeBot | 1 | **ALLOW** | Claude web search and analysis |\n| PerplexityBot | 1 | **ALLOW** | Best referral traffic AI search |\n| Google-Extended | 2 | **ALLOW** | Gemini features; no search rank impact |\n| GoogleOther | 2 | **ALLOW** | Google AI research |\n| Applebot-Extended | 2 | **ALLOW** | Apple Intelligence (2B+ devices) |\n| Amazonbot | 2 | **ALLOW** | Alexa and Amazon AI |\n| FacebookBot | 2 | **ALLOW** | Meta AI (3B+ app users) |\n| CCBot | 3 | Context | Training data only |\n| anthropic-ai | 3 | Context | Training data only |\n| Bytespider | 3 | **BLOCK** | Aggressive crawler, low benefit |\n| cohere-ai | 3 | Context | Training data only |\n\n### Maximum AI Visibility Configuration (robots.txt)\n\nFor sites wanting maximum AI search visibility:\n\n```\n# AI Crawlers - ALLOWED for AI search visibility\nUser-agent: GPTBot\nAllow: /\n\nUser-agent: OAI-SearchBot\nAllow: /\n\nUser-agent: ChatGPT-User\nAllow: /\n\nUser-agent: ClaudeBot\nAllow: /\n\nUser-agent: anthropic-ai\nAllow: /\n\nUser-agent: PerplexityBot\nAllow: /\n\nUser-agent: Google-Extended\nAllow: /\n\nUser-agent: GoogleOther\nAllow: /\n\nUser-agent: Applebot-Extended\nAllow: /\n\nUser-agent: Amazonbot\nAllow: /\n\nUser-agent: FacebookBot\nAllow: /\n\n# AI Crawlers - BLOCKED (aggressive/low value)\nUser-agent: Bytespider\nDisallow: /\n\nUser-agent: CCBot\nDisallow: /\n```\n\n---\n\n## Analysis Procedure\n\n### Step 1: Fetch and Parse robots.txt\n\n1. Use WebFetch to retrieve `[domain]/robots.txt`.\n2. Parse all User-agent directives and their associated Allow/Disallow rules.\n3. For each AI crawler in the reference list above:\n   - Check if there is a specific User-agent block for that crawler\n   - Check if there is a wildcard (`User-agent: *`) block that would apply\n   - Determine effective access: **Allowed**, **Blocked**, or **Not Mentioned** (inherits wildcard rules)\n4. Note any `Crawl-delay` directives that may slow AI crawler access.\n5. Check for `Sitemap` directives (AI crawlers use these for discovery).\n\n### Step 2: Check Meta Robots Tags\n\n1. For a sample of 5-10 key pages, fetch the HTML and check for:\n   - `<meta name=\"robots\" content=\"noindex\">` -- blocks all bots\n   - `<meta name=\"robots\" content=\"nofollow\">` -- prevents link following\n   - `<meta name=\"robots\" content=\"noai\">` -- emerging tag to block AI use\n   - `<meta name=\"robots\" content=\"noimageai\">` -- blocks AI image training\n   - Bot-specific meta tags: `<meta name=\"GPTBot\" content=\"noindex\">`\n2. Record any page-level overrides of the robots.txt directives.\n\n### Step 3: Check HTTP Headers\n\n1. For the same sample pages, check response headers for:\n   - `X-Robots-Tag: noindex` -- HTTP header equivalent of meta noindex\n   - `X-Robots-Tag: noai` -- HTTP header to block AI use\n   - `X-Robots-Tag: noimageai` -- blocks AI image training\n   - Bot-specific headers: `X-Robots-Tag: GPTBot: noindex`\n2. Note that HTTP headers override meta tags and apply to non-HTML resources too.\n\n### Step 4: Check for AI-Specific Files\n\n1. Check for `/llms.txt` (emerging standard for AI crawler guidance).\n2. Check for `/.well-known/ai-plugin.json` (OpenAI plugin manifest).\n3. Check for `/ai.txt` (proposed standard, similar to ads.txt for AI).\n4. Record presence/absence and quality of each file.\n\n### Step 5: Assess JavaScript Rendering Requirements\n\n1. Check if the site is a Single Page Application (SPA) or heavily JavaScript-rendered.\n2. AI crawlers vary in their JavaScript rendering capabilities:\n   - GPTBot: Limited JS rendering\n   - ClaudeBot: Limited JS rendering\n   - PerplexityBot: Limited JS rendering\n   - Googlebot: Full JS rendering (but Google-Extended inherits this)\n3. If critical content requires JS rendering, flag this as a potential issue.\n4. Check for Server-Side Rendering (SSR) or Static Site Generation (SSG) as mitigations.\n\n### Step 6: Parse Content Signals\n\nUsing the already-fetched robots.txt from Step 1, scan for `Content-Signal:` directives (IETF draft `draft-romm-aipref-contentsignals`).\n\n1. Scan every line for a line starting with `Content-Signal:` (case-insensitive).\n2. If found:\n   - Parse all key=value pairs (split on `,` then on `=`).\n   - Validate keys against the known set: `ai-train`, `search`, `ai-personalization`, `ai-retrieval`.\n   - Validate values: only `yes` and `no` are valid.\n   - Flag any unknown keys or invalid values as a warning — the spec is still an IETF draft.\n   - Record the result as **Pass** and surface parsed values with plain-English meaning.\n3. If absent: record as **Recommendation** — the site has not declared AI usage preferences.\n\nNo additional HTTP request is needed. robots.txt is already fetched in Step 1.\n\n### Step 7: Detect Cloudflare Managed robots.txt\n\nUsing the already-fetched robots.txt from Step 1, check for a block starting with `# BEGIN Cloudflare Managed content` (case-insensitive).\n\n1. If found, Cloudflare is prepending its managed robots.txt to the site's own file. That block disallows GPTBot, ClaudeBot, Google-Extended, Applebot-Extended, Amazonbot, Bytespider, CCBot and meta-externalagent.\n2. Record it as a **Critical Issue** if the site owner's own rules allow AI crawlers. The owner usually doesn't know it's on, because the block never appears in the robots.txt file on their server, only in the live response.\n3. Recommend: in the Cloudflare dashboard, go to Security Settings, filter by \"Bot traffic\", and turn off \"block training in robots.txt\" if the site wants to be used by AI. If blocking training is intentional, note it as a deliberate choice, not an issue.\n\nNo additional HTTP request is needed. `fetch_page.py robots` returns this as `cloudflare_managed: true`.\n\n---\n\n## Output Format\n\nGenerate a file called `GEO-CRAWLER-ACCESS.md`:\n\n```markdown\n# AI Crawler Access Report: [Domain]\n\n**Analysis Date:** [Date]\n**Domain:** [Domain]\n**robots.txt Status:** [Found/Not Found/Error]\n\n---\n\n## Crawler Access Summary\n\n| Crawler | Operator | Tier | Status | Impact |\n|---|---|---|---|---|\n| GPTBot | OpenAI | 1 | [Allowed/Blocked/Not Mentioned] | [Impact description] |\n| OAI-SearchBot | OpenAI | 1 | [Status] | [Impact] |\n| ChatGPT-User | OpenAI | 1 | [Status] | [Impact] |\n| ClaudeBot | Anthropic | 1 | [Status] | [Impact] |\n| PerplexityBot | Perplexity | 1 | [Status] | [Impact] |\n| Google-Extended | Google | 2 | [Status] | [Impact] |\n| GoogleOther | Google | 2 | [Status] | [Impact] |\n| Applebot-Extended | Apple | 2 | [Status] | [Impact] |\n| Amazonbot | Amazon | 2 | [Status] | [Impact] |\n| FacebookBot | Meta | 2 | [Status] | [Impact] |\n| CCBot | Common Crawl | 3 | [Status] | [Impact] |\n| anthropic-ai | Anthropic | 3 | [Status] | [Impact] |\n| Bytespider | ByteDance | 3 | [Status] | [Impact] |\n| cohere-ai | Cohere | 3 | [Status] | [Impact] |\n\n## AI Visibility Score: [X]/100\n\n**Tier 1 Access:** [X/5 crawlers allowed]\n**Tier 2 Access:** [X/5 crawlers allowed]\n**Tier 3 Access:** [X/4 crawlers allowed]\n\n---\n\n## Critical Issues\n\n[List any Tier 1 crawlers that are blocked]\n\n## Recommendations\n\n### Immediate Actions\n[Specific robots.txt changes needed]\n\n### robots.txt Recommendation\n```\n[Complete recommended robots.txt content for AI crawlers]\n```\n\n### Additional Technical Findings\n- **Meta Robots Tags:** [Findings]\n- **X-Robots-Tag Headers:** [Findings]\n- **JavaScript Rendering:** [Assessment]\n- **llms.txt:** [Present/Absent]\n- **Sitemap Accessibility:** [Assessment]\n\n### Content Signals (IETF Draft)\n\n**Status:** Present / Absent\n\n<!-- If present: -->\n| Signal Key | Value | Meaning |\n|---|---|---|\n| ai-train | no | Opted out of AI model training |\n| search | yes | Permits use in AI-powered search results |\n\n<!-- If absent: -->\n**Recommendation:** Add a `Content-Signal:` directive to robots.txt to declare AI usage preferences explicitly. Example:\n\n`Content-Signal: ai-train=no, search=yes, ai-retrieval=yes`\n\nSee https://contentsignals.org/ for the full specification.\n```\n\n---\n\n## Scoring for Crawler Access\n\nThe AI Crawler Access Score is calculated as:\n\n| Component | Weight | Scoring |\n|---|---|---|\n| Tier 1 Crawlers Allowed | 50% | 20 points per Tier 1 crawler allowed (5 crawlers = 100 points max, scaled to 50) |\n| Tier 2 Crawlers Allowed | 25% | 20 points per Tier 2 crawler allowed (5 crawlers = 100 points max, scaled to 25) |\n| No Blanket AI Blocks | 15% | Full points if no `User-agent: *` Disallow: / and no noai meta tags |\n| AI-Specific Files Present | 10% | 5 points for llms.txt, 5 points for sitemap accessible to AI crawlers |\n\nFinal score = sum of all weighted components, capped at 100.\n\n<!-- File: skills/geo-llmstxt/SKILL.md (Tokens: ~3711 | Category: anthropic-skill) -->\n---\nname: geo-llmstxt\ndescription: Analyzes and generates llms.txt files -- the emerging standard for helping AI systems understand website structure and content. Can validate existing llms.txt files or generate new ones from scratch by crawling the site.\nallowed-tools:\n  - Read\n  - Grep\n  - Glob\n  - Bash\n  - WebFetch\n  - Write\n---\n\n# llms.txt Standard Analysis and Generation Skill\n\n## Purpose\n\nThis skill handles everything related to the `llms.txt` standard -- an emerging convention (proposed by Jeremy Howard in September 2024, gaining adoption through 2025-2026) that allows websites to provide structured guidance to AI systems about their content, structure, and key information. It is analogous to `robots.txt` (which tells crawlers what NOT to access) but instead tells AI systems what IS most useful to understand about the site.\n\n## Why llms.txt Matters\n\nAI language models face a fundamental challenge when processing websites: they must determine which pages are most important, what the site is about, and how content is organized -- typically by crawling many pages and inferring structure. `llms.txt` solves this by providing an explicit, machine-readable (and human-readable) summary.\n\n**Benefits of having a well-crafted llms.txt:**\n\n1. **Faster AI comprehension:** AI systems can understand your site's purpose and structure from a single file rather than crawling dozens of pages.\n2. **Controlled narrative:** You choose which pages and facts AI systems see first, shaping how they represent your brand.\n3. **Higher citation accuracy:** AI systems that consult llms.txt can cite the correct, authoritative page for each topic.\n4. **Reduced misrepresentation:** Key facts (pricing, features, locations) are stated explicitly, reducing AI hallucination about your business.\n5. **Early adopter advantage:** As of early 2026, fewer than 5% of websites have an llms.txt file, making it a differentiator.\n\n---\n\n## The llms.txt Specification\n\n### File Location\n\nThe file MUST be located at the root of the domain:\n```\nhttps://example.com/llms.txt\n```\n\n### Format Specification\n\nThe file uses Markdown formatting with specific conventions:\n\n```markdown\n# [Site Name]\n\n> [One-sentence description of what the site/business does. Keep under 200 characters.]\n\n## Docs\n\n- [Page Title](https://example.com/page-url): Concise description of what this page covers and why it matters.\n- [Another Page](https://example.com/another-page): Description of content.\n\n## Optional\n\n- [Less Critical Page](https://example.com/optional-page): Description.\n```\n\n### Detailed Format Rules\n\n**1. Title (Required)**\n```markdown\n# Site Name\n```\n- Must be the first line of the file.\n- Should be the official business/site name.\n- Use the H1 heading format (single `#`).\n\n**2. Description (Required)**\n```markdown\n> Brief description of the site/business\n```\n- Must appear immediately after the title.\n- Use Markdown blockquote format (`>`).\n- Keep under 200 characters.\n- Should clearly state what the business does and who it serves.\n- Avoid marketing fluff -- be factual and specific.\n\n**3. Main Sections (Required -- at least one)**\n\nUse H2 headings (`##`) to organize pages by category. Common section names:\n\n| Section Name | Purpose | Example Content |\n|---|---|---|\n| `## Docs` | Primary documentation or key pages | Product pages, service descriptions, core content |\n| `## Optional` | Secondary pages worth knowing about | Blog posts, supplementary resources |\n| `## API` | API documentation | API reference, authentication guides |\n| `## Blog` | Blog or news content | Recent/popular articles |\n| `## Products` | Product catalog | Product pages, pricing |\n| `## Services` | Service offerings | Service descriptions, process pages |\n| `## About` | Company information | About page, team, mission |\n| `## Resources` | Educational/reference content | Guides, tutorials, whitepapers |\n| `## Legal` | Legal documents | Terms of service, privacy policy |\n| `## Contact` | Contact information | Contact page, support channels |\n\n**4. Page Entries (Required)**\n\nEach entry follows the format:\n```markdown\n- [Page Title](URL): Description of page content\n```\n\nRules for page entries:\n- **Title:** Use the actual page title or a clear descriptive title.\n- **URL:** Must be a full, absolute URL (not relative paths).\n- **Description:** 10-30 words describing what the page covers. Be specific about the information available.\n- **Order:** List pages in order of importance within each section.\n- **Limit:** Include 10-30 page entries total. Prioritize your most authoritative and useful pages.\n\n**5. Key Facts Section (Recommended)**\n\n```markdown\n## Key Facts\n- Founded in [year] by [founder(s)]\n- Headquarters: [City, Country]\n- [X] customers/users in [Y] countries\n- Key products: [Product A], [Product B], [Product C]\n- Industry: [Industry classification]\n```\n\nThis section provides quick reference data that AI systems frequently need to answer user queries about your business.\n\n**6. Contact Section (Recommended)**\n\n```markdown\n## Contact\n- Website: https://example.com\n- Email: hello@example.com\n- Support: support@example.com\n- Phone: +1-555-123-4567\n- Address: 123 Main St, City, State, ZIP, Country\n```\n\n---\n\n## llms-full.txt (Extended Version)\n\nIn addition to `llms.txt`, sites can provide `/llms-full.txt` -- an extended version with more detail.\n\n**Differences from llms.txt:**\n\n| Feature | llms.txt | llms-full.txt |\n|---|---|---|\n| **Length** | Concise (50-150 lines) | Comprehensive (150-500+ lines) |\n| **Page entries** | 10-30 key pages | 30-100+ pages |\n| **Descriptions** | 10-30 words per entry | 30-100 words per entry, may include key facts from each page |\n| **Audience** | Quick AI comprehension | Deep AI analysis |\n| **Sections** | 3-6 sections | 8-15 sections |\n| **Key facts** | Business-level facts | Page-level facts and data points |\n\nBoth files can coexist. AI systems check for `llms.txt` first, then may optionally load `llms-full.txt` for deeper understanding.\n\n---\n\n## Analysis Mode\n\nWhen checking an existing llms.txt file:\n\n### Step 1: Fetch the File\n\n1. Use WebFetch to retrieve `[domain]/llms.txt`.\n2. Also check for `[domain]/llms-full.txt`.\n3. Record HTTP status code:\n   - **200:** File exists -- proceed to validation.\n   - **404:** File does not exist -- recommend generation.\n   - **403:** File exists but is blocked -- flag as misconfiguration.\n   - **301/302:** Redirect -- follow and note the redirect.\n\n### Step 2: Validate Format\n\nCheck each structural element:\n\n| Element | Check | Severity if Missing |\n|---|---|---|\n| H1 Title | Present, matches business name | Critical |\n| Blockquote description | Present, under 200 chars, factual | High |\n| At least one H2 section | Present | Critical |\n| Page entries with URLs | At least 5 entries present | High |\n| URLs are absolute | All URLs use full https:// paths | High |\n| URLs are valid | All URLs return 200 status | Medium |\n| Descriptions present | Every entry has a description after the colon | Medium |\n| Key Facts section | Present with business information | Medium |\n| Contact section | Present with at least email | Low |\n| Reasonable length | 30-200 lines | Low |\n| No broken Markdown | Proper formatting throughout | Medium |\n\n### Step 3: Assess Content Quality\n\nRate the llms.txt on these dimensions:\n\n**Completeness (0-100):**\n- Does it cover all major site sections visible in the navigation?\n- Are the most important/highest-traffic pages included?\n- Is the Key Facts section present with accurate business data?\n- Does it include recent/updated content?\n\n**Accuracy (0-100):**\n- Do descriptions accurately reflect page content?\n- Are URLs valid and pointing to the correct pages?\n- Are Key Facts verifiable and current?\n- Is the business description accurate?\n\n**Usefulness (0-100):**\n- Would an AI system understand the site's purpose from this file alone?\n- Are descriptions specific enough to differentiate pages?\n- Are the most citation-worthy pages highlighted?\n- Is the organization logical and intuitive?\n\n**Overall llms.txt Score** = (Completeness * 0.40) + (Accuracy * 0.35) + (Usefulness * 0.25)\n\n### Step 4: Compare Against Site Content\n\n1. Crawl the site's main navigation and sitemap.\n2. Identify important pages NOT listed in llms.txt.\n3. Check if any listed URLs are broken or redirected.\n4. Verify that the business description matches current homepage messaging.\n5. Flag stale entries (pages that have been significantly updated since the llms.txt was written).\n\n---\n\n## Generation Mode\n\nWhen creating a new llms.txt file from scratch:\n\n### Step 1: Site Discovery\n\n1. Fetch the homepage and extract:\n   - Site name (from `<title>`, `<meta property=\"og:site_name\">`, or H1)\n   - Business description (from meta description or hero section)\n   - Main navigation links\n   - Footer links\n2. Fetch `/sitemap.xml` to discover all public pages.\n3. Identify the site's primary business type (SaaS, E-commerce, Local, Publisher, Agency).\n\n### Step 2: Page Prioritization\n\nCategorize all discovered pages and select the most important ones:\n\n**Always Include:**\n- Homepage\n- About / Company page\n- Pricing page (if exists)\n- Primary product/service pages (top 3-5)\n- Contact page\n- Documentation landing page (if exists)\n\n**Include if High Quality:**\n- Top blog posts (by apparent importance, recency, or comprehensiveness)\n- Case studies or customer stories\n- Key resource/guide pages\n- FAQ page\n- Careers page (for large companies)\n\n**Skip:**\n- Thin category/tag pages\n- Pagination pages\n- Login/signup pages\n- Legal boilerplate (unless specifically relevant)\n- Duplicate or near-duplicate content\n- Pages with minimal unique content\n\n### Step 3: Write Descriptions\n\nFor each selected page:\n\n1. Fetch the page content using WebFetch.\n2. Read the H1, meta description, and first 2-3 paragraphs.\n3. Write a description that:\n   - Is 10-30 words long\n   - States what information is on the page\n   - Mentions specific topics, data, or features covered\n   - Avoids marketing language (\"best,\" \"leading,\" \"revolutionary\")\n   - Uses factual, informative language\n\n**Good description examples:**\n- `Explains the three pricing tiers (Free, Pro, Enterprise) with feature comparison and annual/monthly costs.`\n- `Details the company's founding in 2018, team of 45 employees, and office locations in Austin and London.`\n- `Covers integration setup for Slack, Salesforce, and HubSpot with step-by-step guides and API endpoints.`\n\n**Bad description examples:**\n- `Our amazing pricing page!` (marketing language, no specifics)\n- `Learn more about our company.` (too vague)\n- `Click here for details.` (not descriptive)\n\n### Step 4: Compile Key Facts\n\nGather key business facts from the site:\n\n- Year founded\n- Founder name(s)\n- Headquarters location\n- Number of employees (if public)\n- Number of customers/users (if public)\n- Key products or services (list top 3-5)\n- Industry classification\n- Notable clients or partnerships (if public)\n- Key differentiators (what makes this business unique)\n- Recent milestones or achievements (last 12 months)\n\n### Step 5: Assemble the File\n\nConstruct the llms.txt following this template:\n\n```markdown\n# [Site Name]\n\n> [One clear sentence: what the business does, who it serves, and its primary value proposition. Under 200 characters.]\n\n## Docs\n\n- [Most Important Page](https://example.com/page): Description covering the key content on this page.\n- [Second Page](https://example.com/page-2): Description of this page's content and value.\n- [Third Page](https://example.com/page-3): What users and AI systems will find here.\n\n## Products\n\n- [Product A](https://example.com/product-a): Core features, target users, and pricing model for Product A.\n- [Product B](https://example.com/product-b): What Product B does and how it differs from Product A.\n\n## Resources\n\n- [Guide Title](https://example.com/guide): Comprehensive guide covering [topic] with [X] sections and practical examples.\n- [Blog Post](https://example.com/blog/post): Analysis of [topic] with original data from [source].\n\n## Key Facts\n\n- Founded in [year] by [name(s)]\n- Headquartered in [City, Country]\n- [Specific metric: e.g., \"Serves 10,000+ businesses in 40 countries\"]\n- [Key differentiator: e.g., \"Only platform offering real-time X and Y integration\"]\n- Industry: [Classification]\n\n## Contact\n\n- Website: https://example.com\n- Email: [primary contact email]\n- Support: [support URL or email]\n```\n\n### Step 6: Validate the Generated File\n\nBefore outputting:\n1. Verify all URLs are reachable (200 status).\n2. Confirm total entry count is between 10-30.\n3. Check that no description exceeds 50 words.\n4. Verify the overall file length is 50-150 lines.\n5. Ensure Markdown formatting is clean and consistent.\n\n---\n\n## Output Format\n\n### For Analysis Mode\n\nGenerate `GEO-LLMSTXT-ANALYSIS.md`:\n\n```markdown\n# llms.txt Analysis: [Domain]\n\n**Analysis Date:** [Date]\n**llms.txt Status:** [Found at URL / Not Found / Error]\n**llms-full.txt Status:** [Found / Not Found]\n\n---\n\n## Overall llms.txt Score: [X]/100\n\n| Dimension | Score |\n|---|---|\n| Completeness | [X]/100 |\n| Accuracy | [X]/100 |\n| Usefulness | [X]/100 |\n\n---\n\n## Format Validation\n\n| Element | Status | Notes |\n|---|---|---|\n| H1 Title | [Pass/Fail] | [Notes] |\n| Description blockquote | [Pass/Fail] | [Notes] |\n| H2 Sections | [Pass/Fail] | [X sections found] |\n| Page entries | [Pass/Fail] | [X entries found] |\n| URL validity | [Pass/Fail] | [X broken URLs] |\n| Entry descriptions | [Pass/Fail] | [X missing descriptions] |\n| Key Facts | [Pass/Fail] | [Notes] |\n| Contact section | [Pass/Fail] | [Notes] |\n\n---\n\n## Missing Pages\n\nThese important pages were found on the site but not in llms.txt:\n\n1. [Page Title](URL) -- [Why it should be included]\n2. [Page Title](URL) -- [Why it should be included]\n\n## Improvement Recommendations\n\n1. [Specific recommendation]\n2. [Specific recommendation]\n3. [Specific recommendation]\n\n## Suggested Updated llms.txt\n\n[Complete rewritten llms.txt file if significant improvements are needed]\n```\n\n### For Generation Mode\n\nOutput the complete `llms.txt` file content, ready to be saved to the site's root directory. Also output a brief `GEO-LLMSTXT-GENERATION.md` report explaining:\n- How many pages were discovered and how many were selected\n- The prioritization rationale\n- Any pages that were borderline (might add later)\n- Recommended update frequency (e.g., monthly for active blogs, quarterly for stable sites)\n\n---\n\n## Best Practices Reference\n\n1. **Update regularly.** If your site publishes weekly blog posts, update llms.txt monthly. If your product changes quarterly, update after each release.\n2. **Lead with your strongest content.** The first entries in each section should be your most authoritative, comprehensive pages.\n3. **Be specific in descriptions.** \"Comprehensive 3,000-word guide to React Server Components with code examples\" is far more useful than \"React guide.\"\n4. **Include your differentiators.** If your site has unique data, original research, or exclusive features, highlight these in descriptions and Key Facts.\n5. **Keep it concise.** The llms.txt should be scannable in under 60 seconds. Save detail for llms-full.txt.\n6. **Use absolute URLs.** Always include the full `https://` URL, never relative paths.\n7. **Test after deployment.** After uploading, verify the file is accessible at `https://yourdomain.com/llms.txt` with no redirects.\n8. **Coordinate with robots.txt.** Ensure pages listed in llms.txt are not blocked in robots.txt for AI crawlers.\n9. **Mirror your site structure.** Section names in llms.txt should roughly correspond to your main navigation categories.\n10. **Avoid sensitive pages.** Do not include internal tools, admin panels, or pages with sensitive information.\n\n<!-- File: skills/geo-platform-optimizer/SKILL.md (Tokens: ~4471 | Category: anthropic-skill) -->\n---\nname: geo-platform-optimizer\ndescription: Platform-specific AI search optimization — audit and optimize for Google AI Overviews, ChatGPT, Perplexity, Gemini, and Bing Copilot individually\nversion: 1.0.0\nauthor: geo-seo-claude\ntags: [geo, ai-search, platform-optimization, chatgpt, perplexity, gemini, aio]\nallowed-tools: Read, Grep, Glob, Bash, WebFetch, Write\n---\n\n# GEO Platform Optimizer\n\n## Core Insight\n\nOnly **11% of domains** are cited by BOTH ChatGPT and Google AI Overviews for the same query. Each AI search platform uses different indexes, ranking logic, and source preferences. A page optimized for Google AI Overviews may be invisible to ChatGPT, and vice versa. Platform-specific optimization is not optional — it is the foundation of any serious GEO strategy.\n\n## How to Use This Skill\n\n1. Collect the target URL and the site's primary topic/industry\n2. Run each platform checklist below against the site\n3. Score each platform on the 0-100 rubric\n4. Generate GEO-PLATFORM-OPTIMIZATION.md with per-platform scores, gaps, and action items\n\n---\n\n## Platform 1: Google AI Overviews (AIO)\n\n### How AIO Selects Sources\n- 92% of AIO citations come from pages already ranking in the **top 10 organic results** — traditional SEO is the gateway\n- However, 47% of citations come from pages ranking **below position 5** — AIO has its own selection logic favoring clarity and directness over raw rank\n- AIO strongly favors pages with **clean structure, direct answers, and scannable formatting**\n- Featured snippet optimization has ~70% overlap with AIO optimization\n- AIO prefers **concise, factual, unambiguous answers** — hedging and filler reduce citation probability\n\n### Optimization Checklist\n\n1. **Question-Based Headings**: Use H2/H3 headings phrased as questions matching real user queries. Check Google's \"People Also Ask\" for the target topic and mirror those exact phrasings.\n2. **Direct Answer in First Paragraph**: After each question heading, provide a clear 1-2 sentence answer immediately. Then expand with supporting detail. The first sentence should be a standalone citation candidate.\n3. **Tables and Structured Comparisons**: AIO heavily cites tables. Convert any comparison, pricing, specification, or feature data into HTML tables. Use clear column headers.\n4. **Ordered and Unordered Lists**: Step-by-step processes should use ordered lists. Feature lists should use unordered lists. AIO extracts these directly.\n5. **FAQ Sections**: Add a dedicated FAQ section with 5-10 real questions. Use proper H3 headings for each question. While FAQPage schema rich results are restricted to govt/health sites since Aug 2023, the content pattern still helps AIO extraction.\n6. **Definitions and Glossary Boxes**: For any industry-specific term, provide a clear definition. Format: \"**[Term]** is [concise definition].\" AIO frequently cites definitions.\n7. **Statistics with Sources**: Include specific numbers with attribution. \"According to [Source], [statistic].\" AIO prefers citeable, specific claims over vague assertions.\n8. **Publication Date**: Include a visible publication date and last-updated date. AIO deprioritizes undated content for time-sensitive queries.\n9. **Author Byline**: Display author name with credentials. Link to an author page with bio, credentials, and sameAs links.\n10. **Page Depth**: Keep target pages within 3 clicks of homepage. AIO rarely cites deep, orphaned content.\n\n### Scoring Rubric (0-100)\n\n| Criterion | Points | How to Score |\n|---|---|---|\n| Ranks in top 10 for target queries | 20 | 20 if yes, 10 if top 20, 0 if beyond |\n| Question-based headings present | 10 | 2 points per question heading, max 10 |\n| Direct answers after headings | 15 | 3 points per direct answer, max 15 |\n| Tables present for comparison data | 10 | 10 if tables used appropriately, 5 if partial, 0 if absent |\n| Lists for processes/features | 10 | 10 if present, 5 if partial |\n| FAQ section with 5+ questions | 10 | 10 if 5+, 5 if 1-4, 0 if none |\n| Statistics with citations | 10 | 2 points per cited stat, max 10 |\n| Publication/updated date visible | 5 | 5 if both dates, 3 if one, 0 if none |\n| Author byline with credentials | 5 | 5 if full byline, 3 if name only, 0 if none |\n| Clean URL + heading hierarchy | 5 | 5 if H1>H2>H3 clean, 3 if minor issues, 0 if broken |\n\n---\n\n## Platform 2: ChatGPT Web Search\n\n### How ChatGPT Selects Sources\n- Uses **Bing's search index** as its foundation (not Google)\n- Top citation sources by domain share: **Wikipedia (47.9%)**, Reddit (11.3%), YouTube, major news outlets\n- ChatGPT heavily weights **entity recognition** — if your brand exists as a structured entity (Wikipedia, Wikidata, Crunchbase), it is far more likely to be cited\n- Prefers **authoritative, well-established sources** over new or niche sites\n- Longer, more comprehensive articles get cited more often than short pieces\n- ChatGPT tends to cite **the most canonical source** for a claim rather than the original\n\n### Optimization Checklist\n\n1. **Wikipedia Presence**: Check if the brand/person/product has a Wikipedia article. If not, assess notability criteria. If notable, create a draft. If an article exists, ensure it is accurate and current.\n2. **Wikidata Entity**: Verify the entity exists on Wikidata (wikidata.org). If not, create a Wikidata item with key properties: instance of, official website, social media links, founding date, headquarters location.\n3. **Bing Webmaster Tools**: Verify the site is registered in Bing Webmaster Tools. Submit sitemap. Check for crawl errors.\n4. **Bing Index Coverage**: Use `site:domain.com` on Bing to verify key pages are indexed. Bing may have different indexed pages than Google.\n5. **Reddit Authority**: Check for brand mentions on Reddit. Identify relevant subreddits. Assess whether the brand participates authentically in discussions.\n6. **YouTube Presence**: Verify YouTube channel exists with relevant content. Video descriptions should contain full URLs and entity information.\n7. **Authoritative Backlinks**: ChatGPT/Bing weight .edu, .gov, and major publication backlinks heavily. Audit backlink profile for these sources.\n8. **Entity Consistency**: Brand name, founding date, leadership, and key facts must be consistent across Wikipedia, Crunchbase, LinkedIn, and the official website.\n9. **Comprehensive Content**: Pages targeting ChatGPT citation should be **2000+ words** with thorough topic coverage. ChatGPT prefers single authoritative sources over combining multiple thin pages.\n10. **Clear Attribution**: Include \"About\" sections, company descriptions, and founding stories. ChatGPT uses these for entity grounding.\n\n### Scoring Rubric (0-100)\n\n| Criterion | Points | How to Score |\n|---|---|---|\n| Wikipedia article exists and is accurate | 20 | 20 if exists, 10 if stub, 0 if none |\n| Wikidata entity with 5+ properties | 10 | 10 if complete, 5 if basic, 0 if none |\n| Bing index coverage of key pages | 10 | 10 if full, 5 if partial, 0 if poor |\n| Reddit brand mentions (positive) | 10 | 10 if active discussions, 5 if mentions, 0 if none |\n| YouTube channel with relevant content | 10 | 10 if active, 5 if present but sparse, 0 if none |\n| Authoritative backlinks (.edu, .gov, press) | 15 | 3 points per authoritative backlink category, max 15 |\n| Entity consistency across platforms | 10 | 10 if consistent, 5 if minor discrepancies, 0 if major |\n| Content comprehensiveness (2000+ words) | 10 | 10 if thorough, 5 if adequate, 0 if thin |\n| Bing Webmaster Tools configured | 5 | 5 if verified, 0 if not |\n\n---\n\n## Platform 3: Perplexity AI\n\n### How Perplexity Selects Sources\n- Top citation sources: **Reddit (46.7%)**, Wikipedia, YouTube, major publications\n- Perplexity places the **heaviest emphasis on community validation** of all AI search platforms\n- Strongly favors **discussion threads** where claims are debated, validated, or expanded by multiple participants\n- Prefers recent content — publication date is a strong ranking signal\n- Cites **multiple sources per answer** (typically 5-15), so there is more opportunity for mid-authority sites to appear\n- Uses its own crawling infrastructure in addition to search APIs\n\n### Optimization Checklist\n\n1. **Active Reddit Presence**: The brand or its representatives should participate authentically in relevant subreddit discussions. Not promotional — helpful, specific, and community-oriented.\n2. **Reddit AMAs and Threads**: Encourage or participate in AMAs, detailed discussion threads, and community Q&As. Perplexity treats these as high-signal content.\n3. **Forum and Community Presence**: Beyond Reddit, check Hacker News, Stack Overflow, Quora, and niche industry forums. Perplexity indexes these heavily.\n4. **Discussion-Friendly Content**: Publish content that invites discussion — opinion pieces, research findings, contrarian takes, original data. Content that gets shared and debated in communities ranks higher.\n5. **Freshness Signals**: Publish content with clear dates. Update content regularly. Perplexity deprioritizes stale content more aggressively than other platforms.\n6. **Multiple Source Validation**: Claims in your content should be supported by other sources. Perplexity cross-references and prefers claims it can verify from multiple origins.\n7. **YouTube Video Content**: Create video content that Perplexity can reference. Ensure video titles, descriptions, and transcripts contain target information.\n8. **Direct, Quotable Passages**: Write paragraphs that can stand alone as citations. Each paragraph should make one clear point with supporting evidence.\n9. **Original Data and Research**: Publish original surveys, benchmarks, case studies, or datasets. Perplexity heavily favors primary sources.\n10. **Perplexity Pages**: Check if Perplexity has created a \"Page\" about your topic/brand. These are curated summaries that influence future citations.\n\n### Scoring Rubric (0-100)\n\n| Criterion | Points | How to Score |\n|---|---|---|\n| Active Reddit presence in relevant subreddits | 20 | 20 if active contributor, 10 if mentioned, 0 if absent |\n| Forum/community mentions (HN, SO, Quora) | 10 | 10 if multiple platforms, 5 if one, 0 if none |\n| Content freshness (updated within 6 months) | 10 | 10 if recent, 5 if within year, 0 if older |\n| Original research/data published | 15 | 15 if original research, 10 if case studies, 5 if some data, 0 if none |\n| YouTube content with transcripts | 10 | 10 if active channel, 5 if some videos, 0 if none |\n| Quotable, standalone paragraphs | 10 | 2 points per well-structured quotable paragraph, max 10 |\n| Multi-source claim validation | 10 | 10 if claims well-sourced, 5 if some sourcing, 0 if none |\n| Discussion-generating content | 10 | 10 if content gets shared/discussed, 5 if some engagement, 0 if none |\n| Wikipedia/Wikidata presence | 5 | 5 if present, 0 if absent |\n\n---\n\n## Platform 4: Google Gemini\n\n### How Gemini Selects Sources\n- Uses **Google's search index** plus strong weighting toward **Google-owned properties**\n- YouTube content is weighted significantly more heavily than in standard Google Search\n- Google Business Profile data is directly accessible to Gemini\n- Gemini uses Google's Knowledge Graph directly — entity presence in Knowledge Graph is a major advantage\n- Structured data (Schema.org) is consumed directly by Gemini for entity understanding\n- Gemini multi-modal: can reference images, videos, and text together\n\n### Optimization Checklist\n\n1. **Google Knowledge Panel**: Check if the brand has a Google Knowledge Panel. If not, claim it through Google Business Profile or structured data. Ensure all information is accurate.\n2. **Google Business Profile**: Complete and optimize GBP with all fields: hours, services, photos, posts, Q&A. Gemini pulls directly from GBP for local queries.\n3. **YouTube Strategy**: Create YouTube content for every key topic. Optimize titles, descriptions, timestamps, and closed captions. Gemini cites YouTube more than any other AI platform.\n4. **YouTube Chapters and Timestamps**: Use chapters (timestamps in description) so Gemini can reference specific segments of videos.\n5. **Google Merchant Center**: For e-commerce, ensure products are in Google Merchant Center. Gemini references product data directly.\n6. **Structured Data (Schema.org)**: Implement comprehensive Schema.org markup. Gemini uses this for entity understanding more aggressively than other platforms.\n7. **Google Sites Ecosystem**: Ensure presence across Google ecosystem: Google Scholar (for research), Google News (for publishers), Google Maps (for local).\n8. **Image Optimization**: Gemini is multi-modal. Use descriptive alt text, structured image filenames, and high-quality images. Include relevant images with every piece of content.\n9. **Google E-E-A-T Signals**: All standard Google E-E-A-T signals apply with extra weight. Author pages, about pages, editorial policies, and expertise demonstrations.\n10. **Chrome Web Store / Google Workspace Marketplace**: For software companies, presence on Google platforms adds entity signals.\n\n### Scoring Rubric (0-100)\n\n| Criterion | Points | How to Score |\n|---|---|---|\n| Google Knowledge Panel exists | 15 | 15 if complete, 10 if partial, 0 if none |\n| Google Business Profile complete | 10 | 10 if fully optimized, 5 if basic, 0 if none |\n| YouTube channel with topic-relevant content | 20 | 20 if active with chapters, 10 if present, 0 if none |\n| Schema.org structured data implemented | 15 | 15 if comprehensive, 10 if basic, 5 if minimal, 0 if none |\n| Google ecosystem presence (Scholar, News, Maps) | 10 | 10 if 3+, 5 if 1-2, 0 if none |\n| Image optimization (alt text, filenames) | 10 | 10 if all images optimized, 5 if partial, 0 if none |\n| E-E-A-T signals (author pages, about, editorial) | 10 | 10 if strong, 5 if partial, 0 if weak |\n| Google Merchant Center (if e-commerce) | 5 | 5 if applicable and active, N/A otherwise |\n| Multi-modal content (text + images + video) | 5 | 5 if rich multi-modal, 3 if some, 0 if text-only |\n\n---\n\n## Platform 5: Bing Copilot\n\n### How Copilot Selects Sources\n- Uses **Bing's search index** (shared infrastructure with ChatGPT but different ranking/selection)\n- Supports **IndexNow protocol** for near-instant indexing of new and updated content\n- Copilot tends to cite **fewer sources per answer** (typically 3-5) but gives more prominent attribution\n- Microsoft ecosystem integration: LinkedIn, GitHub, Microsoft Learn content is weighted\n- Copilot prefers pages with clear, structured markup and fast load times\n\n### Optimization Checklist\n\n1. **Bing Webmaster Tools**: Register and verify site. Submit XML sitemap. Review and fix any crawl issues.\n2. **IndexNow Implementation**: Implement the IndexNow protocol to notify Bing of content changes in real-time. Submit a key file at `/.well-known/indexnow-key.txt` and ping the IndexNow API on content publish/update.\n3. **LinkedIn Company Page**: Ensure the company LinkedIn page is complete with accurate description, employee connections, and regular posts. Copilot indexes LinkedIn content.\n4. **GitHub Presence**: For tech companies, maintain an active GitHub presence. Copilot references GitHub repos, documentation, and README files.\n5. **Microsoft Learn / Documentation**: If relevant, contribute to Microsoft Learn or ensure documentation is compatible with Microsoft's documentation standards.\n6. **Bing Places for Business**: Equivalent to Google Business Profile. Complete all fields for local search visibility in Copilot.\n7. **Clear Meta Descriptions**: Bing/Copilot weights meta descriptions more heavily than Google does. Write compelling, keyword-rich meta descriptions for every page.\n8. **Social Signals**: Bing has historically weighted social signals (shares, likes, engagement) more than Google. Maintain active social media presence.\n9. **Exact-Match Keywords**: Bing's algorithm is more literal about keyword matching than Google. Include exact target phrases in titles, headings, and body content.\n10. **Fast Page Load**: Copilot deprioritizes slow pages. Target sub-2-second load time. Optimize images, enable compression, minimize render-blocking resources.\n\n### Scoring Rubric (0-100)\n\n| Criterion | Points | How to Score |\n|---|---|---|\n| Bing Webmaster Tools verified + sitemap | 15 | 15 if verified, 5 if partial, 0 if not |\n| IndexNow protocol implemented | 15 | 15 if active, 0 if not |\n| Bing index coverage of key pages | 10 | 10 if full, 5 if partial, 0 if poor |\n| LinkedIn company page (complete) | 10 | 10 if complete, 5 if basic, 0 if none |\n| GitHub presence (if applicable) | 5 | 5 if active, N/A if not applicable |\n| Meta descriptions optimized | 10 | 10 if all key pages, 5 if partial, 0 if missing |\n| Social media engagement signals | 10 | 10 if active engagement, 5 if present, 0 if none |\n| Exact-match keywords in titles/headings | 10 | 10 if well-optimized, 5 if partial, 0 if not |\n| Page load speed < 2 seconds | 10 | 10 if < 2s, 5 if < 4s, 0 if > 4s |\n| Bing Places configured (if local) | 5 | 5 if complete, N/A if not local |\n\n---\n\n## Cross-Platform Summary\n\n### Universal Optimization Actions (help ALL platforms)\n1. Wikipedia/Wikidata entity presence\n2. YouTube channel with relevant content\n3. Comprehensive, well-structured content with clear headings\n4. Schema.org structured data (especially Organization + sameAs)\n5. Fast page load and clean HTML\n6. Author pages with credentials and sameAs links\n7. Regular content updates with visible dates\n\n### Platform-Specific Priorities\n| Priority | Google AIO | ChatGPT | Perplexity | Gemini | Copilot |\n|---|---|---|---|---|---|\n| #1 | Top-10 ranking | Wikipedia | Reddit presence | YouTube | IndexNow |\n| #2 | Q&A structure | Entity graph | Original research | Knowledge Panel | Bing WMT |\n| #3 | Tables/lists | Bing SEO | Freshness | Schema.org | LinkedIn |\n| #4 | Featured snippets | Reddit | Community forums | GBP | Meta descriptions |\n\n---\n\n## Output Format\n\nGenerate **GEO-PLATFORM-OPTIMIZATION.md** with the following structure:\n\n```markdown\n# GEO Platform Optimization Report — [Domain]\nDate: [Date]\n\n## Overall Platform Readiness\n- Combined GEO Score: XX/100 (average of all platform scores)\n\n## Platform Scores\n| Platform | Score | Status |\n|---|---|---|\n| Google AI Overviews | XX/100 | [Strong/Moderate/Weak] |\n| ChatGPT Web Search | XX/100 | [Strong/Moderate/Weak] |\n| Perplexity AI | XX/100 | [Strong/Moderate/Weak] |\n| Google Gemini | XX/100 | [Strong/Moderate/Weak] |\n| Bing Copilot | XX/100 | [Strong/Moderate/Weak] |\n\nStatus thresholds: Strong = 70+, Moderate = 40-69, Weak = 0-39\n\n## Platform Details\n[Per-platform breakdown with score, gaps found, specific actions]\n\n## Prioritized Action Plan\n### Quick Wins (this week)\n[Actions that improve multiple platform scores with minimal effort]\n\n### Medium-Term (this month)\n[Actions requiring content creation or technical changes]\n\n### Strategic (this quarter)\n[Actions requiring entity building, community development, or platform presence]\n```\n\n<!-- File: skills/geo-proposal/SKILL.md (Tokens: ~2974 | Category: anthropic-skill) -->\n---\nname: geo-proposal\ndescription: >\n  Auto-generate a professional, client-ready GEO service proposal from audit data.\n  Creates a full proposal in markdown and PDF including executive summary, findings,\n  recommended service packages (Basic/Standard/Premium), pricing, timeline, and terms.\n  Use when user says \"proposal\", \"proposta\", \"offerta\", \"preventivo\", \"generate proposal\",\n  or after completing a GEO audit for a prospect.\nversion: 1.0.0\ntags: [geo, business, proposal, sales, pricing, client]\nallowed-tools: Read, Write, Bash, Glob, WebFetch\n---\n\n# GEO Proposal Generator\n\n## Purpose\n\nGenerate a fully customized, client-ready GEO service proposal that:\n1. Pulls findings directly from the prospect's GEO audit\n2. Translates technical gaps into business pain points\n3. Presents 3 service tiers with clear pricing\n4. Includes a realistic ROI projection\n5. Outputs a professional markdown document ready to send\n\n---\n\n## Command\n\n```\n/geo proposal <domain-or-audit-file> [--tier basic|standard|premium] [--client-name \"Name\"] [--monthly EUR]\n```\n\n**Examples:**\n```\n/geo proposal electron-srl.com\n/geo proposal electron-srl.com --tier standard --client-name \"Electron Srl\"\n/geo proposal ~/.geo-prospects/audits/electron-srl.com-2026-03-12.md\n```\n\n---\n\n## Workflow\n\n### Step 1: Load Audit Data\n\n1. Check if `~/.geo-prospects/audits/<domain>*.md` exists\n2. If not, suggest running `/geo quick <domain>` first\n3. Extract from audit:\n   - GEO Score (overall and per-category)\n   - Top 3 critical findings\n   - Quick wins list\n   - Business type\n   - Estimated organic traffic impact\n\n### Step 2: Customize the Proposal\n\nAuto-fill proposal template with:\n- Company name (from domain or prospect record)\n- GEO score and tier label\n- 3 most critical pain points (translated to business language)\n- Estimated revenue at risk from AI search shift\n- Recommended service tier based on score:\n  - Score 0-40 → Recommend Premium (critical issues need full attention)\n  - Score 41-60 → Recommend Standard (significant gaps, needs monthly work)\n  - Score 61-75 → Recommend Basic (solid base, needs monitoring)\n\n### Step 3: Generate Proposal File\n\nOutput to `~/.geo-prospects/proposals/<domain>-proposal-<date>.md`\nAlso update prospect record if it exists in `~/.geo-prospects/prospects.json`\n\n---\n\n## Proposal Template\n\nGenerate the following document, filling all `[PLACEHOLDERS]` with real audit data:\n\n---\n\n```markdown\n# GEO Optimization Proposal\n## [COMPANY NAME] — AI Search Visibility\n\n**Prepared by:** [YOUR AGENCY NAME]\n**Prepared for:** [CONTACT NAME], [COMPANY NAME]\n**Date:** [DATE]\n**Valid until:** [DATE + 30 DAYS]\n**Reference:** GEO-PROP-[YYMMDD]-[DOMAIN]\n\n---\n\n## Executive Summary\n\n[COMPANY NAME] operates in [INDUSTRY] and serves customers across [GEOGRAPHY].\nOur GEO audit of [DOMAIN], conducted on [DATE], reveals a GEO Readiness Score\nof **[SCORE]/100 ([TIER LABEL])**.\n\nThis means your website currently has [TIER DESCRIPTION — use score interpretation table].\nAs AI-powered search (ChatGPT, Google AI Overviews, Perplexity) now influences\n**[X]% of online discovery** and is growing at 527% year-over-year, this gap\nrepresents a measurable risk to your pipeline.\n\nThe three most urgent issues are:\n1. **[CRITICAL FINDING 1]** — [Business impact in one sentence]\n2. **[CRITICAL FINDING 2]** — [Business impact in one sentence]\n3. **[CRITICAL FINDING 3]** — [Business impact in one sentence]\n\nWe recommend the **[TIER NAME] package** at **€[PRICE]/month**, which addresses\nall critical issues within 90 days and positions [COMPANY] as an AI-visible\nauthority in [INDUSTRY].\n\n---\n\n## The Opportunity: Why GEO Matters for [COMPANY NAME]\n\n### The AI Search Shift Is Already Happening\n\n| Metric | Value |\n|--------|-------|\n| AI-referred traffic growth (2025) | +527% YoY |\n| AI traffic conversion vs. organic | 4.4x higher |\n| ChatGPT weekly active users | 900M+ |\n| Google AI Overviews monthly reach | 1.5B users, 200+ countries |\n| Gartner: traditional search traffic drop by 2028 | -50% |\n| Marketers investing in GEO today | Only 23% |\n\n**First-mover advantage is real.** Companies that invest in GEO now will\ncapture the AI search channel before competitors do.\n\n### Your Current Position\n\n| Metric | [COMPANY] | Industry Average | Top Performers |\n|--------|-----------|------------------|----------------|\n| GEO Score | [SCORE]/100 | 45/100 | 75+/100 |\n| AI Crawlers Allowed | [X]/14 | 8/14 | 14/14 |\n| Brand Mentions (AI platforms) | [STATUS] | Moderate | High |\n| Schema Coverage | [STATUS] | Partial | Complete |\n| llms.txt | [Yes/No] | 12% have it | 78% have it |\n\n---\n\n## Audit Findings Summary\n\n### GEO Score Breakdown\n\n| Category | Your Score | Weight | Weighted | Priority |\n|----------|-----------|--------|---------|----------|\n| AI Citability & Visibility | [SCORE]/100 | 25% | [WEIGHTED] | [HIGH/MED/LOW] |\n| Brand Authority Signals | [SCORE]/100 | 20% | [WEIGHTED] | [HIGH/MED/LOW] |\n| Content Quality & E-E-A-T | [SCORE]/100 | 20% | [WEIGHTED] | [HIGH/MED/LOW] |\n| Technical Foundations | [SCORE]/100 | 15% | [WEIGHTED] | [HIGH/MED/LOW] |\n| Structured Data | [SCORE]/100 | 10% | [WEIGHTED] | [HIGH/MED/LOW] |\n| Platform Optimization | [SCORE]/100 | 10% | [WEIGHTED] | [HIGH/MED/LOW] |\n| **TOTAL GEO SCORE** | | | **[SCORE]/100** | **[TIER]** |\n\n### Critical Issues Found\n\n[For each critical issue from audit:]\n\n#### 🔴 [ISSUE TITLE]\n**What we found:** [Technical finding in plain language]\n**Business impact:** [What this means for their revenue/visibility]\n**Our fix:** [What we will do to resolve it]\n**Timeline:** [When they will see improvement]\n\n---\n\n## Our Solution: Service Packages\n\nWe offer three engagement models based on the scope of optimization needed.\n\n---\n\n### BASIC — €2,500/month\n*Best for: Sites with score 61-75 needing targeted improvements*\n\n**What's included:**\n- Quarterly full GEO audit (4x/year)\n- Quarterly client report with score tracking\n- Schema.org implementation (Organization + key page schemas)\n- AI crawler access optimization (robots.txt)\n- llms.txt creation and maintenance\n- Email support (48-hour response)\n\n**Estimated GEO score improvement:** +10-20 points in 6 months\n**Contract:** Minimum 6 months\n\n---\n\n### STANDARD — €5,000/month ⭐ Recommended for [COMPANY]\n*Best for: Sites with score 40-60 needing structured monthly work*\n\n**Everything in Basic, plus:**\n- Monthly full GEO audit + delta report\n- Monthly strategy call (60 minutes)\n- Content citability optimization (up to 10 pages/month)\n- Brand authority building (Wikipedia, Wikidata, LinkedIn optimization)\n- Platform-specific optimization (Google AIO, ChatGPT, Perplexity)\n- E-E-A-T improvements (author pages, credentials, freshness signals)\n- Slack channel for fast communication (24-hour response)\n\n**Estimated GEO score improvement:** +25-40 points in 6 months\n**Contract:** Minimum 6 months\n\n---\n\n### PREMIUM — €9,500/month\n*Best for: Sites with score 0-40 with critical issues, or competitive industries*\n\n**Everything in Standard, plus:**\n- Bi-weekly strategy calls\n- Technical SEO implementation support (Core Web Vitals, SSR, speed)\n- Full content strategy + production (4 optimized articles/month)\n- Active brand building (Reddit, YouTube, industry citations)\n- Competitor monitoring and response\n- Dedicated account manager\n- Priority support (4-hour response)\n\n**Estimated GEO score improvement:** +40-60 points in 6 months\n**Contract:** Minimum 12 months\n\n---\n\n## ROI Projection for [COMPANY NAME]\n\nBased on your current GEO score of [SCORE]/100 and industry benchmarks:\n\n| Scenario | 6-Month Score | AI Traffic Increase | Est. Additional Value/Month |\n|----------|--------------|--------------------|-----------------------------|\n| No action | [SCORE + 2]/100 | +5% (organic growth) | €[LOW] |\n| Basic package | [SCORE + 15]/100 | +30-40% | €[MED] |\n| Standard package | [SCORE + 32]/100 | +60-90% | €[HIGH] |\n| Premium package | [SCORE + 50]/100 | +100-150% | €[VERY HIGH] |\n\n**Assumptions:**\n- Based on estimated [X] monthly organic visitors to [DOMAIN]\n- AI search is projected to drive 25-40% of organic discovery by end of 2026\n- AI-referred traffic converts at 4.4x the rate of regular organic traffic\n- Calculations use conservative estimates — actual results may vary\n\n**Payback period (Standard package):** [X] months based on current traffic\n\n---\n\n## Engagement Timeline\n\n### Month 1 — Foundation\n- Kick-off call and onboarding (Week 1)\n- Full technical audit + baseline metrics capture\n- Quick wins implementation: robots.txt, schema, llms.txt, meta descriptions\n- Expected score improvement: +5-10 points\n\n### Month 2-3 — Optimization\n- Content citability rewrites (top 10 pages)\n- E-E-A-T improvements: author pages, credentials, dates\n- Platform-specific optimization (Google AIO, ChatGPT, Perplexity)\n- Brand presence: LinkedIn, Wikipedia/Wikidata groundwork\n- Expected score improvement: +15-25 points cumulative\n\n### Month 4-6 — Authority Building\n- Brand mention campaigns (Reddit, industry sites, YouTube)\n- Topical authority content strategy\n- Monthly reports showing score improvements\n- Expected score improvement: +30-45 points cumulative\n\n### Month 6 — Review\n- Full re-audit with before/after comparison\n- ROI report\n- Renewal discussion\n\n---\n\n## Why Us\n\n- **GEO specialists**: We focus exclusively on AI search optimization, not traditional SEO agencies adapting to GEO\n- **Transparent reporting**: Monthly reports show exactly what changed and why\n- **No lock-in beyond minimum**: Month-to-month after initial commitment\n- **Proven methodology**: 11-dimension GEO audit covering all major AI platforms\n- **Fast results**: Quick wins visible within 30 days\n\n---\n\n## Investment Summary\n\n| Package | Monthly | 6-Month | 12-Month |\n|---------|---------|---------|----------|\n| Basic | €2,500 | €15,000 | €30,000 |\n| Standard | €5,000 | €30,000 | €60,000 |\n| Premium | €9,500 | €57,000 | €114,000 |\n\n*All prices exclude VAT. Payment terms: monthly, due within 15 days of invoice.*\n\n---\n\n## Next Steps\n\nTo move forward:\n\n1. **Review this proposal** and share any questions\n2. **Schedule a 30-minute call** to walk through findings together: [CALENDAR LINK]\n3. **Sign the service agreement** (sent separately upon acceptance)\n4. **Kick-off call** scheduled for your chosen start date\n\nThis proposal is valid for **30 days** from the date above.\n\n---\n\n## Terms & Conditions\n\n- **Minimum commitment:** As stated per package above\n- **Cancellation:** 30-day written notice after minimum term\n- **Confidentiality:** All audit findings and client data are strictly confidential\n- **Results:** We guarantee effort and methodology, not specific ranking outcomes\n- **Reporting:** Monthly reports delivered by the 5th of each month\n- **Access needed:** Read access to Google Analytics / Search Console (if available)\n\n---\n\n*This proposal was prepared using GEO-SEO analysis tools and reflects findings\nfrom the audit of [DOMAIN] conducted on [DATE]. All scores and recommendations\nare based on current industry best practices for Generative Engine Optimization.*\n```\n\n---\n\n## Output\n\n1. Save proposal to `~/.geo-prospects/proposals/<domain>-proposal-<date>.md`\n2. Update prospect record: set `status` to `proposal`, save `proposal_file` path\n3. Print confirmation:\n   ```\n   ✓ Proposal generated: ~/.geo-prospects/proposals/electron-srl.com-proposal-2026-03-12.md\n   ✓ Prospect status updated: Qualified → Proposal\n   ✓ Recommended package: STANDARD (€5,000/month) — Score 32/100\n\n   Next: Share the proposal file or run `/geo report-pdf` for a visual version.\n   ```\n\n## Pricing Recommendation Logic\n\nBase recommendation on GEO score:\n- Score 0-40 → Recommend **Premium** (critical issues require intensive work)\n- Score 41-60 → Recommend **Standard** (structured monthly optimization)\n- Score 61-75 → Recommend **Basic** (maintenance + targeted improvements)\n- Score 76+ → Offer **Basic** or quarterly retainer check-in\n\n<!-- File: skills/geo-prospect/SKILL.md (Tokens: ~1841 | Category: anthropic-skill) -->\n---\nname: geo-prospect\ndescription: >\n  CRM-lite for managing GEO agency prospects and clients. Track leads through\n  the full sales pipeline: Lead → Qualified → Proposal Sent → Won → Lost.\n  Store audit history, notes, deal values, and generate pipeline summaries.\n  Use when user says \"prospect\", \"lead\", \"client\", \"pipeline\", \"crm\", \"nuovo prospect\",\n  \"aggiungi cliente\", or when managing the business side of GEO services.\nversion: 1.0.0\ntags: [geo, business, crm, prospect, pipeline, sales]\nallowed-tools: Read, Write, Bash, Glob\n---\n\n# GEO Prospect Manager\n\n## Purpose\n\nManage GEO agency prospects and clients through the full sales lifecycle.\nAll data is stored in `~/.geo-prospects/prospects.json` (persistent across sessions).\n\n---\n\n## Commands\n\n| Command | What It Does |\n|---------|-------------|\n| `/geo prospect new <domain>` | Create new prospect (interactive prompts) |\n| `/geo prospect list` | Show all prospects with pipeline status |\n| `/geo prospect list <status>` | Filter: lead, qualified, proposal, won, lost |\n| `/geo prospect show <id-or-domain>` | Full prospect detail with history |\n| `/geo prospect audit <id-or-domain>` | Run quick GEO audit and save to prospect record |\n| `/geo prospect note <id-or-domain> \"<text>\"` | Add interaction note with timestamp |\n| `/geo prospect status <id-or-domain> <new-status>` | Move through pipeline |\n| `/geo prospect won <id-or-domain> <monthly-value>` | Mark as won, set contract value |\n| `/geo prospect lost <id-or-domain> \"<reason>\"` | Mark as lost with reason |\n| `/geo prospect pipeline` | Visual pipeline summary with revenue forecast |\n\n---\n\n## Data Structure\n\nEach prospect is stored as a JSON record:\n\n```json\n{\n  \"id\": \"PRO-001\",\n  \"company\": \"Electron Srl\",\n  \"domain\": \"electron-srl.com\",\n  \"contact_email\": \"info@electron-srl.com\",\n  \"contact_name\": \"\",\n  \"industry\": \"Educational Equipment Manufacturing\",\n  \"country\": \"Italy\",\n  \"status\": \"qualified\",\n  \"geo_score\": 32,\n  \"audit_date\": \"2026-03-12\",\n  \"audit_file\": \"~/.geo-prospects/audits/electron-srl.com-2026-03-12.md\",\n  \"proposal_file\": \"~/.geo-prospects/proposals/electron-srl.com-proposal.md\",\n  \"monthly_value\": 0,\n  \"contract_start\": null,\n  \"contract_months\": 0,\n  \"notes\": [\n    {\n      \"date\": \"2026-03-12\",\n      \"text\": \"Initial GEO quick scan. Score 32/100 - Critical tier. Strong candidate for GEO services.\"\n    }\n  ],\n  \"created_at\": \"2026-03-12\",\n  \"updated_at\": \"2026-03-12\"\n}\n```\n\n---\n\n## Orchestration Instructions\n\n### `/geo prospect new <domain>`\n\n1. Check if `~/.geo-prospects/prospects.json` exists, create if not (empty array)\n2. Auto-detect company name from domain (e.g., `electron-srl.com` → `Electron Srl`)\n3. Assign next sequential ID: `PRO-001`, `PRO-002`, etc.\n4. Ask user for:\n   - Contact name (optional)\n   - Contact email\n   - Monthly contract value estimate (optional)\n5. Set status to `lead`\n6. Save to JSON file\n7. Suggest next step: \"Run `/geo prospect audit electron-srl.com` to score this prospect\"\n\n### `/geo prospect list`\n\nRead `~/.geo-prospects/prospects.json` and render a summary table:\n\n```\nGEO Prospect Pipeline — March 2026\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\nID       Domain                  Company           Status      Score  Value\n───────  ──────────────────────  ────────────────  ──────────  ─────  ──────\nPRO-001  electron-srl.com        Electron Srl      Qualified   32/100  €4.5K\nPRO-002  acme.com                ACME Corp         Lead        —       —\nPRO-003  bigshop.it              BigShop           Won         41/100  €6.0K\n\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\nPipeline: 1 lead | 1 qualified | 0 proposals | 1 won | 0 lost\nCommitted MRR: €6,000 | Pipeline Value: €4,500\n```\n\n### `/geo prospect audit <id-or-domain>`\n\n1. Run `/geo quick <domain>` to get GEO snapshot score\n2. Save score to prospect record: `geo_score`, `audit_date`\n3. Save audit output to `~/.geo-prospects/audits/<domain>-<date>.md`\n4. Update `audit_file` path in prospect record\n5. Add auto-note: \"Quick audit run. GEO Score: XX/100.\"\n6. If score < 55: suggest \"Score indicates strong sales opportunity. Run `/geo proposal <domain>` to generate proposal.\"\n\n### `/geo prospect note <id-or-domain> \"<text>\"`\n\n1. Find prospect by ID or domain\n2. Append note with current ISO date\n3. Save back to JSON\n4. Confirm: \"Note added to Electron Srl (PRO-001)\"\n\n### `/geo prospect status <id-or-domain> <status>`\n\nValid statuses: `lead`, `qualified`, `proposal`, `won`, `lost`\n\n1. Update status field\n2. Add auto-note: \"Status changed to <status>\"\n3. Save and confirm\n\n### `/geo prospect pipeline`\n\nVisual revenue-focused pipeline summary:\n\n```\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\nGEO AGENCY PIPELINE SUMMARY — March 2026\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\nSTAGE          COUNT   POTENTIAL VALUE   NOTES\n─────────────  ─────   ───────────────   ─────────────────────\nLead             2      €8,000/mo        New discoveries\nQualified        1      €4,500/mo        Ready for proposal\nProposal Sent    1      €6,000/mo        Awaiting signature\nWon              3      €18,500/mo       Active clients (MRR)\nLost             1      —                Budget freeze\n\nCOMMITTED MRR:        €18,500\nPIPELINE (qualified+): €10,500\nTOTAL POTENTIAL:      €29,000/mo → €348,000/yr\n\nNext actions:\n→ PRO-003 (acme.com): Send proposal — score 38/100 (strong case)\n→ PRO-007 (shop.it): Follow up — proposal sent 8 days ago\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n```\n\n---\n\n## Storage Location\n\nAll data stored in `~/.geo-prospects/`:\n```\n~/.geo-prospects/\n├── prospects.json          # Main CRM database\n├── audits/                 # Quick audit snapshots\n│   └── electron-srl.com-2026-03-12.md\n└── proposals/              # Generated proposals\n    └── electron-srl.com-proposal.md\n```\n\nCreate directory if it does not exist: `mkdir -p ~/.geo-prospects/audits ~/.geo-prospects/proposals`\n\n---\n\n## Pipeline Stage Definitions\n\n| Status | Meaning | Typical Next Action |\n|--------|---------|---------------------|\n| `lead` | Discovered, not yet contacted | Run quick audit, assess opportunity |\n| `qualified` | Audit done, confirmed pain points | Generate proposal |\n| `proposal` | Proposal sent, awaiting decision | Follow up, answer questions |\n| `won` | Contract signed, active client | Run full audit, start onboarding |\n| `lost` | Deal closed lost | Log reason for future reference |\n\n---\n\n## Output\n\n- All commands print confirmation + current prospect status to terminal\n- No external files unless explicitly saving audits/proposals\n- JSON database is the single source of truth\n\n<!-- File: skills/geo-report-pdf/SKILL.md (Tokens: ~1331 | Category: anthropic-skill) -->\n---\nname: geo-report-pdf\ndescription: Generate a professional PDF report from a GEO audit using pandoc + Chrome headless. Converts GEO-AUDIT-REPORT.md into a styled, client-ready PDF with a cover page, color-coded score tables, severity-tagged findings, and a 90-day roadmap.\nversion: 2.0.0\nauthor: geo-seo-claude\ntags: [geo, pdf, report, client-deliverable, professional]\nallowed-tools: Read, Grep, Glob, Bash, Write\n---\n\n# GEO PDF Report Generator (pandoc pipeline)\n\n## Prerequisites\n\n- **pandoc** — `brew install pandoc`\n- **Google Chrome** — must be installed at `/Applications/Google Chrome.app/`\n\nNo Python dependencies. No ReportLab. No JSON data wrangling.\n\n## How It Works\n\n1. Read `GEO-AUDIT-REPORT.md` in the current directory (created by `/geo audit`)\n2. Extract cover metadata from the report (brand name, domain, GEO score, date, locations)\n3. Run `pandoc` with the bundled CSS + HTML template to produce a self-contained `GEO-REPORT.html`\n4. Run Chrome headless to print the HTML to `GEO-REPORT.pdf`\n\nThe pandoc template (`~/.claude/skills/geo/templates/geo-report-template.html`) injects:\n- A full-bleed dark navy cover section with the GEO score badge\n- Per-section cover metadata (date, business type, locations, platform)\n- JavaScript that runs inside Chrome before printing to color-code score cells and severity-tag finding sections\n\n## Workflow\n\n### Step 1: Check for audit report\n\nLook for `GEO-AUDIT-REPORT.md` in the current directory. If absent, tell the user to run `/geo audit <url>` first.\n\n### Step 2: Extract cover metadata from the report\n\nRead the top of `GEO-AUDIT-REPORT.md` and extract:\n\n| Field | Where to find it |\n|---|---|\n| `brand_name` | First H1 title (after \"GEO Audit Report:\") |\n| `domain` | Second bold line (e.g. `**Domain:** alexamediasolutions.com`) |\n| `geo_score` | Line matching `## Overall GEO Score: XX / 100` |\n| `score_label` | Word after the score on that same line (e.g. \"Poor\", \"Fair\", \"Good\") |\n| `date` | `**Audit Date:**` line |\n| `business_type` | `**Business Type:**` line |\n| `locations` | `**Locations:**` line |\n| `platform` | `**CMS:**` line |\n\n### Step 3: Run pandoc\n\n```bash\npandoc GEO-AUDIT-REPORT.md \\\n  --to html5 \\\n  --standalone \\\n  --embed-resources \\\n  --template ~/.claude/skills/geo/templates/geo-report-template.html \\\n  --css ~/.claude/skills/geo/templates/geo-report-style.css \\\n  --metadata title=\"GEO Audit Report — <brand_name>\" \\\n  --metadata brand_name=\"<brand_name>\" \\\n  --metadata domain=\"<domain>\" \\\n  --metadata geo_score=\"<geo_score>\" \\\n  --metadata score_label=\"<score_label>\" \\\n  --metadata date=\"<date>\" \\\n  --metadata business_type=\"<business_type>\" \\\n  --metadata locations=\"<locations>\" \\\n  --metadata platform=\"<platform>\" \\\n  -o GEO-REPORT.html\n```\n\nReplace `<field>` placeholders with values extracted in Step 2. If a field is not found in the report, omit that `--metadata` flag — the template has sensible defaults.\n\n### Step 4: Run Chrome headless\n\n```bash\n\"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome\" \\\n  --headless=new \\\n  --disable-gpu \\\n  --no-sandbox \\\n  --print-to-pdf=\"$(pwd)/GEO-REPORT.pdf\" \\\n  --print-to-pdf-no-header \\\n  --no-pdf-header-footer \\\n  --virtual-time-budget=5000 \\\n  \"file://$(pwd)/GEO-REPORT.html\"\n```\n\n### Step 5: Report completion\n\nTell the user:\n- `GEO-REPORT.pdf` was generated in the current directory\n- File size\n- Optionally: `open GEO-REPORT.pdf` to preview it\n\n## What the PDF Contains\n\n- **Cover page** — Dark navy gradient, brand name, domain, GEO score badge (colored by score), audit date, business type, locations, CMS platform\n- **Score tables** — Cells containing `XX/100` are color-coded: ≥80 green, ≥65 blue, ≥50 amber, ≥35 orange, <35 red\n- **Finding sections** — `h3` headings containing \"Critical / High / Medium / Low\" get severity-colored left-border callout blocks (red / orange / yellow / green)\n- **Section page breaks** — Major sections (High Priority, 90-Day Roadmap, Component Score Summary, Generated Schema) break to new pages automatically\n- **Code blocks** — JSON schema templates render with dark theme monospace styling\n- **Page footer** — Brand name · GEO Audit · date + page numbers (via CSS `@page`)\n\n## Customizing the Report\n\n- **Colors / typography** — Edit `~/.claude/skills/geo/templates/geo-report-style.css`\n- **Cover layout** — Edit `~/.claude/skills/geo/templates/geo-report-template.html`\n- **Score thresholds for color-coding** — Edit the `scoreColor()` function in the template's `<script>` block\n- **Which sections get page breaks** — Edit the `breakBefore` array in the template's `<script>` block\n\n## Troubleshooting\n\n| Problem | Fix |\n|---|---|\n| `pandoc: command not found` | `brew install pandoc` |\n| Chrome not found | Check path: `/Applications/Google Chrome.app/Contents/MacOS/Google Chrome` |\n| PDF is blank / empty | Increase `--virtual-time-budget` to 8000 |\n| Cover metadata missing | Check GEO-AUDIT-REPORT.md has the standard header format |\n| Fonts not loading | PDF is rendered offline; system fonts are used as fallback — this is expected |\n\n<!-- File: skills/geo-report/SKILL.md (Tokens: ~4279 | Category: anthropic-skill) -->\n---\nname: geo-report\ndescription: Generate a professional, client-facing GEO report combining all audit results into a single deliverable with scores, findings, and prioritized actions\nversion: 1.0.0\nauthor: geo-seo-claude\ntags: [geo, report, client-deliverable, executive-summary, action-plan]\nallowed-tools: Read, Grep, Glob, Bash, WebFetch, Write\n---\n\n# GEO Client Report Generator\n\n## Purpose\n\nThis skill aggregates outputs from all GEO audit skills into a single, professional report that can be delivered directly to a client or stakeholder. The report is written for **business owners and marketing leaders**, not developers — technical findings are translated into business impact and clear action items with priority levels.\n\n## How to Use This Skill\n\n1. Run the following audits first (or use existing report data):\n   - `geo-platform-optimizer` -> GEO-PLATFORM-OPTIMIZATION.md\n   - `geo-schema` -> GEO-SCHEMA-REPORT.md\n   - `geo-technical` -> GEO-TECHNICAL-AUDIT.md\n   - `geo-content` -> GEO-CONTENT-ANALYSIS.md\n   - (Optional) `geo-llmstxt` -> llms.txt assessment\n   - (Optional) `geo-brand-mentions` -> brand authority data\n2. Collect all scores and findings\n3. Calculate the composite GEO Readiness Score\n4. Generate the client report using the template below\n5. Output: GEO-CLIENT-REPORT.md\n\n---\n\n## GEO Readiness Score Calculation\n\n### Component Weights\n\n| Component | Weight | Source Skill |\n|---|---|---|\n| AI Platform Readiness | 25% | geo-platform-optimizer |\n| Content Quality & E-E-A-T | 25% | geo-content |\n| Technical Foundation | 20% | geo-technical |\n| Schema & Structured Data | 15% | geo-schema |\n| Brand Authority & Entity Presence | 15% | geo-platform-optimizer (entity signals) |\n\n### Score Formula\n```\nGEO Score = (Platform Score * 0.25) + (Content Score * 0.25) + (Technical Score * 0.20) + (Schema Score * 0.15) + (Brand Score * 0.15)\n```\n\nRound to the nearest integer. Cap at 100.\n\n### Score Interpretation for Clients\n\n| Score Range | Label | Client-Facing Description |\n|---|---|---|\n| 85-100 | Excellent | Your site is well-positioned for AI search. Focus on maintaining and expanding your advantage. |\n| 70-84 | Good | Solid foundation with clear opportunities to improve AI visibility. Targeted optimizations will yield significant results. |\n| 55-69 | Moderate | Your site has gaps in AI readiness that competitors may be exploiting. A structured optimization plan will close these gaps. |\n| 40-54 | Below Average | Significant barriers to AI search visibility exist. Without action, your brand risks being invisible in AI-generated answers. |\n| 0-39 | Needs Attention | Critical AI readiness issues require immediate action. Your competitors are likely capturing the AI search traffic your brand should own. |\n\n---\n\n## Report Template\n\nThe complete report follows this exact structure. Each section includes instructions on what to write and how.\n\n---\n\n### Section 1: Executive Summary\n\nWrite exactly ONE paragraph (4-6 sentences) covering:\n- What was analyzed (domain, number of pages, date of analysis)\n- The overall GEO Readiness Score with context (\"XX/100, which places [brand] in the [label] tier\")\n- The single most impactful finding (positive or negative)\n- Top 3 priority recommendations in one sentence\n- One sentence on the business impact (\"Addressing these recommendations could increase AI-driven traffic by an estimated XX%, representing approximately $X,XXX/month based on current traffic patterns\")\n\n**Tone**: Confident, direct, professional. No jargon. No hedging. Write as a consultant delivering findings, not as a tool generating a report.\n\n### Section 2: GEO Readiness Score\n\nPresent the overall score prominently:\n\n```\n## GEO Readiness Score: XX/100 — [Label]\n```\n\nThen break down by component in a table:\n\n```markdown\n| Component | Score | Weight | Weighted Score |\n|---|---|---|---|\n| AI Platform Readiness | XX/100 | 25% | XX |\n| Content Quality & E-E-A-T | XX/100 | 25% | XX |\n| Technical Foundation | XX/100 | 20% | XX |\n| Schema & Structured Data | XX/100 | 15% | XX |\n| Brand Authority | XX/100 | 15% | XX |\n| **Overall** | | | **XX/100** |\n```\n\n### Section 3: AI Visibility Dashboard\n\nPresent per-platform readiness scores:\n\n```markdown\n## AI Visibility Dashboard\n\n| AI Platform | Readiness Score | Key Gap | Priority Action |\n|---|---|---|---|\n| Google AI Overviews | XX/100 | [One-line gap] | [One-line action] |\n| ChatGPT Web Search | XX/100 | [One-line gap] | [One-line action] |\n| Perplexity AI | XX/100 | [One-line gap] | [One-line action] |\n| Google Gemini | XX/100 | [One-line gap] | [One-line action] |\n| Bing Copilot | XX/100 | [One-line gap] | [One-line action] |\n```\n\nAdd a brief paragraph explaining what these scores mean: \"These scores reflect how likely your content is to be cited by each AI search platform. A score below 50 indicates significant barriers to citation on that platform.\"\n\n### Section 4: AI Crawler Access Status\n\nPresent as a clear table:\n\n```markdown\n## AI Crawler Access\n\n| AI Crawler | Platform | Status | Impact | Recommendation |\n|---|---|---|---|---|\n| Googlebot | Google Search + AIO | Allowed/Blocked | Critical | [Action] |\n| GPTBot | ChatGPT / OpenAI | Allowed/Blocked | High | [Action] |\n| Bingbot | Bing + Copilot + ChatGPT | Allowed/Blocked | High | [Action] |\n| PerplexityBot | Perplexity AI | Allowed/Blocked | Medium | [Action] |\n| Google-Extended | Gemini Training | Allowed/Blocked | Medium | [Action] |\n| ClaudeBot | Anthropic Claude | Allowed/Blocked | Medium | [Action] |\n| Applebot-Extended | Apple Intelligence | Allowed/Blocked | Medium | [Action] |\n```\n\n**Translate for the client**: \"Blocking AI crawlers is like closing your store during business hours. If a crawler cannot access your site, the AI platform it powers cannot cite your content. We recommend allowing all major AI crawlers unless you have a specific data licensing concern.\"\n\n### Section 5: Brand Authority Analysis\n\nPresent entity presence across platforms:\n\n```markdown\n## Brand Authority\n\n| Platform | Presence | Status | Impact on AI Visibility |\n|---|---|---|---|\n| Wikipedia | Yes/No | [Detail] | Very High — 47.9% of ChatGPT citations are Wikipedia |\n| Wikidata | Yes/No | [Detail] | High — machine-readable entity data |\n| LinkedIn | Yes/No | [Detail] | High — Bing Copilot and ChatGPT signal |\n| YouTube | Yes/No | [Detail] | High — Gemini and Perplexity signal |\n| Reddit | Yes/No | [Detail] | Very High — 46.7% of Perplexity citations are Reddit |\n| Google Knowledge Panel | Yes/No | [Detail] | High — Gemini entity recognition |\n| Crunchbase | Yes/No | [Detail] | Medium — entity validation |\n| GitHub | Yes/No | [Detail] | Medium — tech brand signal |\n```\n\n**Translate for the client**: \"AI platforms build trust by cross-referencing your brand across multiple authoritative sources. Each platform where your brand has an accurate, consistent presence increases the likelihood of being cited in AI answers.\"\n\n### Section 6: Citability Analysis\n\n#### Top 5 Most Citable Pages\nFor each page:\n- URL\n- Why it is citable (structure, depth, E-E-A-T signals)\n- One specific improvement that would make it even more citable\n\n#### Top 5 Least Citable Pages\nFor each page:\n- URL\n- Why it is unlikely to be cited (thin content, poor structure, missing signals)\n- Specific rewrite or restructure recommendation\n\n**Business impact framing**: \"Your most citable pages are your best candidates for appearing in AI-generated answers. Improving the 5 least citable pages represents the highest-ROI content investment you can make for AI visibility.\"\n\n### Section 7: Technical Health Summary\n\nPresent the key technical findings in business-friendly language:\n\n```markdown\n## Technical Health\n\n| Area | Status | Business Impact |\n|---|---|---|\n| Core Web Vitals | Good/Needs Work/Poor | [Impact on user experience and rankings] |\n| Server-Side Rendering | Yes/Partial/No | [Impact on AI crawler visibility] |\n| Mobile Optimization | Good/Needs Work/Poor | [Impact on Google's mobile-first indexing] |\n| Security (HTTPS + Headers) | Good/Needs Work/Poor | [Impact on trust signals] |\n| Page Speed | Fast/Average/Slow | [Impact on user experience and crawl budget] |\n| IndexNow Protocol | Implemented/Not | [Impact on Bing/ChatGPT indexing speed] |\n```\n\n**Critical finding callout**: If SSR is missing or partial, highlight this prominently: \"Your site uses client-side rendering, which means AI crawlers see an empty page when they visit. This is the single most impactful technical issue for AI search visibility. Until this is resolved, most AI platforms cannot cite your content.\"\n\n### Section 8: Schema & Structured Data\n\n```markdown\n## Schema & Structured Data\n\n### Current Implementation\n| Schema Type | Present | Status | AI Impact |\n|---|---|---|---|\n| Organization | Yes/No | [Valid/Issues] | Critical — entity recognition |\n| Article + Author | Yes/No | [Valid/Issues] | High — E-E-A-T signal |\n| sameAs (entity links) | Yes/No | [Count] links | Critical — cross-platform entity graph |\n| [Business-specific] | Yes/No | [Valid/Issues] | [Impact] |\n| WebSite + SearchAction | Yes/No | [Valid/Issues] | Medium — sitelinks |\n| BreadcrumbList | Yes/No | [Valid/Issues] | Low-Medium — navigation context |\n```\n\nIf schemas are missing, note: \"Ready-to-use structured data code has been prepared and is included in the technical appendix. Your development team can add this to your site with minimal effort.\"\n\n### Section 9: llms.txt Status\n\n```markdown\n## llms.txt — AI Content Guide\n\n| File | Status | Recommendation |\n|---|---|---|\n| /llms.txt | Present/Missing | [Action] |\n| /llms-full.txt | Present/Missing | [Action] |\n```\n\n**Translate for the client**: \"llms.txt is an emerging standard (similar to robots.txt) that tells AI systems what your site is about and which pages are most important. While not universally adopted yet, implementing it positions your brand ahead of competitors and provides direct guidance to AI platforms.\"\n\n### Section 10: Prioritized Action Plan\n\nThis is the most important section of the report. Organize actions by timeline and impact.\n\n```markdown\n## Prioritized Action Plan\n\n### Quick Wins (This Week)\n*High impact, low effort — can be implemented immediately*\n\n| # | Action | Impact | Effort | Platforms Affected |\n|---|---|---|---|---|\n| 1 | [Specific action] | [High/Med] | [Hours estimate] | [Which AI platforms] |\n| 2 | [Specific action] | [High/Med] | [Hours estimate] | [Which AI platforms] |\n```\n\n**Quick Win criteria**: Can be done in < 4 hours by one person. Examples:\n- Unblock AI crawlers in robots.txt\n- Add publication dates to existing content\n- Add author bylines with credentials\n- Fix broken meta descriptions\n- Add sameAs properties to existing Organization schema\n- Create/claim llms.txt file\n\n```markdown\n### Medium-Term Improvements (This Month)\n*Significant impact, moderate effort — requires content or technical changes*\n\n| # | Action | Impact | Effort | Platforms Affected |\n|---|---|---|---|---|\n| 1 | [Specific action] | [High/Med] | [Days estimate] | [Which AI platforms] |\n```\n\n**Medium-Term criteria**: 1-5 days of work. Examples:\n- Restructure top 10 pages with question-based headings and direct answers\n- Implement comprehensive Schema.org markup\n- Create author pages with credentials and sameAs links\n- Optimize Core Web Vitals (image compression, code splitting)\n- Register and configure Bing Webmaster Tools\n- Implement IndexNow protocol\n\n```markdown\n### Strategic Initiatives (This Quarter)\n*Long-term competitive advantage, requires ongoing investment*\n\n| # | Action | Impact | Effort | Platforms Affected |\n|---|---|---|---|---|\n| 1 | [Specific action] | [High/Med] | [Weeks estimate] | [Which AI platforms] |\n```\n\n**Strategic criteria**: Ongoing effort over weeks/months. Examples:\n- Build Wikipedia/Wikidata entity presence\n- Develop active Reddit community engagement strategy\n- Create YouTube content strategy aligned with search queries\n- Implement server-side rendering (if currently client-rendered)\n- Build topical authority through comprehensive content strategy\n- Establish original research/data publication program\n\n### Estimated Impact\nAfter the action plan, include an impact estimate:\n\n\"Based on industry benchmarks and the specific gaps identified in this audit:\n- **Quick Wins alone** could improve your GEO score by approximately [X-Y] points\n- **Full implementation** of this action plan could improve your GEO score to approximately [XX]/100\n- At current traffic levels and conversion rates, improved AI visibility represents an estimated **$X,XXX - $XX,XXX per month** in additional organic value\"\n\nUse conservative estimates. Base the dollar figure on:\n- Current estimated organic traffic value (from analytics if available, or estimate from industry benchmarks)\n- AI search is projected to drive 25-40% of organic discovery by end of 2026\n- A 10-point GEO score improvement typically correlates with a 15-25% increase in AI citation frequency\n\n### Section 11: Competitor Comparison (if competitor URLs provided)\n\nIf competitor URLs were analyzed alongside the primary domain:\n\n```markdown\n## Competitor Comparison\n\n| Metric | [Your Brand] | [Competitor 1] | [Competitor 2] |\n|---|---|---|---|\n| Overall GEO Score | XX/100 | XX/100 | XX/100 |\n| Google AIO Readiness | XX/100 | XX/100 | XX/100 |\n| ChatGPT Readiness | XX/100 | XX/100 | XX/100 |\n| Perplexity Readiness | XX/100 | XX/100 | XX/100 |\n| Schema Coverage | [Detail] | [Detail] | [Detail] |\n| Wikipedia Presence | Yes/No | Yes/No | Yes/No |\n| Reddit Authority | [Detail] | [Detail] | [Detail] |\n| SSR Status | Yes/No | Yes/No | Yes/No |\n\n### Where You Lead\n[Specific areas where the brand outperforms competitors]\n\n### Where You Trail\n[Specific areas where competitors have an advantage, with actions to close the gap]\n```\n\n### Section 12: Appendix\n\n```markdown\n## Appendix\n\n### Methodology\nThis GEO audit was conducted using the following methodology:\n- **Pages analyzed**: [List of specific URLs audited]\n- **Platforms assessed**: Google AI Overviews, ChatGPT, Perplexity AI, Google Gemini, Bing Copilot\n- **Technical checks**: HTTP headers, robots.txt, HTML source analysis, structured data validation\n- **Content assessment**: E-E-A-T framework (Experience, Expertise, Authoritativeness, Trustworthiness) per Google's December 2025 Quality Rater Guidelines\n- **Schema validation**: JSON-LD parsing and Schema.org specification compliance\n- **Date of analysis**: [Date]\n\n### Data Sources\n- Google Search Quality Rater Guidelines (December 2025 update)\n- Schema.org full type hierarchy\n- Industry citation studies (Zyppy, Authoritas, Semrush AI search research, 2025-2026)\n- Core Web Vitals thresholds (web.dev, 2026 standards)\n- AI crawler user-agent documentation (per-platform official docs)\n\n### Glossary\n\n| Term | Definition |\n|---|---|\n| GEO | Generative Engine Optimization — optimizing content to be cited by AI search platforms |\n| AIO | AI Overviews — Google's AI-generated answer boxes at the top of search results |\n| E-E-A-T | Experience, Expertise, Authoritativeness, Trustworthiness — Google's content quality framework |\n| SSR | Server-Side Rendering — generating HTML on the server so crawlers can read content without JavaScript |\n| CWV | Core Web Vitals — Google's page experience metrics (LCP, INP, CLS) |\n| LCP | Largest Contentful Paint — time to render the largest visible element |\n| INP | Interaction to Next Paint — responsiveness metric (replaced FID in March 2024) |\n| CLS | Cumulative Layout Shift — visual stability metric |\n| JSON-LD | JavaScript Object Notation for Linked Data — preferred structured data format |\n| sameAs | Schema.org property linking an entity to its profiles on other platforms |\n| IndexNow | Protocol for instantly notifying search engines of content changes |\n| llms.txt | Proposed standard file for guiding AI systems about a site's content |\n| YMYL | Your Money or Your Life — topics requiring highest E-E-A-T standards |\n| SERP | Search Engine Results Page |\n| Topical Authority | The depth and breadth of a site's coverage of its core topic area |\n```\n\n---\n\n## Formatting and Tone Guidelines\n\n### Formatting\n- Use clean markdown throughout: tables, headers (H2/H3), bullet points, bold for emphasis\n- Tables for data, bullets for recommendations, bold for key terms\n- One blank line between sections for readability\n- Use horizontal rules (---) to separate major sections\n- All URLs should be absolute (not relative)\n\n### Tone\n- **Professional but accessible** — written for a business owner, not a developer\n- **Confident and direct** — state findings as conclusions, not possibilities\n- **Action-oriented** — every finding should connect to a specific action\n- **Business-impact focused** — translate technical issues into business outcomes\n- Avoid: jargon without explanation, hedging language, passive voice, excessive caveats\n- Use: \"Your site [does/does not]...\", \"We recommend...\", \"This impacts...\"\n\n### Dollar-Value Framing\nWhere possible, connect recommendations to business value:\n- \"Improving your Google AIO readiness from 35 to 70 could increase your presence in AI Overviews by an estimated 50%, which at current search volumes represents approximately 2,000 additional monthly visitors\"\n- \"Server-side rendering would make your content accessible to ChatGPT, Perplexity, and other AI platforms — collectively representing an audience your competitors are already reaching\"\n- \"The investment in Schema.org markup (estimated 8-16 hours of developer time) could increase your entity recognition score from 20 to 75, significantly improving citation probability\"\n\nBe conservative with estimates. State assumptions clearly. Never guarantee specific results.\n\n---\n\n## Output\n\nGenerate **GEO-CLIENT-REPORT.md** using the complete template above, filled with actual audit data. The report should be:\n- 40-80 pages equivalent in detail (3,000-6,000 words)\n- Ready to send to a client without editing\n- Self-contained (no references to other report files — all relevant data is included)\n- Printable and presentable (clean markdown formatting)\n\n<!-- File: skills/geo-schema/SKILL.md (Tokens: ~3625 | Category: anthropic-skill) -->\n---\nname: geo-schema\ndescription: Schema.org structured data audit and generation optimized for AI discoverability — detect, validate, and generate JSON-LD markup\nversion: 1.0.0\nauthor: geo-seo-claude\ntags: [geo, schema, structured-data, json-ld, entity-recognition, ai-discoverability]\nallowed-tools: Read, Grep, Glob, Bash, WebFetch, Write\n---\n\n# GEO Schema & Structured Data\n\n## Purpose\n\nStructured data is the primary machine-readable signal that tells AI systems what an entity IS, what it does, and how it connects to other entities. While schema markup has traditionally been about earning Google rich results, its role in GEO is fundamentally different: **structured data is how AI models understand and trust your entity**. A complete entity graph in structured data dramatically increases citation probability across all AI search platforms.\n\n## How to Use This Skill\n\n1. Fetch the target page HTML using `fetch_page.py` (see note below)\n2. Detect all existing structured data (JSON-LD, Microdata, RDFa)\n3. Validate detected schemas against Schema.org specifications\n4. Identify missing recommended schemas based on business type\n5. Generate ready-to-use JSON-LD code blocks\n6. Output GEO-SCHEMA-REPORT.md\n\n---\n\n## Step 1: Detection\n\n**IMPORTANT:** WebFetch converts HTML to markdown and strips `<head>` content, which removes JSON-LD blocks. Use `fetch_page.py` instead:\n```bash\npython3 ~/.claude/skills/geo/scripts/fetch_page.py <url> page\n```\nThe output includes a `structured_data` array with all parsed JSON-LD blocks from the page.\n\n### Scan for JSON-LD\nLook for `<script type=\"application/ld+json\">` blocks in the HTML. Parse each block as JSON. A page may contain multiple JSON-LD blocks — collect all of them.\n\n### Scan for Microdata\nLook for elements with `itemscope`, `itemtype`, and `itemprop` attributes. Map the hierarchy of nested items. Note: Microdata is harder for AI crawlers to parse than JSON-LD. Flag a recommendation to migrate to JSON-LD if Microdata is the only format found.\n\n### Scan for RDFa\nLook for elements with `typeof`, `property`, and `vocab` attributes. Similar to Microdata — recommend migration to JSON-LD.\n\n### Priority Order\nJSON-LD is the **strongly recommended format** for GEO. Google, Bing, and AI platforms all process JSON-LD most reliably. If the site uses Microdata or RDFa exclusively, flag this as a high-priority migration.\n\n---\n\n## Step 2: Validation\n\nFor each detected schema block, validate:\n\n1. **Valid JSON**: Is the JSON-LD syntactically valid? Check for trailing commas, unquoted keys, malformed strings.\n2. **Valid @type**: Does the `@type` match a recognized Schema.org type? Check against https://schema.org/docs/full.html.\n3. **Required Properties**: Does the schema include all required properties for its type? (See per-type requirements below.)\n4. **Recommended Properties**: Does the schema include recommended properties that increase AI discoverability?\n5. **sameAs Links**: Does the schema include `sameAs` properties linking to other platform presences?\n6. **URL Validity**: Do all URLs in the schema resolve (not 404)?\n7. **Nesting**: Is the schema properly nested (e.g., author inside Article, address inside Organization)?\n8. **Rendering Method**: Is the JSON-LD in the server-rendered HTML or injected via JavaScript? Per Google's December 2025 guidance, **JavaScript-injected structured data may face delayed processing**. Flag any schema that requires JS execution.\n\n---\n\n## Step 3: Schema Types for GEO\n\n### Organization (CRITICAL — every business site)\nEssential for entity recognition across all AI platforms. This is how AI models identify WHAT the business is.\n\n**Required properties:**\n- `@type`: \"Organization\" (or subtype: Corporation, LocalBusiness, etc.)\n- `name`: Official business name\n- `url`: Official website URL\n- `logo`: URL to logo image (ImageObject preferred)\n\n**Recommended properties for GEO:**\n- `sameAs`: Array of ALL platform URLs (see sameAs strategy below)\n- `description`: 1-2 sentence description of the organization\n- `foundingDate`: ISO 8601 date\n- `founder`: Person schema\n- `address`: PostalAddress schema\n- `contactPoint`: ContactPoint with telephone, email, contactType\n- `areaServed`: Geographic area\n- `numberOfEmployees`: QuantitativeValue\n- `industry`: Text or DefinedTerm\n- `award`: Array of awards received\n- `knowsAbout`: Array of topics the organization is expert in (strong GEO signal)\n\n### LocalBusiness (for businesses with physical locations)\nExtends Organization. Critical for local AI search results and Google Gemini.\n\n**Additional required properties:**\n- `address`: Full PostalAddress\n- `telephone`: Phone number\n- `openingHoursSpecification`: Operating hours\n\n**Recommended for GEO:**\n- `geo`: GeoCoordinates (latitude, longitude)\n- `priceRange`: Price indicator\n- `aggregateRating`: AggregateRating schema\n- `review`: Array of Review schemas\n- `hasMap`: URL to Google Maps\n\n### Article + Author (CRITICAL for publishers)\nThe Author schema is one of the strongest E-E-A-T signals for AI platforms.\n\n**Article required:**\n- `@type`: \"Article\" (or NewsArticle, BlogPosting, TechArticle)\n- `headline`: Article title\n- `datePublished`: ISO 8601\n- `dateModified`: ISO 8601 (critical for freshness signals)\n- `author`: Person or Organization schema\n- `publisher`: Organization schema with logo\n- `image`: Representative image\n\n**Author (Person) required for GEO:**\n- `name`: Full name\n- `url`: Author page URL on the site\n- `sameAs`: LinkedIn, Twitter, personal site, Google Scholar, ORCID\n- `jobTitle`: Professional title\n- `worksFor`: Organization schema\n- `knowsAbout`: Array of expertise areas\n- `alumniOf`: Educational institutions\n- `award`: Professional awards\n\n### Product (for e-commerce)\n**Required:**\n- `name`, `description`, `image`\n- `offers`: Offer with price, priceCurrency, availability\n- `brand`: Brand schema\n- `sku` or `gtin`/`mpn`\n\n**Recommended for GEO:**\n- `aggregateRating`: AggregateRating\n- `review`: Array of individual reviews\n- `category`: Product category\n- `material`, `weight`, `width`, `height` (where applicable)\n\n### FAQPage\n**Status as of 2024**: Google restricts FAQ rich results to government and health sites. However, the FAQPage schema still serves GEO purposes — AI platforms parse FAQ structured data for question-answer extraction. Implement it for AI readability even though rich results may not appear.\n\n**Structure:**\n- `@type`: \"FAQPage\"\n- `mainEntity`: Array of Question schemas, each with `acceptedAnswer` containing an Answer schema\n\n### SoftwareApplication (for SaaS)\n**Required:**\n- `name`, `description`\n- `applicationCategory`: e.g., \"BusinessApplication\"\n- `operatingSystem`: Supported platforms\n- `offers`: Pricing\n\n**Recommended for GEO:**\n- `aggregateRating`: User ratings\n- `featureList`: Array of features (strong citation signal)\n- `screenshot`: Screenshots\n- `softwareVersion`: Current version\n- `releaseNotes`: Link to changelog\n\n### WebSite + SearchAction (for sitelinks search box)\n**Structure:**\n```json\n{\n  \"@type\": \"WebSite\",\n  \"name\": \"Site Name\",\n  \"url\": \"https://example.com\",\n  \"potentialAction\": {\n    \"@type\": \"SearchAction\",\n    \"target\": {\n      \"@type\": \"EntryPoint\",\n      \"urlTemplate\": \"https://example.com/search?q={search_term_string}\"\n    },\n    \"query-input\": \"required name=search_term_string\"\n  }\n}\n```\n\n### Person (standalone — for personal brands, authors, thought leaders)\nUse as a standalone schema on About/Bio pages. This builds the entity graph for individual expertise.\n\n**Required:** `name`, `url`\n**Recommended for GEO:** `sameAs`, `jobTitle`, `worksFor`, `knowsAbout`, `alumniOf`, `award`, `description`, `image`\n\n### speakable Property (for voice/AI assistants)\nThe `speakable` property marks specific sections of content as particularly suitable for voice and AI assistant consumption. Add to Article or WebPage schemas.\n\n```json\n{\n  \"@type\": \"Article\",\n  \"speakable\": {\n    \"@type\": \"SpeakableSpecification\",\n    \"cssSelector\": [\".article-summary\", \".key-takeaway\"]\n  }\n}\n```\nThis signals to AI assistants which passages are the best candidates for citation or reading aloud.\n\n---\n\n## Step 4: Deprecated/Changed Schemas to Flag\n\n| Schema | Status | Note |\n|---|---|---|\n| HowTo | Rich results deprecated Aug 2023 | Still useful for AI parsing, but do not promise rich results |\n| FAQPage | Restricted to govt/health Aug 2023 | Still useful for AI parsing (see above) |\n| SpecialAnnouncement | Deprecated 2023 | Was for COVID; remove if still present |\n| CourseInfo | Replaced by Course updates 2024 | Use updated Course schema properties |\n| VideoObject `contentUrl` | Changed behavior 2024 | Must point to actual video file, not page URL |\n| Review snippet | Stricter enforcement 2024 | Self-serving reviews on product pages may not display |\n\nFlag any deprecated schemas found and recommend replacements.\n\n---\n\n## Step 5: sameAs Strategy (CRITICAL for Entity Recognition)\n\nThe `sameAs` property is the single most important structured data property for GEO. It tells AI systems: \"This entity on my website is the SAME entity as these profiles elsewhere.\" This creates the entity graph that AI platforms use to verify, trust, and cite sources.\n\n### Recommended sameAs Links (in priority order)\n\n1. **Wikipedia article** — highest authority entity link\n2. **Wikidata item** — machine-readable entity identifier (e.g., `https://www.wikidata.org/wiki/Q12345`)\n3. **LinkedIn** — company page or personal profile\n4. **YouTube** — channel URL\n5. **Twitter/X** — profile URL\n6. **Facebook** — page URL\n7. **Crunchbase** — company profile (for startups/tech)\n8. **GitHub** — organization or personal profile (for tech)\n9. **Google Scholar** — author profile (for researchers/academics)\n10. **ORCID** — researcher identifier (for academics)\n11. **Instagram** — profile URL\n12. **Apple App Store / Google Play** — app listings (for software)\n13. **BBB** — Better Business Bureau listing (for US businesses)\n14. **Industry directories** — relevant vertical directories\n\n### sameAs Audit Process\n1. Collect all known web presences for the entity\n2. Check that each URL resolves (not 404 or redirected)\n3. Verify the Organization/Person schema includes ALL of them\n4. Check that the information on each platform is consistent (name, description, founding date, etc.)\n5. Flag any platforms where the entity should have a presence but does not\n\n---\n\n## Step 6: JSON-LD Generation\n\nBased on the detected business type, generate ready-to-paste JSON-LD blocks. Always generate:\n\n1. **Organization or Person** (depending on entity type) — always\n2. **WebSite with SearchAction** — always for the homepage\n3. **Business-type-specific** — Article for publishers, Product for e-commerce, LocalBusiness for local, SoftwareApplication for SaaS\n4. **BreadcrumbList** — for any page deeper than homepage\n\n### Generation Rules\n- Use the `@graph` pattern to include multiple schemas in one JSON-LD block\n- All URLs must be absolute (not relative)\n- Include `@id` properties for cross-referencing between schemas\n- Use ISO 8601 for all dates\n- Include `speakable` on Article schemas with CSS selectors pointing to key content sections\n- Place JSON-LD in `<head>` section — NOT injected via JavaScript\n\n### Template: Organization with Full GEO Signals\n```json\n{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"Organization\",\n  \"@id\": \"https://example.com/#organization\",\n  \"name\": \"Company Name\",\n  \"url\": \"https://example.com\",\n  \"logo\": {\n    \"@type\": \"ImageObject\",\n    \"url\": \"https://example.com/logo.png\",\n    \"width\": 600,\n    \"height\": 60\n  },\n  \"description\": \"Concise description of what the company does.\",\n  \"foundingDate\": \"2020-01-15\",\n  \"founder\": {\n    \"@type\": \"Person\",\n    \"name\": \"Founder Name\",\n    \"sameAs\": \"https://www.linkedin.com/in/founder\"\n  },\n  \"address\": {\n    \"@type\": \"PostalAddress\",\n    \"streetAddress\": \"123 Main St\",\n    \"addressLocality\": \"City\",\n    \"addressRegion\": \"State\",\n    \"postalCode\": \"12345\",\n    \"addressCountry\": \"US\"\n  },\n  \"contactPoint\": {\n    \"@type\": \"ContactPoint\",\n    \"telephone\": \"+1-555-555-5555\",\n    \"contactType\": \"customer service\",\n    \"email\": \"support@example.com\"\n  },\n  \"sameAs\": [\n    \"https://en.wikipedia.org/wiki/Company_Name\",\n    \"https://www.wikidata.org/wiki/Q12345\",\n    \"https://www.linkedin.com/company/company-name\",\n    \"https://www.youtube.com/@companyname\",\n    \"https://twitter.com/companyname\",\n    \"https://github.com/companyname\",\n    \"https://www.crunchbase.com/organization/company-name\"\n  ],\n  \"knowsAbout\": [\n    \"Topic 1\",\n    \"Topic 2\",\n    \"Topic 3\"\n  ]\n}\n```\n\n---\n\n## Scoring Rubric (0-100)\n\n| Criterion | Points | How to Score |\n|---|---|---|\n| Organization/Person schema present and complete | 15 | 15 if full, 10 if basic, 0 if none |\n| sameAs links (5+ platforms) | 15 | 3 per valid sameAs link, max 15 |\n| Article schema with author details | 10 | 10 if full author schema, 5 if name only, 0 if none |\n| Business-type-specific schema present | 10 | 10 if complete, 5 if partial, 0 if missing |\n| WebSite + SearchAction | 5 | 5 if present, 0 if not |\n| BreadcrumbList on inner pages | 5 | 5 if present, 0 if not |\n| JSON-LD format (not Microdata/RDFa) | 5 | 5 if JSON-LD, 3 if mixed, 0 if only Microdata/RDFa |\n| Server-rendered (not JS-injected) | 10 | 10 if in HTML source, 5 if JS but in head, 0 if dynamic JS |\n| speakable property on articles | 5 | 5 if present, 0 if not |\n| Valid JSON + valid Schema.org types | 10 | 10 if no errors, 5 if minor issues, 0 if major errors |\n| knowsAbout property on Organization/Person | 5 | 5 if present with 3+ topics, 0 if missing |\n| No deprecated schemas present | 5 | 5 if clean, 0 if deprecated schemas found |\n\n---\n\n## Output Format\n\nGenerate **GEO-SCHEMA-REPORT.md** with:\n\n```markdown\n# GEO Schema & Structured Data Report — [Domain]\nDate: [Date]\n\n## Schema Score: XX/100\n\n## Detected Schemas\n| Page | Schema Type | Format | Status | Issues |\n|---|---|---|---|---|\n| / | Organization | JSON-LD | Valid | Missing sameAs |\n| /blog/post-1 | Article | JSON-LD | Valid | No author schema |\n\n## Validation Results\n[List each schema with pass/fail per property]\n\n## Missing Recommended Schemas\n[List schemas that should be present based on business type but are not]\n\n## sameAs Audit\n| Platform | URL | Status |\n|---|---|---|\n| Wikipedia | [URL or \"Not found\"] | Present/Missing |\n| LinkedIn | [URL or \"Not found\"] | Present/Missing |\n[Continue for all recommended platforms]\n\n## Generated JSON-LD Code\n[Ready-to-paste JSON-LD blocks for each missing or incomplete schema]\n\n## Implementation Notes\n- Where to place each JSON-LD block\n- Server-rendering requirements\n- Testing with Google Rich Results Test and Schema.org Validator\n```\n\n<!-- File: skills/geo-technical/SKILL.md (Tokens: ~5679 | Category: anthropic-skill) -->\n---\nname: geo-technical\ndescription: Technical SEO audit with GEO-specific checks — crawlability, indexability, security, performance, SSR, and AI crawler access\nversion: 1.0.0\nauthor: geo-seo-claude\ntags: [geo, technical-seo, core-web-vitals, ssr, crawlability, security, performance]\nallowed-tools: Read, Grep, Glob, Bash, WebFetch, Write\n---\n\n# GEO Technical SEO Audit\n\n## Purpose\n\nTechnical SEO forms the foundation of both traditional search visibility and AI search citation. A technically broken site cannot be crawled, indexed, or cited by any platform. This skill audits 8 categories of technical health with specific attention to GEO requirements — most critically, **server-side rendering** (AI crawlers do not execute JavaScript) and **AI crawler access** (many sites inadvertently block AI crawlers in robots.txt).\n\n## How to Use This Skill\n\n1. Collect the target URL (homepage + 2-3 key inner pages)\n2. Fetch each page using curl/WebFetch to get raw HTML and HTTP headers\n3. Run through each of the 8 audit categories below\n4. Score each category using the rubric\n5. Generate GEO-TECHNICAL-AUDIT.md with results\n\n---\n\n## Category 1: Crawlability (15 points)\n\n### 1.1 robots.txt Validity\n- Fetch `https://[domain]/robots.txt`\n- Check for syntactic validity: proper `User-agent`, `Allow`, `Disallow` directives\n- Check for common errors: missing User-agent, wildcards blocking important paths, Disallow: / blocking entire site\n- Verify XML sitemap is referenced: `Sitemap: https://[domain]/sitemap.xml`\n\n### 1.2 AI Crawler Access (CRITICAL for GEO)\nCheck robots.txt for directives targeting these AI crawlers:\n\n| Crawler | User-Agent | Platform |\n|---|---|---|\n| GPTBot | GPTBot | ChatGPT / OpenAI |\n| Google-Extended | Google-Extended | Gemini / Google AI training |\n| Googlebot | Googlebot | Google Search + AI Overviews |\n| Bingbot | bingbot | Bing Copilot + ChatGPT (via Bing) |\n| PerplexityBot | PerplexityBot | Perplexity AI |\n| ClaudeBot | ClaudeBot | Anthropic Claude |\n| Amazonbot | Amazonbot | Alexa / Amazon AI |\n| CCBot | CCBot | Common Crawl (used by many AI models) |\n| FacebookBot | FacebookExternalHit | Meta AI |\n| Bytespider | Bytespider | TikTok / ByteDance AI |\n| Applebot-Extended | Applebot-Extended | Apple Intelligence |\n\n**Scoring for AI crawler access:**\n- All major AI crawlers allowed: 5 points\n- Some blocked but Googlebot + Bingbot allowed: 3 points\n- GPTBot or PerplexityBot blocked: 1 point (significant GEO impact)\n- Googlebot blocked: 0 points (fatal)\n\n**Important nuance**: Blocking Google-Extended does NOT block Googlebot. Google-Extended only controls AI training data usage, not search indexing. However, blocking Google-Extended may reduce presence in AI Overviews. Recommend allowing Google-Extended unless there is a specific data licensing concern.\n\n### 1.3 XML Sitemaps\n- Fetch sitemap (check robots.txt for location, or try `/sitemap.xml`, `/sitemap_index.xml`)\n- Validate XML syntax\n- Check for `<lastmod>` dates (should be present and accurate)\n- Count URLs — compare to expected number of indexable pages\n- Check for sitemap index if large site (50,000+ URLs per sitemap max)\n- Verify all sitemap URLs return 200 status codes (sample check)\n\n### 1.4 Crawl Depth\n- Homepage = depth 0. Check that all important pages are reachable within **3 clicks** (depth 3)\n- Pages at depth 4+ receive significantly less crawl budget and are less likely to be cited by AI\n- Check internal linking: are key content pages linked from the homepage or main navigation?\n\n### 1.5 Noindex Management\n- Check for `<meta name=\"robots\" content=\"noindex\">` on pages that SHOULD be indexed\n- Check for `X-Robots-Tag: noindex` HTTP headers\n- Common mistakes: noindex on paginated pages, category pages, or key landing pages\n\n**Category Scoring:**\n| Check | Points |\n|---|---|\n| robots.txt valid and complete | 3 |\n| AI crawlers allowed | 5 |\n| XML sitemap present and valid | 3 |\n| Crawl depth within 3 clicks | 2 |\n| No erroneous noindex directives | 2 |\n\n---\n\n## Category 2: Indexability (12 points)\n\n### 2.1 Canonical Tags\n- Every indexable page must have a `<link rel=\"canonical\" href=\"...\">` tag\n- Canonical must point to itself (self-referencing) for the authoritative version\n- Check for conflicting canonicals (canonical in HTML vs. HTTP header)\n- Check for canonical chains (A canonicals to B, B canonicals to C — should be A to C)\n\n### 2.2 Duplicate Content\n- Check for www vs. non-www (both should resolve, one should redirect)\n- Check for HTTP vs. HTTPS (HTTP should redirect to HTTPS)\n- Check for trailing slash consistency (pick one pattern and redirect the other)\n- Check for parameter-based duplicates (`?sort=price` creating duplicate pages)\n\n### 2.3 Pagination\n- If paginated content exists, check for `rel=\"next\"` / `rel=\"prev\"` (note: Google ignores these as of 2019, but Bing still uses them)\n- Preferred: use `rel=\"canonical\"` on paginated pages pointing to a view-all page or the first page\n- Ensure paginated pages are not noindexed if they contain unique content\n\n### 2.4 Hreflang (international sites)\n- Check for `<link rel=\"alternate\" hreflang=\"xx\">` tags\n- Validate: reciprocal hreflang (if page A points to page B, B must point back to A)\n- Validate: x-default fallback exists\n- Check for language/region code validity (ISO 639-1 / ISO 3166-1)\n\n### 2.5 Index Bloat\n- Estimate number of indexed pages (check sitemap count, use `site:domain.com` estimate)\n- Compare indexed pages to actual valuable content pages\n- Flag if indexed pages significantly exceed content pages (index bloat from thin/duplicate/parameter pages)\n\n**Category Scoring:**\n| Check | Points |\n|---|---|\n| Canonical tags correct on all pages | 3 |\n| No duplicate content issues | 3 |\n| Pagination handled correctly | 2 |\n| Hreflang correct (if applicable) | 2 |\n| No index bloat | 2 |\n\n---\n\n## Category 3: Security (10 points)\n\n### 3.1 HTTPS Enforcement\n- Site must load over HTTPS\n- HTTP must redirect to HTTPS (301 redirect)\n- No mixed content warnings (HTTP resources on HTTPS pages)\n- SSL/TLS certificate must be valid and not expired\n\n### 3.2 Security Headers\nCheck HTTP response headers for:\n\n| Header | Required Value | Purpose |\n|---|---|---|\n| `Strict-Transport-Security` | `max-age=31536000; includeSubDomains` | Forces HTTPS |\n| `Content-Security-Policy` | Appropriate policy | Prevents XSS |\n| `X-Content-Type-Options` | `nosniff` | Prevents MIME sniffing |\n| `X-Frame-Options` | `DENY` or `SAMEORIGIN` | Prevents clickjacking |\n| `Referrer-Policy` | `strict-origin-when-cross-origin` or stricter | Controls referrer data |\n| `Permissions-Policy` | Appropriate restrictions | Controls browser features |\n\n**Category Scoring:**\n| Check | Points |\n|---|---|\n| HTTPS enforced with valid cert | 4 |\n| HSTS header present | 2 |\n| X-Content-Type-Options | 1 |\n| X-Frame-Options | 1 |\n| Referrer-Policy | 1 |\n| Content-Security-Policy | 1 |\n\n---\n\n## Category 4: URL Structure (8 points)\n\n### 4.1 Clean URLs\n- URLs should be human-readable: `/blog/seo-guide` not `/blog?id=12345`\n- No session IDs in URLs\n- Lowercase only (no mixed case)\n- Hyphens for word separation (not underscores)\n- No special characters or encoded spaces\n\n### 4.2 Logical Hierarchy\n- URL path should reflect site architecture: `/category/subcategory/page`\n- Flat where appropriate — avoid unnecessarily deep nesting\n- Consistent pattern across the site\n\n### 4.3 Redirect Chains\n- Check for redirect chains (A redirects to B redirects to C)\n- Maximum 1 hop recommended (A redirects to C directly)\n- Check for redirect loops\n- All redirects should be 301 (permanent), not 302 (temporary), unless intentionally temporary\n\n### 4.4 Parameter Handling\n- URL parameters should not create duplicate indexable pages\n- Use canonical tags or `robots.txt` Disallow for parameter variations\n- Configure parameter handling in Google Search Console and Bing Webmaster Tools\n\n**Category Scoring:**\n| Check | Points |\n|---|---|\n| Clean, readable URLs | 2 |\n| Logical hierarchy | 2 |\n| No redirect chains (max 1 hop) | 2 |\n| Parameter handling configured | 2 |\n\n---\n\n## Category 5: Mobile Optimization (10 points)\n\n### Critical Context\nAs of **July 2024**, Google crawls ALL sites exclusively with mobile Googlebot. There is no desktop crawling. If your site does not work on mobile, it does not work for Google. Period.\n\n### 5.1 Responsive Design\n- Check for `<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">`\n- Content must not require horizontal scrolling on mobile\n- No fixed-width layouts wider than viewport\n\n### 5.2 Tap Targets\n- Interactive elements (buttons, links) must be at least 48x48 CSS pixels\n- Minimum 8px spacing between tap targets\n- Check that navigation is usable on mobile\n\n### 5.3 Font Sizes\n- Base font size should be at least 16px\n- No text requiring zoom to read\n- Sufficient contrast ratio (WCAG AA: 4.5:1 for normal text, 3:1 for large text)\n\n### 5.4 Mobile Content Parity\n- All content visible on desktop must also be visible on mobile\n- No hidden content behind \"read more\" toggles that Googlebot cannot expand (though Google has improved at expanding these as of 2025)\n- Images and media must load on mobile\n\n**Category Scoring:**\n| Check | Points |\n|---|---|\n| Viewport meta tag correct | 3 |\n| Responsive layout (no horizontal scroll) | 3 |\n| Tap targets appropriately sized | 2 |\n| Font sizes legible | 2 |\n\n---\n\n## Category 6: Core Web Vitals (15 points)\n\n### 2026 Metrics and Thresholds\nCore Web Vitals use the **75th percentile** of real user data (field data) as the benchmark. Lab data is useful for debugging but field data determines the ranking signal.\n\n| Metric | Good | Needs Improvement | Poor | Notes |\n|---|---|---|---|---|\n| **LCP** (Largest Contentful Paint) | < 2.5s | 2.5s - 4.0s | > 4.0s | Measures loading — time until largest visible element renders |\n| **INP** (Interaction to Next Paint) | < 200ms | 200ms - 500ms | > 500ms | Replaced FID in March 2024. Measures ALL interactions, not just first |\n| **CLS** (Cumulative Layout Shift) | < 0.1 | 0.1 - 0.25 | > 0.25 | Measures visual stability — unexpected layout movements |\n\n### How to Assess Without CrUX Data\nWhen real user data is unavailable, estimate from page characteristics:\n- **LCP**: Check largest above-fold element. Is it an image (check size/format)? Is it text (check web font loading)? Server response time (TTFB)?\n- **INP**: Check for heavy JavaScript on page. Long tasks (>50ms) block interactivity. Check for third-party scripts.\n- **CLS**: Check for images without explicit width/height. Check for dynamically inserted content above the fold. Check for web fonts causing layout shift (FOUT/FOIT).\n\n### Common LCP Fixes\n1. Optimize hero images: WebP/AVIF format, correct sizing, preload with `<link rel=\"preload\">`\n2. Reduce server response time (TTFB < 800ms)\n3. Eliminate render-blocking CSS/JS\n4. Preconnect to critical third-party origins\n\n### Common INP Fixes\n1. Break up long tasks (>50ms) into smaller chunks using `requestIdleCallback` or `scheduler.yield()`\n2. Reduce third-party JavaScript\n3. Use `content-visibility: auto` for off-screen content\n4. Debounce/throttle event handlers\n\n### Common CLS Fixes\n1. Always include `width` and `height` attributes on images and videos\n2. Reserve space for ads and embeds with CSS `aspect-ratio` or explicit dimensions\n3. Use `font-display: swap` with size-adjusted fallback fonts\n4. Avoid inserting content above existing content after page load\n\n**Category Scoring:**\n| Check | Points |\n|---|---|\n| LCP < 2.5s | 5 |\n| INP < 200ms | 5 |\n| CLS < 0.1 | 5 |\n\n---\n\n## Category 7: Server-Side Rendering (15 points) — CRITICAL FOR GEO\n\n### Why SSR Is Mandatory for AI Visibility\nAI crawlers (GPTBot, PerplexityBot, ClaudeBot, etc.) do **NOT execute JavaScript**. They fetch the raw HTML and parse it. If your content is rendered client-side by React, Vue, Angular, or any other JavaScript framework, AI crawlers see an empty page.\n\nEven Googlebot, which does execute JavaScript, deprioritizes JS-rendered content due to the additional crawl budget required. Google processes JS rendering in a separate \"rendering queue\" that can delay indexing by days or weeks.\n\n### Detection Method\n1. Fetch the page with curl (no JavaScript execution): `curl -s [URL]`\n2. Compare the raw HTML to the rendered DOM (via browser)\n3. If key content (headings, paragraphs, product info, article text) is MISSING from the curl output, the site relies on client-side rendering\n\n### What to Check\n- **Main content text**: Is the article body / product description / page content in the raw HTML?\n- **Headings**: Are H1, H2, H3 tags present in raw HTML?\n- **Navigation**: Is the main navigation server-rendered?\n- **Structured data**: Is JSON-LD in the raw HTML or injected by JavaScript?\n- **Meta tags**: Are title, description, canonical, OG tags in the raw HTML?\n- **Internal links**: Are navigation and content links in the raw HTML? (Critical for crawlability)\n\n### SSR Solutions to Recommend\n| Framework | SSR Solution |\n|---|---|\n| React | Next.js (SSR/SSG), Remix, Gatsby (SSG) |\n| Vue | Nuxt.js (SSR/SSG) |\n| Angular | Angular Universal |\n| Svelte | SvelteKit |\n| Generic | Prerender.io (prerendering service), Rendertron |\n\n### Scoring Detail\n- All key content server-rendered: 15 points\n- Main content server-rendered but some elements JS-only: 10 points\n- Critical content requires JS (product info, article text): 5 points\n- Entire page is client-rendered (empty body in raw HTML): 0 points\n\n**Category Scoring:**\n| Check | Points |\n|---|---|\n| Main content in raw HTML | 8 |\n| Meta tags + structured data in raw HTML | 4 |\n| Internal links in raw HTML | 3 |\n\n---\n\n## Category 8: Page Speed & Server Performance (15 points)\n\n### 8.1 Time to First Byte (TTFB)\n- Target: **< 800ms** (ideally < 200ms)\n- Measure with curl: `curl -o /dev/null -s -w 'TTFB: %{time_starttransfer}s\\n' [URL]`\n- If TTFB > 800ms: check server location, caching, database queries, CDN usage\n\n### 8.2 Resource Optimization\n- Total page weight target: **< 2MB** (critical pages < 1MB)\n- Check for uncompressed resources (gzip/brotli compression should be enabled)\n- Check for unminified CSS and JavaScript\n- Check for unused CSS/JS (can represent 50%+ of downloaded bytes on many sites)\n\n### 8.3 Image Optimization\n- Check image formats: WebP or AVIF preferred over JPEG/PNG\n- Check for oversized images (images larger than display size)\n- Check for lazy loading: images below fold should have `loading=\"lazy\"`\n- Check for explicit dimensions (width/height attributes prevent CLS)\n- Above-fold images should NOT be lazy loaded (harms LCP)\n\n### 8.4 Code Splitting and Lazy Loading\n- JavaScript should be code-split so each page only loads what it needs\n- Check for large JavaScript bundles (> 200KB compressed is a warning, > 500KB is critical)\n- Third-party scripts should load asynchronously (`async` or `defer`)\n- Check for render-blocking resources in `<head>`\n\n### 8.5 Caching\n- Check `Cache-Control` headers on static resources (images, CSS, JS)\n- Static assets should have long cache times: `max-age=31536000` (1 year) with content-hashed filenames\n- HTML pages should have shorter cache or `no-cache` with validation (`ETag` or `Last-Modified`)\n\n### 8.6 CDN Usage\n- Check if static resources are served from a CDN (different domain or CDN-specific headers)\n- For global audience, CDN is critical for consistent performance\n- Check for CDN-specific headers: `CF-Ray` (Cloudflare), `X-Cache` (AWS CloudFront), `X-Served-By` (Fastly)\n\n**Category Scoring:**\n| Check | Points |\n|---|---|\n| TTFB < 800ms | 3 |\n| Page weight < 2MB | 2 |\n| Images optimized (format, size, lazy) | 3 |\n| JS bundles reasonable (< 200KB compressed) | 2 |\n| Compression enabled (gzip/brotli) | 2 |\n| Cache headers on static resources | 2 |\n| CDN in use | 1 |\n\n---\n\n## Category 9: Agent-Readiness Signals (non-scoring)\n\nThese checks surface emerging AI agent compatibility signals. None contribute to the numeric score — they produce a pass or a recommendation. The underlying standards are either IETF drafts or early-adoption features; penalizing absence would be unfair.\n\n### 9.1 RFC 8288 Link Headers (Service Discovery)\n\nRFC 8288 (Web Linking) defines the HTTP `Link:` response header. Servers can use it to advertise related resources — API catalog, service docs, MCP server card — in a machine-readable way, without HTML parsing.\n\n**How to check:** Capture all `Link:` response headers from the standard homepage fetch (no extra request).\n\n**What to look for:**\n- Parse `<url>; rel=\"relation-type\"` pairs.\n- High-value rel types: `api-catalog` (RFC 9609), `describedby`, `service-doc`, `mcp-server-card`.\n\n**When to surface a recommendation:** Only for API-first sites (API docs linked in nav, `/api/` or `/developers/` paths, swagger/OpenAPI in sitemap). Omit this section entirely for standard business sites — absence is expected and not noteworthy.\n\n| State | Treatment |\n|---|---|\n| `Link:` headers present, known rel types | Informational — document what was found |\n| `Link:` headers present, unknown rel types | Informational — note and explain |\n| Absent, API-first site | Recommendation — explain and suggest implementation |\n| Absent, standard business site | Omit — do not surface |\n\n### 9.2 Markdown Content Negotiation\n\nChecks if the server responds to `Accept: text/markdown` with `Content-Type: text/markdown`. Cloudflare's \"Markdown for Agents\" feature enables this — AI agents receive clean Markdown instead of HTML, eliminating boilerplate stripping and improving content extraction accuracy.\n\n**How to check:** Send a GET to the homepage with `Accept: text/markdown`. This is one additional HTTP request per audit.\n\n**Evaluation:**\n- If response `Content-Type` is `text/markdown` (or `text/markdown; charset=utf-8`): pass — note as a leading-edge capability.\n- Otherwise: forward-looking recommendation, not a failure.\n- If the request errors or returns non-200: skip and note the error. Do not penalize.\n\n| State | Treatment |\n|---|---|\n| `text/markdown` returned | Bonus — note as a leading-edge capability |\n| Standard HTML returned | Forward-looking recommendation |\n| Request errors / non-200 | Skip, note the error, do not penalize |\n\n---\n\n## IndexNow Protocol\n\n### What It Is\nIndexNow is an open protocol that allows websites to notify search engines instantly when content is created, updated, or deleted. Supported by Bing, Yandex, Seznam, and Naver. Google does NOT support IndexNow but monitors the protocol.\n\n### Why It Matters for GEO\nChatGPT uses Bing's index. Bing Copilot uses Bing's index. Faster Bing indexing means faster AI visibility on two major platforms.\n\n### Implementation Check\n1. Check for IndexNow key file: `https://[domain]/.well-known/indexnow-key.txt` or similar\n2. Check if CMS has IndexNow plugin (WordPress: IndexNow plugin; many modern CMS platforms support it natively)\n3. If not implemented, recommend adding it with instructions\n\n---\n\n## Overall Scoring\n\n| Category | Max Points | Weight |\n|---|---|---|\n| Crawlability | 15 | Core foundation |\n| Indexability | 12 | Core foundation |\n| Security | 10 | Trust signal |\n| URL Structure | 8 | Crawl efficiency |\n| Mobile Optimization | 10 | Google requirement |\n| Core Web Vitals | 15 | Ranking signal |\n| Server-Side Rendering | 15 | GEO critical |\n| Page Speed & Server | 15 | Performance |\n| **Total** | **100** | |\n\nNon-scoring checks (Category 9) appear in the output under \"Agent-Readiness Signals\" and do not affect this total.\n\n### Score Interpretation\n- **90-100**: Excellent — technically sound for both traditional SEO and GEO\n- **70-89**: Good — minor issues to address but fundamentally solid\n- **50-69**: Needs Work — significant technical debt impacting visibility\n- **30-49**: Poor — major issues blocking crawling, indexing, or AI visibility\n- **0-29**: Critical — fundamental technical failures requiring immediate attention\n\n---\n\n## Output Format\n\nGenerate **GEO-TECHNICAL-AUDIT.md** with:\n\n```markdown\n# GEO Technical SEO Audit — [Domain]\nDate: [Date]\n\n## Technical Score: XX/100\n\n## Score Breakdown\n| Category | Score | Status |\n|---|---|---|\n| Crawlability | XX/15 | Pass/Warn/Fail |\n| Indexability | XX/12 | Pass/Warn/Fail |\n| Security | XX/10 | Pass/Warn/Fail |\n| URL Structure | XX/8 | Pass/Warn/Fail |\n| Mobile Optimization | XX/10 | Pass/Warn/Fail |\n| Core Web Vitals | XX/15 | Pass/Warn/Fail |\n| Server-Side Rendering | XX/15 | Pass/Warn/Fail |\n| Page Speed & Server | XX/15 | Pass/Warn/Fail |\n\nStatus: Pass = 80%+ of category points, Warn = 50-79%, Fail = <50%\n\n## AI Crawler Access\n| Crawler | User-Agent | Status | Recommendation |\n|---|---|---|---|\n| GPTBot | GPTBot | Allowed/Blocked | [Action] |\n| Googlebot | Googlebot | Allowed/Blocked | [Action] |\n[Continue for all AI crawlers]\n\n## Critical Issues (fix immediately)\n[List with specific page URLs and what is wrong]\n\n## Warnings (fix this month)\n[List with details]\n\n## Recommendations (optimize this quarter)\n[List with details]\n\n## Agent-Readiness Signals (non-scoring)\n\n### RFC 8288 Link Headers (Service Discovery)\n\n**Status:** Present / Absent / Not Applicable\n\n<!-- If present: -->\n| Relation Type | URL | Meaning |\n|---|---|---|\n| api-catalog | /.well-known/api-catalog | Machine-readable index of available APIs |\n| mcp-server-card | /.well-known/mcp.json | MCP server capability declaration |\n\nAI agents and API clients can discover your services without parsing HTML.\n\n<!-- If absent, API-first site only: -->\n**Informational Recommendation:** This site has API/developer-oriented content but no `Link:` headers advertising discoverable services.\n\nExample: `Link: </.well-known/api-catalog>; rel=\"api-catalog\"`\n\nRelevant for: sites with public APIs, OpenAPI docs, or MCP server integrations.\nReference: RFC 8288, RFC 9609.\n\n<!-- If absent, standard business site: omit this section entirely -->\n\n### Markdown Content Negotiation\n\n**Status:** Supported / Not Supported\n**Test:** GET [url] with `Accept: text/markdown`\n**Response Content-Type:** [value]\n\n<!-- If supported: -->\nThis site serves clean Markdown to AI agents on request. AI crawlers that support content negotiation receive formatted text without HTML boilerplate.\n\n<!-- If not supported: -->\n**Forward-Looking Recommendation:** Cloudflare Workers/Pages sites can enable Markdown content negotiation with a one-line configuration change. When an AI agent sends `Accept: text/markdown`, the server responds with clean Markdown instead of HTML.\n\n- Currently Cloudflare-specific\n- Relevant for: sites already on Cloudflare infrastructure\n- Other CDNs and frameworks expected to adopt this pattern as AI agent traffic grows\n\n## Detailed Findings\n[Per-category breakdown with evidence]\n```\n\n<!-- File: skills/geo-update/SKILL.md (Tokens: ~1136 | Category: anthropic-skill) -->\n---\nname: geo-update\ndescription: Pull the latest GEO-SEO skill updates from the upstream repository. Compares installed files against the latest release, shows what changed, and updates all skills, agents, scripts, and schema templates in place.\nallowed-tools:\n  - Bash\n  - Read\n  - Write\n---\n\n# GEO-SEO Update Skill\n\n## Purpose\n\nUpdates the locally installed GEO-SEO skills, agents, scripts, and schema templates to the latest version from the upstream repository. Shows a summary of what changed before and after the update.\n\n---\n\n## Update Workflow\n\n### Step 1: Determine Installed Location\n\nThe GEO-SEO toolkit installs to these locations under `~/.claude/`:\n\n| Component | Install Path |\n|-----------|-------------|\n| Main skill | `~/.claude/skills/geo/` |\n| Sub-skills | `~/.claude/skills/geo-*/` |\n| Agents | `~/.claude/agents/geo-*.md` |\n| Scripts | `~/.claude/skills/geo/scripts/` |\n| Schema templates | `~/.claude/skills/geo/schema/` |\n| Hooks | `~/.claude/skills/geo/hooks/` |\n\nVerify the installation exists by checking for `~/.claude/skills/geo/SKILL.md`. If it does not exist, inform the user that GEO-SEO is not installed and suggest running the installer instead.\n\n### Step 2: Clone Latest from Upstream\n\n```bash\nTEMP_DIR=$(mktemp -d)\ngit clone --depth 1 https://github.com/zubair-trabzada/geo-seo-claude.git \"$TEMP_DIR/repo\"\n```\n\nIf the clone fails, report the error and stop. Do not modify any installed files.\n\n### Step 3: Compare Installed vs Latest\n\nBefore copying files, generate a diff summary so the user knows what will change:\n\n1. For each component directory, compare the installed files against the cloned files using `diff --recursive --brief`.\n2. Categorise changes as:\n   - **New files** — exist in upstream but not locally\n   - **Modified files** — exist in both but differ\n   - **Removed files** — exist locally but not in upstream (these are NOT deleted automatically)\n3. Present the summary to the user.\n\n### Step 4: Apply Updates\n\nCopy files from the cloned repo over the installed locations:\n\n```bash\nCLAUDE_DIR=\"${HOME}/.claude\"\nSOURCE_DIR=\"$TEMP_DIR/repo\"\n\n# Main skill\ncp -r \"$SOURCE_DIR/geo/\"* \"$CLAUDE_DIR/skills/geo/\"\n\n# Sub-skills\nfor skill_dir in \"$SOURCE_DIR/skills\"/*/; do\n    skill_name=$(basename \"$skill_dir\")\n    mkdir -p \"$CLAUDE_DIR/skills/${skill_name}\"\n    cp -r \"$skill_dir\"* \"$CLAUDE_DIR/skills/${skill_name}/\"\ndone\n\n# Agents\nfor agent_file in \"$SOURCE_DIR/agents/\"*.md; do\n    cp \"$agent_file\" \"$CLAUDE_DIR/agents/\"\ndone\n\n# Scripts\nif [ -d \"$SOURCE_DIR/scripts\" ]; then\n    cp -r \"$SOURCE_DIR/scripts/\"* \"$CLAUDE_DIR/skills/geo/scripts/\"\n    chmod +x \"$CLAUDE_DIR/skills/geo/scripts/\"*.py 2>/dev/null || true\nfi\n\n# Schema templates\nif [ -d \"$SOURCE_DIR/schema\" ]; then\n    cp -r \"$SOURCE_DIR/schema/\"* \"$CLAUDE_DIR/skills/geo/schema/\"\nfi\n\n# Hooks\nif [ -d \"$SOURCE_DIR/hooks\" ] && [ \"$(ls -A \"$SOURCE_DIR/hooks\" 2>/dev/null)\" ]; then\n    mkdir -p \"$CLAUDE_DIR/skills/geo/hooks\"\n    cp -r \"$SOURCE_DIR/hooks/\"* \"$CLAUDE_DIR/skills/geo/hooks/\"\n    chmod +x \"$CLAUDE_DIR/skills/geo/hooks/\"* 2>/dev/null || true\nfi\n```\n\n### Step 5: Update Python Dependencies\n\nIf `requirements.txt` exists in the upstream repo and differs from the installed version:\n\n```bash\npython3 -m pip install -r \"$SOURCE_DIR/requirements.txt\" --quiet\n```\n\nReport any failures but do not treat them as fatal.\n\n### Step 6: Clean Up\n\n```bash\nrm -rf \"$TEMP_DIR\"\n```\n\n### Step 7: Report Results\n\nPresent a summary:\n\n```\nGEO-SEO Update Complete\n=======================\nNew files:      [count]\nModified files: [count]\nUnchanged:      [count]\nRemoved upstream (kept locally): [count]\n\nDependencies: [updated / unchanged / failed]\n```\n\nIf there were removed files upstream, list them and suggest the user review whether to delete them manually.\n\n---\n\n## Important Notes\n\n- **Never delete locally installed files** that no longer exist upstream. The user may have customised them. List them and let the user decide.\n- **Never modify `~/.claude/settings.json` or `~/.claude/settings.local.json`** — these are user configuration files, not part of the GEO-SEO toolkit.\n- **If already up to date** (no diff), report that and skip the copy step.\n- **Restart notice:** Remind the user that skill changes take effect in new Claude Code sessions. They should restart their session to use the updated skills.\n\n<!-- File: docs/architecture.md (Tokens: ~926 | Category: project-spec) -->\n# Architecture & Design\n\nThe repository is structured to seamlessly provide GEO+SEO support by using Claude's tool capabilities alongside agents and python utility scripts.\n\n```\ngeo-seo-claude/\n├── geo/                          # Main skill orchestrator\n│   └── SKILL.md                  # Primary skill file with commands & routing\n├── skills/                       # 13 specialized sub-skills\n│   ├── geo-audit/                # Full audit orchestration & scoring\n│   ├── geo-citability/           # AI citation readiness scoring\n│   ├── geo-crawlers/             # AI crawler access analysis\n│   ├── geo-llmstxt/              # llms.txt standard analysis & generation\n│   ├── geo-brand-mentions/       # Brand presence on AI-cited platforms\n│   ├── geo-platform-optimizer/   # Platform-specific AI search optimization\n│   ├── geo-schema/               # Structured data for AI discoverability\n│   ├── geo-technical/            # Technical SEO foundations\n│   ├── geo-content/              # Content quality & E-E-A-T\n│   ├── geo-report/               # Client-ready markdown report generation\n│   ├── geo-report-pdf/           # Professional PDF report with charts\n│   ├── geo-prospect/             # CRM-lite prospect pipeline management\n│   ├── geo-proposal/             # Auto-generate client proposals\n│   └── geo-compare/              # Monthly delta tracking & progress reports\n├── agents/                       # 5 parallel subagents\n│   ├── geo-ai-visibility.md      # GEO audit, citability, crawlers, brands\n│   ├── geo-platform-analysis.md  # Platform-specific optimization\n│   ├── geo-technical.md          # Technical SEO analysis\n│   ├── geo-content.md            # Content & E-E-A-T analysis\n│   └── geo-schema.md             # Schema markup analysis\n├── scripts/                      # Python utilities\n│   ├── fetch_page.py             # Page fetching & parsing\n│   ├── citability_scorer.py      # AI citability scoring engine\n│   ├── brand_scanner.py          # Brand mention detection\n│   ├── llmstxt_generator.py      # llms.txt validation & generation\n│   └── generate_pdf_report.py    # PDF report generator (ReportLab)\n├── schema/                       # JSON-LD templates\n│   ├── organization.json         # Organization schema (with sameAs)\n│   ├── local-business.json       # LocalBusiness schema\n│   ├── article-author.json       # Article + Person schema (E-E-A-T)\n│   ├── software-saas.json        # SoftwareApplication schema\n│   ├── product-ecommerce.json    # Product schema with offers\n│   └── website-searchaction.json # WebSite + SearchAction schema\n├── install.sh                    # One-command installer\n├── uninstall.sh                  # Uninstaller\n├── requirements.txt              # Python dependencies\n└── README.md                     # Main project view\n```\n\n### Full Audit Flow\n\nWhen you run `/geo audit https://example.com`:\n\n1. **Discovery** — Fetches homepage, detects business type, crawls sitemap\n2. **Parallel Analysis** — Launches 5 subagents simultaneously:\n   - AI Visibility (citability, crawlers, llms.txt, brand mentions)\n   - Platform Analysis (ChatGPT, Perplexity, Google AIO readiness)\n   - Technical SEO (Core Web Vitals, SSR, security, mobile)\n   - Content Quality (E-E-A-T, readability, freshness)\n   - Schema Markup (detection, validation, generation)\n3. **Synthesis** — Aggregates scores, generates composite GEO Score (0-100)\n4. **Report** — Outputs prioritized action plan with quick wins\n\n### Data Storage\n\nThe CRM and reporting skills (`/geo prospect`, `/geo proposal`, `/geo compare`) store runtime data outside the Claude Code directory:\n\n```\n~/.geo-prospects/\n├── prospects.json              # Client/prospect pipeline data\n├── proposals/                  # Generated proposal documents\n│   └── <domain>-proposal-<date>.md\n└── reports/                    # Monthly delta reports\n    └── <domain>-monthly-<YYYY-MM>.md\n```\n\nThis directory is **not removed** by the uninstaller — delete it manually if you no longer need your prospect data.\n</yakaai_skills>"}