You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: .claude-plugin/marketplace.json
+3-3Lines changed: 3 additions & 3 deletions
Original file line number
Diff line number
Diff line change
@@ -6,7 +6,7 @@
6
6
},
7
7
"metadata": {
8
8
"description": "A curated list of custom Claude Code plugins, agents, and skills for developers.",
9
-
"version": "2.4.0",
9
+
"version": "2.4.1",
10
10
"pluginRoot": "./plugins"
11
11
},
12
12
"plugins": [
@@ -325,8 +325,8 @@
325
325
{
326
326
"name": "ai-geo",
327
327
"source": "./plugins/ai-geo",
328
-
"description": "Generative Engine Optimization (GEO) auditing and remediation. Optimizes web content for AI answer engines like ChatGPT, Perplexity, Claude, and Google AI Overviews. Generates llms.txt files, audits AI crawler access, validates citation-worthiness signals, and structures content for LLM extraction.",
329
-
"version": "1.0.0",
328
+
"description": "Generative Engine Optimization (GEO) auditing and remediation. Optimizes web content for AI answer engines like ChatGPT, Perplexity, Claude, and Google AI Overviews. Generates llms.txt files, wires head link[rel=alternate] + sitemap + robots.txt discoverability signals, audits AI crawler access, validates citation-worthiness signals, and structures content for LLM extraction.",
- Public directory submission to llmstxt.site and directory.llmstxt.cloud (Low / manual — never auto-detected, never Critical/High)
21
+
-`/geo-audit` — "What is GEO?" report section gained "On llms.txt discovery" subsection documenting that no major LLM provider (OpenAI, Anthropic, Perplexity, Google) has publicly committed to reading `llms.txt` as a first-class signal, marked 🧪 experimental, and listing the five stackable weak signals (root serve, head link, sitemap entry, robots comment, directory submission)
22
+
-`/geo-fix` — Safe-auto fix bucket extended with three new fixes:
23
+
- Inject `<link rel="alternate" type="text/markdown" href="/llms.txt">` via the framework-idiomatic head API (Next.js Metadata API `alternates.types`, Nuxt `useHead`, Vue + `@unhead/vue`, Astro layout, SvelteKit `<svelte:head>`, Remix `meta` export, vanilla `<head>`) — skip if already present
24
+
- Add `/llms.txt` entry to sitemap (Next.js `app/sitemap.ts` push, static `sitemap.xml``<url>` block with `changefreq=monthly` + `priority=0.5`, `@nuxtjs/sitemap``urls`, `@astrojs/sitemap``customPages`) — skip if already present
25
+
- Add `# LLM index: https://<domain>/llms.txt` comment to `robots.txt` with auto-derived domain (falls back to prompt when unresolvable) — skip if already present
26
+
-`/geo-fix` — New informational bucket for non-automatable actions: terminal summary prints directory-submission URLs (`llmstxt.site/submit`, `directory.llmstxt.cloud`) as a manual next step (web forms, never automated)
-`/geo-fix` — Build-order rule codified: when both `llms.txt` and the sitemap are build-time generated, the llms.txt generator MUST run before the sitemap so the sitemap can read llms.txt's mtime (warn with suggested reordering rather than silent reshuffle)
29
+
-`/geo-llms-txt` — New Step 7.5 "Wire Discoverability Signals (post-write)" offers to add the head `link[rel=alternate]` hint, sitemap `/llms.txt` entry, and `robots.txt` comment after writing llms.txt, with framework-specific code for Next.js, Nuxt, Vue + `@unhead/vue`, Astro, SvelteKit, Remix, and vanilla HTML (each step skipped silently if already present or not applicable)
30
+
-`/geo-llms-txt` — New "Build pipeline — order dependency" subsection documents per-framework rules: Next.js Metadata API has no order issue, Astro endpoint vs static differ, Nuxt prebuild hook, Vite/SvelteKit/Remix/TanStack Start warn-don't-reshuffle
-`/geo-llms-txt` — Quality Assurance Checklist extended with post-write wiring items, build-order surfacing, and directory-submission printout
33
+
- Existing LLM Knowledge Gap Corrections, examples, and Quality Assurance Checklist items preserved across all three skills — `llms-full.txt` generator logic unchanged
34
+
10
35
## [2.4.0] - 2026-04-17
11
36
12
37
### Added
@@ -1002,7 +1027,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1002
1027
1003
1028
- README.md, CLAUDE.md, individual plugin READMEs, and MIT license
Copy file name to clipboardExpand all lines: plugins/ai-geo/.claude-plugin/plugin.json
+2-2Lines changed: 2 additions & 2 deletions
Original file line number
Diff line number
Diff line change
@@ -1,7 +1,7 @@
1
1
{
2
2
"name": "ai-geo",
3
-
"version": "1.0.0",
4
-
"description": "Generative Engine Optimization (GEO) auditing and remediation. Optimizes web content for AI answer engines like ChatGPT, Perplexity, Claude, and Google AI Overviews. Generates llms.txt files, audits AI crawler access, validates citation-worthiness signals, and structures content for LLM extraction.",
3
+
"version": "1.1.0",
4
+
"description": "Generative Engine Optimization (GEO) auditing and remediation. Optimizes web content for AI answer engines like ChatGPT, Perplexity, Claude, and Google AI Overviews. Generates llms.txt files, wires head link[rel=alternate] + sitemap + robots.txt discoverability signals, audits AI crawler access, validates citation-worthiness signals, and structures content for LLM extraction.",
Copy file name to clipboardExpand all lines: plugins/ai-geo/skills/geo-audit/SKILL.md
+19Lines changed: 19 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -113,6 +113,13 @@ Analyze the scope across all ten categories. For each finding capture: exact fil
113
113
- Staleness: compare `llms.txt` mtime vs newest content file mtime. Flag if content is materially newer.
114
114
- If missing entirely, generate a tailored example in the report body and recommend running `/geo-llms-txt`.
115
115
116
+
**Discoverability signals** (stackable hints beyond serving `/llms.txt` at root). No major LLM provider has publicly committed to reading `llms.txt` as a first-class signal 🧪, so discovery today depends on multiple weak signals stacked together. Audit each:
117
+
118
+
-`<head>` includes `<link rel="alternate" type="text/markdown" title="llms.txt" href="/llms.txt">` on at least the root layout / index page. **Severity: Medium** if missing. Check via the framework's head API source (Next.js Metadata API, Nuxt `useHead`, Astro layout `<head>`, SvelteKit `<svelte:head>`, Remix `meta` export, vanilla `<head>`) or static HTML output.
119
+
-`sitemap.xml` (or framework equivalent: `app/sitemap.ts`, `@nuxtjs/sitemap`, `astro-sitemap`) contains a `<url><loc>` entry for `/llms.txt`. **Severity: Medium** if missing. Confirms sitemap-reading crawlers pick up the path.
120
+
-`robots.txt` contains a comment line referencing the llms.txt URL, e.g. `# LLM index: https://<domain>/llms.txt`. **Severity: Low (informational).** Comments are non-standard for robots.txt parsers but human/LLM readable.
121
+
- Public directory submissions: llmstxt.site, directory.llmstxt.cloud, and similar aggregators. **Cannot be auto-detected.** Emit as a **Low / Suggestion** finding with text: "Manual: submit `https://<domain>/llms.txt` to llmstxt.site and directory.llmstxt.cloud." Never mark as Critical/High — outside the codebase.
122
+
116
123
#### Category 2: AI Crawler Access Audit
117
124
118
125
Parse `robots.txt` from project root or `public/`. Detect per-user-agent `Allow` / `Disallow` directives. Categorize bots:
@@ -379,6 +386,18 @@ Companion: run /seo-audit (ai-seo plugin) for traditional SEO coverage.
379
386
380
387
Generative Engine Optimization (GEO) is the practice of optimizing web content for AI answer engines like ChatGPT, Perplexity, Claude, and Google AI Overviews. Unlike traditional SEO which targets search rankings, GEO targets citation probability and answer inclusion in AI-generated responses.
381
388
389
+
### On llms.txt discovery
390
+
391
+
🧪 No major LLM provider (OpenAI, Anthropic, Perplexity, Google) has publicly committed to reading `llms.txt` as a first-class signal. Adoption today is strongest among dev-tool platforms (Cursor, Continue.dev, Mintlify) and aggregator directories. There is no central submission portal. Discovery therefore relies on **multiple weak signals stacked together**:
392
+
393
+
1. Serving `/llms.txt` at the web root (table-stakes).
394
+
2.`<link rel="alternate" type="text/markdown" href="/llms.txt">` in `<head>` so HTML-aware crawlers can discover it.
395
+
3. A `/llms.txt` entry in `sitemap.xml` so sitemap-reading crawlers pick up the path.
396
+
4. A `# LLM index: https://<domain>/llms.txt` comment in `robots.txt` (human/LLM readable).
397
+
5. Manual submission to public directories (llmstxt.site, directory.llmstxt.cloud).
398
+
399
+
Each is cheap; stacking them compounds the probability of any given crawler discovering the index.
Copy file name to clipboardExpand all lines: plugins/ai-geo/skills/geo-fix/SKILL.md
+25Lines changed: 25 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -57,6 +57,20 @@ Split findings into four buckets:
57
57
- Add `@type: "FAQPage"` wrapper around existing Q&A prose where H2/H3 are already question-shaped.
58
58
- Add `<link rel="alternate" type="text/markdown" href="<url>.md">` when a markdown-accessible route exists.
59
59
- Remove context-dependent phrases that clearly break chunking ("as mentioned above" where a backward reference can be replaced with explicit repeat, with user confirmation per change).
60
+
-**llms.txt discovery — `<head>` hint.** If `/llms.txt` is present but the page `<head>` lacks `<link rel="alternate" type="text/markdown" title="llms.txt" href="/llms.txt">`, add it via the framework-idiomatic head API (Next.js Metadata API `alternates.types`, Nuxt `useHead`, Vue + `@unhead/vue``useHead`, Astro layout `<head>`, SvelteKit `<svelte:head>`, Remix `meta` export, vanilla `<head>`). Skip if already present. Apply to the root layout so every page inherits.
61
+
-**llms.txt discovery — sitemap entry.** If `sitemap.xml` (or the framework generator) exists and lacks a `/llms.txt` entry, add it. For Next.js `app/sitemap.ts` push an entry `{ url: '<base>/llms.txt', changeFrequency: 'monthly', priority: 0.5 }`. For static `sitemap.xml` emit:
62
+
```xml
63
+
<url>
64
+
<loc>https://<domain>/llms.txt</loc>
65
+
<changefreq>monthly</changefreq>
66
+
<priority>0.5</priority>
67
+
</url>
68
+
```
69
+
Skip if entry already present. **Build-order rule** (flag, don't silently reorder): if both `llms.txt` and the sitemap are build-time generated, the llms.txt generator MUST run before the sitemap generator so the sitemap can read llms.txt's mtime. If the detected build script runs them in the wrong order, surface as a warning with the suggested reordering.
70
+
-**llms.txt discovery — robots.txt comment.** If `/llms.txt` exists, add a comment line to `robots.txt` (or the framework generator): `# LLM index: https://<domain>/llms.txt`. Auto-derive `<domain>` from canonical URL / existing sitemap declaration / environment config. If domain is not resolvable, prompt the user once. Skip if a matching comment is already present. For Next.js `app/robots.ts` emit the comment via a leading `host` / preamble string block, since `MetadataRoute.Robots` doesn't directly support comments — fall back to `public/robots.txt` if the route generator can't express it cleanly.
71
+
72
+
**Informational (manual action items — never automated):**
73
+
-**Public directory submission.** Print a manual action item in the terminal summary listing aggregator directories the user should submit `https://<domain>/llms.txt` to. Minimum list: `https://llmstxt.site/submit` and `https://directory.llmstxt.cloud`. These are web forms — do not attempt to automate submission. Emit as an informational line in the summary, not as a file edit.
60
74
61
75
**Intent-requiring fixes** (prompt user for policy):
0 commit comments