Image SEO Audit Tool - Alt Text, Weight & Format Checker
Under maintenancePricing
Pay per event
Image SEO Audit Tool - Alt Text, Weight & Format Checker
Under maintenanceOpens a page in a real browser and returns every image it renders with its weight, format, size and alt text. Flags missing alt attributes, files over 200 KB, JPEG/PNG that should be WebP, and images displayed at the wrong size. JSON per page plus a run summary.
Pricing
Pay per event
Rating
5.0
(2)
Developer
My Smart Digital
Maintained by CommunityActor stats
3
Bookmarked
29
Total users
0
Monthly active users
6 days ago
Last modified
Categories
Share
Image SEO Audit Tool - Alt Text, Image Weight & Format Checker
Give it a URL. The page is opened in a real browser, every image it actually renders is collected — <img> tags and CSS background-image — and each one comes back with its weight, format, HTTP status, displayed size, natural size, alt text and the problems it has.
Output is JSON: one record per page, plus one summary record for the whole run.
What a real run returns
https://www.smashingmagazine.com, single page, default settings: 28 images, 12 issues — 9 images displayed far smaller than the file actually served, 3 images with no alt text. Formats found on that page: 10 SVG, 6 PNG, 12 undetermined.
What it checks
| Issue code | Raised when |
|---|---|
ALT_MISSING | The image has no alt attribute, or an empty one |
HEAVY_WARN | The file is over 200 KB and up to 500 KB |
HEAVY_CRITICAL | The file is over 500 KB |
NON_NEXT_GEN | A JPEG or PNG heavier than 50 KB, where WebP or AVIF would be lighter |
UPSCALED | The image is displayed larger than its own resolution, so it looks blurry |
DOWNSCALED | The image is displayed at under 25 % of its resolution, so most of the downloaded bytes are wasted |
Each family of checks can be switched off: checkAlt, checkWeight (weight and format), checkDimensions.
Input
| Field | Type | Default | What it does |
|---|---|---|---|
startUrl | string | — | Required. The page to analyze, or the page the crawl starts from |
crawlUrls | boolean | false | Follow internal links and analyze several pages instead of one |
maxPages | integer | 10 | Upper bound on the number of pages analyzed when crawlUrls is on |
checkAlt | boolean | true | Report images with no alt text |
checkWeight | boolean | true | Report heavy images and outdated formats |
checkDimensions | boolean | true | Report images displayed at the wrong size |
timeout | integer (ms) | 15000 | Time budget for loading a page, and for each image request |
userAgent | string | Mozilla/5.0 (compatible; SEO-Image-Analyzer/1.0) | User agent sent to the site |
Only links on the same domain are followed, and anchors, mailto: and tel: links are ignored. There is no sitemap reading: the crawl only sees links present on the pages it visits.
Output
One record per page (type: "page"), with its images and its own counters:
{"type": "page","pageUrl": "https://www.smashingmagazine.com","title": "Smashing Magazine — For Web Designers And Developers","httpStatus": 200,"imagesCount": 28,"issuesCount": 12,"images": [{"imageUrl": "https://www.smashingmagazine.com/images/logo.svg","alt": "Smashing Magazine","displayed": { "w": 52.06, "h": 69.42 },"natural": { "w": 113, "h": 150 },"bytes": 2735,"bytesKB": 2.67,"format": "svg+xml","mime": "image/svg+xml","httpStatus": 206,"cacheControl": "public,max-age=31536000,immutable","issues": ["DOWNSCALED"]}],"summary": {"altMissing": 3,"heavyWarn": 0,"heavyCritical": 0,"nonNextGen": 0,"upscaled": 0,"downscaled": 9,"byFormat": { "svg+xml": 9, "png": 6, "unknown": 11, "svg": 1, "octet-stream": 1 }}}
One summary record for the run (type: "site-summary"), always the last one:
{"type": "site-summary","pagesCrawled": 1,"imagesTotal": 28,"issuesTotal": 12,"topIssues": [{ "type": "DOWNSCALED", "count": 9 },{ "type": "ALT_MISSING", "count": 3 }],"byFormat": { "svg+xml": 9, "png": 6, "unknown": 11, "svg": 1, "octet-stream": 1 },"byProblem": { "ALT_MISSING": 3, "HEAVY_WARN": 0, "HEAVY_CRITICAL": 0, "NON_NEXT_GEN": 0, "UPSCALED": 0, "DOWNSCALED": 9 },"byStatus": { "200": 8, "206": 8 },"thresholds": { "HEAVY_WARN": 204800, "HEAVY_CRITICAL": 512000, "HEAVY_WARN_KB": 200, "HEAVY_CRITICAL_KB": 500 }}
thresholds is there so the numbers behind the verdicts are never a black box.
What you are charged for
- Page Analyzed: one event per page record actually written to the dataset. A page that could not be loaded is reported with
httpStatus: 0and an empty image list, and is not charged. - Image Analyzed: one event per image analyzed on those pages, after deduplication by URL.
The amounts are shown in the pricing section of this page.
Limits, stated up front
- Weight is read from HTTP headers, not by downloading the image. A server that returns neither
Content-Lengthnor a byte range leavesbytesatnull, and the weight and format checks are then skipped for that image. On the example run above this was the case for 12 of the 28 images. - Inline images (
data:URIs) are analyzed like the others, and theirimageUrlfield then holds the whole base64 string, which can be several thousand characters long. - CSS background images have no alt text and no natural size, by construction. They are therefore always reported as
ALT_MISSING, and never get anUPSCALEDorDOWNSCALEDverdict. - The page is not scrolled. Images that a lazy-loading script only fetches once the visitor scrolls may be missing from the report, or reported without their final source.
pagesCrawledcounts every page record, including the pages that failed to load.
Typical uses
Pre-migration audit of a site's images, accessibility check on alt text, hunting down the heavy images that slow a page down, and checking that a WebP/AVIF migration actually reached every template.