Acme.

Pages and blocks: one field decides

September 10, 2026

Some content has an address. A landing page lives at /, an article at /articles/something. Other content never does: a hero, a feature card, a testimonial. They exist to be placed inside something else.

Model the difference, don't flag it

A content type is addressable because its model contains a slug field. That is the whole rule. Add one and entries of that type become pages; leave it out and they are blocks.

The alternative — a checkbox on the type — puts the same information somewhere the API can't see and the model doesn't describe.

What follows from it

  • Authors creating a card are never asked for a URL, because a card has none.
  • The delivery API reports a null slug for blocks, so clients know not to link to them.
  • The editor previews a page at its address and a block inside a page that uses it.

One field in the model, and three parts of the system stop guessing.