How to Add Page Numbers to an EPUB

"How do I add page numbers to my EPUB?" is one of the most-asked questions from new self-publishers — and the honest answer is you probably don't want to. Here's why, and what to do instead.

Why EPUBs don't have fixed page numbers

EPUB is reflowable by design. The same text displays as 300 pages on a phone, 220 on a Kindle Paperwhite, 180 on a tablet, and 450 if the reader increases font size. "Page 42" has no fixed meaning. Assigning absolute page numbers to a reflowable format is a category error — it breaks the format's core feature, which is adapting to the reader's device and preferences.

For fixed pagination you want PDF. That's exactly what PDF is for: frozen layout, fixed page numbers, the same on every device.

The correct EPUB answer: a page-list

If your EPUB corresponds to a print edition (common for academic and reference books), EPUB 3 supports a page-list navigation element that maps page-break locations in your content to the print page numbers. Readers that support it show the print page number in the UI, which lets students and researchers cite the book correctly even though the on-screen page count changes with font size.

Add page-break anchors in your XHTML

At each page boundary from the print edition, insert a span with epub:type="pagebreak":

<span epub:type="pagebreak" role="doc-pagebreak"
      id="page42" aria-label="Page 42"></span>

Put these where the print page actually breaks — not where your XHTML happens to feel like a natural break. You need one for every page of the print edition.

Create a page-list nav

In your EPUB 3 navigation document (usually nav.xhtml):

<nav epub:type="page-list" hidden="">
  <h2>Page List</h2>
  <ol>
    <li><a href="chapter1.xhtml#page1">1</a></li>
    <li><a href="chapter1.xhtml#page2">2</a></li>
    <li><a href="chapter2.xhtml#page42">42</a></li>
    <!-- ... -->
  </ol>
</nav>

The hidden="" attribute keeps it out of the visible TOC — readers use it for the pagination UI, not as a navigation menu.

Declare the accessibility features

In your OPF's <metadata> block:

<meta property="schema:accessibilityFeature">printPageNumbers</meta>
<meta property="schema:accessibilityFeature">pageNavigation</meta>
<meta property="dcterms:source">Print ISBN 978-0-000-00000-0</meta>

These tell readers, stores, and assistive tech that the book has print-page navigation and which print edition the page numbers correspond to.

Validate the result

Run the validator. The common failure: a page-list entry that points to an anchor ID that doesn't exist (typo, or the page break got deleted during edits). EPUBCheck flags these as broken references.

What about "running page numbers" visible in the reader?

Most EPUB readers compute their own current-page indicator based on the current font size. This is not the page-list — it's a dynamic progress display. You can't control it from the EPUB. Trying to force specific page numbers into the visible text (e.g., "Page 42 of 350" in a footer) will look wrong on every device with different font settings and is considered a bug by most review processes.

The short version for fiction authors

If you're self-publishing a novel and this whole page guide feels excessive — it is, for fiction. Nobody expects page numbers in novels. Skip the page-list entirely. Make sure your EPUB validates, your metadata is clean, and the reader shows a sensible progress indicator (it will, automatically).

The short version for academic authors

Add a page-list tied to your print edition. Declare printPageNumbers in the OPF. Cite the print ISBN via dcterms:source. Students can now cite your EPUB in APA/MLA/Chicago with print-equivalent page numbers, and your book becomes citeable in ways fiction EPUBs are not.

Related

Try it now — free

Edit EPUB metadata online. Change title, author, description, language, publisher. Free ebook metadata editor - no software needed.

Edit EPUB Metadata →

Found this helpful? Share it