Discussing the categorization of landing pages and how to approach modeling for an app-like project in Sanity.

4 replies
Last updated: Apr 3, 2023
If we're breaking things up into what they "mean" and trying not to be strict about thinking of things in presentational terms, what qualifies "Landing Page" to be a (potential) entity? Is it because it has a specialized purpose?
I didn't want to hijack
a thread , but I've been thinking about this kind of thing based on a project someone needed help with, where the end result was more of an app than a site and, on the front end, really, really tied to presentation.
In other words, they only ever want it to be this one kind of thing, that clicks here and opens this, etc. and most of the landings (or equivalents) are just intros and blurbs to kick people off to a video or slide presentation.

In those cases, what kind of frame of mind do I need to be in to help Sanity help me, from the perspective of modeling? In the outline all their entries except for about/career style pages are "What we do" which is essentially like a service listing. But, for an app, all the
fields they'd need to be able to have handy to make the thing work and tweak/customize feel more interface-y than topical. In fact, it almost feels like every 'landing' they have could fall under a single taxonomy.
Perhaps if that fits, it's appropriate, and it absolutely can be made to work that way, using Sanity as the world most easy-to-use "settings repository" but it feels....not-right. And the last thing I want to do is be the originator for lock-in.
AI Update

This is a great question that gets at the heart of content modeling philosophy—and one that many developers wrestle with when their project feels more "app-like" than "content-like."

When "Landing Page" makes sense as an entity:

You're right that specialized purpose is a key factor. A "Landing Page" becomes a legitimate entity when it has distinct characteristics, behaviors, or content needs that differentiate it from other page types. According to Sanity's structured content principles, you should model content based on what it is, not what it looks like. So a Landing Page entity makes sense if landing pages have:

  • Unique metadata requirements (conversion tracking, A/B test variants)
  • Different lifecycle management (temporary campaigns vs. permanent content)
  • Specific content patterns (hero + CTA + social proof)
  • Distinct editorial workflows or permissions

Your situation sounds different:

From what you're describing—where everything is essentially "What we do" entries that kick people to videos/slides, and the "fields" feel more like UI configuration than content—you're hitting on something important: you might be using Sanity as a configuration management system rather than a content management system.

And here's the thing: that's actually okay. Sanity can absolutely serve as a "settings repository" for app-like experiences. The framework is flexible enough to handle this. But your instinct that it feels "not-right" is worth listening to.

The frame of mind you need:

  1. Ask: "What varies?" If every entry has the same structure and the only differences are the specific values (title, video URL, thumbnail), you probably have one document type with many instances, not many document types.

  2. Model the concepts, not the screens. Even in an app-like experience, try to identify the underlying entities. The content modeling lesson emphasizes entity-based modeling—focusing on unique, distinguishable, and self-contained things or concepts rather than pages. Are these really "services"? "Offerings"? "Learning modules"? Name them for what they are in the business domain, not where they appear.

  3. Use references and composition. If everything could fall under a single taxonomy (as you mentioned), that's a signal. You might have one Service document type, with references to Video, Presentation, and maybe a Category taxonomy. The "landing" becomes a composition pattern on the frontend, not a content type.

  4. Separate content from configuration. If some fields feel "interface-y," consider: are these content fields or are they UI behavior flags? Things like "opens in modal" or "shows navigation" might belong in your frontend code or a separate app configuration document, not scattered across content entries.

Avoiding lock-in:

Your concern about lock-in is smart. The structured content approach actually helps here—by keeping content presentation-independent and focused on meaning, you make it more portable. If you model a Service with its essential attributes (description, associated media, category), that data can migrate anywhere. If you model a LandingPageWithSpecificLayoutBehavior, you've coupled your content to your current implementation.

Bottom line:

If your content is genuinely homogeneous and the variation is mostly presentational, embrace a simpler model with fewer document types and more instances. Use Sanity's flexibility (portable text, references, arrays) to handle the variations within that model. You're not "misusing" Sanity—you're just on the configuration-heavy end of the content-to-configuration spectrum, and that's a valid place to be.

The fact that you're thinking about this means you're already on the right track. Carrie Hane's book "Designing Connected Content" covers exactly these kinds of decisions about when something qualifies as its own entity versus being an instance of a shared type—definitely worth a read if you're wrestling with these questions regularly.

I wouldn’t put Landing Page in a strategic content model, but it is often a document type in the CMS.
Have you ever dealt with a similar circumstance where something either seemed to defy categorization in a useful way, or where a model might not have even been appropriate? Or is it just a matter of "finding" it?
The only thing I can really think of is leaning into the "mirror the real world" part and expanding what each talked-about thing is, in order to be able to have entities that make sense, and then deliberately whittle back down to just taking the couple pieces of info (or addressing the couple fields) that are strictly necessary.

They wouldn't even need to necessarily
address all there is to say on them, they can still just target only the bits they care about right now, but it could adapt and grow if they wanted to use it as a repository for other eventual end uses.
What I haven’t gotten to yet in the guide (there will be another chapter coming) is this reality:
Your content model will get you 80%-90% of any website’s pages. The remaining 10%-20% will be pages that are specific to that website – things like About, Privacy Policy, and Index pages (like for News items or Events - things that list or collect one or two content types).
That is where you have to consider how you’ll set up Sanity to accommodate the page on the website. Some will be Singletons (Home) other will be able to be templated and reused. In these pages, you need to consider what is part of the display template and what is part of the document type in Sanity.
There are plenty of web pages that end up having just a field or two and then a bunch of references (often landing pages) or a full listing (index) that get formatted via the front-end code. This is where I design the content to communicate what I want to happen and the designers and developers make it happen.
That makes sense and is reassuring. Thank you for your valuable time,
user J
.
Looking forward to the next chapter!

(If I am being honest singletons and settings pages are kind of a guilty pleasure sometimes because there's instant gratification and a feeling of great stability
🙂 )

Sanity – Build the way you think, not the way your CMS thinks

Sanity is the developer-first content operating system that gives you complete control. Schema-as-code, GROQ queries, and real-time APIs mean no more workarounds or waiting for deployments. Free to start, scale as you grow.

Was this answer helpful?