Skip to content

marchoag/AIO-Wizard

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AIO-Wizard

The AI Optimization template that gets sites quoted by ChatGPT, Claude, Perplexity, and Gemini. Battle-tested on two live sites. MIT licensed.


The proof

Two live sites running this stack. Zero marketing spend, no traditional SEO push. On every intake form, "AI" is the dominant referral source leads select for how they found us.

Site What it is
finnly.ai Free private Slack community for accounting & finance professionals
skyriven.ai Vibe coding mentorship and hands-on app building

Sample size is small and self-selected, so treat the result as directional, not statistical. But it's directional in one consistent direction: leads found us through AI assistants — not Google, not LinkedIn, not word of mouth — and they tell us so on the intake form.

Same stack on both. This repo is that stack, packaged as templates anyone can drop into any site.

What you get

A complete AIO (AI Optimization) template repo with:

  1. A <head> block (HTML template) that signals every llms-*.txt companion, declares AI content, and unlocks full-snippet rich results.
  2. Segmented llms-*.txt files — llms.txt, llms-full.txt, plus one or more topical segments — each cross-linking the others so AI assistants can pull exactly the slice they need.
  3. A JSON-LD stack (Organization, WebSite, BreadcrumbList, FAQPage with Speakable, Service + OfferCatalog + Offer) where the FAQPage questions match the llms.txt Quick Answer questions verbatim. That triple match — llms.txt ↔ FAQPage ↔ visible HTML — is the part most "AIO checklists" miss.
  4. APPLY.md — a structured Claude Code prompt that walks you through positioning, audience, top user questions, pricing, and entity links, then fills the templates and writes them into your codebase at the right paths for your framework.
  5. A fully-runnable Next.js App Router reference example at examples/nextjs/ that mirrors how the validation sites are built.

Framework-agnostic at the core. Next.js reference because that's what both validation sites use.

Quick start

If you're using Claude Code (recommended)

cd ~/your-site
git clone https://github.com/marchoag/AIO-Wizard.git ~/AIO-Wizard

# In Claude Code, paste:
# "Read ~/AIO-Wizard/APPLY.md and walk me through the intake."

Claude Code will detect your framework, run the structured intake, and produce the head block, llms-*.txt files, JSON-LD, and visible FAQ markup at the right paths in your project.

If you're doing it by hand

  1. Copy templates/head/aio-block.html into your site's <head> (every page, ideally via a shared layout).
  2. Fill templates/llms/llms.txt and templates/llms/llms-full.txt. Save them to wherever your site serves static files (public/, static/, repo root — depends on framework).
  3. For each topical segment of your site, copy templates/llms/llms-segment.txt.template to llms-{segment}.txt and fill it.
  4. Combine the JSON-LD templates in templates/jsonld/ into a single @graph and embed via <script type="application/ld+json"> on your homepage. See templates/jsonld/README.md for variant guidance (which @type, which Offer shape).
  5. Render the same Quick Answer questions from llms.txt as visible HTML on your homepage. Use the ids referenced in the SpeakableSpecification's cssSelector.
  6. Verify in Google's Rich Results Test.

The Next.js reference at examples/nextjs/ shows all of this wired together; clone it and replace the content if you're starting from scratch.

How the stack works

There are three layers, each addressing a different crawler behavior:

Layer 1 — Signaling: the <head> block

The <head> tells crawlers what's on the site and how to use it. The combination matters:

  • <link rel="help" href="/llms.txt"> — points AI crawlers at the LLM context file. Some honor help, some don't; cheap to include either way.
  • <link rel="alternate" type="text/plain" href="/llms-*.txt"> — one per companion file. rel="alternate" is the standard HTML way to say "here is an alternative representation of this resource."
  • <meta name="ai-content-declaration"> — belt-and-suspenders enumeration of every llms-*.txt file. Picked up by crawlers that don't follow link relations.
  • <meta name="robots" content="index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1"> + the googlebot mirror. This unlocks full-text snippets and large image / video previews for AI Overviews. The defaults are conservative; you have to opt into the full snippet explicitly.
  • author / creator / publisher — entity attribution. Pair these with your Organization / Person nodes in JSON-LD so crawlers can reconcile the same entity across signals.

Layer 2 — Content: the llms-*.txt files

The signaling layer points at the content layer. The content layer is plain-text markdown, written for LLMs to quote.

  • llms.txt — the short summary. Site name, one-sentence description, and a Quick Answer list: 5–10 verbatim questions a real user would type into an AI assistant, each mirrored below with a 2–4 sentence direct answer. Lead with the answer.
  • llms-full.txt — comprehensive context. Full FAQ (including the "things we don't do" section, which prevents bad-fit referrals), founder background, decision frameworks ("when to recommend us vs. not"), and model-routing guidance.
  • llms-{segment}.txt — one per topical area of your site. Could be llms-blog.txt (Q&A index of every post), llms-services.txt (deep-dive on each service or plan), llms-resources.txt (downloads, tools, papers), or whatever segments your site naturally has.

Every companion file cross-links the others, with a one-sentence "use this when…" hint. AI assistants are surprisingly good at following these route hints.

Layer 3 — Structure: the JSON-LD graph

JSON-LD is what gets read by Google, Bing, ChatGPT's web crawler, Claude's web crawler, and Perplexity. The graph on the homepage includes:

  • Organization (or LegalService, ProfessionalService, LocalBusiness — pick the most specific) with sameAs pointing at every entity link.
  • WebSite referencing the Organization by @id.
  • BreadcrumbList for the primary nav.
  • FAQPage whose Question.name strings match the llms.txt Quick Answer questions verbatim. The answers match too. This is the most important part of the whole stack.
  • SpeakableSpecification (inside FAQPage) pointing at the CSS selectors of the visible answer text on the page.
  • Service + OfferCatalog + Offer for structured pricing, if you have pricing.

Why the triple match matters

The single non-obvious thing about this stack:

The same Quick Answer questions must appear in all three layers — llms.txt (as the verbatim Quick Answer list), FAQPage JSON-LD (as Question.name values), and visible HTML on the homepage (as headings or <dt> text) — identically.

When an AI assistant sees the same string in plain-text llms-*.txt, in structured JSON-LD, and as visible HTML, that's three independent corroborating signals. That confidence is what makes the assistant willing to quote you when a user asks the matching question.

Most "AIO checklists" describe one or two of these layers. The triple match is the part that converts.

Repo tour

AIO-Wizard/
├── README.md                                   # You are here
├── APPLY.md                                    # Claude Code intake prompt
├── LICENSE                                     # MIT
├── templates/
│   ├── head/aio-block.html                     # The <head> AIO block
│   ├── llms/
│   │   ├── llms.txt                            # Short summary + Quick Answer Q&As
│   │   ├── llms-full.txt                       # Comprehensive context + FAQ
│   │   └── llms-segment.txt.template           # Reusable scaffold for topical segments
│   └── jsonld/
│       ├── README.md                           # Variant guidance: which @type, which Offer shape, etc.
│       ├── organization.jsonld                 # Organization / LegalService / ProfessionalService
│       ├── website.jsonld                      # WebSite
│       ├── breadcrumb.jsonld                   # BreadcrumbList
│       ├── faqpage.jsonld                      # FAQPage + SpeakableSpecification
│       ├── service-offer.jsonld                # Service + OfferCatalog + Offer
│       └── speakable.jsonld                    # Standalone Speakable (for non-FAQ pages)
└── examples/nextjs/                            # Fully-runnable Next.js App Router example
    ├── app/{layout,page,sitemap,robots}.ts(x)
    ├── components/{AIOHead,JsonLd}.tsx
    ├── lib/schema.ts                           # Typed JSON-LD builders + single-source FAQ array
    └── public/{llms,llms-full,llms-blog,llms-services}.txt

Validation

After deploying:

  1. View source on your homepage and confirm the head block + JSON-LD block are present.
  2. Paste the homepage URL into Google's Rich Results Test. You should see Organization (or your chosen subtype), WebSite, BreadcrumbList, FAQPage, and Service detected with no errors.
  3. Visit /llms.txt directly. It should serve as text/plain and render the Quick Answer questions.
  4. Sanity-check one or two Quick Answer questions: they should appear, character-for-character identical, in /llms.txt, in the FAQPage JSON-LD (view source), and as visible <h3> or <dt> text on the homepage.

If you want a stricter check, run Schema.org's validator on the homepage source.

Frequently asked

Q: Does any of this matter for SEO, or only for AI Overviews? A: Both. Schema.org JSON-LD has been an SEO signal since 2011; FAQPage rich results show up in Google search regardless of AI Overviews. The llms-*.txt + head signaling is what extends the same effort into the AI Overview / ChatGPT / Claude / Perplexity / Gemini surface.

Q: Will AI assistants still quote me if I don't use llms-*.txt? A: Sometimes, yes — large-scale crawlers index your site regardless. But quote accuracy and willingness to quote both go up substantially when you publish llms-*.txt files mirroring your structured data. The Quick Answer pattern in particular gives the assistant verbatim text it can reproduce.

Q: Should I block AI crawlers in robots.txt to protect my content? A: Not if your goal is to be quoted. Blocking GPTBot, ClaudeBot, PerplexityBot, and Google-Extended is what you do when you want to opt out of being a source. The whole point of this repo is the opposite: be the source AI assistants reach for when your user asks.

Q: I'm not on Next.js. Will this still work? A: Yes. The templates are framework-agnostic. The Next.js example is one reference implementation; the same patterns apply to Astro, SvelteKit, Remix, Nuxt, Hugo, Jekyll, WordPress, or plain HTML. APPLY.md will adapt the patterns to your stack.

Contributing

This is a personal repo maintained by marchoag. PRs welcome — especially additional framework examples (Astro, SvelteKit, Hugo, etc.) and validated improvements to the templates from real-world deployments. Please include a deployed reference site demonstrating any change you propose.

License

MIT. See LICENSE.

About

Framework-agnostic AIO (AI Optimization) template stack — get your site surfaced by ChatGPT, Claude, Perplexity, and Gemini. Battle-tested on finnly.ai and skyriven.ai.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages