# SEO Audit API — On-Page + Core Web Vitals, Bulk & Scored (`fetchbase/website-seo-audit`) Actor

SEO audit with 0–100 score, real Core Web Vitals (LCP, CLS, FCP) measured in a live browser, and prioritized issues each with a concrete fix. Meta, headings, canonical, OG, JSON-LD, alt text, robots.txt, sitemap, broken links. Single pages or site crawls. Charged only per audited page.

- **URL**: https://apify.com/fetchbase/website-seo-audit.md
- **Developed by:** [Fetchbase](https://apify.com/fetchbase) (community)
- **Categories:** SEO tools
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $35.00 / 1,000 page auditeds

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## SEO Audit Tool — On-Page + Core Web Vitals, Scored, With Fixes

Audit any URL and get a **0–100 SEO score**, **real Core Web Vitals measured in
a live browser** (LCP, CLS, FCP, TTFB), and a **prioritized issue list where
every problem comes with a concrete fix**. Audit one page, a list of pages, or
crawl a whole site.

Most audit tools stop at meta tags. This one also *loads your page in real
Chromium and measures how it actually performs* — the signal Google actually
ranks on.

**Charged only per page successfully audited.** No startup fee. Failures cost $0.

### Quick start

```json
{
  "urls": ["https://your-site.com"],
  "checkBrokenLinks": true
}
```

→ per page, a complete audit object:

```json
{
  "url": "https://stripe.com/",
  "score": 78,
  "performance": { "lcpMs": 504, "cls": 0, "fcpMs": 428, "ttfbMs": 97, "loadMs": 1649 },
  "title": "Stripe | Financial Infrastructure to Grow Your Revenue",
  "titleLength": 54,
  "metaDescriptionLength": 149,
  "h1": ["…", "…"],
  "images": { "total": 44, "missingAlt": 40 },
  "links": { "internal": 150, "external": 29, "broken": [] },
  "openGraph": { "title": "…", "description": "…", "image": "…" },
  "structuredData": [],
  "robotsTxt": true, "sitemap": false, "https": true,
  "wordCount": 1671,
  "issues": [
    { "severity": "warning", "message": "Page has 2 <h1> headings (use exactly one).", "fix": "Use a single, descriptive H1." },
    { "severity": "warning", "message": "40 of 44 images are missing alt text.", "fix": "Add descriptive alt text to every meaningful image." },
    { "severity": "warning", "message": "No structured data (JSON-LD schema.org) found.", "fix": "Add relevant schema.org JSON-LD for rich results." },
    { "severity": "warning", "message": "No sitemap.xml found.", "fix": "Publish an XML sitemap and reference it in robots.txt." }
  ]
}
```

### Everything it checks

| Area | Signals |
|---|---|
| **Performance (Core Web Vitals)** | LCP, CLS, FCP, TTFB, full load time — measured live in Chromium, scored against Google's thresholds; plus page weight & request count |
| **Indexability** | canonical, meta robots / noindex, robots.txt, sitemap.xml, HTTPS |
| **On-page** | title & meta-description presence + length, exactly-one-H1, full H1–H6 structure, lang, charset, thin-content flag |
| **Mobile** | viewport meta |
| **Media** | image alt-text coverage |
| **Social** | Open Graph + Twitter card completeness |
| **Structured data** | schema.org JSON-LD types found |
| **Links** | internal/external counts, optional broken-link check (4xx/5xx), capped & parallel |

Every failed check produces an `issues[]` entry with `severity`, `message`, and
a concrete `fix` — hand the list to a developer (or an AI agent) and work
straight down it.

### Site-wide audit

```json
{
  "urls": ["https://your-site.com"],
  "crawl": true,
  "maxPages": 100,
  "maxDepth": 2
}
```

Sort the dataset by `score` ascending — your worst pages first, each with its
fix list.

### Use cases

- **Agencies:** attach the JSON (or a CSV export) to client reports; re-run on a
  Schedule for monthly deltas.
- **CI for SEO:** run after each deploy via API; alert if `score` drops or
  `issues[]` gains an `error`.
- **Prioritization:** crawl the site, sort by score, fix bottom-up.

```bash
curl -X POST "https://api.apify.com/v2/acts/fetchbase~website-seo-audit/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"urls": ["https://your-site.com"], "checkBrokenLinks": true}'
```

### Pricing

A fixed price **per page successfully audited** (full browser render + Core Web
Vitals measurement + all checks included), plus standard Apify platform usage.
No startup fee. Failed pages are never billed.

### FAQ

**How accurate are the Core Web Vitals?** They're measured with the standard
`PerformanceObserver` APIs in a real Chromium load of your page — lab values,
comparable to Lighthouse, ideal for tracking changes over time.

**Is this responsible to run on any site?** The audit reads public, technical
metadata only — no content republishing, no personal data. Broken-link checking
sends lightweight HEAD requests, capped per page. You're responsible for the
URLs you submit.

***

Want a check added (hreflang validation, redirect chains, …)? **Open an issue**
— this actor iterates fast. A ⭐ review helps others find it.

### More tools by Fetchbase

Part of a suite of fast, no-nonsense web utilities — all pay-per-result, charged only on success, no startup fee:

- [Website Screenshot API](https://apify.com/fetchbase/web-screenshot-pro) — full-page PNG / JPEG / WebP / PDF
- [Website to Markdown](https://apify.com/fetchbase/website-to-markdown) — clean Markdown for LLMs & RAG
- [PDF & DOCX to Markdown](https://apify.com/fetchbase/document-to-markdown) — documents → Markdown for RAG
- [SEO Audit + Core Web Vitals](https://apify.com/fetchbase/website-seo-audit) — scored on-page audit with fixes
- [Website Performance Audit](https://apify.com/fetchbase/website-performance-audit) — bulk Core Web Vitals & page speed
- [Tech Stack Detector](https://apify.com/fetchbase/tech-stack-detector) — CMS, frameworks, analytics, hosting
- [Domain, DNS & WHOIS Lookup](https://apify.com/fetchbase/domain-dns-intelligence) — records, registration, SSL
- [RSS Feed Reader](https://apify.com/fetchbase/rss-feed-reader) — RSS / Atom / JSON → normalized JSON
- [Job Postings API](https://apify.com/fetchbase/job-postings-scraper) — Greenhouse, Lever, Ashby & more

### Use with AI agents (MCP)

This Actor is callable by AI agents through the [Apify MCP server](https://mcp.apify.com/). Agents in Claude, Cursor, Windsurf, LangGraph, CrewAI and others can discover it via `search-actors` and run it as a tool — its inputs and outputs are fully described in the schema for reliable agent use.

***

#### Was this Actor useful?

If it saved you time, please consider leaving an honest review. Reviews are the main way
independent Actors get discovered on Apify — a single one makes a real difference, and
critical feedback is just as welcome as praise.

Something missing or broken? Open an issue instead and it will get fixed.

# Actor input Schema

## `urls` (type: `array`):

One or more URLs to audit. Each page produces one audit (one billable event). You may omit the https:// prefix.

## `checkBrokenLinks` (type: `boolean`):

Send a request to each link on the page to find broken (4xx/5xx) links. More thorough but slower.

## `maxLinksToCheck` (type: `integer`):

Upper bound on how many links are tested when 'Check for broken links' is on, to control time and cost.

## `crawl` (type: `boolean`):

Follow links from your seed URLs and audit more pages, up to the limits below.

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

Hard cap on total pages audited across all seeds.

## `maxDepth` (type: `integer`):

How many link-hops from your seed URLs to follow. 0 = only the URLs you gave.

## `sameDomainOnly` (type: `boolean`):

Only follow links that stay on the seed page's domain.

## `waitUntil` (type: `string`):

When to consider a page loaded (only applies when Render JavaScript is on).

## `timeoutMs` (type: `integer`):

Max time to wait for a page before giving up.

## `proxyConfiguration` (type: `object`):

Off by default (fast, works on most sites). Enable Apify Proxy for bot-protected sites that block datacenter IPs.

## Actor input object example

```json
{
  "urls": [
    "https://example.com"
  ],
  "checkBrokenLinks": false,
  "maxLinksToCheck": 50,
  "crawl": false,
  "maxPages": 10,
  "maxDepth": 1,
  "sameDomainOnly": true,
  "waitUntil": "load",
  "timeoutMs": 45000,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# 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 = {
    "urls": [
        "https://apify.com"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("fetchbase/website-seo-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 = { "urls": ["https://apify.com"] }

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

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

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

```

## CLI example

```bash
echo '{
  "urls": [
    "https://apify.com"
  ]
}' |
apify call fetchbase/website-seo-audit --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=fetchbase/website-seo-audit",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/f2po5PUU0B95b6CBT/builds/ONUs9gjslwtOBZwh3/openapi.json
