[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-81422":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":16,"stars7d":16,"stars30d":17,"stars90d":16,"forks30d":16,"starsTrendScore":16,"compositeScore":18,"rankGlobal":10,"rankLanguage":10,"license":19,"archived":20,"fork":20,"defaultBranch":21,"hasWiki":22,"hasPages":20,"topics":23,"createdAt":10,"pushedAt":10,"updatedAt":24,"readmeContent":25,"aiSummary":26,"trendingCount":16,"starSnapshotCount":16,"syncStatus":17,"lastSyncTime":27,"discoverSource":28},81422,"ai-seo-audit","context-dot-dev\u002Fai-seo-audit","context-dot-dev","Free AI SEO \u002F GEO auditor","https:\u002F\u002Fwww.freeaiseoaudit.com\u002F",null,"TypeScript",36,7,34,1,0,2,42.91,"MIT License",false,"main",true,[],"2026-06-12 04:01:33","\u003Cdiv align=\"center\">\n\n# AI SEO Audit\n\n**Score any URL for ChatGPT, Claude, and Perplexity visibility — then ship the fixes with your coding agent.**\n\n[![License: MIT](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-MIT-teal.svg)](.\u002FLICENSE)\n[![Next.js](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FNext.js-16-black.svg)](https:\u002F\u002Fnextjs.org\u002F)\n[![Powered by context.dev](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPowered%20by-context.dev-0a0a0a.svg)](https:\u002F\u002Fcontext.dev?utm_source=github&utm_medium=readme&utm_campaign=ai-seo-audit&utm_content=badge)\n\n\u003C\u002Fdiv>\n\n---\n\n`ai-seo-audit` is a free, open-source web app that audits a page for **AI answer-engine readability** — the kind of optimization that gets you cited by ChatGPT, Claude, and Perplexity rather than ranked on Google. Paste a URL, get a 0–100 score across six categories (crawlability, content chunking, schema, E-E-A-T, off-site citations, and governance), then copy a generated fix prompt straight into your coding agent.\n\n> Sometimes called **GEO** (Generative Engine Optimization) or **AEO** (Answer Engine Optimization).\n\n## Demo\n\nPaste a URL → get a score in ~30 seconds → copy the fix prompt into Claude Code, Cursor, or any agent.\n\n```\n┌──────────────────────────────────────────────────┐\n│  https:\u002F\u002Fexample.com\u002Fpost                        │  →  Score: 72 \u002F 100  (Strong)\n└──────────────────────────────────────────────────┘\n   ├─ A. Technical AI Crawlability ..... 18.0 \u002F 28.4\n   ├─ B. Content Structure & Chunking .. 21.0 \u002F 25.4\n   ├─ C. Structured Data \u002F Schema ...... 13.4 \u002F 13.4\n   ├─ D. E-E-A-T & Entity Authority ... 13.0 \u002F 21.4\n   ├─ E. Off-site \u002F Citation Surface ... 3.6 \u002F 8.4\n   └─ F. Measurement & Governance ...... 3.0 \u002F 3.0\n```\n\n## Features\n\n- **30+ AI-readability checks** across crawlability, content chunking, schema markup, and trust signals.\n- **Agent-ready fix prompt** — generated per audit, paste into Claude Code \u002F Cursor \u002F Aider to implement the fixes.\n- **JSON API** at `\u002Fapi\u002Faudit?domain=...` for CI pipelines and dashboards.\n- **Edge-cached results** via optional Turso (libSQL) — repeat audits are instant.\n- **Zero direct page fetches.** All web data flows through [context.dev](https:\u002F\u002Fcontext.dev?utm_source=github&utm_medium=readme&utm_campaign=ai-seo-audit&utm_content=intro), giving you clean Markdown extraction and rendered HTML without running a headless browser yourself.\n\n## Architecture\n\n```mermaid\nflowchart LR\n  user([User])\n  subgraph next[\"Next.js 16 App (Vercel)\"]\n    ui[\"UI\u003Cbr\u002F>\u003Csub>app\u002F, components\u002F\u003C\u002Fsub>\"]\n    api[\"API\u003Cbr\u002F>\u003Csub>app\u002Fapi\u002Faudit\u002Froute.ts\u003C\u002Fsub>\"]\n    audit[\"Audit orchestrator\u003Cbr\u002F>\u003Csub>lib\u002Faudit.ts\u003C\u002Fsub>\"]\n    rules[\"Rule engine\u003Cbr\u002F>\u003Csub>lib\u002Frules.ts (30+ rules)\u003C\u002Fsub>\"]\n    prompt[\"Agent fix prompt\u003Cbr\u002F>\u003Csub>lib\u002Fagent-fix-prompt.ts\u003C\u002Fsub>\"]\n  end\n  ctx[(\"context.dev\u003Cbr\u002F>\u003Csub>Markdown + HTML scrape\u003C\u002Fsub>\")]\n  turso[(\"Turso \u002F libSQL\u003Cbr\u002F>\u003Csub>optional cache\u003C\u002Fsub>\")]\n  target[(\"Target page\")]\n\n  user -->|paste URL| ui\n  ui --> api\n  api --> audit\n  audit -->|webScrapeMd \u002F webScrapeHTML| ctx\n  ctx -->|fetch| target\n  audit --> rules\n  rules --> audit\n  audit --> prompt\n  audit \u003C-->|\"cache (sha256 key)\"| turso\n  audit -->|\"score + items + prompt\"| api\n  api -->|JSON| ui\n```\n\nThe app **never** hits the audited site directly — every byte of page content is fetched through `context.dev`, which handles rendering, robots compliance, and Markdown extraction.\n\n| Layer        | File(s)                                                                          | Responsibility                                                               |\n| ------------ | -------------------------------------------------------------------------------- | ---------------------------------------------------------------------------- |\n| UI           | `app\u002Fpage.tsx`, `components\u002Faudit-form.tsx`, `components\u002Faudit-results-view.tsx` | Form, score view, copy-paste prompt                                          |\n| API          | `app\u002Fapi\u002Faudit\u002Froute.ts`                                                         | `GET`\u002F`POST` JSON endpoint, edge cache headers                               |\n| Orchestrator | `lib\u002Faudit.ts`, `lib\u002Fperform-audit.ts`                                           | Pulls Markdown + HTML via context.dev, builds `RuleContext`, runs every rule |\n| Rules        | `lib\u002Frules.ts`                                                                   | Authoritative source for every check (edit this file to add\u002Ftune rules)      |\n| Prompt       | `lib\u002Fagent-fix-prompt.ts`                                                        | Turns failing rules into a single copy-paste prompt for coding agents        |\n| Cache        | `lib\u002Fturso.ts`                                                                   | Optional libSQL-backed cache, keyed by domain + schema version               |\n\n## Getting started\n\n### 1. Get a Context.dev API key\n\nContext.dev handles the page fetch + Markdown extraction that powers the audit. It has a generous free tier.\n\n👉 **[Sign up for context.dev](https:\u002F\u002Fcontext.dev\u002Fsignup?utm_source=github&utm_medium=readme&utm_campaign=ai-seo-audit&utm_content=signup-cta)**\n\nAfter signing in, grab your API key from the dashboard.\n\n### 2. Clone and install\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fcontext-dot-dev\u002Fai-seo-audit.git\ncd ai-seo-audit\nnpm install\n```\n\n### 3. Configure environment\n\nCopy the example file and fill in your key:\n\n```bash\ncp .env.example .env\n```\n\n```env\n# .env\nCONTEXT_DEV_API_KEY=ctx_sk_...          # required — from https:\u002F\u002Fcontext.dev\nNEXT_PUBLIC_SITE_URL=http:\u002F\u002Flocalhost:3000\n\n# Optional: Turso (libSQL) cache. Without these, audits run live every time.\naiseo_TURSO_DATABASE_URL=\naiseo_TURSO_AUTH_TOKEN=\n```\n\n| Variable                   | Required | What it does                                                                                                                                                     |\n| -------------------------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `CONTEXT_DEV_API_KEY`      | ✅       | Authenticates Markdown + HTML scrapes via [context.dev](https:\u002F\u002Fcontext.dev?utm_source=github&utm_medium=readme&utm_campaign=ai-seo-audit&utm_content=env-table) |\n| `NEXT_PUBLIC_SITE_URL`     | ✅       | Canonical site URL used for OG tags and sitemap                                                                                                                  |\n| `aiseo_TURSO_DATABASE_URL` | optional | libSQL database URL for caching audit results                                                                                                                    |\n| `aiseo_TURSO_AUTH_TOKEN`   | optional | Paired auth token for the Turso database                                                                                                                         |\n\n> **Turso is optional.** When the Turso variables are missing the app falls back to running a fresh audit on every request. For production, the [Vercel + Turso Marketplace integration](https:\u002F\u002Fvercel.com\u002Fintegrations\u002Fturso) wires both vars in automatically.\n\n### 4. Run the dev server\n\n```bash\nnpm run dev\n```\n\nOpen [http:\u002F\u002Flocalhost:3000](http:\u002F\u002Flocalhost:3000) and paste a URL.\n\n### 5. Build for production\n\n```bash\nnpm run build\nnpm run start\n```\n\n## Usage\n\n### Web UI\n\nVisit `\u002F`, paste a URL, hit **Audit**. Results live at `\u002Faudit\u002F\u003Cdomain>` and are shareable.\n\n### JSON API\n\n```bash\n# GET\ncurl \"http:\u002F\u002Flocalhost:3000\u002Fapi\u002Faudit?domain=example.com\"\n\n# POST\ncurl -X POST http:\u002F\u002Flocalhost:3000\u002Fapi\u002Faudit \\\n  -H \"content-type: application\u002Fjson\" \\\n  -d '{\"domain\": \"example.com\"}'\n```\n\nResponse shape (abbreviated):\n\n```jsonc\n{\n  \"status\": \"ready\",\n  \"cached\": false,\n  \"audit\": {\n    \"url\": \"https:\u002F\u002Fexample.com\u002F\",\n    \"score\": 72,\n    \"band\": { \"label\": \"Strong\", \"interpretation\": \"...\" },\n    \"categories\": [\n      {\n        \"id\": \"A\",\n        \"name\": \"Technical AI Crawlability\",\n        \"score\": 18.3,\n        \"maxScore\": 28.4,\n        \"items\": [\n          \u002F* per-rule *\u002F\n        ],\n      },\n      {\n        \"id\": \"B\",\n        \"name\": \"Content Structure & Chunking\",\n        \"score\": 21,\n        \"maxScore\": 25.4,\n      },\n    ],\n    \"topPriorities\": [\"A11: Add a self-referencing canonical tag ...\", \"...\"],\n    \"agentPrompts\": { \"full\": \"Paste this into your coding agent ...\" },\n  },\n}\n```\n\n## Tech stack\n\n- **[Next.js 16](https:\u002F\u002Fnextjs.org\u002F)** (App Router, React 19, server components)\n- **[Tailwind CSS v4](https:\u002F\u002Ftailwindcss.com\u002F)**\n- **[context.dev SDK](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fcontext.dev)** for page fetching + Markdown extraction\n- **[Turso](https:\u002F\u002Fturso.tech\u002F)** (libSQL) for optional edge-cached results\n- **TypeScript** end-to-end\n\n## Project structure\n\n```\nai-seo-audit\u002F\n├─ app\u002F\n│  ├─ api\u002Faudit\u002Froute.ts        # JSON API\n│  ├─ audit\u002F[domain]\u002Fpage.tsx   # Shareable results page\n│  ├─ page.tsx                  # Landing + audit form\n│  └─ layout.tsx, robots.ts, sitemap.ts\n├─ components\u002F\n│  ├─ audit-form.tsx\n│  └─ audit-results-view.tsx\n├─ lib\u002F\n│  ├─ audit.ts                  # Orchestrator (fetch → parse → score)\n│  ├─ perform-audit.ts          # Caching + error envelope\n│  ├─ rules.ts                  # Every audit rule lives here\n│  ├─ agent-fix-prompt.ts       # Builds the copy-paste fix prompt\n│  ├─ turso.ts                  # Cache (libSQL)\n│  └─ url.ts, brand.ts, ...\n└─ public\u002F                      # Favicons, OG images\n```\n\n## Adding or tuning a rule\n\nAll audit logic lives in `lib\u002Frules.ts`. To add a check:\n\n1. Append an entry to the `RULES` array.\n2. Point its `categoryId` at an existing entry in `CATEGORIES`.\n3. Implement `evaluate(ctx: RuleContext)` returning `{ status: 'pass' | 'partial' | 'fail' | 'na', evidence }`.\n4. Optionally set `multiplier` to weight the rule inside its category.\n\nScoring, the UI breakdown, and the agent fix prompt all derive from this file — no other code needs to change.\n\n## Deploy\n\nThe fastest path is **Vercel + Turso Marketplace**:\n\n1. Click **Import** in Vercel, point it at your fork.\n2. Add `CONTEXT_DEV_API_KEY` from [context.dev](https:\u002F\u002Fcontext.dev?utm_source=github&utm_medium=readme&utm_campaign=ai-seo-audit&utm_content=deploy) under Project Settings → Environment Variables.\n3. Add the **Turso** integration from the Vercel Marketplace — it provisions `aiseo_TURSO_DATABASE_URL` and `aiseo_TURSO_AUTH_TOKEN` for you.\n4. Deploy.\n\nSelf-hosting works too — it's a standard Next.js app, runs anywhere Node 20+ runs.\n\n## Contributing\n\nIssues and PRs are welcome. Good first contributions:\n\n- **New audit rules** in `lib\u002Frules.ts` (cite a source for the heuristic in the PR description).\n- **Better evidence strings** so the fix prompt gives agents more to work with.\n- **Bug reports** with the URL audited + the score \u002F category that surprised you.\n\nBefore opening a PR:\n\n```bash\nnpm run lint\nnpm run typecheck\nnpm run build\n```\n\n## License\n\n[MIT](.\u002FLICENSE) © Context.dev\n\n---\n\n\u003Cdiv align=\"center\">\n\u003Csub>Built with \u003Ca href=\"https:\u002F\u002Fcontext.dev?utm_source=github&utm_medium=readme&utm_campaign=ai-seo-audit&utm_content=footer\">context.dev\u003C\u002Fa> · \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fcontext-dot-dev\u002Fai-seo-audit\u002Fissues\">Report an issue\u003C\u002Fa>\u003C\u002Fsub>\n\u003C\u002Fdiv>\n","AI SEO Audit 是一个免费的开源网页应用程序，用于评估页面在AI回答引擎（如ChatGPT、Claude和Perplexity）中的可读性和可见性。其核心功能包括超过30项针对爬行能力、内容结构化、模式标记以及信任信号等方面的检查，并生成易于编码代理执行的修复建议。此外，它还提供了一个JSON API接口以支持持续集成流水线和仪表板应用，并通过Turso数据库实现边缘缓存，加快重复审计的速度。该工具非常适合需要优化网站以提高在生成式搜索引擎中引用率的内容创作者或SEO专家使用。","2026-06-11 04:04:58","CREATED_QUERY"]