↑ ↓ to navigate
↵ to select
esc to close
Core Concepts Intermediate

Understanding Collections

How collections group entries and control their blueprints, URLs, templates, ordering, listing pages and feeds.

What a collection is

A collection is a group of entries of the same kind, such as pages, blog posts, team members or products. The collection decides:

  • which blueprints (field schemas) its entries can use
  • the URL pattern for each entry
  • which templates render its entries and its listing page
  • how its entries are ordered
  • whether it publishes an RSS/JSON feed

Manage collections in the dashboard under Content → Collections, through the Collections API, or with the MCP collections_save tool.

Collection properties

PropertyPurpose
nameDisplay name shown in the dashboard. It is also the default feed title.
handleUnique identifier within your account. In Liquid, an entry is available under its collection's handle (for example {{ posts.title }}).
routingURL pattern for entries, such as blog/:handle. It must never be empty. See Routing.
root_routingAllows this collection's index entry to be served at /. Default false. Set it through the API or MCP.
template_handleLiquid template that renders each entry. An entry can override it with its own template.
layout_handleLayout that wraps the rendered entry. If none is set, the template with handle theme is used.
orderableno (default), ascending or descending. See "Ordering" below.
index_routingPath of the collection's listing page, such as blog (no leading slash).
index_template_handleTemplate for the listing page. A listing page exists only when both this and index_routing are set.
index_per_pageEntries per listing page. Default 10.
schema_typeschema.org type used in the page's structured data. Default WebPage.
feed_enabled, feed_path, feed_title, feed_description, feed_limitFeed settings. See Feeds.

Blueprints

A blueprint defines the fields an entry has, such as a title image, body text and author. A collection can have several blueprints. For example, a Pages collection might offer "Standard page" and "Landing page". Each entry uses one of its collection's blueprints. If you create an entry without naming a blueprint, it gets the collection's first blueprint (alphabetically by title).

A blueprint belongs to only one owner: one collection, one global or one navigation. To reuse a field layout, create a second blueprint. See Content Modeling and the Field Types Reference.

Routing

The routing pattern turns each entry into a URL. The available placeholders are:

  • :handle: the entry's handle
  • :year, :month, :day: from the entry's published_at, or from its creation date if it has none
  • :<field_handle>: the handle of the entry referenced by an entity field with that handle, for nested URLs such as courses/:course/lessons/:handle
RoutingExample URL
:handle/about
blog/:handle/blog/my-post
blog/:year/:month/:handle/blog/2026/09/my-post

If you change a collection's routing, every entry's URL is regenerated. The old URLs redirect to the new ones automatically. An individual entry can replace the pattern with its own routing_override. The Routing guide covers all of this in detail.

Ordering and position

Each entry has an integer position (default 0). The collection's orderable setting controls how entries are sorted on its listing page:

orderableListing page order
noNewest created first. position is ignored.
ascendingposition ascending, then oldest published_at first
descendingposition ascending, then newest published_at first

With ascending or descending, give entries a lower position to pin them to the top. Other entries fall back to date order. Set position through the Entries API or the MCP entries_save tool. In templates, {% query %} can sort by position, a date, the title or any field. See Liquid Templates.

Index (listing) pages

Set index_routing and index_template_handle to give a collection a paginated listing page:

handle: posts
routing: blog/:handle
index_routing: blog
index_template_handle: blog_index
index_per_page: 10

This serves page 1 at /blog, then /blog/page/2, /blog/page/3 and so on. Only published entries are listed. In the index template, the collection is available under its handle, and the current page number is available as page:

{% paginate posts.entries by 10 %}
  {% for post in paginate.items %}
    <a href="{{ post.content_path }}">{{ post.title }}</a>
  {% endfor %}
  {% if paginate.has_next %}<a href="{{ paginate.next_url }}">Older posts</a>{% endif %}
{% endpaginate %}

Index routes are checked before entry URLs. If an entry and a listing page claim the same path, the listing page wins.

The home page (root routing)

To serve / from a collection, you need all three of these:

  1. routing: ":handle"
  2. root_routing: true
  3. an entry with handle index

Without root_routing, / returns a 404, although /index still works. This stops an unrelated collection from taking over your home page just because it has an entry called index. The Page collection created with every new account is already set up this way.

Feeds

Set feed_enabled: true and a feed_path to publish the collection at /<feed_path>/feed.xml (RSS 2.0) and /<feed_path>/feed.json (JSON Feed). The site-wide /feed.xml feed combines every feed-enabled collection. Feed settings can be changed in the dashboard or with MCP, but are read-only in the REST API. See Feeds.

Deleting a collection

Deleting a collection also deletes all of its entries and their URLs. Export or move any content you want to keep first.