# SEO Audit & AI Search Readiness Checker + llms.txt Generator (`mirumiru_miru17/seo-ai-readiness-audit`) Actor

Audit a whole website for SEO and AI search (GEO/AEO) readiness. Get an SEO score, an AI-readiness score, AI crawler access check (GPTBot, ClaudeBot, PerplexityBot…), broken links, and a ready-to-publish llms.txt. English/Japanese report. Pay per page.

- **URL**: https://apify.com/mirumiru_miru17/seo-ai-readiness-audit.md
- **Developed by:** [Miyuu Nishida](https://apify.com/mirumiru_miru17) (community)
- **Categories:** SEO tools, AI
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $14.00 / 1,000 page-auditeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## SEO Audit & AI Search Readiness Checker + llms.txt Generator

[![Run on Apify](https://apify.com/ext/run-on-apify.png)](https://apify.com/mirumiru_miru17/seo-ai-readiness-audit)

**Run it in the cloud with no setup: [apify.com/mirumiru_miru17/seo-ai-readiness-audit](https://apify.com/mirumiru_miru17/seo-ai-readiness-audit)**

Find out in one run whether a website can rank on Google **and** show up in AI answers from ChatGPT, Claude, Perplexity and Gemini.

This Actor crawls every page on a domain and gives you:

- an **SEO score (0–100)** with the exact issues on every page
- an **AI search readiness score (0–100)** for GEO / AEO (generative engine optimization)
- an **AI crawler access check**: is GPTBot, OAI-SearchBot, ClaudeBot, PerplexityBot or Google-Extended blocked in robots.txt?
- a **ready-to-publish `llms.txt`** built from the site's own pages
- a **shareable HTML report** in English or Japanese

No API keys, no login, no setup. Paste a URL and press Start.

### Who it's for

- **SEO and marketing agencies** auditing client sites, including AI-search (GEO) audits
- **Site owners** who want to know why traffic from ChatGPT or Perplexity is zero
- **Developers** who need an `llms.txt` file without writing it by hand
- **AI agents** — works as a tool through the Apify MCP server, so an agent can audit any site on request

### What it checks

**Every page (SEO)**

- Missing or badly sized `<title>`
- Missing or overly long meta description
- Missing H1 or multiple H1 tags
- Missing canonical link
- Pages set to `noindex` (meta tag or `X-Robots-Tag` header)
- Missing `<html lang>` and mobile viewport
- Missing Open Graph title/image (social previews)
- Structured data (JSON-LD) and which schema types are used
- Images without alt text
- Thin content
- Broken internal links (404/410/5xx), optional external link check

**Whole site (AI search readiness / GEO)**

- `llms.txt` present and valid
- AI crawlers allowed or blocked in robots.txt — split into **AI search bots** (OAI-SearchBot, ChatGPT-User, Claude-SearchBot, Claude-User, PerplexityBot, Perplexity-User) and **AI training bots** (GPTBot, ClaudeBot, Google-Extended, Applebot-Extended, CCBot, meta-externalagent, Bytespider, Amazonbot)
- robots.txt and XML sitemap present
- Share of pages with structured data, meta descriptions and enough readable text

Blocking an AI **search** bot removes the site from that assistant's answers, so it lowers the score. Blocking a **training** bot is a policy choice, so it is reported but not penalized.

### Input

| Field | Description |
| --- | --- |
| `startUrl` | Home page of the site to audit. Only the same hostname is crawled. |
| `maxPages` | Maximum pages to audit (default 50). Also caps the cost of the run. |
| `checkExternalLinks` | Also check up to 300 outbound links for 404s. |
| `generateLlmsTxt` | Build a ready-to-publish `llms.txt` (default on). |
| `language` | Report language: `en` or `ja`. |

### Output

- **Dataset** — one row per page with `score`, `url`, `issues`, `brokenLinks` and `structuredDataTypes`, worst pages first.
- **`SUMMARY`** — SEO score, AI readiness score, AI crawler access table, site-level issues, most common issues, worst pages.
- **`REPORT.html`** — a clean report you can send to a client or your team.
- **`llms.txt`** — upload it to the root of the site (`https://yoursite.com/llms.txt`).

Example `SUMMARY` (shortened):

```json
{
  "site": "https://example.com",
  "siteScore": 72,
  "aiReadinessScore": 55,
  "blockedAiSearchCrawlers": ["PerplexityBot"],
  "blockedAiTrainingCrawlers": ["GPTBot", "CCBot"],
  "hasLlmsTxt": false,
  "llmsTxtDraftGenerated": true,
  "topIssues": [{ "issue": "Missing meta description", "pages": 14 }]
}
```

Example generated `llms.txt`:

```text
## Example Shop

> Handmade goods shipped worldwide.

### Pages

- [Example Shop | Handmade goods](https://example.com/): Handmade goods shipped worldwide.

### Blog

- [How we make our mugs](https://example.com/blog/mugs): A look at our studio process.
```

### Pricing

Pay per event: you are charged a small fixed price **per audited page** and nothing for platform usage. Error pages are not charged. Set `maxPages` or a maximum cost per run, and the crawl stops when the limit is reached. See the Pricing tab for the current price.

### FAQ

**What is llms.txt?** A plain-text file at the root of a site that tells AI models what the site is about and which pages matter, similar to how a sitemap helps search engines.

**What is GEO / AEO?** Generative engine optimization (also called answer engine optimization): making a site easy for AI assistants to find, read and cite.

**Is it safe to run on any site?** The crawler respects robots.txt and only visits the hostname you enter. Use it on sites you own or manage, or for client audits.

**Can I run it every week?** Yes. Schedule it in Apify and get an alert when the score drops.

**Can an AI agent use it?** Yes. Add it to the Apify MCP server (`https://mcp.apify.com`) and any MCP client can call it.

### More tools from the same author

- [Bulk PageSpeed & Core Web Vitals Checker](https://apify.com/mirumiru_miru17/page-speed-core-web-vitals): Lighthouse scores, LCP/CLS/TBT and top fixes for a list of URLs
- [Audio & Video to Text Transcriber (Whisper)](https://apify.com/mirumiru_miru17/audio-video-transcriber): transcripts and SRT subtitles in Japanese and 90+ languages

***

### 日本語

サイト全体を1回で診断し、**Google検索で上位に出られる状態か**と、**ChatGPT・Claude・Perplexity・GeminiなどのAI検索に表示される状態か**をまとめてチェックします。

- **SEOスコア（100点満点）** と、ページごとの具体的な問題点
- **AI検索対応スコア（100点満点）**（GEO / AEO対策）
- **AIクローラーのブロック確認**：robots.txtでGPTBot・OAI-SearchBot・ClaudeBot・PerplexityBotなどを止めていないか（AI検索用と学習用を分けて判定）
- **そのまま公開できる `llms.txt` の自動生成**
- **日本語のHTMLレポート**（取引先にそのまま渡せます）

APIキーやログインは不要です。URLを入れて「Start」を押すだけ。レポートを日本語にするには `language` を「日本語」にしてください。料金は**診断したページ数に応じた従量課金**で、プラットフォーム利用料はかかりません。

### Run locally

```bash
npm install
mkdir -p storage/key_value_stores/default
echo '{"startUrl":"https://example.com","maxPages":20}' > storage/key_value_stores/default/INPUT.json
npm start
```

Results are written to `storage/datasets/default` and `storage/key_value_stores/default/` (`SUMMARY.json`, `REPORT.html`, `llms.txt`).

### License

MIT

# Actor input Schema

## `startUrl` (type: `string`):

Home page (or any page) of the website to audit, e.g. https://example.com. Only pages on the same hostname are crawled.

## `maxPages` (type: `integer`):

Maximum number of pages to audit. You pay per audited page, so this also caps the cost of a run.

## `checkExternalLinks` (type: `boolean`):

Also check up to 300 outbound links for 404s (slower).

## `generateLlmsTxt` (type: `boolean`):

Build a ready-to-publish llms.txt file from the crawled pages (saved as the "llms.txt" record in the key-value store).

## `language` (type: `string`):

Language of the issue texts and the HTML report.

## Actor input object example

```json
{
  "startUrl": "https://apify.com",
  "maxPages": 50,
  "checkExternalLinks": false,
  "generateLlmsTxt": true,
  "language": "en"
}
```

# Actor output Schema

## `pages` (type: `string`):

One row per audited page with score, issues and broken links.

## `summary` (type: `string`):

SEO score, AI search readiness score, AI crawler access, site-level issues, most common issues and worst pages.

## `report` (type: `string`):

Shareable HTML report in English or Japanese.

## `llmsTxt` (type: `string`):

Ready-to-publish llms.txt generated from the crawled pages.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrl": "https://apify.com"
};

// Run the Actor and wait for it to finish
const run = await client.actor("mirumiru_miru17/seo-ai-readiness-audit").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "startUrl": "https://apify.com" }

# Run the Actor and wait for it to finish
run = client.actor("mirumiru_miru17/seo-ai-readiness-audit").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrl": "https://apify.com"
}' |
apify call mirumiru_miru17/seo-ai-readiness-audit --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,mirumiru_miru17/seo-ai-readiness-audit"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/mtK2cgf1my0DSLvgs/builds/G15BLi0hf1delb5LP/openapi.json
