SEO & AI Search Readiness Audit
Audit any web page for classic SEO and for AI search in one pass. You get a 0–100 SEO score, a 0–100 AI-readiness score, and a list of issues, each with a stable code, a severity and a one-line fix.
Run it on ApifyUse it from an agentWhat it checks
| Area | Checks |
|---|---|
| On-page SEO | Title, meta description, headings, word count, language, images and alt text, internal and external links, Open Graph and Twitter cards |
| Indexing | Canonical, meta robots, X-Robots-Tag, hreflang, redirects and status codes |
| AI crawlers | Which AI search crawlers (OAI-SearchBot, ChatGPT-User, PerplexityBot, Claude-SearchBot…) and AI training crawlers (GPTBot, ClaudeBot, Google-Extended, CCBot…) your robots.txt blocks, kept apart so a policy choice isn't mistaken for a mistake |
| llms.txt and sitemap | Whether /llms.txt exists and follows the llmstxt.org format; whether the XML sitemap is found and valid |
| Structured data | JSON-LD types found, broken JSON-LD, missing @context, missing article dates |
| JavaScript-only pages | Pages whose HTML is an empty app shell, which most AI crawlers can't read (JS_ONLY_CONTENT) |
| Links (optional) | Each link on the audited pages requested once; broken ones reported |
Results: one dataset item per page, one per site (robots.txt, AI crawler table, sitemap, llms.txt), a Markdown REPORT and a run summary.
Example
{"urls": ["https://example.com/"],
"maxPagesPerSite": 50,
"checkLinks": true}
One page item (shortened):
{"type": "page", "url": "https://example.com/", "status": "ok",
"seo_score": 70, "ai_score": 93,
"issues": [{"code": "META_DESCRIPTION_MISSING", "severity": "medium",
"fix": "Add a meta description of about 70-160 characters."}]}
Use it
In the Apify Console
Open the Actor page on Apify, fill in the input form and click Start. Results land in the run's dataset (JSON, CSV or Excel download).
From an AI agent (MCP)
Apify's hosted MCP server exposes the Actor as a tool to Claude, Cursor, VS Code and other MCP clients. Server URL:
https://mcp.apify.com/?tools=errandkit/seo-ai-readiness-audit
For example, in Claude Code (sign in to Apify when asked, or add --header "Authorization: Bearer YOUR_APIFY_TOKEN"):
claude mcp add --transport http errandkit "https://mcp.apify.com/?tools=errandkit/seo-ai-readiness-audit"
Copy-paste config for Claude Desktop, Cursor, VS Code, Windsurf and ChatGPT →
From code (Apify API)
curl -X POST "https://api.apify.com/v2/acts/errandkit~seo-ai-readiness-audit/run-sync-get-dataset-items" \
-H "Authorization: Bearer YOUR_APIFY_TOKEN" -H "Content-Type: application/json" \
-d '{"urls":["https://example.com/"],"checkSite":true}'
Errandkit doesn't run its own hosted API yet. Every way of using this tool goes through your Apify account.
Pricing
| Event | Price | Per 1,000 |
|---|---|---|
| Page audited (HTML page fetched and analyzed) | $0.004 | $4.00 |
| Site checked (robots.txt, AI crawlers, sitemap, llms.txt; once per site) | $0.005 | $5.00 |
Link checked (only with checkLinks; each URL once per run) | $0.0005 | $0.50 |
| Actor start (Apify standard) | $0.00005 | $0.05 |
Examples: one page and its site check cost $0.009. A 50-page crawl of one site costs $0.205. Failed, non-HTML and robots-disallowed pages aren't charged. Set a maximum cost per run and the tool stops before going over it, keeping everything already finished.
Launch prices. The price shown on the Apify Store page is the one you are charged, and Apify shows it before every run.
How it crawls
- It identifies as
ErrandkitAuditBotand always obeys robots.txt for that name (and*), includingCrawl-delayup to 5 seconds. - At most one request every 0.5 seconds per site. It only fetches the pages you list and, if you ask, internal links on the same site.
- No JavaScript is run, and Core Web Vitals aren't measured. Scores are a transparent sum of issue weights, not a guess at rankings.
Questions
Does it run JavaScript?
No. It reads the HTML the server sends, which is what most AI crawlers see. If a page is an empty JavaScript app shell, it reports JS_ONLY_CONTENT.
Am I charged for pages that fail?
No. Pages that time out, return 4xx/5xx, aren't HTML or are blocked by robots.txt are free.
Which crawler does it identify as?
ErrandkitAuditBot. It obeys robots.txt for that name and for *. See errandkit.com/bot/.