No ImageObject schema inside Article or Product
What is this issue?
This issue reports a nested ImageObject block your page already declares —
inside an Article-family or Product schema's image property — that is missing
contentUrl. It does not report a schema whose image is written as a bare URL
string, or one with no image declared at all.
What this issue is not:
- It does not apply when
imageis a plain string — that is valid schema.org markup with nothing to validate. - It does not check
width/heighthere. AnImageObject's dimensions are validated as part of its parent schema: the Article rich-result rule (#92) or the Organization logo rule (#89).
Why it matters
ImageObject schema enhances image SEO and discoverability:
- Google Image rich results: Images with proper schema are eligible for badges, captions, and enhanced display
- AI search citations: AI engines like ChatGPT and Bard use ImageObject metadata to properly attribute and describe images
- Licensing clarity:
licenseproperty helps search engines understand image usage rights - Accessibility:
captionanddescriptionimprove screen reader experience - Dimension information:
widthandheighthelp browsers reserve space and prevent layout shifts
Resolving this issue improves your overall SEO health score by ensuring images are properly structured for maximum visibility and understanding.
How to fix it
If this issue was raised, your page already declares an ImageObject nested inside
an Article-family or Product schema that is missing contentUrl — open the finding
for which parent it sits in. A plain image URL string is valid markup and is never
reported; the steps below are for a page that has chosen to use the richer
ImageObject form and needs contentUrl added.
Find the nested
ImageObject: check theimageproperty of yourArticle,Product,Recipe,VideoObjectorNewsArticleschemaAdd
contentUrl— this is the property PixyScan's check requires, noturl:{ "@context": "https://schema.org", "@type": "Article", "headline": "Blog Post Title", "image": { "@type": "ImageObject", "contentUrl": "https://example.com/photo.jpg", "width": 1200, "height": 630, "caption": "Description of the image" } }Include recommended properties:
contentUrl(required by this check)widthandheightin pixels — required for the parent's own rich-result dimension rule (Article: #92, Organization logo: #89)caption(recommended for accessibility)
Or keep it simple: a bare URL string (
"image": "https://example.com/photo.jpg") is valid schema.org markup and is never reported by this check.Validate with Google's Rich Results Test
Examples
Example 1: A Bare Image URL — Not This Issue
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "SEO Best Practices Guide",
"image": "https://example.com/images/seo-guide.jpg"
}Nothing is reported here. A plain URL string is valid schema.org markup with nothing
for this check to examine — it only runs once image is written as an ImageObject
object.
Example 2: A Well-Formed Nested ImageObject (passes)
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "SEO Best Practices Guide",
"image": {
"@type": "ImageObject",
"contentUrl": "https://example.com/images/seo-guide.jpg",
"width": 1200,
"height": 630,
"caption": "A comprehensive guide to SEO best practices for 2024"
}
}contentUrl is present, so this passes. The 1200px long-edge requirement for an
Article's image is checked separately, under the Article's own issue (#92).
Example 3: Nested ImageObject Missing contentUrl (fails)
Problematic state:
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Wireless Headphones",
"image": {
"@type": "ImageObject",
"url": "https://example.com/headphones-front.jpg",
"width": 800,
"height": 800,
"caption": "Front view of wireless headphones"
}
}Reported: ImageObject schema (nested inside Product) is present but failed validation: contentUrl missing. url is a common but different property — this
check requires contentUrl specifically.
Corrected state:
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Wireless Headphones",
"image": {
"@type": "ImageObject",
"contentUrl": "https://example.com/headphones-front.jpg",
"width": 800,
"height": 800,
"caption": "Front view of wireless headphones"
}
}How PixyScan detects this
Read the declared structured data: every JSON-LD block is parsed, and
@graphwrappers are flattened.Walk each declared schema for nested
ImageObjectblocks: wherever an object with@type: "ImageObject"appears nested inside another schema — most commonly an Article-family or Product schema'simageproperty — it is examined. A schema whoseimageis a bare URL string is not examined here: there is nothing to validate, and a plain string is valid markup.Check the required property: a nested
ImageObjectmust havecontentUrl.This is reported when: a nested
ImageObjectobject is declared but is missingcontentUrl, reported under this issue naming the parent it was found inside. A schema whose image is a bare URL string, or that declares no image at all, is not reported here.
Note: width/height and caption are not checked by this issue. An ImageObject's
dimensions are checked separately, as part of its parent's own validation — the
1200px minimum long edge for an Article's image lands on the Article's own issue
(#92), and a 112px minimum for an Organization's logo on #89.
What we store
Storage Level
Page Level — This issue is evaluated for each individual URL that contains structured data.
Database Table / Prisma Model
PageStructuredData
Stored Fields
| Field | Type | Description |
|---|---|---|
| schemaType | SchemaType | The type of schema (e.g., Organization, Person) |
| schemaFormat | SchemaFormat | The format of the schema (JSON-LD, Microdata, RDFa) |
| schemaIdentifier | String? | Unique identifier for the schema |
| rawJson | Json? | The raw JSON-LD or structured data content |
| schemaErrors | Json? | Array of validation errors found in the schema |
| isValidSchema | Boolean? | Whether the schema is valid according to validation |
| missingFields | Json? | Reserved for future use — the crawler always writes null here today; no check currently populates it |
Detection Dependencies
- The following data sources are required to evaluate this issue:
- HTML Document — The crawler parses the HTML to find structured data (JSON-LD, Microdata, RDFa)
- Structured Data Validation — The extracted schema is validated against Schema.org definitions
- Schema Parser — JSON-LD scripts, Microdata attributes, and RDFa markup are parsed