GEO Website Audit
Evaluate any website's readiness for AI-powered search engines (ChatGPT, DeepSeek, Perplexity, Kimi, etc.) and output a scored report with optimization recommendations.
Trigger
User provides a URL and asks for:
- GEO audit / GEO score
- AI search readiness assessment
- SEO + GEO evaluation
- Website optimization analysis
Workflow
Step 1: Fetch Target Pages
Use WebFetch to retrieve the provided URL.
WebFetch(url=<provided_url>, query="all content meta tags structured data schema")
Page coverage strategy:
- External sites (WebFetch): Fetch homepage + at least 4-5 key subpages covering different content types (about, product/service, news/blog, contact, FAQ). For sites with <15 pages, fetch ALL pages.
- Local projects (Read/Grep): Scan ALL HTML files in the project root. Use
search_file("*.html")to enumerate, thenGrepfor patterns across all files. Do NOT sample — full coverage is required for accurate Schema and accessibility scoring.
Step 2: Analyze 8 Dimensions
Score each dimension. See scoring-model.md for detailed criteria.
| # | Dimension | Max Points | What to Check | |---|-----------|-----------|---------------| | D1 | Technical Foundation | 15 | lang, title, H1, meta desc, canonical, OG, robots meta | | D2 | Structured Data | 15 | JSON-LD presence, Schema types count, high-value types | | D3 | Content Assets | 15 | word count, original insights, Q&A sections, freshness | | D4 | E-E-A-T Signals | 10 | author info, credentials, citations, about page, privacy | | D5 | AI Accessibility | 15 | SSR vs JS-rendered, robots.txt, content visibility to crawlers | | D6 | Entity Markup | 10 | Organization/Person entity, sameAs, @id cross-references | | D7 | Technical Performance | 10 | mobile viewport, image optimization (alt/lazy), video, HTTPS | | D8 | External Signals | 10 | brand consistency, social links, backlink indicators |
Total: 100 points
Step 2.5: Source Code Verification (CRITICAL)
Before finalizing scores, perform deep verification to avoid false positives:
-
For local projects: Use
Readtool to inspect HTML source of EVERY page (not just fetched pages). UseGrepto search for patterns across all files:Grep(regex="application/ld\+json", glob="*.html")— catalog ALL JSON-LD blocks site-wideGrep(regex="<h1", glob="*.html")— find all H1 tags including hidden onesGrep(regex="\.html\(|innerHTML|document\.write", glob="*.js")— identify JS-rendered content
-
Verify JS-rendered vs static: For any content that appears JS-generated:
- Read the HTML source FIRST — check if static fallback content exists in the same container
- If
setNav()overwrites<ul id="index_nav">but the HTML already has<li>items inside, score as STATIC (not JS-dependent) - Pattern: JS
.html()that overwrites identical static content = no penalty
-
Schema inventory: Build a complete inventory of ALL Schema types across ALL pages before scoring D2. List each type with page count.
-
Hidden content check: Elements with
sr-only,visually-hidden,screen-reader-textclasses ARE present in source — do not mark as missing.
Step 3: Calculate Scores
For each dimension, assign a score based on the criteria in scoring-model.md.
Grade mapping:
- 90-100: A+ (AI Search Leader)
- 80-89: A (AI Search Ready)
- 70-79: B (Good Foundation)
- 60-69: C (Needs Improvement)
- 40-59: D (Significant Gaps)
- 0-39: F (AI Invisible)
Step 4: Identify Top 3 Actions
From the lowest-scoring dimensions, extract the 3 most impactful actions that would improve the GEO score the most. Each action must include:
- What to do (specific technical action)
- Why it matters (impact on AI search citation)
- Expected score gain (estimated points)
Step 5: Output Report
Use show_widget to display an interactive report. Follow the template in report-template.md.
Widget rules:
- Use
qoder/canvascomponents: Stack, Grid, Stat, BarChart, Table, Card, Callout, Pill, Tag - Call
load_guidelinesbefore first widget - Use CSS variables for colors, flat design only
- No gradients, box-shadows, or blur
Widget Structure
┌─ Header: Site URL + Grade + Overall Score ─┐
├─ Score Overview (Stat cards) │
├─ 8-Dimension Breakdown (Horizontal bars) │
├─ Key Findings Table │
├─ Top 3 Next Actions (Callout cards) │
└─ Footer: Methodology note │
Important Notes
- Always explain your scoring: For each dimension, cite specific evidence from the page
- Be actionable: "Add JSON-LD" is vague; "Add HowTo Schema to /guides page" is actionable
- Compare when possible: If the user mentions competitors, fetch and compare
- Local files: If analyzing a local project, use Read/Grep tools instead of WebFetch
- Multiple pages: For comprehensive audits, analyze homepage + 2-3 subpages
- Language: Output in the user's language (Chinese or English based on user preference)
Known False Positive Patterns (MUST check before scoring)
Before deducting points, verify these common false positives:
- JS overwrite with identical content:
setNav()/setBottom()patterns where JS overwrites static HTML with the same content — NOT a JS dependency - Visually hidden headings:
<h1 class="sr-only">oru-sr-only— heading IS present for crawlers - Conditional JS enhancement: Static HTML exists but JS enhances it (adds interactivity, formatting) — content is crawlable
- JSON-LD on subpages only: Schema types like VideoObject may exist only on relevant pages (video pages), not homepage — check all pages before marking as missing
document.writefor script loading: Used to include shared JS files, not to render content — not a content accessibility issue
Example Usage
User: /geo-audit https://www.example.com
Agent: Fetches page → Analyzes 8 dimensions → Outputs scored report
User: Analyze the GEO readiness of our website qinlinkeji.com
Agent: Fetches multiple pages → Full audit → Report with next steps
Re-audit Mode
When the user has implemented optimizations from a previous audit:
User: /geo-audit --re-audit https://www.example.com
- Read the previous audit scores (from the conversation history or user-provided)
- Re-score ONLY the dimensions that were targeted for improvement
- Output a delta report showing:
- Before/After scores per dimension
- Total score change
- Grade change (e.g., B → A)
- Remaining gaps (if any)
- Use
update_mode: 'patch'on the existing widget if available, otherwise render a new widget
Quick Analysis Checklist
Before outputting the report, verify:
- [ ] All 8 dimensions scored with evidence
- [ ] Grade correctly mapped from total score
- [ ] Top 3 actions identified from weakest areas
- [ ] Specific file/element references cited (not generic advice)
- [ ] Widget renders correctly with all data
Scan to join WeChat group