Skip to content
npm downloadsGitHub stars

Configuration

All framework plugins and the CLI accept the same AeoConfig object.

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',
},
},
});
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
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.
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
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.
Option Type Default Description
allow string[] ['/'] Allowed paths
disallow string[] [] Disallowed paths
crawlDelay number 0 Crawl delay in seconds
sitemap string auto Sitemap URL
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
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