Koha Solutions

OPAC & customization

Changing the Koha OPAC header, footer and navigation

The header, footer and side navigation are content, not code. They are edited in Tools → HTML customizations — one region per named location.

Updated 2026-08-09 · Tested against Koha 26.05

The OPAC header, footer and navigation panels are edited in Tools → HTML customizations, not in system preferences and not in template files. Each region has a fixed location name — opacheader, opaccredits, OpacNav and a few more — and you create one entry per location. Anything you write there is HTML, stored in the database, and survives upgrades.

This moved, and older guides have not

These regions used to be system preferences with the same names. They are now rows in additional_contents, which is what gives them per-library and per-language versions and a publication date. If a guide tells you to edit the opacheader preference, it is describing a Koha nobody runs any more.

The regions, and what each one renders

LocationWhere it appears
<code>opacheader</code>Across the top of every OPAC page, above the search bar. A banner, a notice, a link back to the library website.
<code>opaccredits</code>The footer of every page. Address, opening hours, copyright, accessibility statement.
<code>OpacNav</code>The navigation panel down the left of the home page. Your own links — hours, policies, contact.
<code>OpacNavBottom</code>Below OpacNav in the same column. Secondary links, kept visually apart.
<code>OpacNavRight</code>The right-hand column of the home page, under the login box.
<code>OpacMainUserBlock</code>The main body of the home page — the largest region, and where a welcome message belongs.
<code>OpacCustomSearch</code>Replaces the standard search box area. Use only if you genuinely need a different search form.

Colour, spacing and fonts are not on this list — those are CSS and belong in OPACUserCSS, covered in OPACUserCSS and OPACUserJS.

Step 1Add a region

  1. 1Go to Tools → HTML customizations.
  2. 2Click New entry.
  3. 3Pick the location from the list — this is what decides where it renders, not the title.
  4. 4Give it a title. It is for you; most locations do not display it.
  5. 5Choose the library. Leave it as All libraries unless one branch genuinely needs different text.
  6. 6Write the HTML in the editor, then Save.

A footer entry, as an example. Plain HTML, no template syntax:

opaccredits
<div class="row">  <div class="col">    <p>      Example College Library &middot; 12 High Street &middot;      <a href="mailto:library@example.org">library@example.org</a>    </p>    <p>Mon-Fri 09:00-19:00 &middot; Sat 10:00-14:00</p>  </div></div>

Koha ships Bootstrap in the OPAC, so row and col already lay out sensibly on a phone. Use them rather than a table.

The left-hand panel is a list you write yourself. The theme styles a plain <ul>, so no classes are needed:

OpacNav
<ul>  <li><a href="/cgi-bin/koha/opac-main.pl">Library home</a></li>  <li><a href="https://example.org/library/hours">Opening hours</a></li>  <li><a href="https://example.org/library/borrowing">Borrowing policy</a></li>  <li><a href="/cgi-bin/koha/opac-suggestions.pl">Suggest a purchase</a></li></ul>

Use root-relative links for anything inside Koha

Write /cgi-bin/koha/opac-suggestions.pl, not the full https://…. A hard-coded hostname breaks the day the OPAC moves to a new domain or gains HTTPS, and it breaks silently for anyone reaching the site by the other name.

Dates and languages, which are the reason this is a table

Each entry carries a publication date and an expiry date. A closure notice can be written in advance, appear on the right morning and remove itself afterwards — which is worth more than it sounds, because the notice nobody remembers to take down is the one patrons stop reading.

Entries are also per-language and per-library. A bilingual OPAC gets one entry per language on the same location, and Koha serves the one matching the reader's chosen language. A consortium gives one branch its own footer without touching anyone else's.

Why content and appearance are separated

Header text, footer credits and navigation links change often, and the person who wants to change them is a librarian, not a system administrator. Colours and layout change rarely, and changing them badly breaks the page. Koha puts the first group in a screen a librarian can use, and the second in a preference an administrator edits.

That is why building a footer out of injected JavaScript is a bad trade even when it works: it moves editable content into a box only an administrator can touch, so every future wording change becomes a ticket.

Rebuilding the OPAC's look rather than its wording? That is theming, and it starts from a copy of the shipped theme rather than from these boxes.

Troubleshooting

What you seeWhat it usually is
The entry saves but never appearsThe publication date is in the future, or the expiry date has passed.
Appears for one library onlyThe entry was saved against a specific library. Set it to All libraries.
Appears in the wrong placeWrong location chosen. The title has no effect on placement — only the location does.
The layout breaks below itAn unclosed tag in the HTML. The editor does not validate; check the page in the browser inspector.
Changes do not show upPlack is caching. sudo koha-plack --restart library, then hard-reload.
Text shows in one language onlyA translation exists for one language and not the other. Add the missing one to the same location.

Share this article

Would rather not do this yourself? We do it as a service — and if you would rather it were already done, it is on Koha Cloud before you log in.