{"id":46473904,"url":"https://github.com/multivmlabs/aeo.js","last_synced_at":"2026-04-01T19:51:26.443Z","repository":{"id":339668863,"uuid":"1162632866","full_name":"multivmlabs/aeo.js","owner":"multivmlabs","description":"Answer Engine Optimization for the modern web. Make your site discoverable by ChatGPT, Claude, Perplexity \u0026 AI search engines. Generates llms.txt, robots.txt, sitemap, JSON-LD \u0026 more.","archived":false,"fork":false,"pushed_at":"2026-03-20T13:21:21.000Z","size":4903,"stargazers_count":43,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-21T05:53:02.879Z","etag":null,"topics":["aeo","ai-crawlers","ai-search","answer-engine-optimization","astro","chatgpt","geo","json-ld","llm","llms-txt","nextjs","npm-package","nuxt","perplexity","robots-txt","seo","sitemap","structured-data","typescript","vite"],"latest_commit_sha":null,"homepage":"https://aeojs.org","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/multivmlabs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-02-20T14:03:10.000Z","updated_at":"2026-03-20T14:19:18.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/multivmlabs/aeo.js","commit_stats":null,"previous_names":["multivmlabs/aeo.js"],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/multivmlabs/aeo.js","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/multivmlabs%2Faeo.js","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/multivmlabs%2Faeo.js/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/multivmlabs%2Faeo.js/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/multivmlabs%2Faeo.js/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/multivmlabs","download_url":"https://codeload.github.com/multivmlabs/aeo.js/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/multivmlabs%2Faeo.js/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31291247,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-01T13:12:26.723Z","status":"ssl_error","status_checked_at":"2026-04-01T13:12:25.102Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aeo","ai-crawlers","ai-search","answer-engine-optimization","astro","chatgpt","geo","json-ld","llm","llms-txt","nextjs","npm-package","nuxt","perplexity","robots-txt","seo","sitemap","structured-data","typescript","vite"],"created_at":"2026-03-06T06:34:10.409Z","updated_at":"2026-04-01T19:51:26.438Z","avatar_url":"https://github.com/multivmlabs.png","language":"TypeScript","readme":"\u003cp align=\"center\"\u003e\n  \u003ch1 align=\"center\"\u003eaeo.js\u003c/h1\u003e\n  \u003cp align=\"center\"\u003eAnswer Engine Optimization for the modern web.\u003cbr/\u003eMake your site discoverable by ChatGPT, Claude, Perplexity, and every AI answer engine.\u003c/p\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://www.npmjs.com/package/aeo.js\"\u003e\u003cimg src=\"https://img.shields.io/npm/v/aeo.js?style=flat\u0026colorA=0d0d0d\u0026colorB=1a1a1a\" alt=\"npm version\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.npmjs.com/package/aeo.js\"\u003e\u003cimg src=\"https://img.shields.io/npm/dm/aeo.js?style=flat\u0026colorA=0d0d0d\u0026colorB=1a1a1a\" alt=\"npm downloads\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/multivmlabs/aeo.js\"\u003e\u003cimg src=\"https://img.shields.io/github/stars/multivmlabs/aeo.js?style=flat\u0026colorA=0d0d0d\u0026colorB=1a1a1a\" alt=\"GitHub stars\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/multivmlabs/aeo.js/blob/main/LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/github/license/multivmlabs/aeo.js?style=flat\u0026colorA=0d0d0d\u0026colorB=1a1a1a\" alt=\"License\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://aeojs.org\"\u003eDocumentation\u003c/a\u003e · \u003ca href=\"https://check.aeojs.org\"\u003eAEO Checker\u003c/a\u003e · \u003ca href=\"https://www.npmjs.com/package/aeo.js\"\u003enpm\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"example.gif\" alt=\"aeo.js in action\" width=\"700\"\u003e\n\u003c/p\u003e\n\n## Install\n\n```bash\nnpm install aeo.js\n```\n\n## Quick Start\n\n### Astro\n\n```js\n// astro.config.mjs\nimport { defineConfig } from 'astro/config';\nimport { aeoAstroIntegration } from 'aeo.js/astro';\n\nexport default defineConfig({\n  site: 'https://mysite.com',\n  integrations: [\n    aeoAstroIntegration({\n      title: 'My Site',\n      description: 'A site optimized for AI discovery',\n      url: 'https://mysite.com',\n    }),\n  ],\n});\n```\n\n### Next.js\n\n```js\n// next.config.mjs\nimport { withAeo } from 'aeo.js/next';\n\nexport default withAeo({\n  aeo: {\n    title: 'My Site',\n    description: 'A site optimized for AI discovery',\n    url: 'https://mysite.com',\n  },\n});\n```\n\nAdd the post-build step to `package.json`:\n\n```json\n{\n  \"scripts\": {\n    \"postbuild\": \"node -e \\\"import('aeo.js/next').then(m =\u003e m.postBuild({ title: 'My Site', url: 'https://mysite.com' }))\\\"\"\n  }\n}\n```\n\n### Vite\n\n```js\n// vite.config.ts\nimport { defineConfig } from 'vite';\nimport { aeoVitePlugin } from 'aeo.js/vite';\n\nexport default defineConfig({\n  plugins: [\n    aeoVitePlugin({\n      title: 'My Site',\n      description: 'A site optimized for AI discovery',\n      url: 'https://mysite.com',\n    }),\n  ],\n});\n```\n\n### Nuxt\n\n```ts\n// nuxt.config.ts\nexport default defineNuxtConfig({\n  modules: ['aeo.js/nuxt'],\n  aeo: {\n    title: 'My Site',\n    description: 'A site optimized for AI discovery',\n    url: 'https://mysite.com',\n  },\n});\n```\n\n### Angular\n\n```json\n{\n  \"scripts\": {\n    \"postbuild\": \"node -e \\\"import('aeo.js/angular').then(m =\u003e m.postBuild({ title: 'My App', url: 'https://myapp.com' }))\\\"\"\n  }\n}\n```\n\n### Webpack\n\n```js\n// webpack.config.js\nconst { AeoWebpackPlugin } = require('aeo.js/webpack');\n\nmodule.exports = {\n  plugins: [\n    new AeoWebpackPlugin({\n      title: 'My Site',\n      description: 'A site optimized for AI discovery',\n      url: 'https://mysite.com',\n    }),\n  ],\n};\n```\n\n### CLI\n\nNo framework needed — run standalone:\n\n```bash\nnpx aeo.js generate --url https://mysite.com --title \"My Site\"\nnpx aeo.js init\nnpx aeo.js check\n```\n\n## Supported Frameworks\n\n| Framework | Import |\n|-----------|--------|\n| Astro | `aeo.js/astro` |\n| Next.js | `aeo.js/next` |\n| Vite | `aeo.js/vite` |\n| Nuxt | `aeo.js/nuxt` |\n| Angular | `aeo.js/angular` |\n| Webpack | `aeo.js/webpack` |\n| CLI | `npx aeo.js generate` |\n\n## Widget\n\nThe Human/AI widget lets visitors toggle between the normal page and its AI-readable markdown version.\n\n| Default | Small | Icon |\n|---------|-------|------|\n| \u003cimg src=\"widget-default.gif\" alt=\"Default widget\" width=\"220\"\u003e | \u003cimg src=\"widget-small.gif\" alt=\"Small widget\" width=\"220\"\u003e | \u003cimg src=\"widget-icon.gif\" alt=\"Icon widget\" width=\"220\"\u003e |\n\nFramework plugins inject it automatically. For Next.js or manual setups:\n\n```tsx\n'use client';\nimport { useEffect } from 'react';\n\nexport function AeoWidgetLoader() {\n  useEffect(() =\u003e {\n    import('aeo.js/widget').then(({ AeoWidget }) =\u003e {\n      new AeoWidget({\n        config: {\n          title: 'My Site',\n          url: 'https://mysite.com',\n          widget: { enabled: true, position: 'bottom-right' },\n        },\n      });\n    });\n  }, []);\n  return null;\n}\n```\n\nReact and Vue wrapper components are also available:\n\n```tsx\nimport { AeoReactWidget } from 'aeo.js/react';\n\n\u003cAeoReactWidget config={{ title: 'My Site', url: 'https://mysite.com' }} /\u003e\n```\n\n```vue\n\u003cscript setup\u003e\nimport { AeoVueWidget } from 'aeo.js/vue';\n\u003c/script\u003e\n\n\u003ctemplate\u003e\n  \u003cAeoVueWidget :config=\"{ title: 'My Site', url: 'https://mysite.com' }\" /\u003e\n\u003c/template\u003e\n```\n\n## Generated Files\n\nAfter building, your output directory contains:\n\n```\npublic/\n├── robots.txt        # AI-crawler directives\n├── llms.txt          # Short LLM-readable summary\n├── llms-full.txt     # Full content for LLMs\n├── sitemap.xml       # Standard sitemap\n├── docs.json         # Documentation manifest\n├── ai-index.json     # AI content index\n├── index.md          # Markdown for /\n└── about.md          # Markdown for /about\n```\n\n## Configuration\n\n```js\nimport { defineConfig } from 'aeo.js';\n\nexport default defineConfig({\n  title: 'My Site',\n  url: 'https://mysite.com',\n  description: 'A description of your site',\n\n  generators: {\n    robotsTxt: true,\n    llmsTxt: true,\n    llmsFullTxt: true,\n    rawMarkdown: true,\n    sitemap: true,\n    aiIndex: true,\n    schema: true,\n  },\n\n  schema: {\n    enabled: true,\n    organization: { name: 'My Company', url: 'https://mysite.com' },\n    defaultType: 'WebPage',\n  },\n\n  og: {\n    enabled: true,\n    image: 'https://mysite.com/og.png',\n    twitterHandle: '@mycompany',\n  },\n\n  widget: {\n    enabled: true,\n    position: 'bottom-right',\n    theme: { accent: '#4ADE80', badge: '#4ADE80' },\n  },\n});\n```\n\nFull configuration reference → [aeojs.org/reference/configuration](https://aeojs.org/reference/configuration/)\n\n## Why AEO?\n\n- **58% of searches** end without a click — AI gives the answer directly\n- **40% of Gen Z** prefer AI assistants over traditional search engines\n- **97% of sites** have no `llms.txt` or structured data for AI crawlers\n- **1 minute** to set up with aeo.js\n\nIf your site isn't optimized for AI engines, you're invisible to a growing share of users who never open a search results page.\n\n## Links\n\n- [Documentation](https://aeojs.org)\n- [AEO Checker](https://check.aeojs.org)\n- [npm](https://www.npmjs.com/package/aeo.js)\n- [GitHub](https://github.com/multivmlabs/aeo.js)\n\n## License\n\nMIT\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmultivmlabs%2Faeo.js","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmultivmlabs%2Faeo.js","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmultivmlabs%2Faeo.js/lists"}