Answer Engine Optimization for the modern web.
Make your site discoverable by ChatGPT, Claude, Perplexity, and every AI answer engine.
npm version npm downloads GitHub stars License
Documentation · AEO Checker · npm
npm install aeo.js
// astro.config.mjs import { defineConfig } from 'astro/config'; import { aeoAstroIntegration } from 'aeo.js/astro'; export default defineConfig({ site: 'https://mysite.com', integrations: [ aeoAstroIntegration({ title: 'My Site', description: 'A site optimized for AI discovery', url: 'https://mysite.com', }), ], });
// next.config.mjs import { withAeo } from 'aeo.js/next'; export default withAeo({ aeo: { title: 'My Site', description: 'A site optimized for AI discovery', url: 'https://mysite.com', }, });
Add the post-build step to package.json:
{
"scripts": {
"postbuild": "node -e \"import('aeo.js/next').then(m => m.postBuild({ title: 'My Site', url: 'https://mysite.com' }))\""
}
}// vite.config.ts import { defineConfig } from 'vite'; import { aeoVitePlugin } from 'aeo.js/vite'; export default defineConfig({ plugins: [ aeoVitePlugin({ title: 'My Site', description: 'A site optimized for AI discovery', url: 'https://mysite.com', }), ], });
// nuxt.config.ts export default defineNuxtConfig({ modules: ['aeo.js/nuxt'], aeo: { title: 'My Site', description: 'A site optimized for AI discovery', url: 'https://mysite.com', }, });
{
"scripts": {
"postbuild": "node -e \"import('aeo.js/angular').then(m => m.postBuild({ title: 'My App', url: 'https://myapp.com' }))\""
}
}// webpack.config.js const { AeoWebpackPlugin } = require('aeo.js/webpack'); module.exports = { plugins: [ new AeoWebpackPlugin({ title: 'My Site', description: 'A site optimized for AI discovery', url: 'https://mysite.com', }), ], };
No framework needed — run standalone:
npx aeo.js generate --url https://mysite.com --title "My Site"
npx aeo.js init
npx aeo.js check| Framework | Import |
|---|---|
| Astro | aeo.js/astro |
| Next.js | aeo.js/next |
| Vite | aeo.js/vite |
| Nuxt | aeo.js/nuxt |
| Angular | aeo.js/angular |
| Webpack | aeo.js/webpack |
| CLI | npx aeo.js generate |
The Human/AI widget lets visitors toggle between the normal page and its AI-readable markdown version.
| Default | Small | Icon |
|---|---|---|
| Default widget | Small widget | Icon widget |
Framework plugins inject it automatically. For Next.js or manual setups:
'use client'; import { useEffect } from 'react'; export function AeoWidgetLoader() { useEffect(() => { import('aeo.js/widget').then(({ AeoWidget }) => { new AeoWidget({ config: { title: 'My Site', url: 'https://mysite.com', widget: { enabled: true, position: 'bottom-right' }, }, }); }); }, []); return null; }
React and Vue wrapper components are also available:
import { AeoReactWidget } from 'aeo.js/react'; <AeoReactWidget config={{ title: 'My Site', url: 'https://mysite.com' }} />
<script setup> import { AeoVueWidget } from 'aeo.js/vue'; </script> <template> <AeoVueWidget :config="{ title: 'My Site', url: 'https://mysite.com' }" /> </template>
After building, your output directory contains:
public/
├── robots.txt # AI-crawler directives
├── llms.txt # Short LLM-readable summary
├── llms-full.txt # Full content for LLMs
├── sitemap.xml # Standard sitemap
├── docs.json # Documentation manifest
├── ai-index.json # AI content index
├── index.md # Markdown for /
└── about.md # Markdown for /about
import { defineConfig } from 'aeo.js'; export default defineConfig({ title: 'My Site', url: 'https://mysite.com', description: 'A description of your site', generators: { robotsTxt: true, llmsTxt: true, llmsFullTxt: true, rawMarkdown: true, sitemap: true, aiIndex: true, schema: true, }, schema: { enabled: true, organization: { name: 'My Company', url: 'https://mysite.com' }, defaultType: 'WebPage', }, og: { enabled: true, image: 'https://mysite.com/og.png', twitterHandle: '@mycompany', }, widget: { enabled: true, position: 'bottom-right', theme: { accent: '#4ADE80', badge: '#4ADE80' }, }, });
Full configuration reference → aeojs.org/reference/configuration
- 58% of searches end without a click — AI gives the answer directly
- 40% of Gen Z prefer AI assistants over traditional search engines
- 97% of sites have no
llms.txtor structured data for AI crawlers - 1 minute to set up with aeo.js
If your site isn't optimized for AI engines, you're invisible to a growing share of users who never open a search results page.
MIT