Skip to content

Content Delivery with Optimizely Graph

intermediate
📜CoreGraphcms
🔗

Deliver content to any channel from one hub.

GraphQL-powered API for headless, multichannel, and omnichannel content delivery.

Traditional content management renders HTML on the server — the CMS controls both the content and the presentation. This works well for a single website, but modern organizations need to deliver content to websites, mobile apps, single-page applications, digital signage, voice assistants, and partner systems. Each channel has its own frontend technology and rendering requirements.

Optimizely Graph solves this by decoupling content storage from content delivery. It provides a GraphQL API that any frontend can query, regardless of framework or platform. Your content lives in Optimizely CMS; Graph makes it available everywhere.

When content is published in CMS, Graph automatically indexes it into a search-optimized data store. This happens in near real-time — typically within seconds of publishing.

The indexing process:

  1. Author publishes or updates content in CMS
  2. CMS sends a sync event to Graph
  3. Graph indexes the content, including all properties, metadata, and relationships
  4. The content becomes queryable via the GraphQL API

Graph exposes a fully typed GraphQL API generated from your content model. Every content type in CMS becomes a queryable type in Graph, and every property becomes a field.

Query content from Graph
graphql
query GetArticles {
  ArticlePage(
    where: {
      Status: { eq: "Published" }
    }
    orderBy: { PublishedDate: DESC }
    limit: 10
  ) {
    items {
      Headline
      Author
      PublishedDate
      Body
      _fulltext
    }
    cursor
    total
  }
}
javascript
const response = await fetch(
  'https://cg.optimizely.com/content/v2',
  {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': `Bearer ${GRAPH_TOKEN}`,
    },
    body: JSON.stringify({
      query: `query { ArticlePage(limit: 10) {
        items { Headline Author PublishedDate }
      }}`
    })
  }
);
const { data } = await response.json();
csharp
var client = new GraphClient(
  new Uri("https://cg.optimizely.com/content/v2"),
  graphToken
);

var result = await client
  .ForType<ArticlePage>()
  .Where(x => x.Status.Eq("Published"))
  .OrderBy(x => x.PublishedDate, OrderBy.DESC)
  .Limit(10)
  .GetResultAsync();

foreach (var article in result.Items)
{
    Console.WriteLine(article.Headline);
}

Graph includes full-text search capabilities built into the API. You can search across all content or scope searches to specific types. Search results include relevance scoring and highlighting.

Query parameters support filtering, sorting, and pagination. You can filter by any property in your content model — including custom properties, dates, and content references.

Optimizely CMS supports two content delivery models. You can use one or both depending on your architecture.

CMS renders HTML using server-side templates. The CMS application handles both content management and content delivery.

Best for:

  • Single-site deployments where the CMS controls the frontend
  • Teams with .NET development experience
  • Scenarios where server-side rendering (SSR) is preferred for SEO

CMS manages content; Graph delivers it via API. A separate frontend application (React, Next.js, Vue, Angular, or any technology) fetches content from Graph and handles rendering.

Best for:

  • Multi-channel delivery (website + mobile app + kiosk)
  • Frontend teams using modern JavaScript frameworks
  • Architectures that separate content management from content presentation
  • High-traffic sites benefiting from CDN-cached static generation

Many organizations use both. CMS renders the primary website using server-side templates, while Graph feeds content to a mobile app and partner integrations. This is a pragmatic approach that avoids rewriting an existing site while enabling new channels.

AspectTraditionalHeadless (Graph)Hybrid
Frontend technology.NET templatesAny (React, Next.js, etc.)Both
Content deliveryCMS renders HTMLGraph API → frontend rendersMixed
Development team.NET developersFrontend + .NET developersBoth
Time to new channelHigh (new templates)Low (new API consumer)Medium
SEO approachServer-rendered HTMLSSG/SSR in frontend frameworkMixed

Graph is not just a CMS delivery mechanism. It serves as the content API layer for multiple Optimizely products:

  • CMS → Publishes structured content to Graph
  • Commerce → Product catalogs queryable through Graph
  • CMP → Marketing content available via Graph after publishing
  • Opal → AI agents use Graph to find and analyze content

This makes Graph the central content delivery hub for Optimizely One. Any system that needs Optimizely content — whether internal or external — connects through Graph.

Your CMS content model directly becomes your Graph schema. Well-structured content types with granular properties produce a clean, useful API. Monolithic page types with large rich text fields produce an API that is hard for frontends to consume.

Recommendation: Design your content model with Graph consumers in mind from day one. See Content Modeling for principles.

Graph supports two authentication modes:

ModeUse caseSecurity model
Single keyPublic website, static site generationAPI key in environment variable
HMACServer-to-server integrations, secure environmentsSigned requests with secret key

Graph responses can be cached at the CDN layer. For static site generation (SSG), you query Graph at build time and generate static HTML pages — resulting in the fastest possible delivery with zero runtime API calls.