Using an e-reader? Open the simple Cloud Library

Skip to content

EPUB errors and how to fix them.

What EPUBCheck and Ace by DAISY report, what it means, and how to fix it by hand. Most package and markup errors here go away when E-BOOKA opens the book and exports it again, free in your browser.

Find an error

21 errors explained.

EPUBCheck: package and manifest

Errors in the files that hold the book together: the archive, the package document and its manifest.

EPUBCheckErrorFixed on export

PKG-006: Mimetype file entry is missing or is not the first file in the archive.

An EPUB is a ZIP archive whose very first entry must be a file named mimetype. Reading systems look at the first bytes of the archive to recognise an EPUB, so a mimetype file in any other position is as good as missing.

Why it happens

  • The EPUB was unzipped, edited and zipped again with a regular archive tool, which orders files alphabetically or by folder.
  • A script built the archive and added META-INF or OEBPS before mimetype.
  • The mimetype file was deleted while editing the unpacked book.

Fix it in E-BOOKA

Open the book on the EPUB checker and download it again from the editor. The exported file is written correctly, so this error does not come back. Run EPUBCheck again to confirm.

Open your EPUB

Fix it by hand

The ZIP archive itself. Re-create it with mimetype added first and stored without compression, then the rest.

Before

zip -r book.epub .

After

zip -X0 book.epub mimetype
zip -rDX9 book.epub META-INF OEBPS

Folder names after mimetype depend on the book; OEBPS is the most common.

Related: PKG-007

Checked with EPUBCheck 5.3.0, November 2026

EPUBCheckErrorFixed on export

PKG-007: Mimetype file should only contain the string "application/epub+zip" and should not be compressed.

The mimetype file has the wrong text, extra characters such as a line break, or was compressed. It must hold exactly application/epub+zip, stored as is, so reading systems can recognise the archive without unpacking it.

Why it happens

  • A text editor added a line break or a byte order mark when the file was saved.
  • The archive tool compressed every file, mimetype included.
  • The file was written by hand with a different media type.

Fix it in E-BOOKA

Open the book on the EPUB checker and download it again from the editor. The exported file is written correctly, so this error does not come back. Run EPUBCheck again to confirm.

Open your EPUB

Fix it by hand

The mimetype file at the root of the archive.

Before

application/epub+zip\n   (with a trailing line break, compressed)

After

application/epub+zip   (no line break, stored uncompressed)

Write it with printf rather than echo, which adds a line break: printf 'application/epub+zip' > mimetype

Related: PKG-006

Checked with EPUBCheck 5.3.0, November 2026

EPUBCheckErrorFixed on export

RSC-008: Referenced resource "…" is not declared in the OPF manifest.

A chapter uses a file, usually an image, font or stylesheet, that is in the archive but missing from the manifest in the package document. Every file a book uses must be listed there with its media type.

Why it happens

  • An image was added to the unpacked book without a matching manifest item.
  • A file was renamed and the manifest still lists the old name.
  • A conversion tool copied assets but did not update the package document.

Fix it in E-BOOKA

Open the book on the EPUB checker and download it again from the editor. Export gives each image a fresh name, updates every reference to it and lists it in the manifest.

Open your EPUB

Fix it by hand

The manifest element of the package document (the .opf file).

Before

<manifest>
  <item id="c2" href="chapter-2.xhtml" media-type="application/xhtml+xml"/>
</manifest>

After

<manifest>
  <item id="c2" href="chapter-2.xhtml" media-type="application/xhtml+xml"/>
  <item id="dot" href="dot.png" media-type="image/png"/>
</manifest>

Related: RSC-007, OPF-014

Checked with EPUBCheck 5.3.0, November 2026

EPUBCheckErrorFixed on export

OPF-014: The property "…" should be declared in the OPF file.

A chapter contains something EPUB 3 asks the manifest to announce, such as inline SVG, MathML, scripts or a resource on the web, and its manifest item has no properties attribute saying so. Reading systems use these properties to decide how to render the chapter.

Why it happens

  • SVG or MathML was pasted into a chapter after the package was written.
  • The book was upgraded from EPUB 2, which had no such properties.
  • A chapter links to an image or font on a website, which needs "remote-resources".

Fix it in E-BOOKA

Open the book on the EPUB checker and download it again from the editor. Export works out each chapter's properties from its content. If the property was remote-resources, also see RSC-006: the remote file itself is the real problem.

Open your EPUB

Fix it by hand

The chapter's item in the manifest of the .opf file.

Before

<item id="c1" href="chapter-1.xhtml" media-type="application/xhtml+xml"/>

After

<item id="c1" href="chapter-1.xhtml" media-type="application/xhtml+xml" properties="svg"/>

Use a space-separated list when several apply, for example properties="svg mathml".

Related: OPF-015, RSC-006

Checked with EPUBCheck 5.3.0, November 2026

EPUBCheckErrorFixed on export

OPF-015: The property "…" should not be declared in the OPF file.

The manifest says a chapter contains SVG, MathML or scripts, but it does not. A stale property can make a reading system prepare for content that is not there.

Why it happens

  • An illustration or formula was removed and the manifest kept its property.
  • A tool or template marked every chapter the same way.

Fix it in E-BOOKA

Open the book on the EPUB checker and download it again from the editor. The exported file is written correctly, so this error does not come back. Run EPUBCheck again to confirm.

Open your EPUB

Fix it by hand

The chapter's item in the manifest of the .opf file.

Before

<item id="c1" href="chapter-1.xhtml" media-type="application/xhtml+xml" properties="svg"/>

After

<item id="c1" href="chapter-1.xhtml" media-type="application/xhtml+xml"/>

Related: OPF-014

Checked with EPUBCheck 5.3.0, November 2026

EPUBCheckErrorFixed on export

NCX-001: NCX identifier ("…") does not match OPF identifier ("…").

The book still carries an EPUB 2 table of contents (toc.ncx) whose dtb:uid is not the book's identifier. The NCX is optional in EPUB 3, but when present the two must match.

Why it happens

  • The identifier was changed in the package document, for example to an ISBN, and the NCX kept the old one.
  • Chapters or a table of contents were copied in from another book.

Fix it in E-BOOKA

Open the book on the EPUB checker and download it again from the editor. Export writes an EPUB 3 navigation document from your table of contents and no NCX, so there is nothing left to mismatch.

Open your EPUB

Fix it by hand

The meta name="dtb:uid" element in toc.ncx, matched to dc:identifier in the .opf file.

Before

<meta name="dtb:uid" content="urn:uuid:00000000-0000-4000-8000-000000000000"/>

After

<meta name="dtb:uid" content="urn:uuid:8b6f3c2e-5f4a-4d1b-9a7e-2c3d4e5f6a7b"/>

Related: RSC-005 empty table of contents

Checked with EPUBCheck 5.3.0, November 2026

EPUBCheckErrorFixed on export

RSC-005: Error while parsing file: package dcterms:modified meta element must occur exactly once

EPUB 3 requires exactly one last-modified date in the package metadata, so reading systems and stores can tell two versions of the same book apart. It is missing, or there is more than one.

Why it happens

  • The book was written as EPUB 2 and its version number raised to 3.0 by hand.
  • Two tools each added their own date.

Fix it in E-BOOKA

Open the book on the EPUB checker and download it again from the editor. Export writes one dcterms:modified with the time of the export.

Open your EPUB

Fix it by hand

The metadata element of the .opf file.

After

<meta property="dcterms:modified">2026-11-13T00:00:00Z</meta>

Use UTC in this exact form, with no fractions of a second.

Related: RSC-005 element not allowed, RSC-005 empty table of contents

Checked with EPUBCheck 5.3.0, November 2026

EPUBCheck: content and links

Errors inside chapters and the table of contents: markup, entities, links and references.

EPUBCheckErrorRepaired on open

RSC-005: Error while parsing file: element "center" not allowed here

A chapter uses an HTML element that EPUB 3's XHTML does not allow. center and font are the usual ones: old presentational tags that a style should do instead.

Why it happens

  • Text was pasted from an old web page or a word processor's HTML export.
  • The book was converted by a tool that writes HTML 4.

Fix it in E-BOOKA

Open the book on the EPUB checker. center and font are removed as it loads and their text is kept; the repair list shows what changed. Centre text again in the editor if you need to, then export.

Open your EPUB

Fix it by hand

The chapter file named in the error, at the line and column EPUBCheck gives.

Before

<center><font color="red">Opening line.</font></center>

After

<p class="centered">Opening line.</p>
/* in the stylesheet */
.centered { text-align: center; }

Related: RSC-005 dcterms:modified, RSC-016

Checked with EPUBCheck 5.3.0, November 2026

EPUBCheckErrorRepaired on open

RSC-005: Error while parsing file: element "ol" incomplete; missing required element "li"

The table of contents in the navigation document is an empty list. EPUB 3 needs at least one entry, and Amazon KDP and Apple Books both expect a working table of contents.

Why it happens

  • A tool wrote the navigation document before any chapters existed.
  • Every entry was deleted while editing the table of contents by hand.

Fix it in E-BOOKA

Open the book on the EPUB checker. A missing or empty table of contents is rebuilt from the book's chapters as it loads. Review the entries in the editor, then export.

Open your EPUB

Fix it by hand

The nav epub:type="toc" element in the navigation document (often nav.xhtml).

Before

<nav epub:type="toc"><ol></ol></nav>

After

<nav epub:type="toc"><ol>
  <li><a href="chapter-1.xhtml">One</a></li>
</ol></nav>

Related: NCX-001

Checked with EPUBCheck 5.3.0, November 2026

EPUBCheckFatalFixed on export

RSC-016: Fatal Error while parsing file: The entity "nbsp" was referenced, but not declared.

A chapter uses an HTML named entity such as &nbsp; or &mdash;. EPUB chapters are XML, which only knows five named entities, so the chapter cannot be read at all. That is why this one is fatal.

Why it happens

  • Text was pasted from a web page or written in an HTML editor.
  • A conversion tool wrote HTML entities into XHTML.

Fix it in E-BOOKA

Open the book on the EPUB checker and download it again from the editor. Export writes every named entity as the character itself, so a non-breaking space stays a non-breaking space.

Open your EPUB

Fix it by hand

The chapter file and line EPUBCheck names.

Before

<p>Opening&nbsp;line&mdash;here.</p>

After

<p>Opening&#160;line&#8212;here.</p>

Numeric references like &#160; or the characters themselves are both valid. Only &amp; &lt; &gt; &quot; and &apos; may stay named.

Related: RSC-005 element not allowed, HTM-004

Checked with EPUBCheck 5.3.0, November 2026

EPUBCheckErrorFixed on export

HTM-004: Irregular DOCTYPE: found "…", expected "<!DOCTYPE html>".

A chapter declares an XHTML 1.1 or another old doctype. EPUB 3 chapters use the HTML5 doctype only. XML tools that see the old doctype may also try to fetch its DTD from the web, which fails offline.

Why it happens

  • The chapters come from an EPUB 2 book.
  • A template or converter still writes the XHTML 1.1 doctype.

Fix it in E-BOOKA

Open the book on the EPUB checker and download it again from the editor. The exported file is written correctly, so this error does not come back. Run EPUBCheck again to confirm.

Open your EPUB

Fix it by hand

The second line of each chapter file named in the error.

Before

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

After

<!DOCTYPE html>

Related: RSC-016

Checked with EPUBCheck 5.3.0, November 2026

EPUBCheckErrorFix in the editor

RSC-007: Referenced resource "…" could not be found in the EPUB.

A link or image points to a file that is not in the book. Readers who follow the link reach nothing, and a missing image leaves a gap.

Why it happens

  • A chapter was renamed, split or deleted and links to it were not updated.
  • Links were copied from another book or from the manuscript's own file names.
  • An image was removed while its img tag stayed.

Fix it in E-BOOKA

Open the book on the EPUB checker. The Publisher view lists each broken link with Go to link, so you can point it at the right chapter or remove it. Sign in with a free account to see each finding and jump to it. Fix it, export, and run EPUBCheck again.

Find it in your EPUB

Fix it by hand

The chapter EPUBCheck names. Search it for the missing file name.

Before

<a href="missing.xhtml">Lost</a>

After

<a href="chapter-2.xhtml">Lost</a>

Related: RSC-012, RSC-008

Checked with EPUBCheck 5.3.0, November 2026

EPUBCheckErrorFix in the editor

RSC-012: Fragment identifier is not defined.

A link points to a place inside a chapter, the part after #, and no element in that chapter has that id. The chapter opens, but not at the intended place.

Why it happens

  • A heading or note was deleted, or its id changed, while links to it stayed.
  • Footnote links were written by hand with a typo.
  • A converter wrote ids for headings in one pass and links in another.

Fix it in E-BOOKA

Open the book on the EPUB checker. The Publisher view lists each link to a missing anchor with Go to link. Sign in with a free account to see each finding and jump to it. Fix it, export, and run EPUBCheck again.

Find it in your EPUB

Fix it by hand

The link in the chapter EPUBCheck names, and the target chapter.

Before

<a href="chapter-2.xhtml#nowhere">Go on</a>
<!-- chapter-2.xhtml --> <p id="end">

After

<a href="chapter-2.xhtml#end">Go on</a>

Related: RSC-007

Checked with EPUBCheck 5.3.0, November 2026

EPUBCheckErrorFix in the editor

RSC-006: Remote resource reference is not allowed in this context; resource "…" must be located in the EPUB container.

A chapter loads an image, font or other file from a website instead of from inside the book. Most reading systems work offline and will not fetch it, and stores reject it.

Why it happens

  • Images were pasted from a web page and kept their web addresses.
  • A stylesheet loads a web font from a font service.

Fix it in E-BOOKA

Open the book on the EPUB checker. The Publisher view lists each remote file. Download the image and insert it into the chapter from the editor so it travels inside the book. Sign in with a free account to see each finding and jump to it. Fix it, export, and run EPUBCheck again.

Find it in your EPUB

Fix it by hand

The chapter or stylesheet named in the error.

Before

<img src="https://example.com/remote.png" alt="Map"/>

After

<img src="images/map.png" alt="Map"/>
<!-- plus a manifest item for images/map.png -->

Links a reader clicks (a href) may point to websites; only files the book loads must be inside it.

Related: OPF-014, RSC-008

Checked with EPUBCheck 5.3.0, November 2026

Ace accessibility

Rules Ace by DAISY checks for readers using screen readers and other assistive technology.

Ace by DAISYCriticalFix in the editor

image-alt: Ensure <img> elements have alternative text or a role of none or presentation

An image has no alt attribute, so a screen reader can only say that an image is there, or reads out its file name. Informative images need a short description; decorative ones need an empty alt.

Why it happens

  • Images were inserted without a description, which most word processors allow.
  • A converter dropped the descriptions the manuscript had.

Fix it in E-BOOKA

Open the book on the EPUB checker. The Publisher view lists each image without a description with Go to image, where you can write one. Only you can judge what the image shows. Sign in with a free account to see each finding and jump to it. Fix it, export, and run EPUBCheck again.

Find it in your EPUB

Fix it by hand

The img element Ace points to.

Before

<img src="images/map.png"/>

After

<img src="images/map.png" alt="Map of the river delta with the three villages marked"/>
<img src="images/flourish.png" alt=""/>   <!-- decorative -->

alt="image1" or the file name is not a description. Ace cannot tell; Apple Books guidance asks for useful ones.

Related: metadata-accessmode

Checked with Ace by DAISY 1.4.6, November 2026

Ace by DAISYModerateFix in the editor

heading-order: Ensure the order of headings is semantically correct

Headings skip a level, for example from h1 straight to h3. Screen reader users move through a book by headings, and a skipped level suggests a missing section.

Why it happens

  • A heading level was picked for its size rather than its place in the outline.
  • A section between two headings was deleted.

Fix it in E-BOOKA

Open the book on the EPUB checker. The Publisher view lists each jump with Go to heading. Change the level, or add the heading that is missing. Sign in with a free account to see each finding and jump to it. Fix it, export, and run EPUBCheck again.

Find it in your EPUB

Fix it by hand

The heading Ace points to and the one before it.

Before

<h1>One</h1>
<h3>Too deep</h3>

After

<h1>One</h1>
<h2>Too deep</h2>

Change the size with a style, not by choosing a different heading level.

Related: epub-type-has-matching-role

Checked with Ace by DAISY 1.4.6, November 2026

Ace by DAISYModerateRepaired on open

epub-type-has-matching-role: Ensure the element has an ARIA role matching its epub:type

An element is marked with epub:type, for example a chapter, footnote or the table of contents, but has no matching ARIA role. Reading systems use epub:type; screen readers only understand the role.

Why it happens

  • The book was made for EPUB 3.0, before the matching roles were recommended.
  • A template adds epub:type everywhere and roles nowhere.

Fix it in E-BOOKA

Open the book on the EPUB checker. The matching roles are added as it loads, for example role="doc-chapter" beside epub:type="chapter" and role="doc-toc" on the table of contents. Then export.

Open your EPUB

Fix it by hand

The element Ace points to.

Before

<section epub:type="chapter">
<nav epub:type="toc">

After

<section epub:type="chapter" role="doc-chapter">
<nav epub:type="toc" role="doc-toc">

Related: aria-roles, heading-order

Checked with Ace by DAISY 1.4.6, November 2026

Ace by DAISYCriticalRepaired on open

aria-roles: Ensure all elements with a role attribute use a valid value

An element has a role that no ARIA or DPUB-ARIA specification defines. Assistive technology cannot interpret it, and an invalid role can hide the element's real meaning. EPUBCheck reports the same markup as RSC-005.

Why it happens

  • A role was invented or misspelled, such as role="chapterish" or role="doc-chaptr".
  • epub:type values were copied into role, where most of them are not valid.

Fix it in E-BOOKA

Open the book on the EPUB checker. Roles no reading system recognises are removed as it loads, and a valid role is added where the element's epub:type implies one. Then export.

Open your EPUB

Fix it by hand

The element Ace points to.

Before

<section role="chapterish">

After

<section role="doc-chapter">

Related: epub-type-has-matching-role

Checked with Ace by DAISY 1.4.6, November 2026

Ace by DAISYSeriousFixed on export

html-has-lang: Ensure every HTML document has a lang attribute

Also reported as epub-lang

A chapter (html-has-lang) or the package document (epub-lang) does not say which language it is in. Screen readers pick their voice and pronunciation from it, so the book may be read with the wrong accent.

Why it happens

  • The language was set in the book's metadata but not on each chapter.
  • Chapters were written by a tool that leaves out lang and xml:lang.

Fix it in E-BOOKA

Open the book on the EPUB checker, check the language on the editor's Metadata tab, and download the book again. Export writes that language on every chapter and on the package document.

Open your EPUB

Fix it by hand

The html element of each chapter, and the package element of the .opf file.

Before

<html xmlns="http://www.w3.org/1999/xhtml">

After

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

Related: metadata-accessmode

Checked with Ace by DAISY 1.4.6, November 2026

Ace by DAISYSeriousFixed on exportPublisher plan

metadata-accessmode: Ensures a 'schema:accessMode' metadata is present

Also reported as metadata-accessibilityhazard, metadata-accessibilitysummary, metadata-accessibilityfeature, metadata-accessmodesufficient

The package document does not describe the book's accessibility: how it can be read (accessMode, accessModeSufficient), what helps (accessibilityFeature), what could harm (accessibilityHazard) and a summary. Stores and libraries show this to readers before they buy, and the European Accessibility Act asks for it on e-books sold in the EU.

Why it happens

  • The book was made before accessibility metadata was common.
  • The authoring tool has no fields for it.

Fix it in E-BOOKA

Open the book on the EPUB checker and download it again: export writes accessMode, accessibilityHazard and accessibilitySummary from what it finds in the book. accessibilityFeature and accessModeSufficient are statements only you can make after reviewing the book: declare them on the editor's Metadata tab with the Publisher plan.

Open your EPUB

Fix it by hand

The metadata element of the .opf file.

After

<meta property="schema:accessMode">textual</meta>
<meta property="schema:accessModeSufficient">textual</meta>
<meta property="schema:accessibilityFeature">structuralNavigation</meta>
<meta property="schema:accessibilityHazard">none</meta>
<meta property="schema:accessibilitySummary">Headings and a table of contents give structure.</meta>

Declare only what is true of the book after review. An Ace report is not a certificate of compliance.

Related: image-alt, html-has-lang

Checked with Ace by DAISY 1.4.6, November 2026

Amazon KDP and Apple Books

Store checks that a valid EPUB can still fail. Store guidance changes, so each entry says when it was read.

Store checkStoreFix in the editor

Internal cover is missing or too small (Amazon KDP, Apple Books)

A valid EPUB does not need a cover, but stores do. Amazon KDP asks for a cover image inside the book, separate from the marketing cover uploaded in title setup, at least 1,200 px on its longest side. Apple Books expects an interior cover too.

Why it happens

  • The cover was only uploaded to the store dashboard, not built into the EPUB.
  • A small thumbnail was used as the interior cover.
  • The cover image is in the book but not marked as the cover in the manifest.

Fix it in E-BOOKA

Open the book in the EPUB cover changer and add or replace the cover; it sizes the image for the store or reader you choose and marks it as the cover. Export, then check it again in the store's own previewer.

Change the cover

Fix it by hand

The cover image's item in the manifest of the .opf file.

After

<item id="cover-image" href="images/cover.jpg" media-type="image/jpeg" properties="cover-image"/>

Amazon KDP guidance read 2026-10-28; Apple Books asset guide read 2026-08-26. Store requirements change, and passing these checks is not the store accepting the book.

Related: RSC-005 empty table of contents

Checked with Amazon KDP and Apple Books guidance, read October and August 2026

What these checks cannot tell you

A clean EPUBCheck report means the file follows the EPUB standard, and a clean Ace report means no automated accessibility rule failed. Neither means a store will accept the book: stores review content, metadata and covers themselves. Whether alternative text describes an image, or a reading order makes sense, still needs a person. The EPUB checker repairs what it can and, once you sign in, runs both tools on the exported book.