Cermify · Error Library · KDP

Package Structure · E-SPINE

Reading order (spine) is empty or broken

Your book's reading order (the 'spine') is missing entries or points to files that don't exist, so Kindle doesn't know what order to show pages.

Severity
error
Automatic repair
Supported
Submission impact
KDP: reject
Rule ID
E-SPINE
Error: Reading order (spine) is empty or broken
Category: Package Structure
Severity: error
Auto Repair: Supported
Rule ID: E-SPINE
Affected: KDP=reject, Apple=reject, Google=reject, Kobo=reject
Check this automatically with Cermify

Why this happens

How platforms treat it

PlatformResult
KDPreject
Apple Booksreject
Google Playreject
Koboreject

How Cermify detects it

  1. Parse the OPF spine element.
  2. Ensure at least one linear itemref exists.
  3. Resolve each idref to a manifest item whose href exists in the package.
  4. Flag empty spine or dangling idrefs as E-SPINE.

Automatic repair

Cermify can rebuild a spine from remaining manifest XHTML documents in a deterministic order when the spine is empty or fully broken. Review order for front matter vs chapters after repair.

Manual fix

  1. List chapter XHTML files in the intended reading order.
  2. Ensure each has a manifest <item id="…" href="…">.
  3. Add matching <itemref idref="…"/> entries inside <spine>.
  4. Remove itemrefs for deleted files; recheck in a reader.

Examples

Every spine idref must match a manifest item id.

Incorrect

<spine toc="ncx">
  <itemref idref="missing-chap"/>
</spine>

Correct

<manifest>
  <item id="c1" href="chapter1.xhtml" media-type="application/xhtml+xml"/>
</manifest>
<spine toc="ncx">
  <itemref idref="c1"/>
</spine>

FAQ

Is spine the same as the visual TOC?

No. Spine is the mandatory reading order. TOC/nav helps humans jump; spine defines what the reader opens next.

Can cover images be in the spine?

Optional cover page XHTML may be first. Do not put binary image items directly in the spine—only content documents.

What does linear="no" mean?

Non-linear items are skippable extras (notes, extras). You still need a primary linear reading path.

Related errors

References