Content Modeling Best Practices
Designing Content Fragment Models for Long-Term AEM Architecture
Content Objective
A Content Fragment Model defines the structure of a Content Fragment.
That sounds straightforward.
The difficult part is deciding what belongs in the model, what should remain outside it, and how the model should evolve over time.
A model that is too simple may not support real business requirements.
A model that tries to represent everything becomes difficult to author, reuse, govern, and evolve.
The goal is not to create the largest possible model.
The goal is to create a clear content contract around a business concept.
Why Content Modeling Matters
A Content Fragment is reusable because its structure is defined independently from a page.
That structure becomes important once the same content is consumed by multiple experiences.
For example, consider a Product model.
It might contain:
- Product name
- Product description
- Product identifier
- Product image
- Features
- Specifications
Those fields become the structure that authors work with and consumers depend on.
Once the model is in use, changing it can affect more than the authoring dialog.
It can affect:
- Existing Content Fragments
- Validation
- GraphQL queries
- Headless applications
- Integrations
- Search indexing
- Publishing processes
So a Content Fragment Model should be treated as an architectural contract, not simply an authoring configuration.
Model the Business Concept, Not the Page
One of the most important rules in Content Fragment modeling is:
Model the business concept independently of the page where it is displayed.
Suppose a product appears on:
- A product detail page
- A category page
- A mobile application
- A search result
- A recommendation service
The Product model should describe the product.
It should not be designed around the layout of the product detail page.
Poor model thinking
A model might contain fields such as:
- Left column title
- Right column description
- Hero section text
- Bottom CTA
- Product page heading
These fields describe a presentation, not the product.
Better model thinking
A Product model might contain:
- Name
- Description
- Product ID
- Features
- Specifications
- Image
- Related products
The consuming experience decides how those fields are presented.
This separation becomes especially valuable when the same content is consumed by different channels.
Start With the Content Boundary
Before creating fields, define what the model represents.
For example:
Product represents the reusable product information managed by the business.
That immediately gives you a boundary.
Then ask:
- What information belongs to a product?
- What information belongs to a campaign?
- What information belongs to an article?
- What information belongs to a page?
- What information belongs to the presentation layer?
If a field cannot clearly be associated with the business concept, it deserves another look.
This prevents the model from becoming a collection of unrelated fields.
Keep Models Focused
A common modeling mistake is trying to create one universal model.
For example:
GenericContent
├── Title
├── Description
├── Image
├── CTA
├── Video
├── Author
├── Category
├── Price
├── Product Code
├── SEO Title
├── SEO Description
└── Tracking ID
At first, this looks reusable.
Over time, it becomes difficult to understand what the model actually represents.
Authors see fields that are irrelevant to many use cases.
Consumers receive a structure containing unrelated concepts.
Governance becomes harder because changes to one business use case can affect many unrelated consumers.
A better approach is to create focused models around meaningful business concepts.
For example:
- Product
- Article
- Author
- Campaign
- FAQ
The exact boundaries depend on the domain.
The important point is that each model should have a clear responsibility.
Don't Model Every Presentation Requirement
Content modeling and presentation modeling are different concerns.
Suppose marketing wants a product card with:
Image Title Description CTA Background style Button alignment
The temptation is to add all of these fields to the Product Content Fragment Model.
That mixes content with presentation.
The Product model should contain product information.
The frontend or AEM component can decide how that information is displayed.
If the requirement is to reuse the entire authored presentation, that may instead be an Experience Fragment use case.
This distinction connects directly to the decision made in Chapter 20
Choose Field Types Based on Meaning
A field type should represent the meaning of the data, not simply provide a convenient place to store it.
For example:
Product name
Use a text field.
Product description
Use a suitable text or rich-text field depending on the authoring requirement.
Product image
Use a reference appropriate for the asset relationship.
Product category
Use a controlled taxonomy or reference where governance requires consistent values.
Related products
Use a reference relationship rather than storing product names manually.
The question should be:
What does this field represent?
not:
Which field is easiest to configure?
This becomes increasingly important as the content is exposed through APIs and consumed outside AEM.
Avoid Duplicating Business Data
Suppose a Product Fragment contains:
Product Name Product Code Category Brand
Now another model contains:
Product Name Product Code Category Brand Campaign Message Campaign Start Date
If both models represent the same product information, duplication has been introduced.
The next question becomes:
Which value is authoritative?
If the product name changes, both structures may need updating.
A better design may be to keep the product information in the Product model and reference it from the campaign-related content where appropriate.
The exact design depends on the relationship and consumption requirements, but the principle remains:
Do not create duplicate fields simply because two experiences display the same information.
References Should Represent Real Relationships
Content Fragment references are useful when one business concept relates to another.
For example:
Product → Brand
or:
Article → Author
or:
Product → Related Products
These relationships should reflect actual domain relationships.
Avoid creating references simply because they make the model appear more reusable.
A reference introduces a dependency.
That dependency needs to make sense from both the content and governance perspectives.
Model for Reuse, Not for Every Possible Future
Architects often face a difficult question:
“What if we need this field later?”
That can lead to over-modeling.
Adding ten fields today because they might be required in the future creates immediate complexity for a requirement that does not yet exist.
A better approach is to model known business requirements while keeping the structure extensible.
Future requirements should be evaluated when they become concrete.
This does not mean ignoring future evolution.
It means avoiding speculative complexity.
Required Fields Need a Reason
Not every field should be mandatory.
A field should be required when the business concept is incomplete without it.
For example, if every Product must have a product identifier, making that field required makes sense.
But making every descriptive field mandatory can create unnecessary authoring friction.
Ask:
Can this business entity meaningfully exist without this value?
If the answer is no, the field may need to be required.
If the answer is yes, optionality may be more appropriate.
Naming Is Part of the Contract
Field names eventually become visible beyond the authoring interface.
They may appear in:
GraphQL schemas API responses Frontend code Integration mappings Search logic Documentation
That makes naming an architectural concern.
Prefer names that clearly represent the business meaning.
For example:
productName productCode description specifications
is easier to understand than:
field1 contentText primaryValue miscData
Avoid names tied to temporary implementation details or a specific page layout.
A model can survive for years.
Its field names may survive with it.
Think About API Consumers
A Content Fragment Model may eventually become part of an API contract.
That does not mean every model should be designed around GraphQL.
It means API consumption should be considered before finalizing the structure.
Ask:
Which fields are likely to be consumed? Are relationships meaningful to external consumers? Are field names clear outside the authoring UI? Does the model expose presentation-specific information unnecessarily? Could changing the field structure affect existing consumers?
Treat a model change as a potential content and API contract change.
Before changing a model, consider existing fragments, validations, GraphQL consumers, integrations, and publishing.
Avoid Deeply Coupled Models
Consider a model that depends heavily on several other models:
Product ├── Brand │ └── Organization ├── Category │ └── Taxonomy ├── Campaign │ └── Audience └── Recommendation └── Product
Relationships can be useful, but excessive coupling increases complexity.
A change to one model may affect several others.
The right question is not:
“Can these models reference each other?”
They often can.
The better question is:
“Does this relationship represent a real business dependency that consumers need?”
If not, the relationship may be unnecessary.
Consider Authoring Experience
A technically correct model can still produce a poor authoring experience.
For example, a model with dozens of fields may technically support every possible requirement.
But authors now have to understand:
Which fields are relevant Which fields are optional Which references to select Which values are controlled Which fields affect downstream experiences
A good model makes the correct content structure obvious.
This means model design should consider both:
Consumer requirements
and
Authoring requirements
Neither should be ignored.
Model Evolution
Content models are not static.
Business requirements change.
New consumers appear.
Existing integrations evolve.
A field that was optional may become required.
A model may need to support a new relationship.
The important part is to understand the impact before making the change.
Before modifying a model, check:
How many existing fragments use it? Which fields are already populated? Are consumers querying those fields? Are there GraphQL queries or persisted queries depending on the structure? Are integrations mapping the fields? Does the change affect authoring? Does the change require content migration? Does publishing need to be coordinated?
A model change should be evaluated as a content lifecycle change, not just a configuration change.
Add Fields Carefully
Adding a field is usually easier to reason about than changing or removing an existing field.
But even additions should have a clear purpose.
For example:
Product ├── name ├── description ├── productCode └── sustainabilityInformation
If sustainabilityInformation is introduced later, consider:
Is it applicable to every product? Should it be optional initially? Which consumers need it? Does existing content need to be migrated? Does the API contract need to change?
The technical effort may be small.
The content and consumer impact may not be.
Removing or Renaming Fields Requires More Care
Removing or renaming a field can affect existing content and consumers.
A frontend may already query the field.
An integration may already map it.
Existing fragments may already contain values.
A persisted query may depend on it.
Therefore, before removing or renaming a field, identify the dependency chain.
A safer approach is often to introduce a replacement, migrate consumers and content, and remove the old structure only after the dependency has been retired.
The exact migration strategy depends on the project and AEM version, but the architectural principle is consistent:
Do not treat a model field as disposable configuration once consumers depend on it.
A Practical Product Model
Consider a simple Product model:
Product ├── productCode ├── name ├── description ├── image ├── features ├── specifications └── relatedProducts
This model has a clear responsibility:
It represents reusable product information.
A product page can consume it.
A category experience can consume it.
A headless application can consume it.
A search integration may consume parts of it.
The model does not need to know whether the product is displayed as:
A hero A card A table A mobile screen A search result
That responsibility belongs to the consuming experience.
This separation is what makes the model reusable.
Production Review Checklist
Before approving a Content Fragment Model, review it from several perspectives.
Business Does the model represent a real business concept? Is the ownership clear? Are the boundaries understood? Content Are the fields meaningful? Are duplicate values avoided? Are references representing real relationships? Authoring Is the model understandable to authors? Are required fields actually necessary? Are controlled values used where appropriate? Architecture Is presentation separated from structured content? Are relationships justified? Is unnecessary coupling avoided? API Are field names clear? Could the model be consumed independently? Are potential GraphQL and API consumers considered? Governance Who owns the model? Who can modify it? How will changes be reviewed? How will existing content be handled?
A model that passes these checks is much more likely to remain maintainable as the platform grows.
The Architectural Trade-Off
There is no universally perfect Content Fragment Model.
Every model balances several concerns:
Simplicity
vs.
Flexibility
Reuse
vs.
Coupling
Authoring convenience
vs.
Content consistency
Current requirements
vs.
Future evolution
The mistake is trying to optimize every dimension at the same time.
A good model has a clear purpose and accepts reasonable constraints.
Why Architects Care
Content Fragment Models become long-lived boundaries in an AEM platform.
They influence how content is:
Created Validated Reused Related Queried Published Consumed Governed Evolved
The model is therefore more than an authoring form.
It is part of the architecture.
A well-designed model makes future reuse easier.
A poorly designed model spreads presentation concerns, duplication, and coupling throughout the platform.
The objective is not to predict every future requirement.
It is to create a clear, stable boundary that can evolve without unnecessary disruption.
Summary Model the business concept, not the page layout. Keep Content Fragment Models focused on a clear responsibility. Choose field types based on the meaning of the data. Use references for meaningful business relationships. Avoid duplicating information across models. Consider authoring, API consumption, governance, and future evolution before finalizing a model. Treat significant model changes as potential content and API contract changes. What's Next?
A well-designed model defines the structure of a single content concept.
The next architectural challenge appears when that content needs to exist across multiple sites, locales, and regional variations.
How do you decide what should be shared, what should be inherited, and what should remain independently managed?
Chapter 22 — MSM / Multi Site Manager will examine how AEM manages content across multiple sites while balancing reuse, inheritance, and local control.
Enjoyed this chapter?
Get an email when I publish the next chapter. No spam — just new technical deep-dives.
Comments
Share feedback or questions about this blog post.
No comments yet. Be the first to share your thoughts.