Omran Mogbil
HomeAboutExperienceProjectsBlogContact
Omran Mogbil

Senior Software Architect & Technical Leader passionate about creating amazing web experiences.

Quick Links

  • About
  • Experience
  • Projects
  • Blog

Contact

  • Get in Touch
  • info@omranmogbil.com

Follow Me

LinkedInEmail

© 2025 Omran Mogbil. All rights reserved.

Back to Blog
Sitecore
Headless
JSS
Content Modeling
XM Cloud

Content Modeling and Reusable Components in Sitecore Headless

February 25, 2024
2 min read

Content Modeling and Reusable Components in Sitecore Headless

Designing flexible, reusable content models is a core principle when building with Sitecore Headless (JSS + XM Cloud). A well-structured content model improves scalability, accelerates development, and supports personalization and omnichannel delivery.

Principles of Content Modeling

  1. Atomic Design & Granularity
    Break content into small, reusable components (atoms, molecules, organisms). Example: instead of hardcoding a “Hero Banner,” model it as:

    • Image field (background)
    • Text field (headline)
    • Rich Text field (body/CTA)

    This enables reuse across different pages and channels.

  2. Separation of Concerns
    Keep content data in Sitecore items, and presentation logic in your JSS app. Authors focus on content; developers focus on rendering.

  3. Field Types & Validation
    Use proper field types (Rich Text, Image, Multilist, Droplink) with validation rules. This ensures data consistency across sites.

  4. Display-Name Based Routing (New in JSS 22.9)
    XM Cloud + JSS now support display-name routing (SSR only), which means URLs can reflect author-friendly names rather than item names. This gives authors more flexibility in SEO-friendly URL management.

Reusable Components

Reusable components should be:

  • Composable: Built with props/fields that can be remapped for different contexts.
  • Configurable: Authors can adjust variants via Rendering Variants or parameters.
  • Portable: Compatible across channels (web, apps, kiosks).

Example (React/Next.js Page Router):

TSX
import { Text, Image } from '@sitecore-jss/sitecore-jss-nextjs';

export const HeroBanner = ({ fields }) => (
  <section className="hero">
    <Image field={fields.BackgroundImage} alt="Hero background" />
    <h1><Text field={fields.Headline} /></h1>
    <p><Text field={fields.Body} /></p>
  </section>
);

Share this article

Help others discover this content

More posts coming soon...