# SEO Audit Scraper (`actorfordge/seo-audit-scraper`) Actor

Crawl any website and run an on-page SEO audit. This Actor checks page titles, meta descriptions, H1/H2 headings, word count, canonical URLs, image alt text, internal links, external links, and gives each page an SEO score with clear issues found.

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

## Pricing

from $0.50 / 1,000 audited pages

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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 Scraper

SEO Audit Scraper crawls websites and runs a fast on-page SEO audit for every page it finds. It checks important SEO elements like page titles, meta descriptions, headings, word count, canonical URLs, image alt text, internal links, external links, and gives each page a simple SEO score with clear issues found.

This Actor is useful for SEO audits, website quality checks, competitor research, client reports, and finding common on-page SEO problems at scale.

### What does SEO Audit Scraper check?

For each crawled page, this Actor checks:

- Page title
- Title length
- Meta description
- Meta description length
- Canonical URL
- H1 headings
- H2 headings
- Word count
- Image count
- Images missing alt text
- Internal links
- External links
- SEO issues
- SEO score from 0 to 100

### Common SEO issues found

The Actor can detect common on-page SEO problems such as:

- Missing page title
- Title may be too short
- Title may be too long
- Missing meta description
- Meta description may be too short
- Meta description may be too long
- Missing H1 heading
- Multiple H1 headings found
- Low word count
- Missing canonical URL
- Images missing alt text
- No internal links found

### Best use cases

Use SEO Audit Scraper for:

- Auditing websites for basic SEO issues
- Finding missing titles and meta descriptions
- Checking heading structure across a website
- Finding pages with low word count
- Checking image alt text problems
- Reviewing internal and external link counts
- Creating SEO reports for clients
- Researching competitor websites
- Monitoring small and medium websites

### Input

The Actor only needs a website URL and the maximum number of pages you want to audit.

#### Example input

```json
{
  "startUrls": [
    {
      "url": "https://example.com"
    }
  ],
  "maxRequestsPerCrawl": 10
}
```

#### Input fields

| Field | Type | Description |
|---|---|---|
| `startUrls` | Array | One or more website URLs to audit |
| `maxRequestsPerCrawl` | Integer | Maximum number of pages to crawl and audit |

### Output

The Actor returns a clean dataset where each row represents one audited page.

#### Output fields

| Field | Description |
|---|---|
| `url` | The page URL that was audited |
| `seoScore` | SEO score from 0 to 100 |
| `issues` | List of SEO issues found on the page |
| `title` | Page title |
| `titleLength` | Number of characters in the title |
| `metaDescription` | Page meta description |
| `metaDescriptionLength` | Number of characters in the meta description |
| `canonical` | Canonical URL found on the page |
| `h1Count` | Number of H1 headings |
| `h1s` | List of H1 headings |
| `h2Count` | Number of H2 headings |
| `h2s` | List of H2 headings |
| `wordCount` | Estimated word count from the page body |
| `imageCount` | Number of images found |
| `imagesMissingAlt` | Number of images missing alt text |
| `internalLinks` | Number of internal links found |
| `externalLinks` | Number of external links found |

### Example output

```json
{
  "url": "https://example.com",
  "seoScore": 85,
  "issues": [
    "Meta description may be too short",
    "2 images missing alt text"
  ],
  "title": "Example Website",
  "titleLength": 15,
  "metaDescription": "This is an example website.",
  "metaDescriptionLength": 27,
  "canonical": "https://example.com",
  "h1Count": 1,
  "h1s": [
    "Example Website"
  ],
  "h2Count": 3,
  "h2s": [
    "About",
    "Services",
    "Contact"
  ],
  "wordCount": 742,
  "imageCount": 8,
  "imagesMissingAlt": 2,
  "internalLinks": 24,
  "externalLinks": 5
}
```

### How the SEO score works

Each page starts with a score of 100. Points are removed when common SEO issues are found, such as missing titles, missing meta descriptions, missing H1 headings, low word count, missing canonical URLs, or images without alt text.

The score is meant to give a quick overview of basic on-page SEO quality. A higher score usually means the page has fewer common SEO issues.

### Why use this Actor?

Manually checking every page on a website can take a long time. SEO Audit Scraper helps you quickly collect important on-page SEO data and identify common problems across multiple pages.

It is especially useful for:

- Freelancers
- SEO specialists
- Marketing agencies
- Website owners
- Developers
- Lead generation workflows
- Client website audits

### Notes and limitations

This Actor performs a basic on-page SEO audit based on the HTML content it can access. It does not replace a full technical SEO platform, but it is a fast and simple way to find common SEO issues across websites.

Some websites may block crawlers, require JavaScript rendering, or limit access to certain pages. Results may vary depending on the website structure and accessibility.

# Actor input Schema

## `startUrls` (type: `array`):

Enter one or more website URLs to audit for SEO issues.

## `maxRequestsPerCrawl` (type: `integer`):

The maximum number of pages the Actor will crawl from the website.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://apify.com"
    }
  ],
  "maxRequestsPerCrawl": 10
}
```

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

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

# Run the Actor and wait for it to finish
run = client.actor("actorfordge/seo-audit-scraper").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 '{
  "startUrls": [
    {
      "url": "https://apify.com"
    }
  ]
}' |
apify call actorfordge/seo-audit-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/S9dsoiMMKdbDcMTcY/builds/2xg4m9njzvTqSK1Go/openapi.json
