Go to the homepage
Powered bySitecore Search logo
Skip to main contentThe Performance-optimized page listing page has loaded.

Performance-optimized page listing

Context

Some implementation require page listings where a list of child items, such as navigation components are listing a set number of links of the list. Performance is a considerations that is required, as every time a new page is created, the website has to be republish which might impact productivity of authors.

Consider that this is limited for the use cases discussed here, for full search experiences with faceting and filtering, consider Sitecore Search.

Execution

There are multiple ways to approach this based on the different use cases that align with Snapshot publishing.

Using Rendering Component with Child Content Resolver

This approach is useful when displaying direct children items in the parent page, such as gallery/ products listing. This runs during the publishing time of the page item to resolve the required items in the page layout and store it in Edge

Implementation

The children items that will be used in the rendering component should be under a single datasource item item used by the rendering in the page item. Configure the rendering component that will fetch children items as follow:

  1. Choose ‘Datasource Item Children Resolver’ for ‘Rendering Contents Resolver’. This will help Layout Service to bring all the children items of the given datasource defined in the presentation details of the page.


  1. Choose ‘Children’ for ‘Content Dependencies’. This will help during the publishing when any child item of the datasource is changed and published, the page item using this rendering will be published as well.


In this case, Filtering and pagination are not supported; Layout Service will return all direct children of the datasource item.

Any newly added child item after the page item has been published, page item must be manually republished again only once to reflect the changes into the page item layout.

Using Rendering Component Integrated Graphql

This approach is useful when displaying direct children items in the parent page, such as gallery/ products listing similar to the Content Resolver with more control. This runs during the publishing time of the page item to resolve the required items in the page layout using the defined graphql query in the rendering component and store it in Edge.

Implementation

Configure the rendering component that will fetch children items as follow:

  1. In rendering component graphql query, create your query to get all children pages under context page/datasource item.
  2. Choose ‘Children’ for ‘Content Dependencies’. This will help during the publishing when any child item of the datasource is changed and published, the page item using this rendering will be published as well.


An advantage of this approach is that you can control the children returned based on a specific template, as well as determine which fields to return for each child item. However, there are limitations: advanced filtering and pagination are not supported, and the Layout Service will return all direct children of the datasource or context item. Additionally, if a new child item is added after the page item has been published, the page item must be manually republished once to reflect the change in its layout.

Component Level Data Fetching

This approach is useful when displaying content of navigation component, or gallery/ products listing without any restriction in the location of the items to be returned. This runs during the build time of the head application using static site generation and refreshed during revalidation intervals to improve performance. It gets the response of the graphql query to inject it to the head component.

Implementation

Create graphql search query in the head app to call the edge and execute it in the build time in 'getStaticProps'. Review the full detail in the Getting Component Specific Data recipe.

This approach offers several advantages: you have full control over which items are returned, can specify the fields to include, and it supports filtering and pagination. Additionally, unlike the previous two solutions, there is no need to republish the page when child items are added or deleted. However, there are also limitations to consider: Poorly optimized search queries can negatively impact the build time of the head application and the page revalidation time. It’s also important to be mindful of Sitecore Edge’s rate limit on API calls per second.

Selection the best option

Choosing the right method for retrieving child items depends on your implementation's scale, authoring expectations, content velocity, and required flexibility.

CriteriaChild Content ResolverIntegrated GraphQL in RenderingComponent-Level Fetching
DescriptionUses Layout Service resolver to return direct children from a datasource itemEmbeds a GraphQL query into the rendering to fetch childrenExecutes a GraphQL query in the head app at build time
Best ForStatic, direct child listings with fixed structureFiltered listings by template or field-level controlDynamic, decoupled listings (e.g., navigation, search)
Content StructureStrict hierarchy; children must be under the datasourceStructured hierarchy; can apply filters within scopeFlexible; items can live anywhere in the content tree
Filtering & PaginationNot supportedLimited filtering, no paginationFull support for filtering, sorting, and pagination
Developer EffortLow – configuration onlyMedium – requires query writing in rendering definitionHigh – requires head app query logic and integration
Authoring ExperienceManual republish of page after content changesManual republish of page after content changesNo republish needed; changes reflected automatically
Performance ImpactFast but rigid; can bloat layout payload with many itemsModerate; depends on query complexity and scopeDepends on query optimization and build/revalidation time
Publishing DependencyPage must be republished for child changes to appearPage must be republished for child changes to appearNot tied to publishing; follows ISR or rebuild logic
Snapshot Publishing FitFully compatibleFully compatibleBypasses snapshot; uses Edge API via head app
Maintenance NeedsLow maintenance; but lacks flexibilityModerate; requires upkeep of GraphQL queryHigh; needs query tuning and monitoring
Use Case ExamplesBlog listing under a parent, static galleryCampaign listings with template filterNavigation menus, multi-source listings, search results

Insights

Each approach introduces different impacts to how content authors work that should be considered

  • Child Content Resolver and Integrated GraphQL are tied to snapshot publishing. This means that when new child items are added or removed, the parent page must be republished to reflect those changes on the live site. This manual republish requirement can slow down authoring workflows and introduces a risk of stale or incomplete listings.
  • Component-Level Fetching, by contrast, decouples page structure from content changes. As long as the content exists in the index, the head application will pick it up during the next static regeneration cycle. This eliminates the need for republishing the page and allows faster, more intuitive authoring.

It’s recommended that:

  • For resolver-based approaches, keep child items grouped under clear datasource folders to reduce dependency complexity.
  • Communicate republish dependencies clearly to authors
  • Consider adding automation to detect content changes and republish parent items when needed.

Monitoring and Maintenance

To ensure performant implementations, it’s critical to monitor publishing behaviour and query performance across all three methods.

  • For Child Content Resolver and Integrated GraphQL, monitor publishing queues and durations. Sudden increases in publish time may indicate that too many components depend on large content trees or that items are being republished unnecessarily.
  • For Component-Level Fetching, review build logs for slow GraphQL responses or errors. Poorly written queries can significantly delay static builds and invalidate performance gains. Use Sitecore Edge monitoring tools to track API call frequency and latency, and avoid hitting rate limits during revalidation cycles.

© Copyright 2025, Sitecore. All Rights Reserved

Legal

Privacy

Get Help

LLM