Structure

Archive pages need their own navigation rules

Archive pages are navigable collections

Your blog archive, case study list, or product grid isn't a single page. It's a set of pages users move through with controls you provide. Those controls—pagination links, filter buttons, sort dropdowns—need their own navigation logic, separate from your global menu.

Most sites bolt these on after the template is live. You end up with "Next" links that don't explain where they lead, filters that reset when you paginate, and sort options that vanish when you apply a tag. The controls work individually but contradict each other as a system.

Define the rules before you build the template.

Pagination shows position and scope

Page 1 of 47 tells users more than a "Next" button. They know how deep the archive goes and where they are in it. Numbered links let them jump ahead or return to a specific page.

If your archive has fewer than five pages, show all the numbers. If it has more, show the current page, one page on either side, and the first and last pages. Don't hide the total page count—users deserve to know the scope of what they're browsing.

Previous and Next links should include the page number in the label: "Previous (Page 4)" instead of just "Previous." Screen readers announce the full label, and sighted users don't have to calculate which page they're clicking toward.

Filters persist across pagination

When a user filters your archive to show only posts tagged "editing," that filter should stay active when they click to page 2. If pagination resets the filter, users lose their place and their intent.

Your URL structure carries this state. /posts?tag=editing&page=2 preserves both the filter and the page number. The pagination controls append &page=3 instead of replacing the entire query string.

Test this: apply a filter, paginate forward, then use your browser's back button. The previous page should load with the filter still active. If it doesn't, your navigation logic is clearing state it should preserve.

Sort order applies to the full set, not just the current page

A dropdown that lets users sort by date or title should re-sort the entire archive, not just the visible page. If you sort by title on page 1, page 2 should continue that alphabetical order.

This means your sort control can't be client-side JavaScript that reorders the DOM. It needs to reload the page with a sort parameter in the URL: /posts?sort=title. The server applies that sort to the query before it paginates.

Make the current sort option visible. If "Date (newest first)" is active, the dropdown should show that as the selected value. Users shouldn't have to remember which sort they applied two pages ago.

Breadcrumbs and filters don't always align

Your breadcrumb trail might show Home > Blog, but when a user filters to a single tag, the breadcrumb shouldn't change to Home > Blog > Editing. Tags aren't part of your content hierarchy—they're lateral filters.

Show the active filter separately, above or beside the archive list: "Filtered by: editing (clear)." That filter indicator includes a link to remove it, returning users to the unfiltered archive. The breadcrumb stays stable.

If your site has category archives that are hierarchical—like Services > Web Design—those do belong in breadcrumbs. The distinction is whether the filter represents a structural parent or a cross-cutting facet.

Write the no-results state before you launch

When a filter or search returns zero posts, your template needs to say something. "No posts found" is accurate but unhelpful. "No posts tagged 'editing'" is better. "No posts tagged 'editing'—try removing filters or viewing all posts" is complete.

Test every filter combination before you publish the archive. If you offer tag, category, and date filters, apply all three at once and confirm the page still makes sense. Users will find combinations you didn't anticipate.

Decide these rules while you model fields

Archive navigation rules belong in the same document as your content type definitions. When you decide which fields are filterable, write down how those filters interact with pagination. When you plan your URL structure, include the query parameters for sort and filter states.

You're not documenting the template's behavior—you're defining how users move through your content. The template implements decisions you've already made.

← All posts