diff --git a/core/modules/navigation/src/NavigationRenderer.php b/core/modules/navigation/src/NavigationRenderer.php
index 8e29298092d668cbf999bfbbe601b4de25891087..7e5813f03cdc67a6cd88134f309d7dc25eb29270 100644
--- a/core/modules/navigation/src/NavigationRenderer.php
+++ b/core/modules/navigation/src/NavigationRenderer.php
@@ -109,7 +109,8 @@ public function buildNavigation(array &$page_top): void {
         'keys' => ['navigation', 'navigation'],
         'max-age' => CacheBackendInterface::CACHE_PERMANENT,
       ],
-      '#pre_render' => ['navigation.renderer:doBuildNavigation'],
+      '#lazy_builder' => ['navigation.renderer:doBuildNavigation', []],
+      '#create_placeholder' => TRUE,
     ];
   }
 
@@ -117,7 +118,8 @@ public function buildNavigation(array &$page_top): void {
    * Pre-render callback for ::buildNavigation.
    */
   #[TrustedCallback]
-  public function doBuildNavigation($build): array {
+  public function doBuildNavigation(): array {
+    $build = [];
     $logo_settings = $this->configFactory->get('navigation.settings');
     $logo_provider = $logo_settings->get('logo.provider');
 
@@ -130,7 +132,6 @@ public function doBuildNavigation($build): array {
     if ($storage) {
       foreach ($storage->getSections() as $delta => $section) {
         $build[$delta] = $section->toRenderArray([]);
-        $build[$delta]['#cache']['contexts'] = ['user.permissions', 'theme', 'languages:language_interface'];
       }
     }
     // The render array is built based on decisions made by SectionStorage