# WordPress Website Auditor - SEO, Broken Links & Images (`samqp/wordpress-website-auditor`) Actor

Audit WordPress and public websites for broken links, missing images, SEO issues, HTTPS problems, speed warnings, and visible CMS signals.

- **URL**: https://apify.com/samqp/wordpress-website-auditor.md
- **Developed by:** [Samuel Quiñonez Pérez](https://apify.com/samqp) (community)
- **Categories:** SEO tools, Developer tools, Automation
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.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.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use 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

## WordPress Website Auditor — SEO, Broken Links & Images

Audit WordPress and other public websites for broken links, missing images, on-page SEO problems, HTTPS issues, performance warnings, and publicly visible WordPress signals. The Actor uses lightweight HTTP requests—no penetration testing, password attempts, administrator access, or exploit scanning.

### What it checks

- Availability, HTTP status, redirects, HTTPS, and response time
- Internal and external links, images, missing alt text, and images over 1 MB when size is available
- Titles, descriptions, H1 usage, canonical tags, thin content, forms, and mixed content
- `robots.txt`, `sitemap.xml`, public `wp-login.php`, `xmlrpc.php`, `readme.html`, and non-sensitive WordPress/theme/plugin clues present in HTML
- Duplicate titles and descriptions in the final summary

### Input

```json
{
  "startUrl": "https://example.com",
  "maxPages": 50,
  "maxDepth": 3,
  "checkInternalLinks": true,
  "checkExternalLinks": true,
  "checkImages": true,
  "checkSeo": true,
  "checkWordPress": true,
  "respectRobotsTxt": true,
  "requestDelayMs": 1000,
  "timeoutSeconds": 30,
  "sameDomainOnly": true
}
````

Only public HTTP(S) targets are accepted. Localhost, private/link-local/reserved IP ranges, cloud metadata endpoints, and hosts resolving to unsafe addresses are blocked.

### Output

One Dataset item is stored per page, followed by a `summary` item. The summary is also saved as `SUMMARY` in the default key-value store.

```json
{
  "recordType": "summary",
  "siteUrl": "https://example.com/",
  "pagesChecked": 42,
  "brokenInternalLinks": 6,
  "brokenImages": 5,
  "overallScore": 72,
  "overallStatus": "Needs improvement"
}
```

### Scoring

The score starts at 100 and is clamped at zero. Each critical issue subtracts 30 points, high 8, medium 3, and low 1. Examples: unreachable site = critical; HTTP errors, broken links, and mixed content = high; broken/slow images or slow responses = medium; missing descriptions, alt text, and thin content = low. The output includes the weights used.

### Typical duration and cost

With the default one-second courtesy delay, a 10-page audit commonly takes 1–3 minutes and a 50-page audit 5–15 minutes. External-link volume, server speed, rate limits, and retries can increase runtime. The crawler caps concurrency and retries transient network failures.

### Pricing

- USD 0.01 per run
- USD 0.005 per audited page
- USD 0.03 per delivered summary report

Platform usage is included. A one-page audit costs about USD 0.045 and a 10-page audit about USD 0.09. Charges stop at the maximum cost selected for the run.

### Use cases

- Pre-launch technical QA
- WordPress maintenance reports
- SEO hygiene checks
- Broken-link and image monitoring
- Agency client handoff audits

### Limitations

This Actor analyzes server-delivered HTML and public HTTP resources. JavaScript-only content may be absent. Results can change with network conditions, bot protection, authentication, rate limiting, or personalized pages. It does not guarantee detection of every issue and is not a security or penetration test.

### Responsible use

Run the Actor only on websites you own or have explicit authorization to audit. Follow applicable law, site terms, and robots directives. Do not use it to obtain administrative access, discover private data, evade controls, or overload a service.

### Español

Audita sitios WordPress y otros sitios públicos para detectar enlaces e imágenes rotas, problemas SEO, contenido mixto, lentitud y señales públicas de WordPress. Recibe una URL HTTP(S) y límites de rastreo; entrega un registro por página y un resumen con puntuación. Una auditoría de 10 páginas suele tardar 1–3 minutos y una de 50 páginas, 5–15 minutos, según el sitio. No realiza pentesting, no intenta entrar al administrador y no garantiza detectar todos los problemas. Úsalo únicamente en sitios propios o autorizados.

### FAQ

**Does it need WordPress credentials?** No. It only reads public pages and resources.

**Does it execute JavaScript?** No; this keeps runs affordable. JavaScript-only content may not appear.

**Why can a valid link appear broken?** Rate limiting, bot protection, timeouts, or temporary upstream errors can affect checks.

**Can I audit any site?** Only sites you own or are authorized to test.

### Support

For support, include the Apify run ID, the input with sensitive values removed, and the unexpected result. Never send passwords, cookies, API tokens, or private customer data.

Keywords: WordPress, SEO, broken links, broken images, website audit, technical audit, HTTPS, metadata.

# Actor input Schema

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

Public HTTP(S) URL you own or are authorized to audit.

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

Stop after this many pages (1–500).

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

Maximum link distance from the starting page.

## `checkInternalLinks` (type: `boolean`):

Validate links pointing to the audited domain.

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

Validate links pointing to other domains.

## `checkImages` (type: `boolean`):

Check image availability, alt text, and reported size.

## `checkSeo` (type: `boolean`):

Analyze titles, descriptions, headings, canonicals, and content.

## `checkWordPress` (type: `boolean`):

Inspect only non-sensitive, publicly accessible WordPress clues.

## `respectRobotsTxt` (type: `boolean`):

Honor robots.txt crawl directives.

## `requestDelayMs` (type: `integer`):

Courtesy delay between requests; minimum 200 ms.

## `timeoutSeconds` (type: `integer`):

Maximum time to wait for each HTTP request.

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

Do not crawl external domains as pages.

## Actor input object example

```json
{
  "maxPages": 50,
  "maxDepth": 3,
  "checkInternalLinks": true,
  "checkExternalLinks": true,
  "checkImages": true,
  "checkSeo": true,
  "checkWordPress": true,
  "respectRobotsTxt": true,
  "requestDelayMs": 1000,
  "timeoutSeconds": 30,
  "sameDomainOnly": true
}
```

# Actor output Schema

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

No description

## `dataset` (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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("samqp/wordpress-website-auditor").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("samqp/wordpress-website-auditor").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 '{}' |
apify call samqp/wordpress-website-auditor --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "WordPress Website Auditor - SEO, Broken Links & Images",
        "description": "Audit WordPress and public websites for broken links, missing images, SEO issues, HTTPS problems, speed warnings, and visible CMS signals.",
        "version": "1.0",
        "x-build-id": "Oe2f7tzfF0nML6sd1"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/samqp~wordpress-website-auditor/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-samqp-wordpress-website-auditor",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/samqp~wordpress-website-auditor/runs": {
            "post": {
                "operationId": "runs-sync-samqp-wordpress-website-auditor",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/samqp~wordpress-website-auditor/run-sync": {
            "post": {
                "operationId": "run-sync-samqp-wordpress-website-auditor",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "startUrl"
                ],
                "properties": {
                    "startUrl": {
                        "title": "Website URL",
                        "pattern": "^https?://",
                        "type": "string",
                        "description": "Public HTTP(S) URL you own or are authorized to audit."
                    },
                    "maxPages": {
                        "title": "Maximum pages",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Stop after this many pages (1–500).",
                        "default": 50
                    },
                    "maxDepth": {
                        "title": "Maximum crawl depth",
                        "minimum": 0,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Maximum link distance from the starting page.",
                        "default": 3
                    },
                    "checkInternalLinks": {
                        "title": "Check internal links",
                        "type": "boolean",
                        "description": "Validate links pointing to the audited domain.",
                        "default": true
                    },
                    "checkExternalLinks": {
                        "title": "Check external links",
                        "type": "boolean",
                        "description": "Validate links pointing to other domains.",
                        "default": true
                    },
                    "checkImages": {
                        "title": "Check images",
                        "type": "boolean",
                        "description": "Check image availability, alt text, and reported size.",
                        "default": true
                    },
                    "checkSeo": {
                        "title": "Check on-page SEO",
                        "type": "boolean",
                        "description": "Analyze titles, descriptions, headings, canonicals, and content.",
                        "default": true
                    },
                    "checkWordPress": {
                        "title": "Check public WordPress signals",
                        "type": "boolean",
                        "description": "Inspect only non-sensitive, publicly accessible WordPress clues.",
                        "default": true
                    },
                    "respectRobotsTxt": {
                        "title": "Respect robots.txt",
                        "type": "boolean",
                        "description": "Honor robots.txt crawl directives.",
                        "default": true
                    },
                    "requestDelayMs": {
                        "title": "Delay between requests (ms)",
                        "minimum": 200,
                        "maximum": 60000,
                        "type": "integer",
                        "description": "Courtesy delay between requests; minimum 200 ms.",
                        "default": 1000
                    },
                    "timeoutSeconds": {
                        "title": "Request timeout (seconds)",
                        "minimum": 5,
                        "maximum": 120,
                        "type": "integer",
                        "description": "Maximum time to wait for each HTTP request.",
                        "default": 30
                    },
                    "sameDomainOnly": {
                        "title": "Crawl the same domain only",
                        "type": "boolean",
                        "description": "Do not crawl external domains as pages.",
                        "default": true
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
