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.