---
title: "Image Schema · Unhead"
canonical_url: "https://unhead.unjs.io/docs/typescript/schema-org/api/schema/image"
last_updated: "2026-09-13T21:20:59.091Z"
meta:
  description: "Use defineImage() to add ImageObject structured data with captions, dimensions, content URLs, and language metadata."
  "og:description": "Use defineImage() to add ImageObject structured data with captions, dimensions, content URLs, and language metadata."
  "og:title": "Image Schema · Unhead"
---

Home

`
Unhead on GitHub

Switch to TypeScriptSwitch to VueSwitch to ReactSwitch to SvelteSwitch to Solid.jsSwitch to AngularSwitch to Nuxt

**Schema**

# **Image Schema**

[Copy for LLMs](https://raw.githubusercontent.com/unjs/unhead/refs/heads/main/docs/schema-org/5.api/9.schema/image.md)

## Schema.org Image

- **Type**: `defineImage<T extends Record<string, any>>(input?: ImageObject & T)`

Describes an individual image (usually in the context of an embedded media object).

## Useful Links

- [**~~ImageObject - Schema.org~~**](https://schema.org/ImageObject)
- [**~~Image metadata - Google Search Central~~**](https://developers.google.com/search/docs/appearance/structured-data/image-license-metadata)

## Required properties

- **url** or **contentUrl** `**string**`  
  The image file URL. Relative URLs become absolute.

## Google image metadata

For licensable images, add `**creator**`, `**creditText**`, `**copyrightNotice**`, and at least one of `**license**` or `**acquireLicensePage**`. Unhead resolves a nested creator as a Person or Organization and makes license URLs absolute.

## Defaults

- **@type**: `**ImageObject**`
- **@id**: `**${canonicalHost}#/schema/image/{n}**`
- **inLanguage**: `**inLanguage**` from resolved page metadata
- **contentUrl**: `**url**`

## Resolves

See [**~~Global Resolves~~**](https://unhead.unjs.io/docs/schema-org/guides/get-started/overview#how-does-schemaorg-get-page-data) for full context.

- `**creator**` resolves as a Person or Organization
- `**license**` and `**acquireLicensePage**` become absolute URLs
- `**width**` and `**height**` must be provided for either to be included

## Examples

### Minimal

```
defineImage({
  url: '/cat.jpg',
})
```

## Types

```
interface ImageBase extends Thing {
  caption?: string
  height?: number
  width?: number
  inLanguage?: string
  name?: string
  description?: string
  encodingFormat?: string
  creator?: NodeRelations<Identity>
  creditText?: string
  copyrightNotice?: string
  license?: string
  acquireLicensePage?: string
}

type ImageLocation
  = | { url: string, contentUrl?: string }
    | { url?: string, contentUrl: string }

export type ImageSimple = ImageBase & ImageLocation
```

[Edit this page](https://github.com/unjs/unhead/edit/main/docs/schema-org/5.api/9.schema/image.md)

[Markdown For LLMs](https://raw.githubusercontent.com/unjs/unhead/refs/heads/main/docs/schema-org/5.api/9.schema/image.md)

**Did this page help you? **

[**HowTo** Add HowTo structured data with Unhead, including step-by-step JSON-LD, images, supplies, tools, and time estimates.](https://unhead.unjs.io/docs/schema-org/api/schema/how-to) [**ItemList** Add ItemList structured data with Unhead. Create ordered lists and eligible Google carousels for courses, movies, recipes, and restaurants.](https://unhead.unjs.io/docs/schema-org/api/schema/item-list)

**On this page **

- [Schema.org Image](#schemaorg-image)
- [Useful Links](#useful-links)
- [Required properties](#required-properties)
- [Google image metadata](#google-image-metadata)
- [Defaults](#defaults)
- [Resolves](#resolves)
- [Examples](#examples)
- [Types](#types)