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 |
pages (PageEntry)
Section titled “pages (PageEntry)”| Option | Type | Default | Description |
|---|---|---|---|
pathname |
string |
— | Page path (e.g. /about) |
title |
string |
— | Page title |
description |
string |
— | Page description |
content |
string |
— | Page body used for AI index chunks and keywords |
tags |
string[] |
— | Optional user-defined labels (e.g. 'calculator', 'template', 'guide'). Surfaced verbatim in ai-index.json entry metadata.tags. Descriptive only — does not affect audit or citability scoring. |
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 |