# Image SEO Tool: Website Alt Text Checker, PDF Report & Auto-Fix (`j0l30/website-image-seo-audit`) Actor

Find every image missing alt text on any website and get ready-to-paste fixes in EN/FR/AR. Also flags heavy images, no WebP, missing width/height and on-page SEO gaps. CSV + white-label PDF report. A 20-page audit costs about $0.50. Works with WordPress, Wix, Webflow, custom sites and AI agents.

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

## Pricing

from $20.00 / 1,000 page audits

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/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

**Image SEO Checker & Alt Text Checker for Any Website** audits image SEO on any site: missing or weak alt text, heavy images, no WebP/AVIF, missing dimensions and lazy loading, on-page SEO and **Google Discover** readiness. It suggests alt text fixes in English, French or Arabic and can apply them at the edge with an optional **Cloudflare auto-fix**.

Made for publishers, blogs, online shops, company sites and the SEO agencies behind them, on WordPress, Drupal, Joomla, Ghost, Webflow, Wix, Squarespace, Magento or custom code. Output: a dataset of page and image issues with fixes, CSVs and a **white-label SEO report** (HTML + PDF). Run it in Apify Console, through the API, or as a tool for AI agents through the Apify MCP server. Paste a URL and it finds the pages through your sitemap. No login, no paid APIs, no AI keys.

### Use with AI agents (MCP)

This Actor is an AI agent / MCP tool. Through the hosted [Apify MCP server](https://docs.apify.com/platform/integrations/mcp), Claude, Cursor, VS Code, ChatGPT or any MCP client can call it, read the input fields below as the tool's docs, and get the results as JSON.

- **This tool only:** `https://mcp.apify.com/?tools=j0l30/website-image-seo-audit`
- **All 5 Lycorax tools:** `https://mcp.apify.com/?tools=j0l30/shopify-seo-alt-text-fixer,j0l30/woocommerce-seo-alt-text-fixer,j0l30/website-image-seo-audit,j0l30/domain-rdap-dns-reputation-checker,j0l30/website-exposure-defense-knowledge`

Sign in with Apify (OAuth) when your client asks, or send the header `Authorization: Bearer <APIFY_TOKEN>`. Runs are billed to your Apify account at the prices in "How much does it cost?". The tool returns the run and its `datasetId`; the agent then reads the rows with `get-dataset-items`, which the server adds for you.

**Claude Desktop / claude.ai:** Settings → Connectors → Add custom connector → paste the URL as *Remote MCP server URL*.

**Claude Code:**

```bash
claude mcp add --transport http lycorax "https://mcp.apify.com/?tools=j0l30/website-image-seo-audit"
```

**Cursor** (`~/.cursor/mcp.json`, or `.cursor/mcp.json` in your project):

```json
{ "mcpServers": { "lycorax": { "url": "https://mcp.apify.com/?tools=j0l30/website-image-seo-audit" } } }
```

**VS Code** (`.vscode/mcp.json`):

```json
{ "servers": { "lycorax": { "type": "http", "url": "https://mcp.apify.com/?tools=j0l30/website-image-seo-audit" } } }
```

**ChatGPT** (Developer mode on): Settings → Apps & Connectors → Create → *MCP Server URL* = the URL, *Authentication* = OAuth. ChatGPT can't change a connector's tools later, so pick the one-tool or the all-tools URL first.

Swap in the all-tools URL to give your agent every Lycorax tool at once.

**Example prompts**

1. *"Audit image SEO on https://books.toscrape.com (20 pages) and list the pages missing a meta description, canonical or og:image, plus the images with weak alt text."*
2. *"Audit my news site https://my-news-site.com (50 pages) and tell me which articles fail the Google Discover image checks (large lead image, max-image-preview)."*
3. *"Re-audit https://my-site.com with baselineDataset set to the dataset of last month's run and summarise what got fixed and what is new, with the proof report link."*

The audit is read-only. The Cloudflare Worker option only generates code for the site owner to deploy; agents should set `confirmAuthorized` only after the owner says yes.

**Output sample.** Two items from a real run on the public test site books.toscrape.com (shortened). Rows have `type` `page`, `image` and `report`, plus `proof`, `monitoring` or `search_console` when those options are on.

```json
[
  {"type": "page", "url": "https://books.toscrape.com/", "score": 59, "issues": ["missing_meta_description", "missing_canonical", "missing_og_image"], "title": "All products | Books to Scrape - Sandbox", "h1_count": 1, "images_total": 20, "images_without_alt": 0, "language": "en", "is_article": false, "speed_issues": ["images_missing_dimensions", "images_not_lazy_loaded", "images_legacy_format"]},
  {"type": "image", "image_src": "https://books.toscrape.com/media/cache/55/33/553310a7162dfbc2c6d19a84da0df9e1.jpg", "current_alt": "Olio", "issues": ["generic"], "suggested_alt": "", "confidence": "manual", "speed_issues": ["missing_dimensions", "not_lazy_loaded", "legacy_format"]}
]
```

Other Lycorax tools: [Shopify Alt Text Generator](https://apify.com/j0l30/shopify-seo-alt-text-fixer) · [WooCommerce Alt Text Generator](https://apify.com/j0l30/woocommerce-seo-alt-text-fixer) · [Domain Reputation Checker](https://apify.com/j0l30/domain-rdap-dns-reputation-checker) · [Website Exposure Audit & Dorks List for Defense](https://apify.com/j0l30/website-exposure-defense-knowledge).

### What does it check?

- **Image alt text:** `missing`, `empty_alt`, `generic` ("image", "photo"), a `filename` (IMG_1234.jpg), a `duplicate`, `too_long` or a `redundant_prefix` ("image of..."). Logos and icons repeated in the layout are counted once, and decorative images are skipped.
- **Alt text suggestions in English, French and Arabic**, picked from each page's `<html lang>` (or forced with `altLanguage`). Suggestions are deterministic: `high` from the image caption, `medium` from its title or the site name for logos, `review` from the file name or the page heading plus a localized word like "vue de face" or "منظر أمامي", and `manual` when there's no honest context. It never makes up what's in a photo, and no paid AI is used.
- **Image page speed (Core Web Vitals):** images over **200 KB**, missing `width`/`height` (layout shift, CLS), missing `loading="lazy"` below the fold (the first two images are left alone, since lazy-loading the hero hurts LCP), and JPEG/PNG instead of **WebP/AVIF**. File size and format come from light HEAD requests: capped (`maxImageChecks`, 50 by default), robots.txt-aware and at least 1 second apart.
- **On-page SEO:** title and meta description length, H1 count, canonical tag, Open Graph image and a 0 to 100 score per page.
- **Google Discover & News readiness**, on article pages:
  - the `max-image-preview:large` robots tag, which Discover needs for large image cards
  - a lead image at least 1200px wide
  - Article/NewsArticle schema with `author`, `datePublished` and `dateModified`
  - a news sitemap
- **CMS detection** and a **fix-first list** of the 5 most common problems.

### Who is it for?

- **SEO agencies:** white-label proof reports in your brand, monthly monitoring for every client, any CMS
- **News and media sites** that want Google Discover and Google Images traffic
- **Bloggers, shops and company sites** that live on organic search, in English, French or Arabic
- **AI agents and MCP clients** that need clean JSON

For stores, the platform-specific versions read the product catalog directly: [Shopify](https://apify.com/j0l30/shopify-seo-alt-text-fixer) and [WooCommerce & WordPress](https://apify.com/j0l30/woocommerce-seo-alt-text-fixer).

### How much does it cost?

Pay per result, and platform usage is included.

| Event | Price |
|---|---|
| Page audit (SEO, Discover/News and image speed checks) | $0.02 per page |
| Image with an alt text issue and a suggested fix | $0.004 per image |
| Site report + CSVs (and the monitoring diff, when on) | $0.10 per run |
| Proof report (before/after, HTML + PDF, white-label) | $0.25 per report |
| Auto-fix: image fixed via the Cloudflare Worker (premium) | $0.01 per image |

Page fixes in the Worker (meta description, canonical, Open Graph, robots, JSON-LD), image speed checks, monitoring, the PDF and Search Console proof cost nothing extra. A 50-page blog with 120 images to fix costs about $1.58.

### Input

```json
{ "siteUrl": "https://your-site.com", "maxPages": 50, "onlyImagesWithIssues": true, "altLanguage": "auto", "maxImageChecks": 50 }
```

### Output

```json
{ "type": "page", "url": "https://site.com/2026/10/story", "score": 79, "language": "fr", "issues": ["title_too_long"], "is_article": true, "news_issues": ["missing_max_image_preview_large"], "speed_issues": ["images_over_200kb", "images_missing_dimensions"], "image_speed": { "over_200kb": 1, "missing_dimensions": 2, "not_lazy_loaded": 0, "legacy_format": 3 } }
```

```json
{ "type": "image", "image_src": "https://site.com/uploads/cafe-epices.jpg", "used_on_pages": 1, "current_alt": null, "issues": ["missing"], "suggested_alt": "Tasse de café aux épices sur une table en bois", "confidence": "high", "alt_language": "fr", "speed_issues": ["over_200kb", "legacy_format"], "file_size_kb": 312, "image_format": "legacy" }
```

The `report` item gives the CMS, languages, page and article counts, an average score, image speed totals, a `fix_first` list and links to `alt-text-fixes.csv` and `image-speed.csv`.

### Proof mode: before and after (white-label HTML + PDF)

1. Run an audit and keep the run.
2. Fix the issues (by hand, or with the Cloudflare Worker below).
3. Run again, choosing the first run's dataset as **Proof mode: baseline**.

You get a `proof` item, a shareable **proof-report.html** and a **proof-report.pdf** with the score before and after, image issues fixed, page issues fixed, new issues, image speed totals, and Google Lighthouse accessibility and SEO scores if you add your own free PageSpeed API key. The proof report costs $0.25.

**White-label SEO report for agencies:** set `brandName`, `brandLogoUrl` (PNG or JPEG for the PDF), `brandColor` and optionally `brandWebsite`. The HTML and PDF then carry only your brand, with no Lycorax branding. Leave them empty for the default report. The PDF is made inside the Actor with a small JavaScript library (no browser, no paid service) and supports French accents and Arabic text.

### Search Console proof (no API, no paid tools)

Add the owner's own exports from **Search Console > Performance > Export > Download CSV** for the period before and after the fixes (`gscBeforeCsv`, `gscAfterCsv`). Each one can be:

- a URL to the ZIP or CSV,
- an Apify key-value store record (`kv://STORE_ID/KEY` or its `api.apify.com/v2/key-value-stores/.../records/...` URL), or
- the CSV text pasted into the field.

The Actor reads the real export format (`Dates.csv`, `Pages.csv` or `Queries.csv`, `Filters.csv`; English or French headers) and adds clicks, impressions, CTR and average position before and after, plus the pages or queries that moved most, to the proof report. Totals come from `Dates.csv` when both exports have it; otherwise from the top 1,000 table rows, and the report says so. **Tip:** set Search type to **Image** on both exports to show Google Images traffic alone; the report tells you which search type it read. This compares two periods. Seasons, demand and Google updates also move traffic, so it isn't proof of cause.

### Monthly monitoring with alerts

Turn on **Monitoring**. Each run saves a compact snapshot of the site in a named key-value store in your own account (`website-image-seo-monitor`, one record per site, or per `monitorKey`). Named storages are kept between runs, unlike run datasets, which expire. The next run lists **new issues** and **fixed issues** since the last one, page by page and image by image, with an **alert summary** like *"12 new issues (8 missing, 4 over_200kb), 30 fixed since 2026-09-17. Average score 74 -> 81 (+7)."* It's in the `monitoring` item, in `monitoring.json` and in the run's status message. No extra charge.

**Run it every month:**

1. In Apify Console, open **Schedules > Create new**, set the cron to `0 6 1 * *` (06:00 on the 1st of each month), and add this Actor with your saved input (`monitoring: true`).
2. For alerts, open this Actor's **Integrations** tab and add a **webhook** on *Run succeeded*. Point it at Slack, Zapier, Make, n8n or your own endpoint; the payload template can include `{{resource.statusMessage}}`, which holds the alert summary. Or add the Slack or Gmail integration there to get the summary as a message or email.
3. Keep `maxImageChecks` the same each month, so file-size results stay comparable.

### Auto-fix (premium) for any site: Cloudflare edge Worker

For sites proxied through Cloudflare (the free plan works), turn on **Generate a Cloudflare Worker**. You get `cloudflare-worker.js`, a ready-to-paste Worker that improves the HTML at Cloudflare's edge on every page view, including the HTML Google's crawler sees, plus `page-fix-map.json` listing every change per page.

- **Image alt text:** missing or weak alt text is replaced; good human-written alt text is kept. A suggestion in one language is only used on pages in that language.
- **Page tags, only where missing or weak, and only from the page's own data:** meta description (missing or under 50 characters, from `og:description` or the first real paragraph), self-referencing canonical, `og:title`, `og:image`, robots `max-image-preview:large` (never on `noindex` pages, and never over an explicit `standard` or `none`), and **Article** or **Product** JSON-LD when the page clearly declares itself (`og:type` article with a publish date, or a product with price and currency). Nothing is invented.
- **Never overwrites good tags:** the Worker checks each tag again at the edge on every request, so a tag you add later always wins.
- Responses carry `x-lycorax-alt-fix` and `x-seo-edge-fix` headers so you can check the Worker is running.
- **Instant rollback:** delete the Worker route. Your server files are never changed.
- Runs on **your** Cloudflare account. The free plan covers 100,000 requests a day.
- **$0.01 per image** included in the Worker; page fixes are included. Requires confirming you own or are authorized to change the site.
- Then run **Proof mode** to show the before and after.

**Live test on Cloudflare (17 Oct 2026, fictional demo coffee site on workers.dev, deleted afterwards):** 4 pages in English, French and Arabic. With the generated Worker in front of it, Proof mode measured the average page score going from **51 to 77 (+26)**, **12 page issues fixed** and **0 new**: meta descriptions, canonicals, Open Graph images, `max-image-preview:large` and Article/Product JSON-LD. **4 of 6** image alt problems were fixed; the other two had no honest context to write from, or their only suggestion was in another page's language, so they were left for a human. Good existing tags, such as a product page's own `max-image-preview:standard` and its good alt text, were kept. Image speed issues stayed the same, as expected: the Worker doesn't resize or convert images.

### AI agents can pay here (x402, USDC)

Agents can pay with [x402](https://docs.apify.com/integrations/x402) in USDC on Base and call `https://api.apify.com/v2/acts/j0l30~website-image-seo-audit/run-sync-get-dataset-items`.

### FAQ

#### Does it change my site?

No. It only reads public pages. Only the premium Worker changes what visitors see, on your own Cloudflare account, and you can remove it any time.

#### Will fixing these raise my rankings?

Nobody can promise rankings. These are issues Google documents in its own guidelines (alt text, Discover image size, `max-image-preview`, canonical tags, structured data, Core Web Vitals), and fixing them removes known blockers to Search, Image and Discover traffic. Re-run after fixing to see your score go up.

#### Does it use AI?

No. Every suggestion comes from text already on your site, by fixed rules, so the same page always gets the same result.

#### My site blocks bots.

The run stops with a clear message if the home page can't be opened, and you're charged nothing.

#### Is this an alt text generator too?

It suggests alt text from text already on the page (captions, titles, headings) and marks each suggestion's confidence. It never guesses what a photo shows, and marks images with no honest context as `manual`. For Shopify or WooCommerce stores, the [Shopify](https://apify.com/j0l30/shopify-seo-alt-text-fixer) and [WooCommerce](https://apify.com/j0l30/woocommerce-seo-alt-text-fixer) versions write alt text from the product catalog and can save it in the store.

### How it compares (honestly)

- **Lighthouse and PageSpeed Insights:** they test one page at a time and measure performance in depth. This Actor covers many pages from your sitemap and lists every image with an alt problem and a suggested fix, plus Discover checks. It doesn't measure real-user Core Web Vitals; it points to the image causes.
- **Full SEO crawlers:** they cover far more site-wide technical checks, such as internal linking. This one focuses on images, alt text, on-page basics and Discover, and adds before/after proof reports and an optional edge fix.
- **The Shopify and WooCommerce versions:** they read the product catalog and can write alt text into the store. This one reads public pages, so it works on any CMS.

### Real case study (anonymized)

**Major tech news publisher on WordPress, audited 17 Oct 2026, 6 pages.** 41 of 68 unique images had alt problems: 25 empty, 9 over 125 characters, 7 duplicates and 3 file names. Its Discover setup was already solid: a 1200px lead image, a news sitemap and complete Article schema. That shows the audit credits what's done right instead of padding the list. Average page score: 83/100 (scored before image speed checks were added).

### Lab test: before and after (fictional demo site)

We built a fake coffee shop site with common mistakes, audited it, fixed every issue, and ran Proof mode (17 Oct 2026). The site had 4 pages: home, 2 blog guides and 1 product.

| | Before | After |
|---|---|---|
| Average SEO score | 54 | **100** (+46) |
| Images with alt problems | 8 of 8 | **0** |
| Page issues | 21 | **0** (no new ones) |

What was wrong: empty alts, missing alts, file-name alts (`IMG_2041.jpg`), "image of..." alts, duplicates, titles over 60 characters, no meta descriptions, two H1s per page, no canonical, no OG image. The demo site was deleted after the test. (That test ran before image speed checks were added; speed now counts in the score too.)

### More tools from the same publisher

- [Shopify Alt Text Generator](https://apify.com/j0l30/shopify-seo-alt-text-fixer): bulk alt text audit and auto-fix for Shopify product images.
- [WooCommerce Alt Text Generator](https://apify.com/j0l30/woocommerce-seo-alt-text-fixer): the same for WooCommerce products and WordPress media, with a WP-CLI script.
- [Domain Reputation Checker](https://apify.com/j0l30/domain-rdap-dns-reputation-checker): bulk RDAP lookup, DNS, SPF and DMARC checks and a risk score.
- [Website Exposure Audit & Dorks List for Defense](https://apify.com/j0l30/website-exposure-defense-knowledge): playbooks to find and fix leaked files on sites you own.

### Legal and responsible use

- **Public pages only.** It reads what any browser or search engine can see. No login, and it never bypasses paywalls, captchas or blocks.
- **Respects robots.txt.** It follows the rules for `User-agent: *` and `LycoraxSEOAudit`, honors `Crawl-delay`, and waits at least 1 second between requests, including the capped HEAD requests for image sizes (checked against each image host's own robots.txt). Every skipped URL is counted in `skipped_by_robots_txt`.
- **No personal data.** It collects only page URLs, image URLs, alt text, image sizes and SEO tags. Search Console exports you add hold page or query totals only. Nothing is stored after your run except your own results and, if you turn on monitoring, the snapshot in your own account.
- **Read-only by default.** It changes a site only in premium auto-fix mode, with the owner's own credentials or Cloudflare account and explicit authorization.
- **Your responsibility.** Audit sites you own or are authorized to audit, or use the data for public research, and follow the target site's terms.
- **Anonymized case studies.** We don't name any brand without its permission.
- Not affiliated with or endorsed by Shopify, WooCommerce, WordPress, Google or Cloudflare. Google Search Console, Google Discover and Google Images are Google trademarks; Cloudflare Workers is a Cloudflare trademark. Trademarks belong to their owners.

### Privacy

No tracking, and no calls beyond the site you name, its image hosts, and the files or logo you link to yourself. By Youssef Ferri / [Lycorax Technologies](https://ko-fi.com/lycorax).

# Actor input Schema

## `siteUrl` (type: `string`):

Public URL of the website to audit: news, blog, shop or company site on any CMS (WordPress, Drupal, Joomla, Ghost, Webflow, Wix, Magento, custom). Pages are found from robots.txt, sitemap.xml and home page links. Example: https://books.toscrape.com

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

Maximum number of pages to audit, found from robots.txt, sitemap.xml and home page links. Example: 50

## `onlyImagesWithIssues` (type: `boolean`):

true = return (and charge for) only images with alt text problems. false = return every image. Example: true

## `altLanguage` (type: `string`):

Language of the suggested alt text: auto, en, fr or ar. Auto follows each page's <html lang>, so a bilingual site gets alt text in each page's own language. No AI: suggestions reuse the site's own captions, titles, file names and headings. Example: auto

## `checkImageSpeed` (type: `boolean`):

true = flag images over 200 KB, missing width/height (layout shift, CLS), not lazy-loaded below the fold, and JPEG/PNG instead of WebP/AVIF. Size and format use one light HEAD request per image, robots.txt-aware and at least 1 second apart. Example: true

## `maxImageChecks` (type: `integer`):

Upper limit of HEAD requests for file size and format (most-used images first). 0 = tag checks only, no extra requests. Example: 50

## `baselineDataset` (type: `string`):

Proof mode: the dataset ID of an earlier run of this Actor. It re-audits the same pages and builds a before/after proof report. Example: YOUR_EARLIER_RUN_DATASET_ID

## `brandName` (type: `string`):

White-label: your agency or company name. When set, proof-report.html and proof-report.pdf show only your brand (no Lycorax branding). Example: Atlas SEO Agency

## `brandLogoUrl` (type: `string`):

White-label: https link to your logo (PNG or JPEG for the PDF; any image for the HTML report). Example: https://your-agency.com/logo.png

## `brandColor` (type: `string`):

White-label: hex color for the report. Example: #0b5fff

## `brandWebsite` (type: `string`):

White-label: https link shown in the report footer. Example: https://your-agency.com

## `gscBeforeCsv` (type: `string`):

Search Console proof: Performance → Export → Download CSV for the period before the fixes. Give the ZIP or Pages.csv/Queries.csv as a URL to the file, an Apify key-value store record (kv://STORE_ID/KEY or its api.apify.com record URL), or paste the CSV text. Example: kv://STORE_ID/gsc-before.zip

## `gscAfterCsv` (type: `string`):

Same Search Console export for the period after the fixes. Tip: filter both exports to Search type: Image to show Google Images traffic only. Example: kv://STORE_ID/gsc-after.zip

## `pagespeedApiKey` (type: `string`):

Optional: your own free Google Cloud PageSpeed Insights API key. Adds Google Lighthouse accessibility and SEO scores for the home page. Example format: AIza...

## `monitoring` (type: `boolean`):

true = save a snapshot of this site in your named key-value store 'website-image-seo-monitor' and list new and fixed issues versus the previous monitoring run, with an alert summary. Pair it with a monthly Apify Schedule. Example: true

## `monitorKey` (type: `string`):

Optional name for the monitoring history. Defaults to the site address. Set it to keep separate histories for the same site (for example per client). Example: client-acme

## `generateCloudflareWorker` (type: `boolean`):

true = generate a ready-to-paste Cloudflare Worker (free plan works) for a site proxied through Cloudflare. It fixes weak alt text and adds only missing tags (meta description, canonical, og:title, og:image, robots max-image-preview:large, Article/Product JSON-LD) from your own pages. Needs confirmAuthorized. Remove the route to roll back. Example: false

## `confirmAuthorized` (type: `boolean`):

Set to true only if you own this site or are authorized to change it. Required for generateCloudflareWorker. AI agents: ask the site owner before setting it. Example: true

## `workerIncludeReview` (type: `boolean`):

For the Cloudflare Worker. false = only high and medium confidence fixes (from captions and titles). true = also include fixes marked for review. Example: false

## `maxFixes` (type: `integer`):

Upper limit of images fixed by the generated Worker. Example: 500

## Actor input object example

```json
{
  "siteUrl": "https://books.toscrape.com",
  "maxPages": 50,
  "onlyImagesWithIssues": true,
  "altLanguage": "auto",
  "checkImageSpeed": true,
  "maxImageChecks": 50,
  "monitoring": false,
  "generateCloudflareWorker": false,
  "confirmAuthorized": false,
  "workerIncludeReview": false,
  "maxFixes": 500
}
```

# Actor output Schema

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

No description

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

No description

## `speed` (type: `string`):

No description

## `csv` (type: `string`):

No description

## `speedCsv` (type: `string`):

No description

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

No description

## `proofHtml` (type: `string`):

No description

## `proofPdf` (type: `string`):

No description

## `worker` (type: `string`):

No description

## `fixMap` (type: `string`):

No description

## `monitoring` (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 = {
    "siteUrl": "https://books.toscrape.com"
};

// Run the Actor and wait for it to finish
const run = await client.actor("j0l30/website-image-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 = { "siteUrl": "https://books.toscrape.com" }

# Run the Actor and wait for it to finish
run = client.actor("j0l30/website-image-seo-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 '{
  "siteUrl": "https://books.toscrape.com"
}' |
apify call j0l30/website-image-seo-audit --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,j0l30/website-image-seo-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/8nqrjIYUKLvbXJNtI/builds/FTWkg6LLtHzBjieAt/openapi.json
