Add GEO (Generative Engine Optimization) to any Astro project. Make your content appear in AI responses from ChatGPT, Perplexity, Claude, and Google AI Overviews.
This is NOT a template. It's an enhancement layer that works with ANY Astro project.
npx @aiorg/cli init landing-page ~/my-site
cd ~/my-site
# Open in Claude Code, then run:
/setup/setup
│
├─ No Astro project?
│ └─ Offers to install AstroWind (recommended, 4k+ GitHub stars)
│
├─ Astro project found?
│ └─ Analyzes your structure
│ └─ Copies GEO components to src/components/geo/
│ └─ Adds JSON-LD helpers to src/lib/schema.ts
│
└─ Not Astro? (Next.js, etc.)
└─ Points you to SaaS Dev Team instead
Components that help AI systems cite your content:
| Component | Purpose | Usage |
|---|---|---|
AnswerBox |
Direct answer block (40-60 words) | Top of article, answers the main question |
KeyTakeaway |
Highlighted insight | Key points throughout content |
StatCitation |
Statistic with source attribution | Every ~175 words for credibility |
FAQSection |
FAQ accordion with JSON-LD schema | Common questions at end of article |
FreshnessBadge |
Content recency indicator | Shows when content was last updated |
---
title: "How to Validate Your Startup Idea"
pubDate: 2026-02-01
---
import AnswerBox from '@/components/geo/AnswerBox.astro'
import StatCitation from '@/components/geo/StatCitation.astro'
import FAQSection from '@/components/geo/FAQSection.astro'
<AnswerBox>
Talk to 20+ potential customers before writing code.
Focus on understanding their problems, not pitching your solution.
</AnswerBox>
## Why Customer Interviews Matter
<StatCitation
stat="42%"
context="of startups fail because there's no market need"
source="CB Insights"
url="https://cbinsights.com/research/startup-failure-reasons/"
/>
<FAQSection questions={[
{
question: "How many interviews do I need?",
answer: "Aim for 20-30. You'll see patterns after 10-15."
}
]} />Structured data functions in schema.ts:
| Function | Schema Type |
|---|---|
generateBlogPostSchema() |
BlogPosting with @id linking |
generateFAQSchema() |
FAQPage for FAQ sections |
generateBreadcrumbSchema() |
BreadcrumbList for navigation |
generateBlogIndexSchema() |
CollectionPage for blog index |
| Command | What it does |
|---|---|
/setup |
Detect environment, install template if needed, add GEO components |
/blog |
Create a new GEO-optimized blog post |
/deploy |
Deploy to Cloudflare Pages or Vercel |
Landing pages are content, not apps. They don't need a JavaScript runtime.
| Framework | Default JS sent to browser | Best for |
|---|---|---|
| Astro | 0 KB | Content sites, landing pages, blogs |
| Next.js | 70+ KB | Full-stack web apps with auth/DB |
Cloudflare acquired Astro in January 2026. Astro is backed by the company that runs 20% of the internet.
Need auth, database, payments? Use SaaS Dev Team instead.
your-project/
├── src/
│ ├── components/
│ │ ├── geo/ # Added by /setup
│ │ │ ├── AnswerBox.astro
│ │ │ ├── KeyTakeaway.astro
│ │ │ ├── StatCitation.astro
│ │ │ ├── FAQSection.astro
│ │ │ └── FreshnessBadge.astro
│ │ └── ... # Your template's components
│ ├── content/
│ │ └── post/ or blog/ # Your content
│ └── lib/
│ └── schema.ts # Added by /setup
├── .claude/ # Kit commands & knowledge
│ ├── commands/
│ ├── knowledge/
│ └── templates/ # Source files for /setup
└── CLAUDE.md
- Lead with the answer — put AnswerBox at the top of every article
- Add statistics — one StatCitation per ~175 words builds credibility
- Clear headings — H2s should describe content (AI uses them for context)
- Include FAQ — common questions with concise answers
- Stay fresh — update dates regularly, use FreshnessBadge
- Unique titles with primary keyword
- Meta descriptions (150-160 characters)
- Internal links between related posts
- Descriptive image alt text
- JSON-LD structured data via schema helpers
- Claude Code CLI
- Node.js 20+
| Kit | When to use |
|---|---|
| Idea OS | Validate your idea before building |
| SaaS Dev Team | Full-stack SaaS with auth, DB, payments |
| Marketing OS | Automate content marketing and SEO |
- Documentation: https://aiorg.dev/docs/kits/landing-page
- All kits: https://aiorg.dev/kits
- Issues: https://github.com/aiorgdev/landing-page/issues
MIT