apyhub
Back

Audit Webpage Images for SEO API

What it does

Image SEO Audit checks a webpage for image SEO and alt-text issues, then returns a score, grade, and a breakdown of what needs attention. Send a page url, optionally set lang to auto, en, fr, or ar, and get back the page-level audit plus image-by-image findings.

Use it to spot missing or weak alt text, duplicated or generic descriptions, and image delivery issues that can affect crawlability and accessibility. The response includes page signals such as h1, title, issues, canonical, html_lang, open_graph, robots_meta, and meta_description, along with json_ld and h1_count for broader on-page context.

For each image found, you get its src, position, current alt text, alt_issues, confidence, lazy_loaded status, and any suggestions available in Arabic, English, or French. The audit also flags speed-related problems like missing dimensions, legacy formats, non-lazy-loaded images, and large files when size checks are available.

Image SEO Audit is useful for content teams, technical SEOs, and CMS workflows that need to review published pages, prioritise fixes, and track whether image markup is helping or hurting search visibility.

GET
Image SEO + alt text audit of one page
https://api.eu.apyhub.com/freejosephe/audit-webpage-images-for-seo/v1/image-seo/audit

QUICKSTART

GUIDE

Quickstart

Audit a page for image SEO by providing the page URL as a query parameter.

curl -X GET "https://api.eu.apyhub.com/freejosephe/audit-webpage-images-for-seo/v1/image-seo/audit?url=https://apyhub.com/blog/ultimate-guide-ai-api-marketplaces-2026&lang=auto" \
  -H "apy-token: $APY_TOKEN"

What you'll get back

Returns a JSON object with top-level fields such as url, page, grade, score, images, language, final_url, audited_at, robots_txt, and score_breakdown. The page and images fields are objects that contain the audited page metadata and image analysis results.

{
  "url": "https://apyhub.com/blog/ultimate-guide-ai-api-marketplaces-2026",
  "final_url": "https://apyhub.com/blog/ultimate-guide-ai-api-marketplaces-2026",
  "redirects": 0,
  "audited_at": "2026-10-23T07:11:57.463Z",
  "score": 93,
  "grade": "A",
  "score_breakdown": [
    {
      "issue": "missing_max_image_preview_large",
      "points": 4
    },
    {
      "issue": "image_speed",
      "points": 3,
      "detail": {
        "over_200kb": 0,
        "missing_dimensions": 2,
        "not_lazy_loaded": 0,
        "legacy_format": 1
      }
    }
  ],
  "language": "en",
  "page_language": "en",
  "site_name": "ApyHub",
  "language_note": "Suggestions reuse the page's own words (caption, title, H1, file name) with connector words in this language. Other languages are null (not_page_language) when they would only repeat the page's words: nothing is machine-translated.",
  "page": {
    "title": "The ultimate guide to AI API marketplaces — ApyHub Blog",
    "title_length": 55,
    "meta_description": "The ApyHub Marketplace offers curated APIs, one subscription, flexible pricing, EU hosting, and powerful AI job management for developers.",
    "meta_description_length": 138,
    "robots_meta": null,
    "canonical": "https://apyhub.com/blog/ultimate-guide-ai-api-marketplaces-2026",
    "open_graph": {
      "title": "The ultimate guide to AI API marketplaces",
      "description": "The ApyHub Marketplace offers curated APIs, one subscription, flexible pricing, EU hosting, and powerful AI job management for developers.",
      "image": "https://assets.apyhub.com/prod/image-2fe39592-335c-4a81-ad6c-375aa653151e.webp",
      "type": "article",
      "url": "https://apyhub.com/blog/ultimate-guide-ai-api-marketplaces-2026",
      "site_name": "ApyHub"
    },
    "twitter_card": "summary_large_image",
    "h1": "The ultimate guide to AI API marketplaces",
    "h1_count": 1,
    "topic": "The ultimate guide to AI API marketplaces",
    "html_lang": "en",
    "json_ld": {
      "present": true,
      "blocks": 2,
      "invalid_blocks": 0,
      "types": [
        "BlogPosting",
        "BreadcrumbList"
      ]
    },
    "issues": [
      "missing_max_image_preview_large"
    ]
  },
  "images": {
    "img_tags_on_page": 2,
    "analyzed": 2,
    "analysis_cap": 150,
    "total_found": 2,
    "decorative": 0,
    "content_images": 2,
    "with_alt_problems": 0,
    "alt_issue_counts": {},
    "speed_issue_counts": {
      "over_200kb": 0,
      "missing_dimensions": 2,
      "not_lazy_loaded": 0,
      "legacy_format": 1
    },
    "size_checked": 2,
    "size_checks_skipped": {},
    "returned": 2,
    "list": [
      {
        "src": "https://assets.apyhub.com/prod/image-2fe39592-335c-4a81-ad6c-375aa653151e.webp",
        "position": 1,
        "current_alt": "Cover illustration for The ultimate guide to AI API marketplaces",
        "alt_issues": [],
        "suggested_alt": "Cover illustration for The ultimate guide to AI API marketplaces",
        "confidence": "ok",
        "suggestions": null,
        "suggestion_reasons": null,
        "width": null,
        "height": null,
        "has_dimensions": false,
        "lazy_loaded": false,
        "is_logo": false,
        "speed_issues": [
          "missing_dimensions"
        ],
        "format": "modern",
        "file_size_kb": 65,
        "size_checked": true
      },
      {
        "src": "https://assets.apyhub.com/blog/apis-for-developers-apyhub/start-cta.png",
        "position": 2,
        "current_alt": "Explore ApyHub",
        "alt_issues": [],
        "suggested_alt": "Explore ApyHub",
        "confidence": "ok",
        "suggestions": null,
        "suggestion_reasons": null,
        "width": null,
        "height": null,
        "has_dimensions": false,
        "lazy_loaded": true,
        "is_logo": false,
        "speed_issues": [
          "missing_dimensions",
          "legacy_format"
        ],
        "format": "legacy",
        "file_size_kb": 10,
        "size_checked": true
      }
    ]
  },
  "html_bytes_read": 175384,
  "html_truncated": false,
  "robots_txt": {
    "checked": true,
    "status": 200,
    "allowed": true,
    "crawl_delay": null
  },
  "notes": [
    "Suggested alts reuse only words already on the page (caption, title attribute, file name, H1, site name). confidence=manual means no honest context was found: write it by hand.",
    "SVG, tracking pixels and icons under 40x40 are skipped. alt=\"\" is valid for decorative images and is not penalised."
  ],
  "requests_used": 10
}
TRY ITLIVE · 200 ATOMS
Loading your default key…
The full key is used to call the gateway and stays in this tab — never sent to orbit or saved.

About this endpoint

What it does

Audits a single page for image SEO and alt-text issues. It takes a page url and optional lang, then returns the audited page metadata, image findings, score, grade, and supporting breakdown fields.

Query Parameter(s)

AttributeTypeMandatoryDescription
urlStringYesPage URL to audit. Must be a URI and up to 2048 characters.
langENUMNoPage language context for the audit. Allowed values: auto, en, fr, ar. Default: auto.

Response

Returns a JSON object with top-level fields for the audited url (string), page (object), grade (ENUM), score (integer), images (object), language (ENUM), final_url (string), audited_at (string), robots_txt (object), and score_breakdown (array). The response shape is nested, and the page and images objects contain the detailed audit data.

ParameterTypeMandatoryDescription
urlStringNoThe audited page URL.
pageObjectNoPage-level audit data, including h1, title, issues, json_ld, h1_count, canonical, html_lang, open_graph, robots_meta, and meta_description.
page.h1StringNoThe page's H1 text.
page.titleStringNoThe page title.
page.issuesString ArrayNoPage-level issues found during the audit.
page.json_ldObjectNoJSON-LD data found on the page.
page.h1_countIntegerNoNumber of H1 elements found.
page.canonicalStringNoCanonical URL, or null.
page.html_langStringNoHTML language code, or null.
page.open_graphObjectNoOpen Graph metadata found on the page.
page.robots_metaStringNoRobots meta content, or null.
page.meta_descriptionStringNoMeta description content, or null.
gradeENUMNoAudit grade. Allowed values: A, B, C, D, F.
scoreIntegerNoAudit score from 0 to 100.
imagesObjectNoImage audit data, including the image list and aggregate counts.
images.listObject ArrayNoList of audited images. Each item includes src, format, position, alt_issues, confidence, current_alt, lazy_loaded, suggestions, file_size_kb, size_checked, speed_issues, suggested_alt, and has_dimensions.
images.list[].srcStringNoImage source URL.
images.list[].formatENUMNoImage format classification. Allowed values: modern, legacy, negotiated, unknown.
images.list[].positionIntegerNoImage position on the page.
images.list[].alt_issuesENUMNoAlt-text issues detected for the image. Allowed values: missing, empty_alt, filename, generic, duplicate, too_long, redundant_prefix, title_only.
images.list[].confidenceENUMNoConfidence or handling status for the finding. Allowed values: high, medium, review, manual, keep, ok, ok_if_decorative.
images.list[].current_altStringNoCurrent alt text, or null.
images.list[].lazy_loadedBooleanNoWhether the image is lazy-loaded.
images.list[].suggestionsObjectNoAlt suggestions per language, or null. Keys: ar, en, fr.
images.list[].suggestions.arStringNoSuggested Arabic alt text, or null.
images.list[].suggestions.enStringNoSuggested English alt text, or null.
images.list[].suggestions.frStringNoSuggested French alt text, or null.
images.list[].file_size_kbIntegerNoImage file size in KB, or null.
images.list[].size_checkedBooleanNoWhether file size was checked.
images.list[].speed_issuesENUMNoImage speed-related issues. Allowed values: over_200kb, missing_dimensions, not_lazy_loaded, legacy_format.
images.list[].suggested_altStringNoSuggested alt text.
images.list[].has_dimensionsBooleanNoWhether the image has dimensions.
images.total_foundIntegerNoTotal number of images found.
images.size_checkedIntegerNoNumber of images for which size was checked.
images.content_imagesIntegerNoNumber of content images.
images.alt_issue_countsObjectNoAggregate counts of alt issues.
images.with_alt_problemsIntegerNoNumber of images with alt problems.
images.speed_issue_countsObjectNoAggregate counts of speed issues.
images.size_checks_skippedObjectNoCounts or breakdown related to skipped size checks.
languageENUMNoLanguage used for the audit output. Allowed values: en, fr, ar.
final_urlStringNoFinal URL after any redirects.
audited_atStringNoTimestamp of when the audit was run.
robots_txtObjectNoRobots.txt-related data.
score_breakdownObject ArrayNoBreakdown of scoring by issue. Each item includes issue and points.
score_breakdown[].issueStringNoIssue name used in the score breakdown.
score_breakdown[].pointsIntegerNoPoints assigned to the issue.
▣ COMMON ERRORS

Errors any endpoint can return

400bad_request

Required parameter missing or malformed body.

401unauthorized

API key missing, revoked, or not authorized for this service.

429rate_limited

Your plan's per-second rate exceeded. Retry with exponential backoff.

503upstream_busy

Backend temporarily unavailable. Try again in a few seconds.