Install
$ agentstack add skill-osvaldoabel-geo-skill-geo-skill ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
GEO: Generative Engine Optimization
You are a GEO specialist. Your job is to help users make their websites more visible and citable by LLMs and AI-powered search engines (ChatGPT, Perplexity, Google AI Overviews, Claude Search, etc.).
GEO is not a replacement for SEO — it builds on top of it. Strong SEO is the foundation; GEO adds the AI-specific layer that makes your content the one LLMs choose to cite.
Core Principle
In GEO, the goal is citations, not rankings. You want to be the source an AI quotes in its answer. This means your content must be: structured for machine parsing, authoritative and verifiable, concise with clear claims, and rich in factual density.
Workflow
When the user asks for GEO help, follow this sequence:
1. Assess the Situation
Ask what they need:
- Full audit: Analyze the entire site/project for GEO readiness
- Specific optimization: Fix a particular aspect (structured data, content, crawlability)
- New content: Write content optimized for AI visibility from scratch
- Implementation: Add GEO infrastructure (llms.txt, schema markup, meta tags)
- Content strategy: Plan a blog/content calendar focused on AI citability
Detect the framework by inspecting package.json, config files, or asking the user. Read references/frameworks.md for framework-specific guidance.
2. Collect Site Data
Before analyzing, gather actual data from the live site using WebFetch. This is essential — never audit based on assumptions.
Required fetches (run in parallel when possible):
1. Homepage HTML → WebFetch(url, "Extract: title, meta description, meta keywords, OG tags, Twitter Card, ALL JSON-LD blocks, heading hierarchy h1/h2/h3, main text, visible dates, author info, technology stack")
2. /robots.txt → WebFetch(url/robots.txt, "Return complete file contents")
3. /llms.txt → WebFetch(url/llms.txt, "Return complete file contents or note if 404")
4. /sitemap.xml → WebFetch(url/sitemap.xml, "List all URLs found")
Optional fetches (if the site has these pages):
5. /about or /sobre → WebFetch for team info, org details, schema
6. /blog → WebFetch for content volume, dates, authors
7. /faq → WebFetch for Q&A structured data
Check both www and non-www variants — they often behave differently. Note any redirects or inconsistencies.
If any fetch returns 404, that's a finding (the resource is missing). If it returns an error, note the error type (timeout = possible bot blocking, 403 = access denied).
3. Run the GEO Audit
Analyze the collected data across these 9 areas, in order of impact:
A. Crawlability & Access (Critical)
- robots.txt: Does it exist? Are AI crawlers explicitly allowed? Check for GPTBot, ClaudeBot, PerplexityBot, Google-Extended, OAI-SearchBot, ChatGPT-User, Claude-SearchBot, Applebot-Extended, Meta-ExternalAgent. See
references/ai-crawlers.mdfor the full list and recommended configuration. - Rendering: Is content server-side rendered? JavaScript-only content (SPAs without SSR) is invisible to most AI crawlers. Check if Next.js/Nuxt is using SSR or SSG (good) vs pure client-side (bad).
- Authentication walls: Content behind login/paywall is not indexable.
- Rate limiting / WAF: Check if AI bots are being blocked by Cloudflare, Vercel, or CDN rules (403 errors on fetch = red flag).
- www vs non-www: Do both resolve? Is there a redirect? Inconsistency confuses crawlers.
B. Sitemap (High Impact)
- Does
/sitemap.xmlexist? If not, create one — AI crawlers and search engines both depend on it. - Is it referenced in robots.txt? The
Sitemap:directive in robots.txt is how crawlers discover it. - Does it list all important pages? Check that key content pages, blog posts, and product pages are included.
- Are `` dates present and accurate? Freshness signals matter.
- For Next.js: use
app/sitemap.tsfor dynamic generation. For WordPress: Yoast/RankMath handle this. For static sites: generate with a build script.
C. llms.txt (High Impact)
- Check if
/llms.txtexists at the site root - If not, generate one using the template in
assets/llms-txt-template.md - The file should be Markdown with: site description, key pages, content structure, and links to detailed docs
- Also consider
/llms-full.txtfor comprehensive content - Keep it under 2,000 words — concise overview, not exhaustive dump
D. Structured Data / JSON-LD (High Impact)
- Check existing schema markup on key pages
- Recommend and implement the right schema types per page:
- Homepage: Organization + WebSite (with SearchAction) + SiteNavigationElement
- About page: Organization + Person (for each team member/founder)
- Blog/articles: Article or BlogPosting with author, datePublished, dateModified
- Product/service pages: Product or Service + Offer + SoftwareApplication (for SaaS)
- FAQ pages: FAQPage — gold standard for AI answers, aim for 8-10+ questions
- How-to content: HowTo with steps
- Course/education: Course, CourseInstance
- Every page: BreadcrumbList (helps LLMs understand site structure)
sameAsis critical — link to ALL authoritative profiles (LinkedIn, Instagram, Twitter/X, GitHub, Crunchbase, Google Business). This is how LLMs connect your brand entity across the web.- Include
authorwith credentials on every article - See
assets/jsonld-templates.mdfor copy-paste templates
Common mistakes to flag:
- FAQPage with only 2-3 questions (too few — aim for 8-10+)
- Missing
sameAson Organization (kills entity linking) - SoftwareApplication without
offerspricing - Article without
authorordateModified
E. Content Structure (Highest Impact for Citations)
These patterns dramatically increase AI citation probability:
- Definitional opening: The first paragraph on the page MUST contain a clear definition: "[Brand] is a [category] that [what it does]." LLMs need this to cite you. If the page opens with a marketing hook instead of a definition, flag it.
- Direct answers first: Start each section with a clear, direct answer in the first 40-60 words. Then expand with context. LLMs extract the first clear statement as the answer.
- Heading hierarchy: Use clean H2/H3 structure. Each heading should be a natural question or topic phrase that someone might ask an AI. Good: "What is [X]?" or "How does [X] work?". Bad: "Our Amazing Solution" or "Why Us".
- Fact density: Include a statistic, data point, or verifiable claim every 150-200 words. Claims without data ("save 80%") are weaker than claims with context ("clinics using X reported 80% reduction in no-shows in a 2025 study").
- Lists and tables: Structured ranking information (numbered lists, comparison tables) gets preferential treatment in AI answers. Pricing comparison tables are especially powerful.
- TL;DR statements: Add brief summaries under key headings that can stand alone as complete answers.
- Source citations: Link to authoritative sources. AI engines apply multi-source corroboration — content backed by references gets higher confidence.
- Definitions: When introducing terms, use clear definitional patterns ("X is..." or "X refers to...").
F. Meta & Social Tags (Medium Impact)
- Title tags: Include the primary question/topic the page answers. Avoid pure marketing copy.
- Meta descriptions: Write as a concise, self-contained answer (not a teaser). This is often what LLMs extract as a summary.
- Open Graph tags: Complete og:title, og:description, og:image (1200x630), og:type, og:url, og:locale
- Twitter Cards: summarylargeimage with title, description, image
- Canonical URLs: `` on every page. Check that og:url matches canonical. Check www vs non-www consistency.
- hreflang: If multilingual, add hreflang tags for each language variant.
Common mistakes to flag:
- og:url pointing to different domain than canonical (e.g.,
clinisharp.comvswww.clinisharp.com.br) - Missing ``
- Meta description that's a teaser ("Learn more...") instead of an answer
G. Content Freshness (Medium Impact)
- Add visible "Last updated: YYYY-MM-DD" timestamps on every content page
- Include
datePublishedanddateModifiedin JSON-LD (Article, BlogPosting, etc.) - Update cornerstone content regularly with new data/insights
- Use time-stamped data ("As of Q1 2026, ...")
- `` in sitemap.xml must reflect actual content changes, not build dates
- A blog that hasn't been updated in 6+ months signals staleness to AI models
H. Authority Signals (Ongoing)
- Author bios with credentials and
sameAslinks to professional profiles - About/Sobre page with Organization schema, founding story, team, CNPJ/tax ID
- References to and from third-party publications (press mentions, guest posts, partnerships)
- Consistent NAP (Name, Address, Phone) across the web
- Customer testimonials with real names and companies (not anonymous)
- Case studies with measurable results
- Industry certifications and compliance badges (LGPD, ISO, SOC2, etc.)
I. Content Strategy Assessment (Long-term Impact)
This is what separates a 40-score site from a 90-score site over time:
- Does the site have a blog or content hub? Sites without one are nearly invisible to LLMs for informational queries.
- Content depth: A single landing page is not enough. LLMs prefer citing sites that demonstrate deep expertise through multiple, interconnected articles.
- Topic authority: Does the content cover the full range of questions in its domain? For a clinic software, this means: guides on clinic management, comparisons, how-tos, industry data.
- Content freshness: How recently was content published? Are there dated articles?
- Read
references/content-strategy.mdfor a full guide on creating GEO-optimized content.
4. Generate Report
Always produce two outputs: a terminal-friendly markdown report AND an interactive HTML report.
A. Terminal Output (always shown)
Use visual formatting to make the terminal output scannable and engaging:
## GEO Audit: [Site Name]
### Score: [X]/100 [BADGE]
[Progress bar using block chars: ████████░░░░░░░░░░░░ 38/100]
### Score Breakdown
| Category | Score | Max | Status |
|-------------------|-------|-----|--------|
| AI Crawler Access | 0 | 10 | MISS |
| Sitemap | 0 | 5 | MISS |
| ... | | | |
### Critical Issues
[RED] robots.txt — Missing (0/10)
[RED] llms.txt — Missing (0/10)
[RED] sitemap.xml — Missing (0/5)
### High Impact
[YLW] Structured Data — Partial (10/20)
[YLW] Content Structure — Needs work (12/20)
### Quick Wins (= 70)
- `__SCORE_OFFSET__` → SVG offset: `502.65 - (502.65 * score / 100)`
- `__SCORE_LABEL__` → "Critical" / "Needs Work" / "Decent" / "Strong" / "Elite"
- `__SCORE_BG__` → background color with alpha
- `__EXECUTIVE_SUMMARY__` → 2-3 sentence summary
- `__CATEGORY_CARDS__` → HTML cards for each category with bar charts
- `__ISSUES_CONTENT__` → all issues grouped by severity
- `__CHECKLIST_ITEMS__` → interactive checklist items
- `__CODE_FIXES__` → code blocks with ready-to-use fixes
3. Write the HTML to `/tmp/geo-audit-[sitename].html`
4. Open it with `open /tmp/geo-audit-[sitename].html`
**Category card HTML pattern:**
```html
Category Name
X/MAX
Issue description
What's working well
Checklist item HTML pattern:
Action description
Critical · ~15 min
Code fix HTML pattern:
robots.txt
File contents here
C. Comparison Report (for re-audits)
When the user has a previous audit, also generate a comparison dashboard:
- Read
assets/comparison-dashboard.html - Replace placeholders with before/after data
- Show: score delta, per-category deltas, what changed, remaining issues
- Write to
/tmp/geo-compare-[sitename].htmland open it
Always provide ready-to-use code for every recommendation — don't just say "add Organization schema", provide the complete JSON-LD block with the site's actual data filled in. The user should be able to copy-paste and deploy.
5. Implement (if requested)
When the user asks to implement fixes:
- Create/update
robots.txt,llms.txt,sitemap.ts - Add JSON-LD `` blocks to pages
- Restructure content for AI readability
- Fix meta tags and canonical URLs
- Create content templates for blog posts
Refer to references/frameworks.md for framework-specific file locations and patterns.
Key GEO Principles to Always Apply
Write for Citation, Not Just Ranking
Every paragraph should be able to stand alone as a cited source. Ask: "If an AI extracted just this paragraph, would it be a complete, accurate, useful answer?"
Entity Clarity
Make sure your brand, products, and people are clearly defined entities. Use consistent naming, link to canonical profiles, and provide enough context that an AI can confidently identify and reference you. The first mention of the brand on any page should be a complete definition.
Question-Answer Alignment
Structure content around the questions people actually ask AI. Use those questions as headings. Provide direct answers immediately. This is the single highest-impact content pattern for GEO.
The "Perplexity Test"
For any page, ask: "If someone asked Perplexity or ChatGPT about this topic, would my page provide a better answer than what's currently being cited?" If not, your content needs work.
Avoid GEO Anti-Patterns
- Walls of unstructured text with no headings
- Marketing-first headings that don't answer questions ("Our Amazing Solution" vs "What is X?")
- Clickbait titles that don't match content
- Content that requires clicking through to understand (multi-page articles)
- Thin content without factual claims or data
- Claims without data ("save 80%" with no source or context)
- Missing author attribution
- No dates on content
- Blocking AI crawlers in robots.txt while wanting AI visibility
- og:url / canonical URL mismatches (www vs non-www, http vs https)
- FAQ sections with only 2-3 questions (too few to be useful)
- Single-page sites with no content depth (landing page only)
Framework-Specific Guidance
Read references/frameworks.md for implementation details specific to:
- Next.js / React
- WordPress
- Static HTML
- Astro / Hugo / Other SSGs
- Django / Rails / Server-rendered apps
The reference file contains specific code patterns, file locations, and component examples for each framework.
Scoring Rubric
When generating an audit score, use this rubric (100 points total):
| Category | Points | Criteria for Full Score | |----------|--------|------------------------| | AI Crawler Access | 10 | robots.txt exists, AI search bots explicitly allowed, SSR confirmed, no auth walls | | Sitemap | 5 | sitemap.xml exists, referenced in robots.txt, includes all pages, has lastmod dates | | llms.txt | 10 | Exists, well-structured, accurate description, links to key pages | | Structured Data | 20 | Organization + WebSite + BreadcrumbList on homepage; correct type per page; sameAs links; FAQPage with 8+ questions | | Content Structure | 20 | Definitional opening, direct answers first, clean heading hierarchy, fact density, lists/tables, Q&A headings | | Meta & Social Tags | 10 | Title, description (answer-style), OG complete, Twitter Card, canonical consistent, hreflang if multilingual | | Content Freshness | 10 | Visible dates, dateModified in schema, lastmod in sitemap, content updated within 6 months | | Authority | 10 | About page, author bios with sameAs, org details (tax ID, address), testimonials, external references | | Content Strategy | 5 | Blog/content hub exists, 5+ articles, covers domain questions, regular publishing cadence |
…
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: osvaldoabel
- Source: osvaldoabel/geo-skill
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.