Configuration
All framework plugins and the CLI accept the same AeoConfig object.
Full example
Section titled “Full example”import { defineConfig } from 'aeo.js';
export default defineConfig({ // Required title: 'My Site', url: 'https://mysite.com',
// Optional description: 'A description of your site', contentDir: 'docs', // Directory with handwritten .md files outDir: 'public', // Output directory for generated files
// Toggle individual generators generators: { robotsTxt: true, llmsTxt: true, llmsFullTxt: true, rawMarkdown: true, manifest: true, sitemap: true, aiIndex: true, schema: true, },
// Configure ai-index.json generation aiIndex: { maxChunkLength: 2000, maxKeywords: 10, },
// Customize robots.txt robots: { allow: ['/'], disallow: ['/admin'], crawlDelay: 0, sitemap: 'https://mysite.com/sitemap.xml', },
// JSON-LD structured data schema: { enabled: true, organization: { name: 'My Company', url: 'https://mysite.com', logo: 'https://mysite.com/logo.png', sameAs: ['https://twitter.com/mycompany'], }, defaultType: 'WebPage', },
// Open Graph meta tags og: { enabled: true, image: 'https://mysite.com/og.png', twitterHandle: '@mycompany', type: 'website', },
// Widget configuration widget: { enabled: true, position: 'bottom-right', humanLabel: 'Human', aiLabel: 'AI', showBadge: true, theme: { background: 'rgba(18, 18, 24, 0.9)', text: '#C0C0C5', accent: '#E8E8EA', badge: '#4ADE80', }, },});Options reference
Section titled “Options reference”Top-level
Section titled “Top-level”| Option | Type | Default | Description |
|--------|------|---------|-------------|
| title | string | '' | Site title |
| description | string | '' | Site description |
| url | string | '' | Site URL (used for absolute URLs in generated files) |
| contentDir | string | 'docs' | Directory with handwritten markdown files |
| outDir | string | auto-detected | Output directory for generated files |
| pages | PageEntry[] | [] | Manually specify pages to include |
generators
Section titled “generators”| Option | Type | Default | Description |
|--------|------|---------|-------------|
| robotsTxt | boolean | true | Generate robots.txt |
| llmsTxt | boolean | true | Generate llms.txt |
| llmsFullTxt | boolean | true | Generate llms-full.txt |
| rawMarkdown | boolean | true | Generate per-page .md files |
| manifest | boolean | true | Generate docs.json |
| sitemap | boolean | true | Generate sitemap.xml |
| aiIndex | boolean | true | Generate ai-index.json |
| schema | boolean | false | Generate JSON-LD structured data |
aiIndex
Section titled “aiIndex”| Option | Type | Default | Description |
|--------|------|---------|-------------|
| maxChunkLength | number | 2000 | Target chunk length (soft limit). Chunks split on \n\n paragraph boundaries, so a single long paragraph can exceed this value. Set with embedding-model token limits in mind. |
| maxKeywords | number | 10 | Maximum number of keywords extracted per ai-index.json entry. |
robots
Section titled “robots”| Option | Type | Default | Description |
|--------|------|---------|-------------|
| allow | string[] | ['/'] | Allowed paths |
| disallow | string[] | [] | Disallowed paths |
| crawlDelay | number | 0 | Crawl delay in seconds |
| sitemap | string | auto | Sitemap URL |
schema
Section titled “schema”| Option | Type | Default | Description |
|--------|------|---------|-------------|
| enabled | boolean | false | Enable schema generation |
| organization.name | string | '' | Organization name |
| organization.url | string | '' | Organization URL |
| organization.logo | string | '' | Organization logo URL |
| organization.sameAs | string[] | [] | Social profile URLs |
| defaultType | 'Article' \| 'WebPage' | 'WebPage' | Default schema type for pages |
| Option | Type | Default | Description |
|--------|------|---------|-------------|
| enabled | boolean | false | Enable OG tag generation |
| image | string | '' | Default OG image URL |
| twitterHandle | string | '' | Twitter handle (e.g. @company) |
| type | 'website' \| 'article' | 'website' | Default OG type |
widget
Section titled “widget”| Option | Type | Default | Description |
|--------|------|---------|-------------|
| enabled | boolean | true | Enable the widget |
| position | string | 'bottom-right' | Widget position |
| humanLabel | string | 'Human' | Label for human view |
| aiLabel | string | 'AI' | Label for AI view |
| showBadge | boolean | true | Show the AEO badge |
| theme.background | string | 'rgba(18, 18, 24, 0.9)' | Widget background |
| theme.text | string | '#C0C0C5' | Text color |
| theme.accent | string | '#E8E8EA' | Accent color |
| theme.badge | string | '#4ADE80' | Badge color |