원클릭으로
geo-technical
// Technical SEO audit with GEO-specific checks — crawlability, indexability, security, performance, SSR, and AI crawler access
// Technical SEO audit with GEO-specific checks — crawlability, indexability, security, performance, SSR, and AI crawler access
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.
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.
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.
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.
Generate a professional, client-facing GEO report combining all audit results into a single deliverable with scores, findings, and prioritized actions
Schema.org structured data audit and generation optimized for AI discoverability — detect, validate, and generate JSON-LD markup
| 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 |
Technical 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).
https://[domain]/robots.txtUser-agent, Allow, Disallow directivesSitemap: https://[domain]/sitemap.xmlCheck robots.txt for directives targeting these AI crawlers:
| Crawler | User-Agent | Platform |
|---|---|---|
| GPTBot | GPTBot | ChatGPT / OpenAI |
| Google-Extended | Google-Extended | Gemini / Google AI training |
| Googlebot | Googlebot | Google Search + AI Overviews |
| Bingbot | bingbot | Bing Copilot + ChatGPT (via Bing) |
| PerplexityBot | PerplexityBot | Perplexity AI |
| ClaudeBot | ClaudeBot | Anthropic Claude |
| Amazonbot | Amazonbot | Alexa / Amazon AI |
| CCBot | CCBot | Common Crawl (used by many AI models) |
| FacebookBot | FacebookExternalHit | Meta AI |
| Bytespider | Bytespider | TikTok / ByteDance AI |
| Applebot-Extended | Applebot-Extended | Apple Intelligence |
Scoring for AI crawler access:
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.
/sitemap.xml, /sitemap_index.xml)<lastmod> dates (should be present and accurate)<meta name="robots" content="noindex"> on pages that SHOULD be indexedX-Robots-Tag: noindex HTTP headersCategory Scoring:
| Check | Points |
|---|---|
| robots.txt valid and complete | 3 |
| AI crawlers allowed | 5 |
| XML sitemap present and valid | 3 |
| Crawl depth within 3 clicks | 2 |
| No erroneous noindex directives | 2 |
<link rel="canonical" href="..."> tag?sort=price creating duplicate pages)rel="next" / rel="prev" (note: Google ignores these as of 2019, but Bing still uses them)rel="canonical" on paginated pages pointing to a view-all page or the first page<link rel="alternate" hreflang="xx"> tagssite:domain.com estimate)Category Scoring:
| Check | Points |
|---|---|
| Canonical tags correct on all pages | 3 |
| No duplicate content issues | 3 |
| Pagination handled correctly | 2 |
| Hreflang correct (if applicable) | 2 |
| No index bloat | 2 |
Check HTTP response headers for:
| Header | Required Value | Purpose |
|---|---|---|
Strict-Transport-Security | max-age=31536000; includeSubDomains | Forces HTTPS |
Content-Security-Policy | Appropriate policy | Prevents XSS |
X-Content-Type-Options | nosniff | Prevents MIME sniffing |
X-Frame-Options | DENY or SAMEORIGIN | Prevents clickjacking |
Referrer-Policy | strict-origin-when-cross-origin or stricter | Controls referrer data |
Permissions-Policy | Appropriate restrictions | Controls browser features |
Category Scoring:
| Check | Points |
|---|---|
| HTTPS enforced with valid cert | 4 |
| HSTS header present | 2 |
| X-Content-Type-Options | 1 |
| X-Frame-Options | 1 |
| Referrer-Policy | 1 |
| Content-Security-Policy | 1 |
/blog/seo-guide not /blog?id=12345/category/subcategory/pagerobots.txt Disallow for parameter variationsCategory Scoring:
| Check | Points |
|---|---|
| Clean, readable URLs | 2 |
| Logical hierarchy | 2 |
| No redirect chains (max 1 hop) | 2 |
| Parameter handling configured | 2 |
As 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.
<meta name="viewport" content="width=device-width, initial-scale=1">Category Scoring:
| Check | Points |
|---|---|
| Viewport meta tag correct | 3 |
| Responsive layout (no horizontal scroll) | 3 |
| Tap targets appropriately sized | 2 |
| Font sizes legible | 2 |
Core 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.
| Metric | Good | Needs Improvement | Poor | Notes |
|---|---|---|---|---|
| LCP (Largest Contentful Paint) | < 2.5s | 2.5s - 4.0s | > 4.0s | Measures loading — time until largest visible element renders |
| INP (Interaction to Next Paint) | < 200ms | 200ms - 500ms | > 500ms | Replaced FID in March 2024. Measures ALL interactions, not just first |
| CLS (Cumulative Layout Shift) | < 0.1 | 0.1 - 0.25 | > 0.25 | Measures visual stability — unexpected layout movements |
When real user data is unavailable, estimate from page characteristics:
<link rel="preload">requestIdleCallback or scheduler.yield()content-visibility: auto for off-screen contentwidth and height attributes on images and videosaspect-ratio or explicit dimensionsfont-display: swap with size-adjusted fallback fontsCategory Scoring:
| Check | Points |
|---|---|
| LCP < 2.5s | 5 |
| INP < 200ms | 5 |
| CLS < 0.1 | 5 |
AI 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.
Even 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.
curl -s [URL]| Framework | SSR Solution |
|---|---|
| React | Next.js (SSR/SSG), Remix, Gatsby (SSG) |
| Vue | Nuxt.js (SSR/SSG) |
| Angular | Angular Universal |
| Svelte | SvelteKit |
| Generic | Prerender.io (prerendering service), Rendertron |
Category Scoring:
| Check | Points |
|---|---|
| Main content in raw HTML | 8 |
| Meta tags + structured data in raw HTML | 4 |
| Internal links in raw HTML | 3 |
curl -o /dev/null -s -w 'TTFB: %{time_starttransfer}s\n' [URL]loading="lazy"async or defer)<head>Cache-Control headers on static resources (images, CSS, JS)max-age=31536000 (1 year) with content-hashed filenamesno-cache with validation (ETag or Last-Modified)CF-Ray (Cloudflare), X-Cache (AWS CloudFront), X-Served-By (Fastly)Category Scoring:
| Check | Points |
|---|---|
| TTFB < 800ms | 3 |
| Page weight < 2MB | 2 |
| Images optimized (format, size, lazy) | 3 |
| JS bundles reasonable (< 200KB compressed) | 2 |
| Compression enabled (gzip/brotli) | 2 |
| Cache headers on static resources | 2 |
| CDN in use | 1 |
These 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.
RFC 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.
How to check: Capture all Link: response headers from the standard homepage fetch (no extra request).
What to look for:
<url>; rel="relation-type" pairs.api-catalog (RFC 9609), describedby, service-doc, mcp-server-card.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.
| State | Treatment |
|---|---|
Link: headers present, known rel types | Informational — document what was found |
Link: headers present, unknown rel types | Informational — note and explain |
| Absent, API-first site | Recommendation — explain and suggest implementation |
| Absent, standard business site | Omit — do not surface |
Checks 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.
How to check: Send a GET to the homepage with Accept: text/markdown. This is one additional HTTP request per audit.
Evaluation:
Content-Type is text/markdown (or text/markdown; charset=utf-8): pass — note as a leading-edge capability.| State | Treatment |
|---|---|
text/markdown returned | Bonus — note as a leading-edge capability |
| Standard HTML returned | Forward-looking recommendation |
| Request errors / non-200 | Skip, note the error, do not penalize |
IndexNow 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.
ChatGPT uses Bing's index. Bing Copilot uses Bing's index. Faster Bing indexing means faster AI visibility on two major platforms.
https://[domain]/.well-known/indexnow-key.txt or similar| Category | Max Points | Weight |
|---|---|---|
| Crawlability | 15 | Core foundation |
| Indexability | 12 | Core foundation |
| Security | 10 | Trust signal |
| URL Structure | 8 | Crawl efficiency |
| Mobile Optimization | 10 | Google requirement |
| Core Web Vitals | 15 | Ranking signal |
| Server-Side Rendering | 15 | GEO critical |
| Page Speed & Server | 15 | Performance |
| Total | 100 |
Non-scoring checks (Category 9) appear in the output under "Agent-Readiness Signals" and do not affect this total.
Generate GEO-TECHNICAL-AUDIT.md with:
# GEO Technical SEO Audit — [Domain]
Date: [Date]
## Technical Score: XX/100
## Score Breakdown
| Category | Score | Status |
|---|---|---|
| Crawlability | XX/15 | Pass/Warn/Fail |
| Indexability | XX/12 | Pass/Warn/Fail |
| Security | XX/10 | Pass/Warn/Fail |
| URL Structure | XX/8 | Pass/Warn/Fail |
| Mobile Optimization | XX/10 | Pass/Warn/Fail |
| Core Web Vitals | XX/15 | Pass/Warn/Fail |
| Server-Side Rendering | XX/15 | Pass/Warn/Fail |
| Page Speed & Server | XX/15 | Pass/Warn/Fail |
Status: Pass = 80%+ of category points, Warn = 50-79%, Fail = <50%
## AI Crawler Access
| Crawler | User-Agent | Status | Recommendation |
|---|---|---|---|
| GPTBot | GPTBot | Allowed/Blocked | [Action] |
| Googlebot | Googlebot | Allowed/Blocked | [Action] |
[Continue for all AI crawlers]
## Critical Issues (fix immediately)
[List with specific page URLs and what is wrong]
## Warnings (fix this month)
[List with details]
## Recommendations (optimize this quarter)
[List with details]
## Agent-Readiness Signals (non-scoring)
### RFC 8288 Link Headers (Service Discovery)
**Status:** Present / Absent / Not Applicable
<!-- If present: -->
| Relation Type | URL | Meaning |
|---|---|---|
| api-catalog | /.well-known/api-catalog | Machine-readable index of available APIs |
| mcp-server-card | /.well-known/mcp.json | MCP server capability declaration |
AI agents and API clients can discover your services without parsing HTML.
<!-- If absent, API-first site only: -->
**Informational Recommendation:** This site has API/developer-oriented content but no `Link:` headers advertising discoverable services.
Example: `Link: </.well-known/api-catalog>; rel="api-catalog"`
Relevant for: sites with public APIs, OpenAPI docs, or MCP server integrations.
Reference: RFC 8288, RFC 9609.
<!-- If absent, standard business site: omit this section entirely -->
### Markdown Content Negotiation
**Status:** Supported / Not Supported
**Test:** GET [url] with `Accept: text/markdown`
**Response Content-Type:** [value]
<!-- If supported: -->
This site serves clean Markdown to AI agents on request. AI crawlers that support content negotiation receive formatted text without HTML boilerplate.
<!-- If not supported: -->
**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.
- Currently Cloudflare-specific
- Relevant for: sites already on Cloudflare infrastructure
- Other CDNs and frameworks expected to adopt this pattern as AI agent traffic grows
## Detailed Findings
[Per-category breakdown with evidence]