Skip to content
$
added 1 package in 2s

Ready — run npx aeo.js init to get started
$

GEO Readiness Score: 92/100 (Excellent)
══════════════════════════════════════

AI Access: 20/20
Content Structure: 20/20
Schema Presence: 20/20
Meta Quality: 16/20
Citability: 16/20
$

[aeo.js] Generating AEO files...
robots.txt — AI crawler directives
llms.txt — LLM summary
llms-full.txt — full content for LLMs
sitemap.xml — sitemap
schema.json — JSON-LD structured data
ai-index.json — AI content index

Generated 6 files in 42ms
// aeo.config.ts
import { defineConfig } from 'aeo.js'

export default defineConfig({
title: 'My Site',
url: 'https://mysite.com',
schema: { organization: { name: 'My Co' } },
widget: { size: 'small' },
});
Terminal window
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',
}),
],
});

Answer Engine Optimization (AEO) is the practice of making your website discoverable and citable by AI-powered answer engines like ChatGPT, Claude, Perplexity, and SearchGPT.

aeo.js auto-generates the files these engines look for and provides a drop-in widget that shows visitors how your site appears to AI. First-class support for Astro, Next.js, Vite, Nuxt, Angular, and Webpack — or run standalone via CLI.

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.txt or structured data for AI crawlers
1 min
to set up
aeo.js generates robots.txt, llms.txt, schema & more

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. AEO is the new SEO.

The Human/AI widget lets visitors toggle between the normal page and its AI-readable markdown version. 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' }} />

All frameworks use the same config shape — see full reference:

import { defineConfig } from 'aeo.js';
export default defineConfig({
title: 'My Site',
url: 'https://mysite.com',
description: 'A site optimized for AI discovery',
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' },
},
});

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

Free — no signup required. Powered by AEO Checker