---
title: "Book Schema"
description: "Use defineBook() and defineBookEdition() to describe a book work, its editions, ISBN, author, and read actions."
canonical_url: "https://unhead.unjs.io/docs/schema-org/api/schema/book"
last_updated: "2026-08-11T00:40:00.968Z"
---

## Schema.org Book

- **Type**: `defineBook<T extends Record<string, any>>(input?: Book & T)`<br />

Describes a Book.

## Useful Links

- [Schema.org Book](https://schema.org/Book)
- [Book Schema Markup - Google Search Central](https://developers.google.com/search/docs/appearance/structured-data/book)

[Google's Book actions feature](https://developers.google.com/search/docs/appearance/structured-data/book) is limited to participating book providers and requires a submitted feed. Adding a Book node to an ordinary page does not enroll the site in that feature.

## Defaults and resolves

- `@type` defaults to `Book`, and `@id` defaults to `${canonicalUrl}#book`.
- `name`, `description`, and `url` can be inherited from resolved page metadata.
- `workExample` values use the BookEdition resolver, and a root Book uses the primary identity as its author when no author is supplied.
- BookEdition values expand `bookFormat` to a full Schema.org URL and serialize Date objects as calendar dates.

## Types

```ts
export interface BookSimple extends Thing {
  /**
   * The title of the book.
   */
  name: string
  /**
   * A description of the book. Display limit of 60 characters.
   */
  description?: string
  /**
   *  A reference to an Identity piece, representing author associated with the Book.
   */
  author?: NodeRelations<Identity>
  /**
   * The URL on your website where the book is introduced or described.
   */
  url?: string
  /**
   * The URL of a reference page that identifies the work. For example, a Wikipedia, Wikidata, VIAF, or Library of Congress page for the book.
   */
  sameAs?: Arrayable<string>
  /**
   * The number of pages in the book.
   */
  numberOfPages?: number
  /**
   * The illustrator(s) of the book.
   */
  illustrator?: NodeRelations<Identity>
  /**
   * The edition(s) of the work.
   */
  workExample: NodeRelations<BookEdition>
}

type BookFormat = OptionalSchemaOrgPrefix<'AudiobookFormat'> | OptionalSchemaOrgPrefix<'EBook'> | OptionalSchemaOrgPrefix<'Hardcover'> | OptionalSchemaOrgPrefix<'Paperback'>

export interface BookEditionSimple extends Thing {
  /**
   * The title of the edition. Only use this when the title of the edition is different from the title of the work.
   */
  name?: string
  /**
   * The format of the edition.
   */
  bookFormat: BookFormat
  /**
   * The main language of the content in the edition. Use one of the two-letter codes from the list of ISO 639-1 alpha-2 codes.
   */
  inLanguage?: string
  /**
   * The ISBN-13 of the edition. If you have ISBN-10, convert it into ISBN-13.
   */
  isbn: string
  /**
   * The action to be triggered for users to purchase or download the book.
   */
  potentialAction?: Arrayable<ReadAction | any>
  /**
   * The author(s) of the edition.
   */
  author?: NodeRelations<Identity>
  /**
   * The edition information of the book. For example, 2nd Edition.
   */
  bookEdition?: string
  /**
   * The date of publication of the edition in YYYY-MM-DD or YYYY format. This can be either a specific date or only a specific year.
   */
  datePublished?: ResolvableDate
  /**
   * The external or other ID that unambiguously identifies this edition. Multiple identifiers are allowed. For more details, refer to PropertyValue (identifier).
   */
  identifier?: unknown
  /**
   * The URL of a reference web page that unambiguously indicates the edition. For example, a Wikipedia page for this specific edition. Don't reuse the sameAs of the Work.
   */
  sameAs?: Arrayable<string>
  /**
   * The URL on your website where the edition is introduced or described. It can be the same as workExample.target.urlTemplate.
   */
  url?: string
}
```

## Related Schemas

- [Person](/docs/schema-org/api/schema/person): Book author
- [Organization](/docs/schema-org/api/schema/organization): Publisher
